先說一下,為什麼會有這篇文章?
最初接觸 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技術小館「,如果文章對您有幫助,歡迎關注我的公眾號。