[Android]如何上傳一個庫到JCenter(遠(yuǎn)程依賴Android Library)

為什么要上傳一個庫到JCenter

工作好幾年,使用了很多框架,很多重復(fù)功能的代碼越來越多,不好管理體積也大.最后變成了帶著個U盤換工作.
剛工作的時候使用lib文件下的jar包,下載困難資源難找,不少朋友都為了這個給CSDN貢獻了不少金幣吧.
后來用各種本地依賴包,雖說方便修改但是有些功能單一的功能每次都要重復(fù)修改比較麻煩.
再后來使用了各種api/compile的遠(yuǎn)程依賴包,相當(dāng)方便.
能上傳一個自己的庫,是我一直想做的事.
ps:引入方式的介紹:
android gradle依賴:implementation 和compile的區(qū)別
依賴引入 | Android依賴引入史上最全攻略
添加了大神jessyan的配置,感謝yan神
Android 大神jessyan的bintray配置 和本文配合食用效果更佳

正文

話不多說,教程開始.
本文是2020年7月15日寫的,教程以7月10日-7月14日的各平臺版本為準(zhǔn).
其中用到https://github.com , https://bintray.com , https://www.google.com等網(wǎng)站,不能正常訪問的自己想辦法.

第一步 準(zhǔn)備項目

保證你有個一個demo項目,你想要上傳的功能集中在一個Android Library中

項目截圖.png

這里是個寫的小項目,voice-player依賴包是我實現(xiàn)的一個播放網(wǎng)絡(luò)音頻支持下載音頻文件而且可以生成緩存的功能庫.
app中是實現(xiàn)了這個voice-player庫的一個demo功能,已上傳gitHub.可以直接下載看使用效果.
gitHub地址:https://github.com/AlexFugui/VoicePlayer
此庫僅作為demo,功能尚未完備

第二步 注冊bintray賬號

注冊鏈接: https://bintray.com/

1 bintray官網(wǎng) 點擊紅圈位置注冊

2 注冊賬號或者使用GitHub/google登陸

這里注意最好使用Google郵箱登陸,它不支持163/qq等郵箱.如果你的git也是用這兩種郵箱注冊的,也沒反應(yīng)

登陸成功

登陸成功后點擊add new organization
我看了教程是點add new reopsitory,然后發(fā)現(xiàn)沒卵用,因為上傳庫是要添加組織id的
我創(chuàng)建了名叫Android組織之后打開組織


aledfugui就是我的組織id

忘記alexfugui這個id是我自己填寫的還是自動生成的了.我也是慢慢摸索過來才發(fā)現(xiàn)這樣ok沒問題

然后在這個組織中add new repository


add new repository的界面

第一個默認(rèn)填maven了,對應(yīng)第二個的type
第二個type就是Maven
第三個選apache-2.0
第四個選填
Create以后就不用管了

edit Profile

其他教程不同,官網(wǎng)修改了樣式,截止2020.7.14,需要點擊頁面右上角的用戶名才能從這里進入查看API KEY
如果你看不到右上角的用戶名,請刷新頁面甚至重啟瀏覽器重新登陸,我也不知道為什么

記住你的bintray用戶名 和 API KEY

用戶名是alexfugui117
API KEY自行復(fù)制記下來

第三步 配置項目

首先在項目根目錄下的build.gradle文件中添加

dependencies {
        classpath "com.android.tools.build:gradle:4.0.0"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'//添加這一行
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0'//還有這一行
    }
項目根目錄中g(shù)radle配置.png

然后在Library的build.gradle中添加以下代碼

/**************************************************下面是上傳jcenter的配置**************************************************/
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

def siteUrl = 'https://github.com/AlexFugui/VoicePlayer' //項目在github主頁地址
def gitUrl = 'https://github.com/AlexFugui/VoicePlayer.git'   //Git倉庫的地址
// 唯一包名,比如implementation 'com.davis.ui.pulltorefresh:pulltorefresh:2.1.0'中的com.davis.ui.pulltorefresh就是這里配置的。
group = "com.alex.voice-player"http://包名,可以自定義,寫aa.bb.cc都可以
//項目引用的版本號,比如implementation 'com.davis.ui.pulltorefresh:pulltorefresh:2.1.0'中的2.1.0就是這里配置的。
version = "1.0.0"http://發(fā)布aar的庫版本

install {
    repositories.mavenInstaller {
        // 生成pom.xml和參數(shù)
        pom {
            project {
                packaging 'aar'
                // 項目描述,復(fù)制我的話,這里需要修改。
                name 'voice-player'// 可選,項目名稱。
                description 'Android voice-player'// 可選,項目描述。
                url siteUrl // 項目主頁,這里是引用上面定義好。

                // 軟件開源協(xié)議,現(xiàn)在一般都是Apache License2.0吧,復(fù)制我的,這里不需要修改。
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }

                //填寫開發(fā)者基本信息,復(fù)制我的,這里需要修改。
                developers {
                    developer {
                        id 'AlexFugui' // 開發(fā)者的id,隨便寫
                        name 'AlexFugui' // 開發(fā)者名字,,隨便寫
                        email 'xxxxxxxx@xx.com' // 開發(fā)者郵箱。
                    }
                }

                // SCM,直接復(fù)制,這里不需要修改。
                scm {
                    connection gitUrl // Git倉庫地址。
                    developerConnection gitUrl // Git倉庫地址。
                    url siteUrl // 項目主頁。
                }
            }
        }
    }
}

