Android發(fā)布庫到MavenCentral說明以及踩坑解決

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ù)更新中...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帝璧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子湿刽,更是在濱河造成了極大的恐慌的烁,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诈闺,死亡現(xiàn)場離奇詭異渴庆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)雅镊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門襟雷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仁烹,你說我怎么就攤上這事耸弄。” “怎么了卓缰?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵计呈,是天一觀的道長。 經(jīng)常有香客問我征唬,道長震叮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任鳍鸵,我火速辦了婚禮苇瓣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘偿乖。我一直安慰自己击罪,他們只是感情好哲嘲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著媳禁,像睡著了一般眠副。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上竣稽,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天囱怕,我揣著相機(jī)與錄音,去河邊找鬼毫别。 笑死娃弓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的岛宦。 我是一名探鬼主播台丛,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼砾肺!你這毒婦竟也來了挽霉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后杀餐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡实胸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了闷煤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片童芹。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡涮瞻,死狀恐怖鲤拿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情署咽,我是刑警寧澤近顷,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站宁否,受9級特大地震影響窒升,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜慕匠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一饱须、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧台谊,春花似錦蓉媳、人聲如沸譬挚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽减宣。三九已至,卻和暖如春玩荠,著一層夾襖步出監(jiān)牢的瞬間漆腌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工阶冈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闷尿,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓眼溶,卻偏偏與公主長得像悠砚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子堂飞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 夜鶯2517閱讀 127,719評論 1 9
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月灌旧,有人笑有人哭,有人歡樂有人憂愁绰筛,有人驚喜有人失落枢泰,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,535評論 28 53
  • 兔子雖然是枚小碩 但學(xué)校的碩士四人寢不夠 就被分到了博士樓里 兩人一間 在學(xué)校的最西邊 靠山 兔子的室友身體不好 ...
    待業(yè)的兔子閱讀 2,601評論 2 9
  • 信任包括信任自己和信任他人 很多時候,很多事情铝噩,失敗衡蚂、遺憾、錯過骏庸,源于不自信毛甲,不信任他人 覺得自己做不成,別人做不...
    吳氵晃閱讀 6,187評論 4 8