本文微信公眾號「AndroidTraveler」首發。 背景 其實 Android 上傳開源項目到 jcenter 並不是一件新鮮事,網上也有很多文章。 包括我本人在將開源項目上傳到 jcenter 的時候也是參考了一些文章。 不過由於版本和環境問題,很多很早以前寫的文章並不完全適用。 基於此,這邊 ...
本文微信公眾號「AndroidTraveler」首發。
背景
其實 Android 上傳開源項目到 jcenter 並不是一件新鮮事,網上也有很多文章。
包括我本人在將開源項目上傳到 jcenter 的時候也是參考了一些文章。
不過由於版本和環境問題,很多很早以前寫的文章並不完全適用。
基於此,這邊總結一下近期(2019-07-02)我上傳開源項目到 jcenter 的實戰踩坑之路。
上傳的開源項目是 Android 6.0 動態許可權申請的項目。
基於軟體的單一職責原則,我這裡就不展開講了。
本篇文章主要講上傳開源項目到 jcenter 的實戰踩坑之路,後續如果需要再單獨另寫一篇文章介紹這個開源項目。
開發環境
設備:iMac
Android Studio 版本:3.2.1
java version:1.8.0_45
實戰踩坑之路
1. 讓項目跑起來
由於我這個開源項目是兩年半前寫的,所以要先保證 pull 下來的項目可以正常跑起來。
果然,控制台輸出下麵信息
No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android
明明之前可以 run 起來的。看來是因為 AndroidStudio 升級版本的問題。
這邊的解決方法就是升級 gradle 版本。
將原本的
classpath 'com.android.tools.build:gradle:2.2.2'
升級為
classpath 'com.android.tools.build:gradle:3.2.1'
然後其他的做相應調整,項目就可以正常運行到設備上面了。
2. 將要上傳的開源項目獨立成一個 Module
之前開源項目是把所有代碼都放在 app Module 裡面。
其他小伙伴使用前需要把相關文件夾拷貝到自己的項目裡面。
這裡的 Module 抽取其實做的是類似的事情,就是把相關文件遷移到新建的待上傳 Module。
3. 新建 bintray.com 賬號
我們要上傳開源項目到 jcenter,首先得要有一個賬號。
你以為新建賬號很簡單?
這裡面還是有不少坑的。容我一一道來。
網站為 https://bintray.com/。
點擊進去,第一個坑來了。
如圖所示,個人開發者要點擊右邊。不要看到左邊的按鈕顏色鮮艷並且有個 FREE 字眼就去點了。
因為 START YOUR FREE TRIAL 的意思是開始你的免費試用,試用說明有期限,所以你懂了吧。
點擊右邊之後,進入註冊界面。
為了方便,我用的是第三方登錄。
一開始我點擊 Sign up with Github。
結果填寫完資料之後點擊完成註冊,但是界面沒有任何反應。
最後發現是 QQ 郵箱的關係。
後面改為點擊 Sign up with Google,結果賬號順利創建了。
所以第二個坑就是註冊郵箱或者使用第三方註冊的郵箱需要是 Gmail 郵箱。
這邊親測的結論是 QQ 郵箱不可以,Gmail 郵箱可以。其他的郵箱就不清楚了。
這就是註冊賬號的第二個坑。
4. 創建 maven 倉庫
登錄進入主頁後,點擊 Add New Repository。
第一個和第二個必填。Name 填 maven,Type 選擇 Maven 即可。
如果這一步沒有操作,在最後上傳的時候會報錯。
5. 引入 bintray-release
在項目的 build.gradle 文件的 dependencies 塊裡面增加下麵語句:
classpath 'com.novoda:bintray-release:0.9.1'
在要上傳的 Module 的 build.gradle 添加如下語句:
在文件頂部添加:
apply plugin: 'com.novoda.bintray-release'
在文件末尾添加:
publish {
userOrg = 'zengyuzhan' //bintray.com 賬號用戶名
groupId = 'com.zengyu' //唯一 id,最後依賴的庫名組成部分之一
artifactId = 'permission' //倉庫名
publishVersion = '1.0.0' //版本號
desc = 'for android dynamic request permission' //描述
website = 'https://github.com/nesger/PermissionManager' //開源項目網址
}
publish 書寫之後,後面依賴的引入就是 implementation 'groupId:artifactId:publishVersion'
具體到上面例子就是
implementation 'com.zengyu:permission:1.0.0'
這一步驟有一些坑,比如 classpath 的引入這裡,我引入版本為 0.8.1 的時候,報瞭如下錯誤:
Cause: com.novoda.gradle.release.AndroidLibrary$LibraryUsage.getDependencyConstraints()Ljava/util/Set;
引入版本為 0.6.1 時,報錯:
No such property: FOR_RUNTIME for class: org.gradle.api.attributes.Usage
引入版本為 0.3.4 時,報錯:
Unable to load class 'org.gradle.api.internal.component.Usage'.
修改為最新版本的 0.9.1 之後就沒問題了。所以假設當你看到這篇文章按照上面引入時報錯,可以到官網 GitHub 看下最新版本是否是 0.9.1。
GitHub 官網:https://github.com/novoda/bintray-release
6. 上傳開源庫
在項目根目錄執行上傳命令,直接在 Android Studio 的 Terminal 面板輸入命令即可。
./gradlew clean build bintrayUpload -PbintrayUser=zengyuzhan -PbintrayKey=xxxxxx -PdryRun=false
其中 PbintrayUser 指定的是你註冊的 bintray.com 賬號的用戶名。PbintrayKey 指定的是你 bintray.com 網站的 API Key。
按照下圖獲取 API Key:
點擊拷貝按鈕拷貝到剪貼板即可,需要使用的話再粘貼。
等到 Terminal 編譯成功之後,會顯示 BUILD SUCCESSFUL。
這邊編譯的時候出了一個錯誤,如下:
Execution failed for task ':permission:javadocRelease'.
> Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting):
這個是 Javadoc 任務報錯,我不需要這個,因此解決方法是不執行上面的 task :permission:javadocRelease。
在項目的 build.gradle 文件的 allprojects 語句塊中,增加下麵語句:
tasks.getByPath(":permission:javadocRelease").enabled = false
可以看到小括弧裡面就是上面報錯的 task。
如果你的 Javadoc 報錯 task 跟我這個不一致(大概率不一致,跟 Module 名有關係),那麼你就要進行對應修改。
添加之後 Sync 項目再上報就沒這個問題了。
7. Add to JCenter
上傳完成之後,我們還需要到 bintray.com 網站上面點擊 Add to JCenter,然後等待審核才算大功告成。
因為上面的項目我已經發佈成功並且點擊了,所以我用另一個開源庫來演示這個步驟。
進入首頁,點擊 maven:
可以看到你開源的所有包名:
點擊最新上傳但是還沒有添加到 Jcenter 的庫。
點擊 Go to Old Look
可以看到 Add to JCenter 按鈕。點擊
簡單寫下對這個庫的描述即可。
點擊 Send 之後網頁會顯示一個提示。接下來就等待郵箱通知就可以了。
審核完畢之後你進來就不會看到 Add to JCenter 按鈕了。
比如我之前審核通過的庫:
之後你就可以像引用其他三方庫一樣引用到你的項目中了。
總結如下:
本文演示的倉庫為:https://github.com/nesger/PermissionManager
有不清楚的可以留言或者直接查看我演示倉庫的提交記錄和源碼。
參考鏈接:
https://blog.csdn.net/lmj623565791/article/details/51148825
https://www.jianshu.com/p/6f808c29e378
https://blog.csdn.net/anydrew/article/details/51286998