通過AndroidStudio發(fā)布 aar庫 到MavenCentral

前言:

將 aar庫 發(fā)布到 MavenCentral有以下幾步:

  1. sonatype 注冊(cè)賬號(hào)并創(chuàng)建問題,最終至問題結(jié)果為“已修復(fù)”
  2. 下載 GnuPG 創(chuàng)建密鑰,將密鑰保存至本地并將公鑰發(fā)送至公鑰服務(wù)器
  3. 在AndroidStudio上配置好 sonatype 信息及 GnuPG 簽名,提交 aar庫 至 nexus 暫存
  4. 使用 sonatype 賬號(hào)登錄 nexus 查看上傳的aar庫姻乓,確認(rèn)無誤后完成發(fā)布。
  5. 發(fā)布完成玩郊,審核通過后可在 https://search.maven.org/ 搜索查看枚尼。
  6. 完結(jié)撒花~
  • 接下來將詳細(xì)說明每個(gè)步驟

一:去 sonatype 注冊(cè)賬號(hào)并創(chuàng)建問題,最終至問題結(jié)果為“已修復(fù)”

1.1 第一次需要先注冊(cè)賬號(hào)

1.2 創(chuàng)建Project工單

1.3 開通倉庫
 創(chuàng)建好工單后铛铁,根據(jù)評(píng)論提示在個(gè)人倉庫創(chuàng)建一個(gè)項(xiàng)目用于校驗(yàn),例如我的是創(chuàng)建名稱為“OSSRH-80195”項(xiàng)目
1.4 github 創(chuàng)建<OSSRH-80195>工程

1.4 以上準(zhǔn)備工作都完成后却妨,回復(fù)下評(píng)論饵逐,待管理員審核

1.5 審核通過后,項(xiàng)目狀態(tài)會(huì)變成:已解決

二:下載 GnuPG 并創(chuàng)建GPG簽名保存至本地待使用

2.1 按照下面指引下載 GnuPG exe文件下載彪标,默認(rèn)安裝即可倍权。

2.2 安裝 gpg 完成之后,可以在cmd 命令行查看是否安裝成功
2.3 創(chuàng)建密鑰捞烟,通過 cmd 命令行創(chuàng)建并發(fā)布公鑰至公鑰服務(wù)器账锹,想通過 gpg exe程序操作點(diǎn) 這里

注:網(wǎng)上有人是直接通過“Kleopatra.exe”程序界面操作的,不過我在最后一步“在服務(wù)器上發(fā)布...”一直發(fā)布失敗坷襟,所以就通過命令行的方式操作,如果有知道如何解決的大佬可以評(píng)論區(qū)留言哈生年,感謝~婴程。
報(bào)錯(cuò)如下:
gpg.exe 的輸出為:gpg: sending key 231883C5xxxxxxxx to hkps://keyserver.ubuntu.com gpg: keyserver send failed: Certificate expired gpg: keyserver send failed: Certificate expired

  • 2.3.1 生成密鑰
  gpg --gen-key
  • 2.3.2 查看密鑰
  gpg --list-key
  • 2.3.3 導(dǎo)出密鑰

如果gradle簽名的時(shí)候報(bào)密鑰文件中找不到指定的 key ID的key的錯(cuò)誤,此時(shí)可以手動(dòng)導(dǎo)出

  gpg --export-secret-keys > 某盤:\...\gnupg\secring.gpg
  • 2.3.4 公鑰發(fā)送至公鑰服務(wù)器

keyserver.ubuntu.com
keys.openpgp.org
pgp.mit.edu
各個(gè)公鑰服務(wù)器之間互相同步需要一定時(shí)間抱婉,可以提前發(fā)送到這三個(gè)服務(wù)器档叔,查看最新服務(wù)器地址點(diǎn) 這里桌粉。

  gpg --keyserver keyserver.ubuntu.com --send-keys keyId
  gpg --keyserver keys.openpgp.org --send-keys keyId
  gpg --keyserver pgp.mit.edu --send-keys keyId
  • 注:以上三個(gè)服務(wù)器地址只要保證其中一個(gè)發(fā)送成功即可

  • 2.3.6 查詢公鑰是否上傳成功
  gpg --keyserver hkp://pool.sks-keyservers.net --search-keys keyId
  gpg --keyserver hkp://pgp.mit.edu --search-keys keyId
  gpg --keyserver hkp://keyserver.ubuntu.com --search-keys keyId

三:在AndroidStudio上配置好 sonatype 信息及 GnuPG 簽名,提交 aar庫 至 nexus 暫存

3.1 在項(xiàng)目根目錄創(chuàng)建一個(gè)新的"xxx.gradle"文件衙四,用于maven上傳铃肯,并添加如下代碼。

