本文使用'com.novoda:bintray-release
作為上傳外掛,下面以我個人的utils library上傳為例進行說明:
註冊bintray賬號
注:可通過Github、Google、Twitter授權bintray實現註冊
建立bintray倉庫
操作步驟:
- 點選左側“Repositories”選項,
- 點選該選項右側“New Repository”按鈕,
- 填寫Name選項框的值為“maven”,
- 選擇Type選項框的值為“Maven”,
- 點選“Create”按鈕。
注意:Name選項框的值maven
必須是小寫。
配置gradle引數
配置gradle-wrapper.properties
#Sun May 21 20:41:27 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip //非此版本號可能會存在`Could not generate a proxy class for class com.android.build.gradle.tasks.BuildArtifactReportTask.`此類錯誤
複製程式碼
配置Project的build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0' //非此版本號可能會存在`Could not generate a proxy class for class com.android.build.gradle.tasks.BuildArtifactReportTask.`此類錯誤
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.novoda:bintray-release:+' // 新增
}
}
allprojects {
repositories {
jcenter()
}
tasks.withType(Javadoc) { // 新增
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
複製程式碼
配置Library專案的build.gradle
apply plugin: 'com.android.library'
apply plugin: 'com.novoda.bintray-release' // 新增
android {
...
lintOptions { // 新增
abortOnError false
}
}
dependencies {
...
}
publish { // 新增
userOrg = 'fqxyi' // 註冊bintray時的username
groupId = 'com.fqxyi' // 專案包名
artifactId = 'utils' // 專案名
publishVersion = '1.0.0' // 釋出版本號
desc = 'Summarize the tools or methods commonly used in routine development' // 專案描述,可選項
website = 'https://github.com/fengqingxiuyi/AndroidUtils' // 專案站點,可選項
}
複製程式碼
配置其它Module的build.gradle
...
android {
...
lintOptions { // 新增
abortOnError false
}
}
...
複製程式碼
執行上傳命令
命令:
gradlew clean build bintrayUpload -PbintrayUser=username -PbintrayKey=API Key -PdryRun=false
複製程式碼
命令解釋:
- PbintrayUser的值為註冊bintray時的username,
- PbintrayKey的值為bintray的Api Key,可從bintray.com/profile/edi…網址左側的
API Key
選項中得到, - PdryRun是一個配置引數,當為true時,表示會執行所有環節,但不會上傳。
申請新增到JCenter
注意:
- 網址中的username需要更換為註冊bintray時的username,
- 網址中的artifactId需要更換為專案名。
操作步驟:
- 點選右下角的“Add to jcenter”按鈕新增library package到jcenter,會跳轉到bintray.com/message/add…網址,
- 點選“Send”按鈕傳送請求。
檢測是否申請通過
訪問jcenter.bintray.com/groupId/art…網址,如果能看到以下四個檔案即表示申請通過:
artifactId-publishVersion-javadoc.jar
artifactId-publishVersion-sources.jar
artifactId-publishVersion.aar
artifactId-publishVersion.pom
複製程式碼
注意:網址中的groupId,預設是專案包名,在其成為網址的一部分後,需要將.
符號改為/
符號,例如:https://jcenter.bintray.com/com/fqxyi/utils/utils/1.0.0/
FAQ
Repo 'maven' was not found
問題:
* What went wrong:
Execution failed for task ':androidutilslibrary:bintrayUpload'.
> Could not create package 'fqxyi/maven/androidutilslibrary': HTTP/1.1 404 Not Found [message:Repo 'maven' was not found]
複製程式碼
解決:未建立倉庫 或 倉庫名寫錯,注意maven是小寫
Lint檢查報錯
問題:Lint檢查報錯,導致Build & Upload失敗
解決:
方式一:需要自行根據錯誤資訊修正Error級別的問題,
方式二:為Library專案的build.gradle配置以下Lint選項實現,--該方式摘自網路,未驗證:
android {
...
lintOptions {
abortOnError false // 即使有報錯也不會停止打包
checkReleaseBuilds false // 打包Release版本的時候也不進行Lint檢測
}
...
}
複製程式碼
網路問題導致的上傳失敗
問題:
* What went wrong:
Execution failed for task ':utils:bintrayUpload'.
> javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
複製程式碼
* What went wrong:
Execution failed for task ':utils:bintrayUpload'.
> org.apache.http.conn.HttpHostConnectException: Connection to http://127.0.0.1:8888 refused
複製程式碼
* What went wrong:
Execution failed for task ':utils:bintrayUpload'.
> org.apache.http.NoHttpResponseException: The target server failed to respond
複製程式碼
解決:
步驟1:關閉代理軟體,重啟網路;
步驟2:關閉由上傳操作自動開啟的Java客戶端(Mac上會出現,其他裝置不清楚)
上傳成功後jcenter專案首頁不顯示pom
問題:
上傳成功後jcenter專案首頁不顯示pom,點選add to jcenter彈出以下錯誤提示:
Please fix the following before submitting a JCenter inclusion request: - Add a POM file to the latest version of your package.
複製程式碼
是由於編碼問題導致javadoc生成失敗導致。
解決:
步驟1:在Project的build.gradle中配置以下語句:
...
allprojects {
...
tasks.withType(Javadoc) { // 新增
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
}
}
...
複製程式碼
步驟2:拆分上傳命令:
1、在Terminal執行gradlew clean build
命令。
2、先右擊執行generatePomFileForReleasePublication task,再右擊執行publishReleasePublicationToMavenLocal task,具體操作看圖:
4、在Terminal中執行gradlew bintrayUpload -PbintrayUser=username -PbintrayKey=API Key -PdryRun=false
命令