介紹如何將自己的專案上傳到JCenter。
前言
我們經常在Android的gradle檔案中看到這些compile指令碼,這些指令碼其實就是因為之前庫的開發者把對應庫的jar或aar檔案放到了遠端伺服器上,所以我們可以通過compile進行拉取。
compile 'com.android.support:recyclerview-v7:27.0.0'
compile 'com.squareup:otto:1.3.7'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.squareup.okhttp:okhttp:2.4.0'
compile 'com.squareup.retrofit:retrofit:1.9.0'複製程式碼
AAR是什麼
因為AndroidLibrary一般需要內建一些Android特定檔案,比如Manifest,Resources,Assets或者JNI等超出jar檔案標準的格式。
jar包是被嵌入在aar檔案包中的一部分。
排布規則
compile後面的字串排布規則是
GROUP_ID:ARTIFACT_ID:VERSION
GROUP_ID
通常用開發者的包名進行命名。
很有可能同一個上下文中有好幾個library,這些可以共享同一個GROUP_ID
ARTIFACT_ID
定義library的真實名字,比如picasso
VERSION
版本號,一般是x.x.x格式
Android專案準備
以一個簡單的demo為例,專案地址在
是一個HelloWorld專案,其中字串來自於mylib module下的MyLib抽象類的靜態方法。
mylib也是我們這次需要上傳到JCenter的類。
Module劃分
一般需要把需要上傳的庫作為一個獨立的module,即1 module per 1 library。
一般分為庫的模組和使用demo模組。
如果想要有一個以上的庫,請劃分多個module。
比如如下的專案結構。
bintray
註冊賬號,登入bintray.com。
新建倉庫
在個人管理介面點選“Add New Repository”
然後建立一個Maven倉庫
建立成功之後點選"Create New Package"
輸入對應資訊,其中Website和VersionControl可以填寫github地址,issue填寫github的issue地址
點選CreatePackage,你在Bintray上的Maven伺服器就已經建立成功了。
專案檔案準備
Project#gradle
在Project的gradle檔案中加入依賴
buildscript {
...
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
}
}複製程式碼
local.properties
在local.properties中加入使用者資訊。
因為gitignore自動忽略local.properties,所以私人資訊放在這裡是比較安全的。
bintray.user=[...]
bintray.apikey=[...]
bintray.gpg.password=[...]複製程式碼
apikey可以在EditProfile裡看到
module的build.gradle
根據上面步驟中的資訊,在lib module的build.gradle檔案中增加資訊。
apply plugin: 'com.android.library'
ext {
// 剛剛建立的倉庫名
bintrayRepo = 'testMaven'
// package的名字
bintrayName = 'mylib'
// owner的groupID
publishedGroupId = 'com.hgDendi.test'
libraryName = 'MyLib'
artifact = 'mylib'
libraryDescription = 'lib test demo'
siteUrl = 'https://github.com/hgDendi/AndroidJCenterDemo'
gitUrl = 'https://github.com/hgDendi/AndroidJCenterDemo.git'
libraryVersion = '0.0.1'
developerId = 'dendi'
developerName = 'Dendi Chan'
developerEmail = 'hg.dendi@gmail.com'
licenseName = 'The MIT License'
licenseUrl = 'https://rem.mit-license.org'
allLicenses = ["MIT"]
}複製程式碼
如上所示,則最後生成的gradle script會是
compile 'com.hgdendi.test:mylib:0.0.1'複製程式碼
增加指令碼依賴
在lib module的build.gradle檔案下增加一行apply from
apply from: 'https://raw.githubusercontent.com/hgDendi/AndroidJCenterDemo/master/bintray.gradle'
apply from: 'https://raw.githubusercontent.com/hgDendi/AndroidJCenterDemo/master/maveninstall.gradle'複製程式碼
上傳程式碼
執行gradlew命令將lib上傳
./gradlew install
./gradlew bintrayUpload複製程式碼
這時候登入bintray,就可以看到上傳結果了。
同步到jcenter
此時程式碼還是隻在你的maven倉庫,並未同步到JCenter中。
這時候點進你的package,點選AddToJCenter就可以將程式碼上傳到JCenter。
上傳成功
同步到JCenter有時候可能需要半天到一天的時間。
同步成功後,便可以使用compile從伺服器拉取lib了。
dependencies {
// implementation project(':mylib')
compile 'com.hgDendi:mylib:1.0.0'
}複製程式碼
庫