我的新書《Android App開發入門與實戰》已于2020年8月由人民郵電出版社出版,歡迎購買,點擊進入詳情
文章目錄
- 1. JCenter提桶跑路
- 2. 轉戰Maven Central
- Step1:準備環境
- Step2:提交Issue
- Step3:配置
- Step4:上傳包(jar/aar)
- 3. 一些注意事項
- 4:示例工程
1. JCenter提桶跑路
用了這么多年的JCenter,終于要“跑路”了,還是有點依依不舍的,
詳情可以參見本公眾號的這篇文章:
https://mp.weixin.qq.com/s/rgqSMyF9ROs-WOvK_aJZNQ
以前也寫過JCenter上傳的方法:
《2020最新通過novoda上傳到JCenter的方法、技巧及遇到的坑》
不過現在如果再想上傳包到JCenter已經是不可以的了,提示如下:

2. 轉戰Maven Central
Google在 Android Studio 4.2 把Maven Central作為gradle的默認配置了,所以我們還是把包放在官方指定的倉庫中比較保險,
相比JCenter這樣的第三方倉庫,Maven Central的操作就稍顯復雜,不過我們只要把思路理清理順了,其實也沒有那么難操作,
Step1:準備環境
OS: Windows10
IDE: Android Studio 4.1.3
Android Gradle Plugin Version: 4.1.3
Gradle Version: 6.5
GPG: Gpg4win-3.1.15
Step2:提交Issue
如果想要往Maven Central上傳包,首先需要提交一個Issue進行申請,
申請網址:https://issues.sonatype.org/secure/Dashboard.jspa
如果沒有賬號,請先注冊一個,這個賬號跟后續登錄maven倉庫網站是一樣的,需要注意,
提交Issue需要選擇的型別和填寫的內容如下圖紅框內所示:

這里需要特別注意Group Id,因為這涉及到域名,需要你擁有這個域名的所有權,不能隨便填寫,否則驗證不通過,
如果沒有域名,你可以使用你在GitHub上注冊的賬號,比如我這邊是github.com/ddnosh,那么我們申請的Group Id可以寫成com.github.ddnosh,
提交了Issue后,系統會馬上給你發送一個comment,讓你對Group Id進行驗證,比如我們用的是GitHub網站的域名,系統讓我們在賬號下新建一個專案以便驗證這個Group Id是你的:

如果是其它域名的話,需要在域名下進行驗證,具體參考系統給你發的Comment,
我們在GitHub上創建好這個專案后,在這個Issue下面留言讓它們去檢測,系統如果檢測成功,會發送如下資訊:

這樣我們就有權限去上傳包了,下一步我們介紹如何上傳包,
Step3:配置
官網也有介紹如何通過gradle上傳包的,參考如下文章:
https://central.sonatype.org/pages/gradle.html
不過我們今天介紹通過第三方的插件:Gradle Nexus Staging,進行上傳,
下面就介紹下配置的一些資訊,
首先,在專案根目錄的build.gradle中添加apply:
apply plugin: ‘io.codearte.nexus-staging’
然后在dependencies中添加兩個classpath:
classpath ‘com.github.dcendents:android-maven-gradle-plugin:2.1’
classpath
‘io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.30.0’
接下來在專案的根目錄下添加一個專門用于上傳的gradle腳本,這里我們叫做publish-mavencentral.gradle,這是一個模板,可以直接拿來用,可以直接點擊查看:publish-mavencentral.gradle
可以看到publish-mavencentral.gradle腳本里面有一些引數需要設定的,那么我們下面就是要定義這些引數,為了安全起見,這些引數我們全部定義在local.properties中:
signing.keyId=AAAAAAAA
signing.password=123
signing.secretKeyRingFile=C:/android/xxx.gpg
##nexus賬號資訊,也就是創建工單時的賬號和密碼
ossrhUsername=xxx
ossrhPassword=456
后面的作業就是看看這5個引數如何設定的:
ossrhUsername和ossrhPassword很簡單,就是我們在【Step2:提交Issue】中注冊的用戶名和密碼,
signing相關的3個引數是跟我們包的簽名相關的,這里我們使用gpg4win,官網下載地址:https://www.gpg4win.org/index.html
接下來我們就介紹下signing.keyId、signing.password、signing.secretKeyRingFile是怎么定義的,
- 生成密鑰對
gpg --gen-key

