- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
先说一下, 为什么会有这篇文章? 最初接触 JitPack 时,发现 网络上大量涉及JitPack的教程不可用 。通过两天的研究才搞明白: 1.不同的gradle版本,gradle api使用方式 与 JitPack配置方式均有所差异 :使用JitPack发布Maven依赖库,其配置脚本与开发者使用的 gradle 版本是强相关的,因此 不同的gradle版本,其API使用方式与 JitPack配置需做对应调整 ; 2.官方案例不好使 :JitPack的官方案例为 multi-flavor-lib-demo ,2018年最后一次更新,其使用的 gradle 版本相对较低,当前的gradle版本无法使用。 以上两点, 可能是网络文章质量较低的主要原因 ,因此这里将我两天来的学习成果分享给朋友们,帮助大家节省一些时间.
Android应用开发过程中,开发者通常通过 gradle dependencies 导入第三方依赖库,那么当 开发者的SDK 或 中间件 被其他项目依赖时,该 如何发布自己的maven依赖库呢? 这里推荐一个Github的构建工具 https://jitpack.io/ .
JitPack 是 一 个构建与发布 Git 存储库的便捷服务 , 可用于在 GitHub、GitLab 上打包、发布与部署依赖库 , 便于使用者通过maven依赖 的形式 引用开发者发布的依赖库 .
JitPack
允许开发者将 GitHub、GitLab上的 JVM
和 Android 项目
发布到 Jitpack 的 Maven 仓库
; JitPack
通过 搜索开发者输入的git仓库链接地址
的形式,自动查找Git上的工程代码,并进行自动打包、构建依赖库(对于开发者来说, 基本实现了一键发布依赖库
); JitPack
允许开发者将 Git 存储库(包括 存储库的任何一个分支
或 分支的某一次commit提交
)以不同版本的形式进行构建、发布为maven依赖库,便于开发者进行版本发布与维护; 对于开源项目 JitPack 是完全免费的
。 配置jitpack需采用gradle API编写配置脚本,随着gradle版本的更新,相关API及使用方式也有了一定的变化。 这里分别基于 gradle 6.1 与 gradle 7.5 举例 jitpack 多渠道发布.
举例代码中使用的 gradle版本 与 插件版本 如下: gradle版本 : https://services.gradle.org/distributions/gradle-6.1.1-all.zip 插件版本 : com.android.tools.build:gradle:3.6.1 。
举例代码中 jitpack 编译结果: https://javadoc.jitpack.io/com/github/AndroidAppCodeDemo/jitpack_MultiFlavorLibDemo/gradle_6_1-SNAPSHOT/ 。
下边通过以下两个方面进行详细说明:
gradle 6.1 使用 jitpack 进行多渠道 Maven 依赖库发布详细举例说明: 假定 要发布的库 其渠道配置信息如下:
// 渠道举例
flavorDimensions "vendor"
productFlavors {
production {
dimension "vendor"
buildConfigField 'String', 'ENV', '"PRODUCTION"'
}
sandbox {
dimension "vendor"
buildConfigField 'String', 'ENV', '"SANDBOX"'
}
}
android-maven-gradle-plugin
插件: 根目录build.gradle
中,添加 android-maven-gradle-plugin
插件。
buildscript {
dependencies {
// 1、添加 android-maven-gradle-plugin
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
}
}
发布渠道包配置
: Module
工程 build.gradle
中 添加如下4步配置
:
// 2、应用插件
apply plugin: 'com.github.dcendents.android-maven'
android {
// ...
// 3、默认发布渠道
defaultPublishConfig "productionRelease"
// 4、true to publish all flavour artifacts
publishNonDefault true
}
// 5、添加“发布多渠道依赖包配置”
if (android.productFlavors.size() > 0) {
android.libraryVariants.all { variant ->
if (variant.name.toLowerCase().contains("debug")) {
return
}
def bundleTask = tasks["bundle${variant.name.capitalize()}Aar"]
artifacts {
archives(bundleTask.archivePath) {
classifier variant.flavorName
builtBy bundleTask
name = project.name
}
}
}
}
以上的5个步骤参考了 jitpack-io官方 multi-flavor-lib-demo 样例工程 。
在上一步中,我们顺利发布了 maven 依赖库,这里 记录一下如何使用我们发布的依赖库?
根目录build.gradle
添加 jitpack 仓库地址
:
allprojects {
repositories {
// 1、添加 jitpack 仓库地址
maven { url 'https://jitpack.io' }
}
}
引用依赖包的Module
中 添加如下依赖
:
dependencies {
// 2、添加库文件依赖:
// implementation "com.github.<USER>.<REPO>:<library-module>:<version>:<flavor-name>@aar"
// production 渠道
implementation 'com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:gradle_6_1-SNAPSHOT:production@aar'
// sandbox 渠道
implementation 'com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:gradle_6_1-SNAPSHOT:sandbox@aar'
}
举例代码中使用的 gradle版本 与 插件版本 如下: gradle版本 : https://services.gradle.org/distributions/gradle-7.5-bin.zip 插件版本 : com.android.tools.build:gradle:7.4.1 。
举例代码中 jitpack 编译结果: https://javadoc.jitpack.io/com/github/AndroidAppCodeDemo/jitpack_MultiFlavorLibDemo/gradle_7_5-SNAPSHOT/ 。
下边通过以下两个方面进行详细说明:
gradle 7.5 使用 jitpack 进行多渠道 Maven 依赖库发布详细举例说明(假定 仍采用上一步案例中的渠道配置信息):
Maven Publish
插件: 要发布的依赖Module
中 添加如下配置
:
plugins {
// 1、添加 maven-publish
id 'maven-publish'
}
发布渠道包配置
: 要发布的依赖Module
中 添加如下配置
:
android {
// 2、默认渠道
defaultPublishConfig "productionRelease"
// 3、发布渠道配置
publishing {
// Publishes all build variants with "vendor" component
multipleVariants("vendor") {
// 只发布release包
includeBuildTypeValues("release")
includeFlavorDimensionAndValues("vendor", "production","sandbox")
}
}
}
// 4、依赖包发布配置信息
afterEvaluate {
publishing {
publications {
allVariants(MavenPublication) {
// 发布后的依赖包按如下配置进行引用:com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:1.0.2
from components.vendor // 表示发布 release
groupId = 'com.github.AndroidAppCodeDemo' // 这个是依赖库的组 id
artifactId = 'jitpack_MultiFlavorLibDemo' // 依赖库的名称
version = "1.0.2" // 当前版本依赖库版本号
}
}
repositories {
maven {
def baseUrl = buildDir.getParent()
def releasesRepoUrl = "$baseUrl/repos/releases"
def snapshotsRepoUrl = "$baseUrl/repos/snapshots"
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
}
}
}
}
// 5、生成source jar
task generateSourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier 'sources'
}
在上一步中,我们顺利发布了 maven 依赖库,这里 记录一下如何使用我们发布的依赖库?
根目录build.gradle
添加 jitpack 仓库地址
:
allprojects {
repositories {
// 1、添加 jitpack 仓库地址
maven { url 'https://jitpack.io' }
}
}
引用依赖包的Module
中 添加如下依赖
:
dependencies {
// 2、添加库文件依赖:
// implementation "com.github.<USER>.<REPO>:<library-module>:<version>:<flavor-name>@aar"
// production 渠道
implementation 'com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:gradle_7_5-SNAPSHOT:production@aar'
// sandbox 渠道
implementation 'com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:gradle_7_5-SNAPSHOT:sandbox@aar'
}
本文所使用的案例工程 下载地址 如下: https://download.csdn.net/download/aiwusheng/87473529 。
源码中包含两个案例,分别对应Gradle 6.1与Gradle 7.5两个版本:
jitpack-io官方multi-flavor-lib-demo: https://github.com/jitpack-io/multi-flavor-lib-demo 。
jitpack-io官方jitpack-android-sample: https://github.com/jitpack-io/jitpack-android-sample 。
android developer 使用 Maven Publish 插件: https://developer.android.google.cn/studio/build/maven-publish-plugin?hl=zh-cn 。
android developer gradle-api-7.1: https://developer.android.com/reference/tools/gradle-api/7.1/com/android/build/api/dsl/LibraryPublishing 。
android developer gradle-api-8.0: https://developer.android.google.cn/reference/tools/gradle-api/8.0/com/android/build/api/dsl/LibraryPublishing 。
android developer 配置发布内容变体: https://developer.android.google.cn/studio/publish-library/configure-pub-variants?hl=zh-cn 。
gradle docs publishing_maven: https://docs.gradle.org/current/userguide/publishing_maven.html 。
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号.
最后此篇关于一文详解jitpack多渠道maven库发布的文章就讲到这里了,如果你想了解更多关于一文详解jitpack多渠道maven库发布的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想开发一个 Skype 机器人,它将用户名作为输入,并根据用户输入以相反的字符大小写表示hello username。简而言之,如果用户输入他的名字 james,我的机器人会回复他为 Hello J
我是一名优秀的程序员,十分优秀!