Android 上傳開源項目到 jcenter 實戰踩坑之路

本文微信公衆號「AndroidTraveler」首發。java

背景

其實 Android 上傳開源項目到 jcenter 並非一件新鮮事,網上也有不少文章。linux

包括我本人在將開源項目上傳到 jcenter 的時候也是參考了一些文章。android

不過因爲版本和環境問題,不少很早之前寫的文章並不徹底適用。git

基於此,這邊總結一下近期(2019-07-02)我上傳開源項目到 jcenter 的實戰踩坑之路。github

上傳的開源項目是 Android 6.0 動態權限申請的項目。web

基於軟件的單一職責原則,我這裏就不展開講了。api

本篇文章主要講上傳開源項目到 jcenter 的實戰踩坑之路,後續若是須要再單獨另寫一篇文章介紹這個開源項目。bash

開發環境

設備:iMac Android Studio 版本:3.2.1 java version:1.8.0_45微信

實戰踩坑之路

1. 讓項目跑起來

因爲我這個開源項目是兩年半前寫的,因此要先保證 pull 下來的項目能夠正常跑起來。app

果真,控制檯輸出下面信息

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,首先得要有一個帳號。

你覺得新建帳號很簡單?

這裏面仍是有很多坑的。容我一一道來。

網站爲 bintray.com/

點擊進去,第一個坑來了。

image.png

如圖所示,我的開發者要點擊右邊。不要看到左邊的按鈕顏色鮮豔而且有個 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 官網:github.com/novoda/bint…

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 按鈕了。

好比我以前審覈經過的庫:

以後你就能夠像引用其餘三方庫同樣引用到你的項目中了。

總結以下:

本文演示的倉庫爲:github.com/nesger/Perm…

有不清楚的能夠留言或者直接查看我演示倉庫的提交記錄和源碼。

參考連接:
blog.csdn.net/lmj62356579…
www.jianshu.com/p/6f808c29e…
blog.csdn.net/anydrew/art…

相關文章
相關標籤/搜索