我這里取的文件名是:publish-mavencentral.gradle

apply plugin: 'maven-publish'
apply plugin: 'signing'

task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.source

    exclude "**/R.class"  //排除`R.class`
    exclude "**/BuildConfig.class"  //排除`BuildConfig.class`
}

//--- 修改配置一 ---
ext {path=
    PUBLISH_GROUP_ID = '之前注冊(cè)sonatype時(shí)填寫的的的groupId域名传蹈,如果是github的則是io.github.xxx'
    PUBLISH_ARTIFACT_ID = '庫的名稱'
    PUBLISH_VERSION = '庫的版本'
}

//--- 修改配置二 ---
ext["signing.keyId"] = ''
ext["signing.password"] = ''
ext["signing.secretKeyRingFile"] = ''
ext["ossrhUsername"] = ''
ext["ossrhPassword"] = ''

File secretPropsFile = project.rootProject.file('local.properties')
if (secretPropsFile.exists()) {
    println "Found secret props file, loading props"
    Properties p = new Properties()
    p.load(new FileInputStream(secretPropsFile))
    p.each { name, value ->
        ext[name] = value
    }
} else {
    println "No props file, loading env vars"
}
publishing {
    publications {
        release(MavenPublication) {
            println("publish-maven Log-------> PUBLISH_GROUP_ID: $PUBLISH_GROUP_ID; PUBLISH_ARTIFACT_ID: $PUBLISH_ARTIFACT_ID; PUBLISH_VERSION: $PUBLISH_VERSION")
            // The coordinates of the library, being set from variables that
            // we'll set up in a moment

            //配置一傳入的參數(shù)
            groupId PUBLISH_GROUP_ID
            artifactId PUBLISH_ARTIFACT_ID
            version PUBLISH_VERSION

            // Two artifacts, the `aar` and the sources
            artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
            artifact androidSourcesJar

            // Self-explanatory metadata for the most part
            pom {
                //--- 修改配置三 ---
                name = PUBLISH_ARTIFACT_ID
                description = '上傳aar插件至mavencentral押逼,方便使用implementation快速引入' //添加文件描述
                // If your project has a dedicated site, use its URL here
                url = 'https://github.com/xxx/xxxx' //項(xiàng)目github鏈接
                licenses {
                    license {
                        //協(xié)議類型,一般默認(rèn)Apache License2.0的話不用改:
                        name = 'The Apache License, Version 2.0'
                        url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer {
                        //--- 修改配置四 ---
                        id = '用戶ID'     //你的sonatype用戶ID
                        name = '用戶名'   //你的sonatype用戶名
                        email = '郵箱'    //你的sonatype注冊(cè)郵箱
                    }
                }
                // Version control info, if you're using GitHub, follow the format as seen here
                scm {
                    //--- 修改配置五 ---
                    //修改成你的Git地址:
                    connection = 'scm:git:github.com/xxx/xxxx.git'
                    developerConnection = 'scm:git:ssh://github.com/xxx/xxxx.git'
                    //分支地址:
                    url = 'https://github.com/xxx/xxxx/tree/master'
                }
                // A slightly hacky fix so that your POM will include any transitive dependencies
                // that your library builds upon
                withXml {
                    def dependenciesNode = asNode().appendNode('dependencies')

                    project.configurations.implementation.allDependencies.each {
                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', it.group)
                        dependencyNode.appendNode('artifactId', it.name)
                        dependencyNode.appendNode('version', it.version)
                    }
                }
            }
        }
    }
    repositories {
        // The repository to publish to, Sonatype/MavenCentral
        maven {
            // This is an arbitrary name, you may also use "mavencentral" or
            // any other name that's descriptive for you

            //--- 修改配置六 ---
            name = "項(xiàng)目名稱"
            def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
            def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
            // You only need this if you want to publish snapshots, otherwise just set the URL
            // to the release repo directly
            url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl

            // The username and password we've fetched earlier
            credentials {
                username ossrhUsername
                password ossrhPassword
            }
        }
    }
}
signing {
    sign publishing.publications
}

針對(duì)以上代碼惦界,有幾處需要修改成自己的配置信息

  • 3.1.1 修改配置一:填入需要使用 implementation 引入aar的格式
ext {path=
    PUBLISH_GROUP_ID = '之前注冊(cè)sonatype時(shí)填寫的的的groupId域名挑格,如果是github的則是io.github.xxx'
    PUBLISH_ARTIFACT_ID = '庫的名稱'
    PUBLISH_VERSION = '庫的版本'
}
//以上三個(gè)參數(shù)分別對(duì)應(yīng)的是 implementation 'io.github.Junkmer:JRouter:0.0.1' 冒號(hào)從左往右分割的三部分
  • 3.1.2 修改配置二:在項(xiàng)目的根目錄local.properties文件中增加如下配置
signing.keyId=5D31B52D                         #剛才獲取的秘鑰后8位
signing.password=xxxx                          #創(chuàng)建GPG秘鑰時(shí)設(shè)置的密碼
signing.secretKeyRingFile=.../xxx.gpg          #生成的.gpg結(jié)尾的密鑰文件目錄
ossrhUsername=XXX                              #sonatype用戶名
ossrhPassword=XXX                              #sonatype密碼
  • 3.1.3 修改配置三:配置項(xiàng)目描述和項(xiàng)目GitHub地址
name = PUBLISH_ARTIFACT_ID  //使用配置一中的"庫名稱"參數(shù)
description = '上傳aar插件至mavencentral,方便使用implementation快速引入' //添加文件描述
url = 'https://github.com/xxx/xxxx' //項(xiàng)目github鏈接
  • 3.1.4 修改配置四: 填寫在 sonatype 注冊(cè)的賬號(hào)信息
id = '用戶ID'     //你的sonatype用戶ID
name = '用戶名'   //你的sonatype用戶名
email = '郵箱'    //你的sonatype注冊(cè)郵箱
  • 3.1.5 修改配置五:將模板中的"xxx/xxxx"替換成自己的github項(xiàng)目真實(shí)地址
//修改成你的Git地址:
connection = 'scm:git:github.com/xxx/xxxx.git'
developerConnection = 'scm:git:ssh://github.com/xxx/xxxx.git'
//分支地址:
url = 'https://github.com/xxx/xxxx/tree/master'
  • 3.1.6 修改配置六:配置項(xiàng)目名稱和發(fā)布地址
name = "項(xiàng)目名稱"  //填寫在github創(chuàng)建的項(xiàng)目名稱
def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"

注:由于 https://oss.sonatype.org 不再維護(hù)沾歪,新地址修改成 https://s01.oss.sonatype.org漂彤,想查看最新地址點(diǎn) 這里

3.2 執(zhí)行aar打包和上傳

先在需要打包上傳的module下的build.gradle,添加以下代碼:

apply from: "${rootProject.projectDir}/publish-mavencentral.gradle"
  • 3.2.3 以上都配置好后灾搏,在AndroidStudio右側(cè)的gradle tasks中找到要提交的module挫望,點(diǎn)擊“4”任務(wù)。
  • 3.2.3 上傳成功狂窑,控制臺(tái)會(huì)有如下打印媳板,然后就可以在 nexus 上查看了

四:使用 sonatype 賬號(hào)登錄 nexus 查看上傳的aar庫,確認(rèn)無誤后完成發(fā)布蕾域。

4.1 登錄 nexus
4.2 確認(rèn)aar庫無誤后拷肌,點(diǎn)擊 "release" 按鈕提交審核。

五:發(fā)布完成旨巷,審核通過后可在 https://search.maven.org/ 搜索查看巨缘。

六:完結(jié)撒花~

特別感謝:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末若锁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子斧吐,更是在濱河造成了極大的恐慌又固,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煤率,死亡現(xiàn)場離奇詭異仰冠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蝶糯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門洋只,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事识虚≈叮” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵担锤,是天一觀的道長蔚晨。 經(jīng)常有香客問我,道長肛循,這世上最難降的妖魔是什么铭腕? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮育拨,結(jié)果婚禮上谨履,老公的妹妹穿的比我還像新娘。我一直安慰自己熬丧,他們只是感情好笋粟,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著析蝴,像睡著了一般害捕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闷畸,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天尝盼,我揣著相機(jī)與錄音,去河邊找鬼佑菩。 笑死盾沫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的殿漠。 我是一名探鬼主播赴精,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼绞幌!你這毒婦竟也來了蕾哟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤莲蜘,失蹤者是張志新(化名)和其女友劉穎谭确,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體票渠,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逐哈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了问顷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鞠眉。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡薯鼠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出械蹋,到底是詐尸還是另有隱情,我是刑警寧澤羞芍,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布哗戈,位于F島的核電站,受9級(jí)特大地震影響荷科,放射性物質(zhì)發(fā)生泄漏唯咬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一畏浆、第九天 我趴在偏房一處隱蔽的房頂上張望胆胰。 院中可真熱鬧,春花似錦刻获、人聲如沸蜀涨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厚柳。三九已至,卻和暖如春沐兵,著一層夾襖步出監(jiān)牢的瞬間别垮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來泰國打工扎谎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碳想,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓毁靶,卻偏偏與公主長得像胧奔,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子老充,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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