先说一下,为什么会有这篇文章?
最初接触 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 简介
- JitPack 使用及案例举例
- 案例源码下载
一、JitPack简介
JitPack 是一 个构建与发布 Git 存储库的便捷服务,可用于在 GitHub、GitLab 上打包、发布与部署依赖库,便于使用者通过maven依赖的形式引用开发者发布的依赖库。

JitPack允许开发者将 GitHub、GitLab上的JVM和Android 项目发布到Jitpack 的 Maven 仓库;JitPack通过搜索开发者输入的git仓库链接地址的形式,自动查找Git上的工程代码,并进行自动打包、构建依赖库(对于开发者来说,基本实现了一键发布依赖库);JitPack允许开发者将 Git 存储库(包括存储库的任何一个分支或分支的某一次commit提交)以不同版本的形式进行构建、发布为maven依赖库,便于开发者进行版本发布与维护;- 使用价格方面,
对于开源项目 JitPack 是完全免费的。

二、JitPack 使用
配置jitpack需采用gradle API编写配置脚本,随着gradle版本的更新,相关API及使用方式也有了一定的变化。
这里分别基于 gradle 6.1 与 gradle 7.5 举例 jitpack 多渠道发布。
- gradle 6.1 配置 JitPack
- gradle 7.5 配置 JitPack
2.1 gradle6.1配置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 依赖库发布详细举例说明;
- 如何引用 jitpack Maven发布的多渠道依赖库?
2.1.1 jitpack多渠道配置
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插件:
在Android工程根目录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 样例工程
2.1.2 引用 jitpack 发布的多渠道依赖库
在上一步中,我们顺利发布了 maven 依赖库,这里记录一下如何使用我们发布的依赖库?
- 在Android工程
根目录build.gradle添加jitpack 仓库地址:
allprojects { repositories { // 1、添加 jitpack 仓库地址 maven { url 'https://jitpack.io' } } }
- 在对应Android工程
引用依赖包的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' }
2.2 gradle7.5配置JitPack
举例代码中使用的 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 依赖库发布详细举例说明;
- 如何引用 jitpack Maven发布的多渠道依赖库?
2.2.1 jitpack多渠道配置
gradle 7.5 使用 jitpack 进行多渠道 Maven 依赖库发布详细举例说明(假定 仍采用上一步案例中的渠道配置信息):
- 应用 maven-publis 插件:
根据 android developer:Maven Publish 中介绍,Android gradle 插件3.6以上版本可以应用Maven Publish插件:

因此,在对应工程要发布的依赖Module中添加如下配置:
plugins { // 1、添加 maven-publish id 'maven-publish' }
- 添加
发布渠道包配置:
发布渠道依赖包的配置信息,主要是参考Android Developer Gradle-API-7.1 LibraryPublishing:

在对应工程要发布的依赖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' }
2.2.2 引用 jitpack 发布的多渠道依赖库
在上一步中,我们顺利发布了 maven 依赖库,这里记录一下如何使用我们发布的依赖库?
- 在Android工程
根目录build.gradle添加jitpack 仓库地址:
allprojects { repositories { // 1、添加 jitpack 仓库地址 maven { url 'https://jitpack.io' } } }
- 在对应Android工程
引用依赖包的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_MultiFlavorLibDemo_gradle_6_1
- jitpack_MultiFlavorLibDemo_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
= THE END =
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。
