在前一陣子的某一天淘太,我不小心撞上了JitPack的版本升級而導(dǎo)致的JitPack炸了考榨,于是無法把自己的庫發(fā)布成有效的開源庫已日,無奈之下描姚,我終于下定決心轉(zhuǎn)戰(zhàn)隨緣發(fā)布的JCenter,開啟了我為了發(fā)布放棄高數(shù)松捉,放棄大物夹界,放棄現(xiàn)代,放棄離散的漫長踩坑之路隘世。可柿。鸠踪。
P.S.
- 因?yàn)橹皼]有發(fā)布過開源庫,所以這篇文章更適合小白复斥。营密。。吧目锭,至于大佬嘛评汰。。痢虹。(額被去,你懂)
-
在開啟踩坑之路之前,我們要學(xué)會科(如)學(xué)(何)上(翻)網(wǎng)(墻)世分。
(不然的話GitHub和Bintray能卡死你)
踩坑一:在Bintray上注冊(這個(gè)真的是血淚史啊编振。。臭埋。務(wù)必看完再注冊)
因?yàn)樵贐inatry版本升級后在注冊界面會有一個(gè)巨大的綠色框框踪央,我想也沒想就注冊了,結(jié)果瓢阴,發(fā)現(xiàn)自己注冊出來了一個(gè)團(tuán)隊(duì)畅蹂,但是你要是創(chuàng)建個(gè)人的開源庫就要個(gè)人的賬號,注冊在右上角的sign in
H倏帧R盒薄!注冊地址點(diǎn)這里5隆I倨帷!
向前邁進(jìn):
注冊完了以后要生成自己的maven庫硼被,這個(gè)庫用來存放你的項(xiàng)目(閑扯一句示损,就算你的項(xiàng)目與JCenter注定無緣,不怕嚷硫,只要在gradlel的build里面加上你maven庫的地址再加上你庫的依賴检访,依然可以使用這個(gè)庫)
踩坑二:maven的m的大小寫
你的庫的類型一定要選Maven名字一定要叫maven(因?yàn)锳S上傳Library時(shí)會默認(rèn)上傳到名叫maven類型為Maven的庫)
向前邁進(jìn):
新建完maven庫就要開始新建上傳到Bintray的Library了,懷著無比激動(dòng)的心情想著自己很快就有第一個(gè)開源庫了,然而事實(shí)證明之前的都在熱身仔掸,這才是開始踩坑的血淚史脆贵。。起暮。
踩坑三:如何新建Library以及Library下面該放些什么
(唔卖氨。。。接下來我的時(shí)間軸會有點(diǎn)混亂)我按照網(wǎng)上的流程寫完了gradle里面的配置后双泪,無比憧憬的等待Bintray審核通過的郵件持搜,等了大概兩天吧密似,終于收到了成功加入JCenter的郵件焙矛,然后我把依賴加到項(xiàng)目里面,gradle的build也通過了残腌,但是在Activity里面并找不到自己的類村斟,后來某位大佬終于告訴了我真相:
把你想上傳的東西都要加在自己新建的Library里,而不是app里面(切到project模式可以看見)抛猫,包括你的想上傳類蟆盹,如果你的類有自己定義的屬性或者用到了app/src/res/values的文件,也要一并加到library/src/res/values里面闺金,因?yàn)殚_源庫是不會上傳你app里的內(nèi)容逾滥。
那接下來我們就跳過Library里面類什么都沒有的version1,以及default-pom.xml莫名無法生成的version2(中間會稍微提一下解決方法)败匹,直接到成功發(fā)布的version3好了.P.S.如果AS在每次打開時(shí)都會在右上角提醒你更新的話(老版的settings里面沒有Android SDK也很不方便)寨昙,先更新吧,因?yàn)槲覀兘酉聛淼呐渲枚加玫氖亲钚碌陌姹鞠颇叮绻峦晏蚰模痔嵝涯愀翽lugin也一起更新吧
如果在更新時(shí)是這個(gè)報(bào)錯(cuò),建議你去設(shè)置網(wǎng)絡(luò)代理槽棍,這個(gè)網(wǎng)上的解決方案很多捉蚤,或者看我的另一篇博客(正在更),我就不贅述了炼七。缆巧。。
繼續(xù)向前:
新建Library豌拙。右鍵點(diǎn)application陕悬,然后選New->Moudle->(在彈出來的提示框里選)Android Library就可以了。
至于Library的名字姆蘸,你隨意吧墩莫,但是別起和你application很像的名字,也別起和你項(xiàng)目沒什么關(guān)系的名字逞敷,因?yàn)間radle依賴?yán)锩鏁幸徊糠质荓ibrary的名字狂秦。
這里我講解一下Gradle依賴的每一部分的來歷:
- 首先把你要傳的類放在你Library->src->main->java件夾的下面(注意,我切的是Project的模式)推捐。
- 如果你的類有自定義的屬性裂问,要把相應(yīng)的attrs.xml文件移到你Library->src->res->values文件夾下面(如果你的類涉及到app中values的colors什么什么的文件,建議也一起加到你Library下面,在Library中加Values文件夾下面的文件時(shí)堪簿,最好新建痊乾,不要去把a(bǔ)pp中的拖到Library里面,因?yàn)锽uild的時(shí)候可能報(bào)錯(cuò))
- 最后我們我們把這些都準(zhǔn)備好后椭更,就可以Share Project On GitHub了哪审。當(dāng)然了,至于怎么在AS上把項(xiàng)目推到GitHub上我就不多說了虑瀑,網(wǎng)上搜一搜教程很多的湿滓,當(dāng)你上傳成功以后你就會看見你AS的右上角會有一個(gè)上傳成功的提示,這個(gè)時(shí)候你就可以去你的GitHub上看你的項(xiàng)目了
- 至于我gradle里免得配置基本上都是參考的這篇博客的: AndroidStuio快速發(fā)布開源項(xiàng)目到Jcenter/Bintray.那下面我就直接貼代碼嘍舌狗。
- 配置項(xiàng)目的gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
// 添加下面兩行代碼即可叽奥。
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
//就上面的這兩行
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
-
配置Library里面的gradle文件(務(wù)必仔細(xì)閱讀注釋,部分個(gè)人信息的修改都寫在了注釋里了痛侍!)
apply plugin: 'com.android.library' // 這里添加下面兩行代碼朝氓。 apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray' android { compileSdkVersion 23 buildToolsVersion "23.0.3" resourcePrefix "andserver_res_" defaultConfig { // applicationId "com.yanzhenjie.andserver.sample" // 這一行要?jiǎng)h除, 因?yàn)閘ibrary不允許有applicationId主届。 minSdkVersion 8 targetSdkVersion 23 versionCode 1 versionName '1.0.1' } } dependencies { // 如果你的library有依賴別的jar赵哲,這里要把jar依賴進(jìn)來。 compile fileTree(dir: 'libs', includes: ['*.jar']) } // 項(xiàng)目引用的版本號岂膳,比如compile // 'com.yanzhenjie:andserver:1.0.1'中的1.0.1就是這里配置的誓竿。 version = "1.0.1" // 定義兩個(gè)鏈接,下面會用到谈截。 def siteUrl = 'https://github.com/yanzhenjie/AndServer' // 項(xiàng)目主頁筷屡。 def gitUrl = 'git@github.com:yanzhenjie/AndServer.git' // Git倉庫的url。 // 唯一包名簸喂,比如compile 'com.yanzhenjie:andserver:1.0.1'中的 com.yanzhenjie就是這里配置的毙死。 group = "com.yanzhenjie" install { repositories.mavenInstaller { // 生成pom.xml和參數(shù) pom { project { packaging 'aar' // 項(xiàng)目描述,復(fù)制我的話喻鳄,這里需要修改扼倘。 name 'AndServer For Android'// 可選,項(xiàng)目名稱除呵。 description 'The Android build the framework of the Http server.'// 可選再菊,項(xiàng)目描述。 url siteUrl // 項(xiàng)目主頁颜曾,這里是引用上面定義好纠拔。 // 軟件開源協(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 'yanzhenjie' // 開發(fā)者的id。 name 'yanzhenjie' // 開發(fā)者名字劝萤。 email 'smallajax@foxmail.com' // 開發(fā)者郵箱渊涝。 } } // SCM,復(fù)制我的稳其,這里不需要修改驶赏。 scm { connection gitUrl // Git倉庫地址。 developerConnection gitUrl // Git倉庫地址既鞠。 url siteUrl // 項(xiàng)目主頁。 } } } } } // 生成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 // 忽略注釋語法錯(cuò)誤洒敏,如果用jdk1.8你的注釋寫的不規(guī)范就編譯不過。 } // 生成javaDoc的jar疙驾,不需要修改凶伙。 task javadocJar(type: Jar, dependsOn: javadoc) { classifier = 'javadoc' from javadoc.destinationDir } artifacts { archives javadocJar archives sourcesJar } 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" // 上傳到maven庫函荣。(這里要特別注意,如果寫了maven報(bào)404錯(cuò)誤扳肛,請?jiān)赽intray創(chuàng)建一個(gè)倉庫傻挂,這里填改成你創(chuàng)建的倉庫的名字,如何創(chuàng)建請看下圖挖息。) name = "andserver" // 發(fā)布到Bintray上的項(xiàng)目名字金拒,這里的名字不是compile 'com.yanzhenjie:andserver:1.0.1'中的andserver。 userOrg = 'bintray_user' // Bintray的用戶名套腹。 websiteUrl = siteUrl vcsUrl = gitUrl licenses = ["Apache-2.0"] publish = true // 是否是公開項(xiàng)目绪抛。 } }
說一下可能有疑問的地方:
-
APIKey和user存放和讀取:
因?yàn)槲覀兩蟼黜?xiàng)目到github上的時(shí)候會把gradle文件傳上去电禀,所以不要把帳號密碼的信息直接寫在這里幢码,寫在local.properties中,這里動(dòng)態(tài)讀取鞭呕。
- 那么問題來了蛤育,apikey在哪里找呢還有上面的git倉庫又在哪里找呢宛官?
先說一下apikey:
-
git倉庫地址:
首先打開你項(xiàng)目在GitHub里的頁面,然后點(diǎn)左邊的一個(gè)綠色的一個(gè)Clone or download的框框,然后把它切換到SSH瓦糕,這時(shí)現(xiàn)實(shí)的就是你git倉庫的地址
把Library上傳到Bintray上
- 首先我建議把你的項(xiàng)目在AS上再朝GitHub那邊Commit and Push一次底洗,然后就可以準(zhǔn)備傳到Bintray
- 完成了以后,打開AS的Terminal控制臺咕娄,在里面輸入這兩句(分開輸)
gradew install //系統(tǒng)配置gradle的用戶環(huán)境
gradew bintrayUpload //上傳到Bintray
或者在AS的右邊有一個(gè)Gradle,用里面的插件bintrayUpload
來上傳也可以亥揖,但是要切到gradle控制臺里看是否BUILD SUCCESSFUL.
(感覺命令行更好用些)
去你Bintray的maven倉庫下進(jìn)行確認(rèn)是否上傳成功
如果你到Bintray上發(fā)現(xiàn)你的項(xiàng)目存在,但是下面沒有Gradle的依賴圣勒,大概就像這樣:
正常的庫
不正常的庫(假裝有圖)
這個(gè)费变。。圣贸。由于換電腦的原因挚歧,之前留的圖片全都沒備份就把上一個(gè)電腦的系統(tǒng)重裝了(啊啊啊,暴風(fēng)式哭泣吁峻。滑负。。
總之就是用含,上面那張圖的最下面的gradle可以復(fù)制的一段代碼消失了矮慕,沒有可以導(dǎo)入的庫的代碼
如果有可復(fù)制的依賴代碼,那么說明你的庫就已經(jīng)上傳成功啦啄骇,要是沒有的話建議去看一下Android Studio 的gradle控制臺在run的時(shí)候有沒有報(bào)錯(cuò)痴鳄,比如說哪一個(gè)文件沒有生成或者生成的時(shí)候出現(xiàn)了問題之類的。
最后一步:添加到j(luò)center,提交給管理員審核
最后一步最關(guān)鍵的審核你和管理員的緣分(哈哈哈缸夹,開玩笑的)其實(shí)我感覺我都還好痪寻,沒遇到傳說中審核沒通過的事情,基本上提交了以后等一陣子(一般是1~3天都會有回復(fù)明未,如果沒有通過我記得會給原因槽华。。趟妥。吧)
提交步驟很簡單猫态,在頁面左側(cè)有一個(gè) Linked to(0), 然后你只要點(diǎn)下面的Add to JCenter 按鈕就可以,然后在彈出的提交界面寫上對應(yīng)的信息就好啦披摄,然后就可以等管理員審核過后給你在Binary上綁定的郵箱里面發(fā)通知郵件咯
啰嗦一些可能遇見的小問題
如果報(bào)錯(cuò)了建議先去看gradle控制臺的運(yùn)行記錄亲雪,看里面有沒有什么異常
-
關(guān)于default-pom.xml莫名無法生成 :
這一個(gè)問題我一般是直接刪掉之前放開源庫相應(yīng)代碼的package,然后直接新建一個(gè)package疚膊,名字要和之前的package一樣义辕,但是在build.gradle 里面的version(即版本號)要改一個(gè)新的版本號,然后也是上面的步驟再重復(fù)一遍寓盗。但是在有一篇博客里提到了關(guān)于default-pom.xml無法生成的解決方法灌砖,要是嫌上面的方法麻煩的話璧函,可以看一下解決方法(我沒有試過)。
然后基本上就是這些啦基显,要是還有什么為問題的話可以在評論區(qū)留言呀蘸吓。
這是我第一次寫博客,啰里八嗦說了一大堆撩幽,措辭也要改進(jìn)库继,而且自己也拖了好久,唉窜醉,感覺自己好菜啊宪萄,如果有什么不足之處希望大家直接說好了,我是一個(gè)耿直girl榨惰,不會介意的拜英,最后就是蟹蟹大家能一直看到最后,又聽我啰里八嗦一大堆读串。
哈哈(尬笑