// 生成jar包的task,不需要修改。
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

// 生成jarDoc的task,不需要修改。
task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    // destinationDir = file("../javadoc/")
    failOnError false // 忽略注釋語法錯誤,如果用jdk1.8你的注釋寫的不規(guī)范就編譯不過。
}

// 生成javaDoc的jar,不需要修改。
task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}
artifacts {
    archives javadocJar
    archives sourcesJar
}

// 這里是讀取Bintray相關(guān)的信息,我們上傳項目到github上的時候會把gradle文件傳上去,所以不要把帳號密碼的信息直接寫在這里,寫在local.properties中,這里動態(tài)讀取。
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty("bintray.user") // Bintray的用戶名。
    key = properties.getProperty("bintray.apikey") // Bintray剛才保存的ApiKey。

    configurations = ['archives']
    pkg {
        repo = "maven"  //Repository名字 需要自己在bintray網(wǎng)站上先添加
        name = "voice-player"
// 發(fā)布到Bintray上的項目名字,這里的名字不是implementation 'com.davis.ui.pulltorefresh:pulltorefresh:2.1.0'中的pulltorefresh。
        userOrg = 'alexfugui'//Bintray的組織中,你的id
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true // 是否是公開項目。
    }
}

第四步 準(zhǔn)備上傳

在local.properties文件添加如下代碼:

bintray.user=qweasdzxc
bintray.apikey=02085y42a45984ca90878ab075483c611a9b3d5
微信截圖_20200715215519.png

bintray.user是你登陸bintray后右上角顯示的名字
bintray.apikey是你復(fù)制的API KEY 我這個示例是錯的,改成你自己的

完成后,點開Android Studio的控制臺Terminal,輸入如下指令:

gradlew clean
gradlew install
install 成功

待提示“BUILD SUCCESSFUL”后完成。中間會 提示一些報錯,但是只要成功了就可以無視.
上面OKHttp包是我添加的動態(tài)依賴,沒找到解決這個報錯的方法
再執(zhí)行如下命令上傳文件:

gradlew bintrayUpload
上傳成功

執(zhí)行gradlew bintrayUpload后BUILD SUCCESSFUL就算上傳成功了
然后再打開bintray
點擊剛才創(chuàng)建的組織->maven

微信截圖_20200715221401.png

可以看到已經(jīng)多了一個voice-player的package,打開來看看


微信截圖_20200715221621.png

網(wǎng)頁的樣式和之前搜到的教程已經(jīng)變化很多了,折疊起來其他信息看Maven Info,點擊gradle,可以看到你熟悉的鏈接已經(jīng)生成了.但是現(xiàn)在還不能用.你需要添加Maven庫支持
在項目根目錄build.gradle中添加

repositories {
        google()
        jcenter()
        maven { url('https://dl.bintray.com/alexfugui/maven') }//這個連接是上圖右上角的鏈接
    }

在APP的build.gradle中的
implementation project(path: ':voice-player')
替換成implementation 'com.alex.voice:voice-player:1.0.0'
sync以后,大功告成.
你以為這就完事了?你還沒添加到j(luò)center呢.

第五步 添加到JCenter

因為我添加的時候沒有截圖,以下內(nèi)容都是網(wǎng)上找的其他圖片.

第一步在你上傳成功的項目中->actions->add to jcenter

這里根據(jù)你的 lib 情況選擇,如果不是 pom 項目,只勾選第二項即可。這里group id需要自定義填寫,作為JCenter中的唯一包名標(biāo)識

或者通過https://bintray.com/beta/#/bintray/jcenter添加也是一樣的.

大功告成!等待jcenter審核后,就可以不添加Maven的url使用了

第六 遇到的坑

  1. 我的AS設(shè)置編碼是utf-8,Library中有很多中文注釋,在進行gradlew install這一步的時候會報GBK編碼錯誤,就算我把.java文件使用其他第三方工具轉(zhuǎn)碼成UTF-8以后中文變成亂碼再次重新寫注釋也是編譯錯誤,折騰了半天最后我還是忍痛把注釋都刪除了.
  2. 編譯錯誤,當(dāng)時沒有具體截圖,但是百度以后是缺少環(huán)境變量.我先后安裝了groovy環(huán)境,jre環(huán)境,gradle環(huán)境.
    我現(xiàn)在有的環(huán)境是:JDK12.0.2 + 使用JDK12.0.2生成的jre + groovy 3.0.4 + gradle-6.5.1
    這里可能會有java版本和bintray插件不對應(yīng)的情況,具體自己百度吧
  3. gradlew install時候找不到對應(yīng)的repo/name/userOrg等情況,我一個一個挨個對照,折騰了很久
  4. GBK編碼錯誤這個問題一直沒解決,導(dǎo)致無法添加注釋很難受
    解決方法在Android Studio 修改新建項目的默認(rèn)編碼模式
  5. 昨晚上傳的庫今天居然有9個下載哈哈哈不知道誰這么相信我

已上傳的Demo地址:VoicePlayer
功能還在完善中,文檔待添加
第一次做開源,總想做的更完美點

參考:
快速開發(fā)與封裝可集成的Android Library
Android Studio發(fā)布項目到j(luò)center
感謝超哥

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。