使用Android Studio釋出私有庫到倉庫中心
介紹
當在我們這行積累到一定程度,都會有自己的一些程式碼庫,這些程式碼被多個專案使用。之前的做法是每次到新的專案中,就會把之前的程式碼拷貝過來,升級一下,或許會把一些純java程式碼打包成jar包檔案,這樣專案中只要引用這個jar包就可以了,但是在Android中,我們可能還會用到一些資原始檔,這樣再想打包成jar包就比較麻煩了。再再升級下,我們可以使用Android Studio生成aar檔案,這樣就避免了資原始檔無法打包的困擾。但是這樣每次到新專案,我們還是要將aar檔案拷貝過來,這樣的維護還是需要些成本。本文將闡述如何將私有程式碼庫釋出到maven倉庫中心,只要一句簡單的配置程式碼,即可引用自己的程式碼庫,這樣是不是更好維護,更簡單,逼格更高呢~
建立並配置library專案
作為一個工具類庫,首先,我們需要建立一個library專案
然後在project的build.gradle配置以下兩句程式碼
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
接著在library module的build.gradle增加一些配置:
1、新增外掛
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
2、定義版本
version = "0.0.1"
3、設定專案程式碼地址
這裡我是使用github作為程式碼開源地址
def siteUrl = 'https://github.com/a631855639/BintrayDemo' // project homepage
def gitUrl = 'https://github.com/a631855639/BintrayDemo.git' // project git
4、定義group
這個group定義的名稱將是你之後要引用時會用到的,且要唯一,一般是用包名
group = "com.bintray.library.demo"
5、定義pom並打包aar
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
name 'Helen Code For Android'//一些描述
url siteUrl
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {//開發者資訊
id ''
name ''
email ''
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
6、打包javadoc jar和source jar
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
javadoc {
options{
encoding 'UTF-8'
charSet 'UTF-8'
author true
}
}
artifacts {
archives javadocJar
archives sourcesJar
}
7、上傳到maven倉庫,從local.properties讀取user和apikey
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
repo = "maven"
name = "BintrayLibraryDemo" // project name in maven
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
publish = true,代表當改task執行時,就將其釋出上去,如果為false就不釋出。
這裡你需要在專案的local.properties檔案裡配置bintray.user和bintray.apikey,分別為https://bintray.com/ 網站註冊的使用者名稱和金鑰。
注意:不要將local.properties檔案提交到程式碼開源庫上,防止重要資訊洩露,記得使用忽略檔案將其忽略提交
專案整體配置
以上步驟算是配置好了,剩下就是到https://bintray.com/ 註冊使用者,獲取bintray.user和bintray.apikey了
來個配置程式碼全身照吧!
獲取bintray.user和bintray.apikey
要獲取這兩個值,必須要先到https://bintray.com/ 註冊,然後點選個人頭像—>編輯
如果釋出失敗,可能是因為你的user填錯了。之前,我在註冊的時候,使用的使用者名稱是Helen,但是發現釋出失敗,當我改為小寫helen時,成功了!當你不知道你要填大寫小寫時,你可以看進入你的個人主頁時,地址寫著是什麼就是什麼了,比如我的個人主頁是https://bintray.com/helen。
釋出
配置完以上,最後,開啟命令列執行
gradlew bintrayUnload
或者如下圖
雙擊執行bintrayUnload即可。
然後你會在bintray的個人主頁下方
說明已經上傳成功了,但是還沒完,點選上面的專案連結進入專案主頁,然後將其“Add to JCenter”提交,等待稽核。
等待稽核通過之後(這個差不多等半個小時吧),然後就可以使用了。用法就是使用gradle compile group名+module名+版本號
compile 'com.bintray.library.demo:app:0.01'
升級
我們的類庫也會不斷優化,新增功能,這時候倉庫中心的程式碼也需要升級,這個只要將第二步中的版本號version提高一個版本即可,然後再次執行bintrayUnload。如果沒有將版本號升級,就再次釋出,會報錯
Could not upload to 'https://api.bintray.com/content/helen/maven/BintrayLibraryDemo/0.0.1/com/bintray/library/demo/app/0.0.1/app-0.0.1-javadoc.jar': HTTP/1.1 409 Conflict
提交升級之後,需要等待一段時間。