如何通過Android Studio發(fā)布library到j(luò)Center和Maven Central
【轉(zhuǎn)自stefanli的“如何通過Android Studio發(fā)布library到j(luò)Center和Maven Central”】
【原文鏈接】
在Android Studio里,如果你想引入任何library到自己的項(xiàng)目中衷畦,只需要很簡(jiǎn)單的在module的build.gradle文件中添加一行依賴耍贾。
dependencies { compile 'com.inthecheesefactory.thecheeselibrary:fb-like:0.9.3'}
就是這么簡(jiǎn)單,library已經(jīng)可以在自己的項(xiàng)目中使用妓肢。
這看起來非常酷陪腌,但你也許會(huì)好奇Android Studio是從哪里去抓取到這些library的缆瓣?這篇博客會(huì)詳細(xì)講解如何發(fā)布自己的library,使之能夠與全世界的開發(fā)者分享材泄,這不僅使得世界更加美好沮焕,也讓自己看起來更酷。
Android Studio是從哪里去抓取到這些library的拉宗?
用這個(gè)簡(jiǎn)單的問題開始峦树,我相信不是所有的人都確切的知道Android Studio是從哪里抓取到這些library的。它是通過Google去搜索旦事,然后下載到我們項(xiàng)目中的么魁巩?
好吧,其實(shí)并不復(fù)雜姐浮。Android Studio是從我們定義在build.gradle文件中的Maven資源中心去下載library的谷遂。(Apache Maven是Apache為開發(fā)者提供的一個(gè)發(fā)布libraries的文件服務(wù)工具)÷衾穑基本上埋凯,現(xiàn)在有兩種標(biāo)準(zhǔn)的libraries倉庫,分別是jCenter和Maven Central扫尖。
jcenter
jcenter是一個(gè)托管在bintray.com的資源庫白对。你可以在這里找到需要的資源。為了能在你的項(xiàng)目中使用jcenter换怖,你需要像下面一樣甩恼,在自己的build.gradle文件中定義自己的資源庫。
allprojects {
repositories {
jcenter()
}
}
Maven Central
Maven Central是一個(gè)托管在sonatype.org的資源庫沉颂。你可以在這里找到需要的資源条摸。為了能在你的項(xiàng)目中使用Maven Central,你需要像下面一樣铸屉,在自己的build.gradle文件中定義自己的資源庫钉蒲。
allprojects {
repositories {
mavenCentral()
}
}
請(qǐng)注意,雖然jcenter和Maven Central都是標(biāo)準(zhǔn)android library資源倉庫彻坛,但他們的托管地址完全不同顷啼,它們的內(nèi)容是由不同提供者提供的,而且之間并沒有任何關(guān)聯(lián)昌屉。所以也就可能钙蒙,在jcenter中能夠找到的library,在Maven Central和viceversa中并不能找到间驮。
除了這兩個(gè)標(biāo)準(zhǔn)的資源庫外躬厌,我們也可以定義特殊的資源庫,引入一些開發(fā)者托管在自己服務(wù)器上的library竞帽。Twitter的Fabric.io就完全是托管在自己服務(wù)器上的Maven資源庫扛施。如果你想要使用任何fabric.io上面的library鸿捧,都需要向下面一樣,定義資源庫的url疙渣。
repositories {
maven {
url 'https://maven.fabric.io/public'
}
}
然后你可以通過和下面相似的方法獲取該資源庫里面的任何library匙奴。
dependencies {
compile 'com.crashlytics.sdk.android:crashlytics:2.2.4@aar'
}
但是哪一種方式更好呢,是上傳library到標(biāo)準(zhǔn)的服務(wù)器上昌阿,還是搭建自己的服務(wù)器饥脑?為了讓我們的library能夠被大眾所使用恳邀,建議上傳到標(biāo)準(zhǔn)服務(wù)器上懦冰。其他開發(fā)者只需一行代碼定義依賴名字而無需其他操作。在這篇博客中谣沸,我們只關(guān)注jcenter和Maven Central這兩種能夠給開發(fā)者提供更好方式的資源庫刷钢。
事實(shí)上,android stuido還存在除Maven外的另一種類型的資源庫乳附,叫做Ivy Repository内地,但從我個(gè)人的經(jīng)驗(yàn)來看,我還從未見過任何人使用它赋除,所以這篇博客先簡(jiǎn)單的忽略這種類型阱缓。
Understand jcenter and Maven Central
想知道為什么是兩個(gè)標(biāo)準(zhǔn)資源庫而不是一個(gè)?事實(shí)上举农,它們都擁有相同的職責(zé):托管java/Android library荆针。完全由開發(fā)者決定把library上傳到它們中的一個(gè)或兩個(gè)上。最開始的時(shí)候颁糟,Android Studio選擇Maven Central作為默認(rèn)資源庫航背。一旦你從老版本的Android Studio創(chuàng)建了一個(gè)新的項(xiàng)目,mavenCentral()會(huì)自動(dòng)定義到build.gradle中棱貌。
但是Maven Central存在一個(gè)較大的問題玖媚,即對(duì)開發(fā)者并不友好。上傳library比較困難婚脱。為了能夠做到上傳今魔,開發(fā)者從某種程度上講得具備極客的能力。再考慮到其他一些原因障贸,比如安全問題涡贱,Android Studio團(tuán)隊(duì)決定把默認(rèn)資源庫改為jcenter,所以新版Android Studio創(chuàng)建新項(xiàng)目的時(shí)候惹想,默認(rèn)定義jcenter()而不是mavenCentral()问词。這里列舉了一些他們決定從Maven Central切換jcenter的主要原因:
- jcenter通過CDN傳輸library,這意味著開發(fā)者能夠享受更快的加載速度嘀粱。****- jcenter是世界上最大的java庫激挪,所以能在Maven Central里面找到的辰狡,基本在jcenter里面也能找到。****- 非常容易上傳library到j(luò)center倉庫垄分,沒有必要簽名或做其他一些在Maven Central上很復(fù)雜的操作宛篇。****- 界面友好****- 如果你想上傳library到Maven倉庫,在bintray網(wǎng)站單擊即可(一次性設(shè)置)薄湿。
通過以上的原因以及我自己的經(jīng)驗(yàn)叫倍,我必須說,把jcenter作為默認(rèn)倉庫是非常明智的決定豺瘤。所以吆倦,這邊博客主要關(guān)注jcenter,一旦你把library成功上傳到j(luò)center坐求,那么也可以非常方便的再上傳到Maven Central蚕泽。
gradle是如何把library從倉庫拉取下來的?
當(dāng)我們討論如何把library上傳到j(luò)center之前桥嗤,我們先討論下gradle是如何從倉庫抓取library的须妻。例如,當(dāng)我們像下面這樣在build.gradle里面定義依賴的時(shí)候泛领,library文件是如何下載到你的項(xiàng)目的荒吏。
compile 'com.inthecheesefactory.thecheeselibrary:fb-like:0.9.3'
首先我們得了解library字符串的格式,它包含三個(gè)部分:
GROUP_ID:ARTIFACT_ID:VERSION
以上面的字符串為例:GROUP_ID是com.inthecheesefactory.thecheeselibrary渊鞋,ARTIFACT_ID是fb-like绰更,VERSION是0.9.3GROUP_ID定義了library的組,很可能不同功能的library存在于同一背景下篓像,如果library在相同的組动知,那么它們共享相同的GROUP_ID。通常我們用開發(fā)者的包名加上library的名字作為GROUP_ID员辩,例如com.squareup.picasso盒粮,然后我們?cè)俣x真正的library名作為ARTIFACT_ID。關(guān)于VERSION奠滑,就是版本號(hào)丹皱,雖然它可以是任意字符,但我建議它設(shè)置為x.y.z的格式宋税,如果你愿意摊崭,也可以跟上-beta。這有一些真實(shí)的library例子杰赛,你會(huì)注意到呢簸,每一個(gè)都很容易辨別出library的名字和包名。
dependencies {
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'
}
像上面一樣添加了依賴會(huì)發(fā)生什么呢?很簡(jiǎn)單根时,Gradle會(huì)向Maven倉庫服務(wù)器詢問library是否存在瘦赫,如果存在,則會(huì)返回library的下載地址蛤迎,通常是GROUP_ID/ARTIFACT_ID/VERSION_ID的格式确虱,例如,你可以從
http://jcenter.bintray.com/com/squareup/otto/1.3.7和https://oss.sonatype.org/content/repositories/releases/com/squareup/otto/1.3.7/找到com.squareup:otto:1.3.7的library文件替裆。
然后Android Studio會(huì)下載這些文件到我們的機(jī)器上校辩,再編譯到我們的項(xiàng)目中,就是這樣辆童,沒什么復(fù)雜的宜咒!
我相信,你已經(jīng)很清楚的知道胸遇,從遠(yuǎn)程倉庫拉下來的荧呐,不過是托管在服務(wù)器上的jar或arr格式的文件汉形。相對(duì)于自己去下載這些文件纸镊,單獨(dú)拷貝編譯到自己的項(xiàng)目,這種方式最大的好處是只需要定義一些依賴文本概疆,而不需要其他更多的操作逗威。
了解aar文件格式
等等,我說過這兒有兩種形式的library托管在遠(yuǎn)程倉庫里岔冀,jar和aar凯旭,jar倒是常用的,我相信大家都知道使套,不過罐呼,aar文件又是什么呢?
aar文件是更進(jìn)一步的jar文件侦高,它被創(chuàng)造出來是因?yàn)橐恍〢ndroid Library需要嵌入一些android的特殊文件嫉柴,比如AndroidManifest.xml, Resources, Assets or JNI等jar文件不包含的內(nèi)容。所以aar文件被創(chuàng)造出來解決這些問題奉呛。一般說來计螺,jar只是有著不同結(jié)構(gòu)的zip文件,jar文件被嵌入在aar文件里瞧壮,名為class.jar登馒。aar中余下部分如下:
/AndroidManifest.xml (mandatory)
/classes.jar (mandatory)
/res/ (mandatory)
/R.txt (mandatory)
/assets/ (optional)
/libs/.jar (optional)
/jni/<abi>/.so (optional)
/proguard.txt (optional)
/lint.jar (optional)
正如你所看見的,aar文件是專門為Android設(shè)計(jì)的咆槽,所以這篇博客將會(huì)告訴你如何創(chuàng)建并上傳一個(gè)aar格式的library陈轿。
如何上傳你的library到j(luò)center
到現(xiàn)在,我相信你對(duì)遠(yuǎn)程library倉庫的工作模式已經(jīng)有了基本的了解。現(xiàn)在開始最重要的環(huán)節(jié):上傳過程麦射。目標(biāo)很簡(jiǎn)單,即如何將我們的庫文件上傳到http://jcenter.bintray.com赠堵。一旦我們學(xué)會(huì)了上傳,那么library也就能夠被發(fā)布了法褥。兩個(gè)問題需要關(guān)注:如果創(chuàng)建aar文件以及如何上傳編譯好的文件到遠(yuǎn)程倉庫茫叭。雖然它需要很多步驟,但我必須說半等,這完全不困難揍愁,因?yàn)閎intray已經(jīng)為我們準(zhǔn)備好了一切。你可以通過下面的圖了解整個(gè)過程杀饵。
因?yàn)橛泻芏嗉?xì)節(jié)莽囤,所以我把整個(gè)過程分為了7部分,以便能夠循序漸進(jìn)的描述清楚切距。
Part 1 : 在Bintray上創(chuàng)建一個(gè)包
首先朽缎,你需要在bintray上創(chuàng)建一個(gè)包,為了完成這步谜悟,你需要一個(gè)bintray賬號(hào)并且在網(wǎng)站上創(chuàng)建一個(gè)包话肖。第一步:在bintray.com上注冊(cè)賬號(hào)。第二步:注冊(cè)成功后葡幸,登陸網(wǎng)站點(diǎn)擊maven最筒。
第三步:點(diǎn)擊Add New Package,為你的library創(chuàng)建一個(gè)新的包蔚叨。
第四步:輸入必要的信息
雖然如何命名包名沒有明確的規(guī)則床蜘,但有一些約定:所有字符小寫,單詞間通過“-”號(hào)連接蔑水,比如邢锯,fb-like。一旦上面每一步都完成了搀别,單擊Create Package完成創(chuàng)建丹擎。
第五步:網(wǎng)站會(huì)自動(dòng)重定向到編輯頁面。點(diǎn)擊包名下面的名字可以進(jìn)入具體的信息頁面领曼。
好了鸥鹉,現(xiàn)在你已經(jīng)在bintray上有了自己的Maven倉庫,準(zhǔn)備好上傳自己的library文件了庶骄。
Bintray賬號(hào)的注冊(cè)工作已經(jīng)完成了毁渗,接下來將會(huì)和Maven Central的提供者,Sonatype打交道单刁。
Part 2 : 為Maven Central創(chuàng)建一個(gè)Sonatype賬號(hào)
提示:如果你沒有計(jì)劃上傳library文件到Maven Central灸异,你可以跳過第二部分和第三部分府适。但無論如何,我建議不要跳過肺樟,因?yàn)檫€是有很多的開發(fā)者在用這個(gè)倉庫檐春。就想jcenter一樣,如果你想要上傳你的library到Maven Central么伯,你需要在它的提供者疟暖,也就是Sonatype網(wǎng)站上注冊(cè)一個(gè)賬號(hào)。你所需要知道的是田柔,你必須在Sonatype網(wǎng)站上創(chuàng)建一個(gè)JIRA Issue Tracker的賬號(hào)俐巴。為了完成這一步,請(qǐng)到Sonatype Dashboard注冊(cè)硬爆。一旦你完成注冊(cè)欣舵,你需要請(qǐng)求發(fā)布library到Maven Central。雖然這個(gè)過程可能沒有任何意義(至少對(duì)我來說)缀磕,但你必須在JIRA上創(chuàng)建一個(gè)請(qǐng)求缘圈,讓他們?cè)试S你上次你的library到Maven Central。為了創(chuàng)建一個(gè)問題描述袜蚕,到Sonatype Dashboard網(wǎng)站糟把,通過賬號(hào)登陸,然后點(diǎn)擊頂部的Create按鈕廷没。
填入以下的信息:Project: Community Support - Open Source Project Repository HostingIssue Type: New ProjectSummary: 你library文件的名稱糊饱,例如:Cheese LibraryGroup Id: 填入GROUP_ID的根名稱垂寥,例如:com.inthecheeselibrary颠黎。在你得到批準(zhǔn)之后,每個(gè)以com.inthecheeselibrary開頭的library文件滞项,都會(huì)被允許上傳的遠(yuǎn)程倉庫狭归,例如:com.inthecheeselibrary.somelibProject URL: 填入一個(gè)你準(zhǔn)備用來描述該library的地址,例如:https://github.com/nuuneoi/FBLikeAndroidSCM URL: 源碼管理的地址文判,例如:https://github.com/nuuneoi/FBLikeAndroid.git
保持沒有修改的部分过椎,點(diǎn)擊Create。我們要做的結(jié)束了戏仓,接下來是最難的部分:耐心等待疚宇。大概需要一周的時(shí)間審核,然后才能在Maven Central中訪問自己的library赏殃。
最后要做的是敷待,在Bintray Profile的賬號(hào)選項(xiàng)卡頁面,填入Sonatype OSS的用戶名仁热。
點(diǎn)擊Update榜揖,這個(gè)部分我們就完成了。
Part 3 : 在Bintray上開啟自動(dòng)簽名
正如上面提到的,我們可以通過jcenter上傳一個(gè)library到Maven Central举哟,但前提是思劳,我們需要對(duì)library進(jìn)行簽名。bintray提供一個(gè)自動(dòng)化的工具妨猩,允許通過網(wǎng)絡(luò)接口上傳的library能夠在上傳后自動(dòng)簽名潜叛。第一步是通過命令行,生成一個(gè)key壶硅。(如果使用的是windows钠导,請(qǐng)?jiān)赾ygwin環(huán)境下操作)
gpg --gen-key
這里有一些強(qiáng)制性填充的字段,大部分情況下用默認(rèn)值就可以森瘪,但是對(duì)于一些字段牡属,需要填入你自己的信息,比如扼睬,你的真實(shí)姓名逮栅,密碼等等。一旦key被創(chuàng)建窗宇,調(diào)用下面的命令行措伐,可以看到key的信息。
gpg --list-keys
如果沒有出錯(cuò)军俊,信息會(huì)像下面一樣被展示出來侥加。
pub 2048R/01ABCDEF 2015-03-07
uid Sittiphol Phanvilai <yourmail@email.com>
sub 2048R/98765432 2015-03-07
現(xiàn)在我們需要上傳公鑰到管理中心使它生效。為了完成這一步粪躬,請(qǐng)調(diào)用下面的命令行担败,其中替換PUBLIC_KEY_ID為2048R/后面的8位16進(jìn)制數(shù),在這個(gè)例子中镰官,即為:01ABCDEF提前。
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys PUBLIC_KEY_ID
接下來,通過以下命令泳唠,以ASCII格式導(dǎo)入公鑰和私鑰狈网,請(qǐng)?zhí)鎿Q其中的yourmail@email.com為前面你生成key所使用的email。
gpg -a --export yourmail@email.com > public_key_sender.asc
gpg -a --export-secret-key yourmail@email.com > private_key_sender.asc
打開Bintray的Edit Profile頁面笨腥,點(diǎn)擊GPS Signing拓哺。填入在前面步驟中導(dǎo)出的public_key_sender.asc和private_key_sender.asc文件里面的公鑰和私鑰。
點(diǎn)擊Update保存key脖母。最后一步是開啟自動(dòng)簽名士鸥,到Bintray的主頁,點(diǎn)擊maven镶奉,再點(diǎn)擊Edit础淤。
選中GPG Sign uploaed files automatically的勾選框崭放,開啟自動(dòng)簽名。
點(diǎn)擊Update保存鸽凶,到現(xiàn)在為止币砂,每一個(gè)單獨(dú)的library上傳到Maven倉庫都能夠被自動(dòng)簽名,而且已經(jīng)準(zhǔn)備好一鍵發(fā)布到Maven Central玻侥。請(qǐng)注意决摧,這是一個(gè)一次性行為,將會(huì)被應(yīng)用到以后每一個(gè)創(chuàng)建的library中凑兰。Bintray和Maven Central的部分都已經(jīng)準(zhǔn)備好了掌桩,現(xiàn)在讓我們切換到Android Studio部分。
Part 4 : 準(zhǔn)備Android Studio工程項(xiàng)目
在許多情況下姑食,我們可能在一個(gè)項(xiàng)目里波岛,需要上傳多個(gè)library,也可能不需要音半。所以我建議最好的結(jié)構(gòu)是按照Module來劃分则拷,基本上我建議最少有兩個(gè)Module,一個(gè)應(yīng)用程序的Module曹鸠,一個(gè)包含了你想要上傳到遠(yuǎn)程倉庫源碼的library的Module煌茬。請(qǐng)注意,如果在你的項(xiàng)目里不止包含了一個(gè)library彻桃,請(qǐng)創(chuàng)建另外一個(gè)Module:每一個(gè)library對(duì)應(yīng)一個(gè)Module坛善。
我相信大家都知道如何創(chuàng)建一個(gè)library module,多以我不會(huì)太深入的講這個(gè)部分邻眷。
接下我們需要把bintray的插件應(yīng)用到你的項(xiàng)目中眠屎。要做到這一點(diǎn),我們需要像下面這樣修改project的build.gradle文件中的依賴部分耗溜。
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
}
gradle構(gòu)建工具的版本需要在1.1.2以上组力,因?yàn)橹暗陌姹敬嬖谝粋€(gè)嚴(yán)重的bug。在這個(gè)例子中抖拴,我們選擇使用1.2.3版本。接下來腥椒,我們需要修改local.properties阿宅,定義用于bintray身份認(rèn)證的用戶名和api密鑰,以及密碼笼蛛。
之所以把這些信息放到這個(gè)文件中洒放,是因?yàn)橐恍┟舾行畔ⅲò姹究刂票蹩常粦?yīng)該被共享往湿。幸運(yùn)的是妖异,自從項(xiàng)目被創(chuàng)建,local.properties文件就已經(jīng)被添加了.gitignore领追,所以這些敏感信息不會(huì)意外上傳到git服務(wù)器他膳。
下面是需要添加的配置信息:
bintray.user=YOUR_BINTRAY_USERNAME
bintray.apikey=YOUR_BINTRAY_API_KEY
bintray.gpg.password=YOUR_GPG_PASSWORD
把你在bintray上的用戶名寫到第一行,把你在Edit Profile網(wǎng)頁上绒窑,API Key的信息寫到第二行棕孙。最后一行是你在前面步驟中,用來創(chuàng)建GPG key的密碼些膨。最后保存并關(guān)掉這個(gè)文件蟀俊。
最后需要修改的文件是module的build.gradle文件。打開它并把下面的信息添加到里面订雾。
apply plugin: 'com.android.library'
ext {
bintrayRepo = 'maven'
bintrayName = 'fb-like'
publishedGroupId = 'com.inthecheesefactory.thecheeselibrary'
libraryName = 'FBLike'
artifact = 'fb-like'
libraryDescription = 'A wrapper for Facebook Native Like Button (LikeView) on Android'
siteUrl = 'https://github.com/nuuneoi/FBLikeAndroid'
gitUrl = 'https://github.com/nuuneoi/FBLikeAndroid.git'
libraryVersion = '0.9.3'
developerId = 'nuuneoi'
developerName = 'Sittiphol Phanvilai'
developerEmail = 'sittiphol@gmail.com'
licenseName = 'The Apache Software License, Version 2.0'
licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
allLicenses = ["Apache-2.0"]
}
保持bintrayRepo為現(xiàn)在這個(gè)樣子肢预,改變bintrayName為你自己的包名,修改其他配置來匹配你自己的library信息洼哎。有了上面的腳本误甚,每個(gè)人都可以通過下面一行g(shù)radle腳本使用這個(gè)library。
compile 'com.inthecheesefactory.thecheeselibrary:fb-like:0.9.3'
最后一步是應(yīng)用兩個(gè)腳本谱净,用于創(chuàng)建library文件以及上傳構(gòu)建文件到bintray窑邦,在build.gradle文件的最后添加以下腳本即可(為了方便,我直接把這些文件鏈接到github的服務(wù)器上)壕探。
// Place it at the end of the fileapply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'
現(xiàn)在冈钦,你的項(xiàng)目已經(jīng)設(shè)置并且準(zhǔn)備好了上傳到bintray。
Part 5 : 上傳你的library到bintray空間
現(xiàn)在是時(shí)候上傳你library到你自己的bintray倉庫了李请。首先瞧筛,請(qǐng)切換到Android Studio的Terminal界面。
第一步是檢查代碼的正確性导盅,構(gòu)建library文件(aar较幌,pom,等等)白翻。輸入下面的命令乍炉。
> gradlew install
如果沒有任何錯(cuò)誤,將會(huì)顯示下面的命令行:
BUILD SUCCESSFUL
我們已經(jīng)完成了一半滤馍,接下來需要上傳構(gòu)建文件到bintray剪返,輸入下面的命令行:
> gradlew bintrayUpload
如果顯示下面這行从橘,那就成功了:
SUCCESSFUL
在bintray網(wǎng)站的界面上檢查你的包,你會(huì)發(fā)現(xiàn)版本區(qū)域有了變化。
點(diǎn)擊它切換到Files頁面哎壳,你會(huì)看到上傳的library文件聂渊。
恭喜妒挎,現(xiàn)在你的library已經(jīng)在線上,可以被任何人使用祠挫。但是,到你的library還只在Maven倉庫里悼沿,而沒有在jcenter等舔,所以任何想要使用你的library的人,都必須像下面這樣定義:
repositories {
maven {
url 'https://dl.bintray.com/nuuneoi/maven/'
}
}
...
dependencies {
compile 'com.inthecheesefactory.thecheeselibrary:fb-like:0.9.3'
}
你可以從bintray網(wǎng)站界面上显沈,找到你自己Maven倉庫的url软瞎,也可以簡(jiǎn)單的用你的bintray用戶名替換nuuneoi。我建議你進(jìn)入網(wǎng)頁拉讯,看看具體是怎么回事涤浇。
正如上面所提到的,讓開發(fā)者定義這么復(fù)雜的配置魔慷,并非是發(fā)布library最好的方式只锭,想象一下,如果要添加10個(gè)library院尔,也需要添加10個(gè)url么蜻展?這簡(jiǎn)直是噩夢(mèng),所以邀摆,為了更好的使用纵顾,讓我們把library從自己的倉庫轉(zhuǎn)移到j(luò)center。
Part 6 : 同步bintray上的用戶倉庫到j(luò)center
同步library到j(luò)center非常的簡(jiǎn)單栋盹,只需要打開網(wǎng)頁點(diǎn)擊Add to JCenter施逾。
不需要其他額外操作,點(diǎn)擊Send就可以了例获。
接下來我們什么也不需要做汉额,等待兩三個(gè)小時(shí),讓bintray團(tuán)隊(duì)通過我們的請(qǐng)求就可以了榨汤。一旦審核通過蠕搜,你將會(huì)收到一封郵件,提示信息有改變∈蘸荆現(xiàn)在讓我們回到網(wǎng)頁妓灌,你可以看到在Linked To部分有所改變。
到現(xiàn)在為止啼器,任何使用jcenter的開發(fā)者旬渠,只需要一行代碼就可以使用我們的library了。
compile 'com.inthecheesefactory.thecheeselibrary:fb-like:0.9.3'
想要在jcenter上查看你的library文件端壳?你可以通過訪問http://jcenter.bintray.com,通過library的group id和artifact id來匹配瀏覽枪蘑。在這個(gè)例子里损谦,應(yīng)該是:com -> inthecheesefactory -> thecheeselibrary -> fb-like -> 0.9.3岖免。
請(qǐng)注意,鏈接到j(luò)center是一次性行為照捡。到現(xiàn)在為止颅湘,如果你的包做了任何的修改,例如栗精,上傳了新版本的library闯参,刪掉了就版本等等。這些改變也會(huì)影響到j(luò)center悲立。所以當(dāng)你的倉庫和jcenter存在差異的時(shí)候鹿寨,你應(yīng)該花2-3分鐘同步這些改變到j(luò)center。
請(qǐng)注意薪夕,如果你決定刪掉整個(gè)包脚草,放置在jcenter倉庫里面的library不會(huì)被刪除,它們就像僵尸文件一樣原献,沒有人可以刪除馏慨。所以我建議,如果你想要?jiǎng)h掉整個(gè)包姑隅,在移除之前写隶,請(qǐng)先從網(wǎng)站上刪掉每一個(gè)單獨(dú)的版本。
Part 7 : 上傳library到Maven Central
不是所有的Android開發(fā)者都在使用jcenter讲仰。還是有一部分開發(fā)者在使用mavenCentral()慕趴,所以,讓我們把library也上傳到Maven Central叮盘。為了把library從jcenter提交到Maven Central秩贰,有兩個(gè)前提是需要滿足的:1)二進(jìn)制包必須已經(jīng)連接到j(luò)center2)Maven Central上的倉庫已經(jīng)批準(zhǔn)開放如果你已經(jīng)有了這些資格,那么提交library文件到Maven Central也是非常的簡(jiǎn)單柔吼。僅僅需要點(diǎn)擊Maven Central連接到包的詳細(xì)頁面毒费。
通過Sonatype的用戶名和密碼進(jìn)入頁面,點(diǎn)擊Sync愈魏。
如果同步成功觅玻,將會(huì)顯示最新的同步狀態(tài),如果失敗培漏,也會(huì)顯示最新的同步失敗信息溪厘。你必須解決這些問題,因?yàn)樯蟼鞯組aven Central是非常嚴(yán)格的牌柄,比如“+”號(hào)不能用于版本庫依賴關(guān)系的定義畸悬。一旦完成,你可以在Maven Central Repository 找到自己的library文件珊佣,匹配規(guī)則同上蹋宦,在這個(gè)例子中披粟,應(yīng)該是:com -> inthecheesefactory -> thecheeselibrary -> fb-like -> 0.9.3。