介紹如何將自己的項(xiàng)目上傳到JCenter摹量。
前言
我們經(jīng)常在Android的gradle文件中看到這些compile腳本,這些腳本其實(shí)就是因?yàn)橹皫?kù)的開(kāi)發(fā)者把對(duì)應(yīng)庫(kù)的jar或aar文件放到了遠(yuǎn)程服務(wù)器上,所以我們可以通過(guò)compile進(jìn)行拉取甥绿。
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是什么
因?yàn)锳ndroidLibrary一般需要內(nèi)置一些Android特定文件,比如Manifest,Resources脚囊,Assets或者JNI等超出jar文件標(biāo)準(zhǔn)的格式。
jar包是被嵌入在aar文件包中的一部分桐磁。
排布規(guī)則
compile后面的字符串排布規(guī)則是
GROUP_ID:ARTIFACT_ID:VERSION
GROUP_ID
通常用開(kāi)發(fā)者的包名進(jìn)行命名悔耘。
很有可能同一個(gè)上下文中有好幾個(gè)library,這些可以共享同一個(gè)GROUP_ID
ARTIFACT_ID
定義library的真實(shí)名字我擂,比如picasso
VERSION
版本號(hào)衬以,一般是x.x.x格式
Android項(xiàng)目準(zhǔn)備
以一個(gè)簡(jiǎn)單的demo為例缓艳,項(xiàng)目地址在
https://github.com/hgDendi/AndroidJCenterDemo
是一個(gè)HelloWorld項(xiàng)目,其中字符串來(lái)自于mylib module下的MyLib抽象類的靜態(tài)方法看峻。
mylib也是我們這次需要上傳到JCenter的類阶淘。
[圖片上傳失敗...(image-a4b23-1510618281773)]
Module劃分
一般需要把需要上傳的庫(kù)作為一個(gè)獨(dú)立的module,即1 module per 1 library互妓。
一般分為庫(kù)的模塊和使用demo模塊溪窒。
如果想要有一個(gè)以上的庫(kù),請(qǐng)劃分多個(gè)module冯勉。
比如如下的項(xiàng)目結(jié)構(gòu)澈蚌。[圖片上傳失敗...(image-ff756-1510618281774)]
bintray
注冊(cè)賬號(hào),登錄bintray.com灼狰。
新建倉(cāng)庫(kù)
在個(gè)人管理界面點(diǎn)擊“Add New Repository”
[圖片上傳失敗...(image-3108f-1510618281774)]
然后創(chuàng)建一個(gè)Maven倉(cāng)庫(kù)
[圖片上傳失敗...(image-9d5e82-1510618281774)]
創(chuàng)建成功之后點(diǎn)擊"Create New Package"
[圖片上傳失敗...(image-2c9ca8-1510618281774)]
輸入對(duì)應(yīng)信息惜浅,其中Website和VersionControl可以填寫(xiě)github地址,issue填寫(xiě)github的issue地址
[圖片上傳失敗...(image-6992a7-1510618281774)]
點(diǎn)擊CreatePackage伏嗜,你在Bintray上的Maven服務(wù)器就已經(jīng)創(chuàng)建成功了坛悉。
項(xiàng)目文件準(zhǔn)備
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中加入用戶信息。
因?yàn)間itignore自動(dòng)忽略local.properties承绸,所以私人信息放在這里是比較安全的裸影。
bintray.user=[...]
bintray.apikey=[...]
bintray.gpg.password=[...]
apikey可以在EditProfile里看到
[圖片上傳失敗...(image-3526b1-1510618281774)]
module的build.gradle
根據(jù)上面步驟中的信息,在lib module的build.gradle文件中增加信息军熏。
apply plugin: 'com.android.library'
ext {
// 剛剛創(chuàng)建的倉(cāng)庫(kù)名
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會(huì)是
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'
上傳代碼
執(zhí)行g(shù)radlew命令將lib上傳
./gradlew install
./gradlew bintrayUpload
這時(shí)候登錄bintray,就可以看到上傳結(jié)果了荡澎。
[圖片上傳失敗...(image-652553-1510618281774)]
同步到j(luò)center
此時(shí)代碼還是只在你的maven倉(cāng)庫(kù)均践,并未同步到JCenter中。
這時(shí)候點(diǎn)進(jìn)你的package摩幔,點(diǎn)擊AddToJCenter就可以將代碼上傳到JCenter彤委。
[圖片上傳失敗...(image-2332df-1510618281774)]
上傳成功
同步到JCenter有時(shí)候可能需要半天到一天的時(shí)間。
同步成功后或衡,便可以使用compile從服務(wù)器拉取lib了焦影。
dependencies {
// implementation project(':mylib')
compile 'com.hgDendi:mylib:1.0.0'
}