Android發(fā)布庫到MavenCentral說明以及踩坑解決
jcenter即將停止服務(wù)弹灭,由于之前我們好多庫都是發(fā)布到j(luò)center上芋肠,現(xiàn)在必須抓緊找下家才行堂淡,我們針對jitpack和mavencentral進(jìn)行了調(diào)研然遏,結(jié)果如下:
jitpack的發(fā)包必須需要將源碼發(fā)布到github上扮超,這中情況對于我們的產(chǎn)品自用SDK的情況非常不友好
mavencentral不用公布源碼到github上价淌,和自建Nexus Repository Manager去管理發(fā)布庫很類似申眼,只要把需要配置的gradle選項(xiàng)配置到項(xiàng)目中去,并且把簽名和發(fā)布地址以及賬號配置好就可以通過Android Studio的gradle進(jìn)行操作把包上傳到Sonatye上進(jìn)行Android包管理蝉衣。
發(fā)包到mavencentral的具體操作流程和踩坑總結(jié)
一括尸、 Sonatype jira的賬號申請以及項(xiàng)目申請
首先;我們到SonatypeJira上邊注冊SonatypeJira賬號。
需要在SonatypeJira中的issues projects界面中創(chuàng)建一個issue用來申請一個項(xiàng)目病毡。
由于截圖篇幅有限最下面的Already Synced to Central 選擇 No濒翻,因?yàn)檫@是我們新申請的。
創(chuàng)建完成后啦膜,管理員會在第一時間處理新建的這個issue有送,等待管理員回復(fù)就可以,在后續(xù)的回復(fù)僧家,如果不是在github上的開源項(xiàng)目雀摘,你要用自己的域名就需要在管理員的指導(dǎo)下完成域名的驗(yàn)證工作。域名驗(yàn)證完成后八拱,這個issue的狀態(tài)就回標(biāo)識為RESOLVED阵赠,下面就可以準(zhǔn)備使用gradle上傳你的庫了,只要在group id下的所有庫都支持肌稻。
所有的issue操作都會同步到注冊賬號的郵箱上邊清蚀,可以及時了解所有動態(tài)。
二爹谭、gradle腳本的準(zhǔn)備
具體的詳細(xì)配置官方說明Deploying to OSSRH with Gradle - Introduction枷邪,通過這篇文章可以找到標(biāo)準(zhǔn)的的發(fā)布包用的gradle腳本模板。下面我把我這用到的和大家分享一下完整版诺凡。
apply plugin: 'maven'
apply plugin: 'signing'
def ossrhUsername = "在SonaType上申請的賬號"
def ossrhPassword = "在SonaType上申請的密碼"
def PUBLISH_GROUP_ID = 'com.demo.sdk' //這里可以不是直接申請時候的groupId只要開頭是就可以
def PUBLISH_ARTIFACT_ID = "引用庫的artifactId"
def PUBLISH_VERSION = android.defaultConfig.versionName //這個是直接獲取的庫gradle里配置好的版本號东揣,不用到處修改版本號,只需要維護(hù)一份就可以腹泌。
//簽名
signing {
required { gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
}
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
repository(url: "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") {
authentication(userName: ossrhUsername, password: ossrhPassword)
}
snapshotRepository(url: "https://s01.oss.sonatype.org/content/repositories/snapshots/") {
authentication(userName: ossrhUsername, password: ossrhPassword)
}
pom.groupId = PUBLISH_GROUP_ID
pom.artifactId = PUBLISH_ARTIFACT_ID
pom.version = PUBLISH_VERSION
pom.project {
name '發(fā)布庫的簡單名稱'
packaging 'aar' //我這里發(fā)布的是安卓的包救斑,所有寫的aar
// optionally artifactId can be defined here
description '發(fā)布包的描述'
url '可以寫公司官網(wǎng)地址或github個人頁面地址'
scm {
connection 'scm:替換成項(xiàng)目git地址'
developerConnection 'scm:替換為git開頭的項(xiàng)目地址'
url '項(xiàng)目首頁,可以是github項(xiàng)目的主頁'
}
licenses {
license {
name 'The Apache License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id '這里填寫申請賬號時候的全名就可以'
name '這里隨意填寫就可以'
email '最好是申請賬號時用的郵箱'
}
}
}
}
}
}
三真屯、 簽名
之所以簽名作為這一塊來說說明它很重要也很容易踩坑脸候。我這里用的是Mac系統(tǒng)所以就以Mac系統(tǒng)來說明了。
1. 創(chuàng)建GPG密鑰
在往上找到一些關(guān)于創(chuàng)建GPG密鑰的文章绑蔫,安裝方式各異运沦,我這里使用的命令行安裝,不過首先Mac電腦上需要安裝了brew才可以配深,相信brew怎么安裝作為程序員的我們應(yīng)該是必不可少的携添,這里就不贅述了,下面說一下如何安裝GPG:
在命令行使用如下命令
brew install gpg
等待安裝完成就可以篓叶。
2. 創(chuàng)建密鑰
在命令行中使用如下命令作為開始
gpg --full-gen-key
在執(zhí)行過程會讓選擇加密方式烈掠,我這邊使用的是RSA and RSA羞秤,長度輸入4096,過期時間直接回車代表不過期左敌,然后提示讓輸入User ID和一個郵箱瘾蛋,這里可以使用注冊SonaType時候用的用戶名和郵箱,當(dāng)然也可以用其他的矫限。接著最后一步輸入O哺哼,注意這里是大寫的O不是零,然后回車接著就會提示讓輸入密碼叼风,輸入一次后還會有一次確認(rèn)輸入取董,這個密碼一定要記住后期會用到。
以上操作完成后无宿,你可以到你的個人賬號的目錄去查看一下會有這么一個目錄存在
~/.gnupg/openpgp-revocs.d
在這個目錄下有一個.rev文件茵汰,記住這個文件名稱的末尾8位字符在后續(xù)的配置文件會用到。
接下來創(chuàng)建gpg文件孽鸡,通過如下命令創(chuàng)建蹂午,我建議先在命令行中把目錄切到~/.gnupg/下再去執(zhí)行如下命令這樣不會找不到文件。
gpg --export-secret-keys -o secring.gpg
執(zhí)行以上命令創(chuàng)建文件secring.gpg梭灿,創(chuàng)建過程會讓輸入上邊我們創(chuàng)建密鑰過程中輸入的密碼,驗(yàn)證完密碼后會在~/.gnupg目錄生成secring.gpg文件冰悠,這個文件的路徑我們后續(xù)在生成配置文件的時候也需要堡妒。
3. 設(shè)置配置文件
在個人目錄下.gradle創(chuàng)建配置文件gradle.properties,文件內(nèi)容如下
signing.keyId=剛才獲取的秘鑰后8位
signing.password=之前我們執(zhí)行命令時設(shè)置的密碼
signing.secretKeyRingFile=剛才生成的secring.gpg文件目錄
ossrhUsername=sonatype用戶名
ossrhPassword=sonatype密碼
記住這個配置文件一定放在.gradle目錄下才會生效溉卓,這個問題困擾了我小半天時間皮迟。也就是完整路徑是
~/.gradle/gradle.properties
如果路徑不對或者這個配置文件不對,上傳包到SonaType是沒有問題桑寨,但是在操作close的時候你會發(fā)現(xiàn)出現(xiàn)問題了伏尼,簽名總是出錯,如果路徑不對就會直接跳過簽名這一步尉尾,然后在SonaType在操作上傳好的包時根本到不了release這一步爆阶。如果想看看什么效果自己可以去試驗(yàn)一下。
四沙咏、發(fā)布的準(zhǔn)備
通過上面的步驟我們已經(jīng)把我們的要發(fā)布的包傳到SonaType的nexus repository manager系統(tǒng)里了辨图。
可以看到圖中我寫了很多字,由于我這里沒有預(yù)發(fā)布的包所以我就以紅框?yàn)槔酥辏蠹铱梢宰孕腥グl(fā)布查看具體的結(jié)構(gòu)故河。
發(fā)布的步驟很簡單,分為一下幾步操作就可以
1. 登錄nexus repository manager平臺
我們上傳到庫都托管到nexus repository manager平臺吆豹,所以我們需要使用之前申請的sonaType的賬號去登錄這個托管平臺來管理我們的包鱼的。
2. 通過點(diǎn)擊Staging Repositories去找到我們剛剛發(fā)布的包并繼續(xù)發(fā)包流程理盆。
包剛上傳上來你會發(fā)現(xiàn)只有Refresh、Close和Drop可以點(diǎn)擊凑阶,這個時候我們?nèi)绻肓⒓窗l(fā)布直接點(diǎn)擊Close猿规,通過頁面的下半部分可以看到處理的狀態(tài),刷新需要我們點(diǎn)擊Refresh進(jìn)行刷新晌砾,每一次點(diǎn)擊Close都是一個單獨(dú)的Task坎拐,如果Task中每個環(huán)節(jié)都是綠色通過的狀態(tài),那么這個包的狀態(tài)就回變成closed养匈,Release菜單就可以點(diǎn)擊發(fā)布了哼勇,操作完后等待差不多10分鐘就可以訪問發(fā)布包的新版本了。
本文在開源項(xiàng)目:https://github.com/Android-Alvin/Android-LearningNotes 中已收錄呕乎,里面包含不同方向的自學(xué)編程路線积担、面試題集合/面經(jīng)、及系列技術(shù)文章等猬仁,資源持續(xù)更新中...