signing.keyId我們只需要取最后的8位;
signing.password就是我們在生成密鑰對程序中要求我們輸入的;
如果需要查看keyId,可以輸入如下命令:
gpg --list-key
- signing.secretKeyRingFile
這個檔案到底是什么檔案呢?其實它就是gpg key的secret,
那么怎么獲取呢?很簡單,打開安裝好的Gpg4win軟體,這里名字叫做Kleopatra:

右鍵,選擇Backup Secret Keys…,保存為gpg格式的檔案,然后這個檔案的路徑就是signing.secretKeyRingFile的值,
另外關于publish-mavencentral.gradle中的sdk包的版本號,我們可以統一定義在根目錄的build.gradle檔案的buildscript節點下,我們定義一個ext子節點:
ext {
versionName = '1.0.0'
versionCode = 1
kotlin_version = '1.4.31'
}
versionName就是sdk的版本號,需要注意的是,如果versionName以SNAPSHOT結尾的話,則會上傳到snapshot的服務器中,
Step4:上傳包(jar/aar)
經過上面的準備作業,我們接下來就進入到激動人心的時刻了,將我們的包上傳到Maven倉庫,是不是很心動呢?
打開Android Studio右上角的Gradle,選擇圖示的publish,雙擊運行即可,

我們登錄:https://s01.oss.sonatype.org/,賬號密碼就是我們注冊Issue時的賬號密碼,
我們選擇左側的Staging Repositories,可以看到我們剛剛上傳的包:

我們選中自己的包,然后點擊"Close"按鈕:

然后系統會幫我們對包進行一系列的檢測作業,我們看到有一個錯誤:
Failed: Signature Validation
意思是包簽名出錯,原來我們本地用Gpg4win生成的密鑰對,沒有將公鑰上傳到官網驗證包指定的服務器地址,通過右側的日志我們也可以看到,系統對一些可以上傳公鑰的服務器進行驗證時沒有發現我們上傳的公鑰,于是就報錯了,
解決方案也很簡單,就是從右側選一個服務器地址,將我們本地生成的公鑰上傳上去即可,
上傳的命令如下:
gpg --keyserver http://keys.openpgp.org:11371 --send-keys xxxxxxxx
公鑰也是要最后8位即可,

再次點擊"Close"后可以看到,一系列的驗證成功了,
然后我們點擊"Release"按鈕,將包正式地發布出去:

包發布后,并不能馬上在Maven倉庫看到,同樣需要審核,
你會發現在原先的Issue里多了一個系統發送的Comment:

也就是你在https://s01.oss.sonatype.org/中過個幾分鐘就可以搜到你的包,如圖的方式:

但是要在真正的Maven倉庫(也就是通過implementation方式引入的庫),還需要等待差不多2個小時,
到時候你可以通過https://search.maven.org/查詢你的包,看看是否能查詢到,比如通過包名的方式:

好了,把包上傳到Maven Central的方法介紹完成!!!
3. 一些注意事項
1. publish
雙擊"publish"準備上傳包的時候,腳本會到工程的build\outputs目錄下尋找包,而且是"-release"結尾的包:

這個在"publish-mavencentral.gradle"腳本中有寫:

所以我們如果要上傳新的包,正確的步驟是先把sdk工程下的build目錄洗掉,然后通過gradle腳本的assembleRelease重新打包release的包:

release包打出來后再通過publish腳本上傳,
2. 洗掉Maven Central已上傳的包
目前來說網站沒有提供直接的方法洗掉,國民程式員想到的方法有兩個:
(1) 通過Issue告訴管理者幫忙洗掉
(2) 重新發布一個versionName更高的版本
關于洗掉Maven Central包更多的討論,可以參考stackoverflow上的議題:
https://stackoverflow.com/questions/9789611/removing-an-artifact-from-maven-central
4:示例工程
https://github.com/ddnosh/ARabbit
工程里面有上述所有的操作步驟和檔案,可以作為參考,
歡迎關注我的技術公眾號:國民程式員,我們的目標:輸出干貨
- 每天分享原創技術文章
- 海量免費技術資料和視頻學習資源
- 分享賺錢門道,帶領程式員走向財務自由
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/272514.html
標籤:其他
上一篇:SDUT 2021 Spring Individual Contest(for 20) - 12 補題
下一篇:QT的UDP通信
