在前一陣子的某一天,我不小心撞上了JitPack的版本升級而導致的JitPack炸了,于是無法把自己的庫發布成有效的開源庫,無奈之下,我終于下定決心轉戰隨緣發布的JCenter,開啟了我為了發布放棄高數,放棄大物,放棄現代,放棄離散的漫長踩坑之路。。。
P.S.
- 因為之前沒有發布過開源庫,所以這篇文章更適合小白。。。吧,至于大佬嘛。。。(額,你懂)
-
在開啟踩坑之路之前,我們要學會科(如)學(何)上(翻)網(墻)。
(不然的話GitHub和Bintray能卡死你)
踩坑一:在Bintray上注冊(這個真的是血淚史啊。。。務必看完再注冊)
因為在Binatry版本升級后在注冊界面會有一個巨大的綠色框框,我想也沒想就注冊了,結果,發現自己注冊出來了一個團隊,但是你要是創建個人的開源庫就要個人的賬號,注冊在右上角的sign in
?。。?a target="_blank" rel="nofollow">注冊地址點這里!??!
向前邁進:
注冊完了以后要生成自己的maven庫,這個庫用來存放你的項目(閑扯一句,就算你的項目與JCenter注定無緣,不怕,只要在gradlel的build里面加上你maven庫的地址再加上你庫的依賴,依然可以使用這個庫)
踩坑二:maven的m的大小寫
你的庫的類型一定要選Maven名字一定要叫maven(因為AS上傳Library時會默認上傳到名叫maven類型為Maven的庫)
向前邁進:
新建完maven庫就要開始新建上傳到Bintray的Library了,懷著無比激動的心情想著自己很快就有第一個開源庫了,然而事實證明之前的都在熱身,這才是開始踩坑的血淚史。。。
踩坑三:如何新建Library以及Library下面該放些什么
(唔。。。接下來我的時間軸會有點混亂)我按照網上的流程寫完了gradle里面的配置后,無比憧憬的等待Bintray審核通過的郵件,等了大概兩天吧,終于收到了成功加入JCenter的郵件,然后我把依賴加到項目里面,gradle的build也通過了,但是在Activity里面并找不到自己的類,后來某位大佬終于告訴了我真相:
把你想上傳的東西都要加在自己新建的Library里,而不是app里面(切到project模式可以看見),包括你的想上傳類,如果你的類有自己定義的屬性或者用到了app/src/res/values的文件,也要一并加到library/src/res/values里面,因為開源庫是不會上傳你app里的內容。
那接下來我們就跳過Library里面類什么都沒有的version1,以及default-pom.xml莫名無法生成的version2(中間會稍微提一下解決方法),直接到成功發布的version3好了.P.S.如果AS在每次打開時都會在右上角提醒你更新的話(老版的settings里面沒有Android SDK也很不方便),先更新吧,因為我們接下來的配置都用的是最新的版本,如果更新完,又提醒你更新Plugin也一起更新吧
如果在更新時是這個報錯,建議你去設置網絡代理,這個網上的解決方案很多,或者看我的另一篇博客(正在更),我就不贅述了。。。
繼續向前:
新建Library。右鍵點application,然后選New->Moudle->(在彈出來的提示框里選)Android Library就可以了。
至于Library的名字,你隨意吧,但是別起和你application很像的名字,也別起和你項目沒什么關系的名字,因為gradle依賴里面會有一部分是Library的名字。
這里我講解一下Gradle依賴的每一部分的來歷:
- 首先把你要傳的類放在你Library->src->main->java件夾的下面(注意,我切的是Project的模式)。
- 如果你的類有自定義的屬性,要把相應的attrs.xml文件移到你Library->src->res->values文件夾下面(如果你的類涉及到app中values的colors什么什么的文件,建議也一起加到你Library下面,在Library中加Values文件夾下面的文件時,最好新建,不要去把app中的拖到Library里面,因為Build的時候可能報錯)
- 最后我們我們把這些都準備好后,就可以Share Project On GitHub了。當然了,至于怎么在AS上把項目推到GitHub上我就不多說了,網上搜一搜教程很多的,當你上傳成功以后你就會看見你AS的右上角會有一個上傳成功的提示,這個時候你就可以去你的GitHub上看你的項目了
- 至于我gradle里免得配置基本上都是參考的這篇博客的: AndroidStuio快速發布開源項目到Jcenter/Bintray.那下面我就直接貼代碼嘍。
- 配置項目的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文件(務必仔細閱讀注釋,部分個人信息的修改都寫在了注釋里了!)
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" // 這一行要刪除, 因為library不允許有applicationId。 minSdkVersion 8 targetSdkVersion 23 versionCode 1 versionName '1.0.1' } } dependencies { // 如果你的library有依賴別的jar,這里要把jar依賴進來。 compile fileTree(dir: 'libs', includes: ['*.jar']) } // 項目引用的版本號,比如compile // 'com.yanzhenjie:andserver:1.0.1'中的1.0.1就是這里配置的。 version = "1.0.1" // 定義兩個鏈接,下面會用到。 def siteUrl = 'https://github.com/yanzhenjie/AndServer' // 項目主頁。 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和參數 pom { project { packaging 'aar' // 項目描述,復制我的話,這里需要修改。 name 'AndServer For Android'// 可選,項目名稱。 description 'The Android build the framework of the Http server.'// 可選,項目描述。 url siteUrl // 項目主頁,這里是引用上面定義好。 // 軟件開源協議,現在一般都是Apache License2.0吧,復制我的,這里不需要修改。 licenses { license { name 'The Apache Software License, Version 2.0' url 'http://www.apache.org/licenses/LICENSE-2.0.txt' } } //填寫開發者基本信息,復制我的,這里需要修改。 developers { developer { id 'yanzhenjie' // 開發者的id。 name 'yanzhenjie' // 開發者名字。 email 'smallajax@foxmail.com' // 開發者郵箱。 } } // SCM,復制我的,這里不需要修改。 scm { connection gitUrl // Git倉庫地址。 developerConnection gitUrl // Git倉庫地址。 url siteUrl // 項目主頁。 } } } } } // 生成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 // 忽略注釋語法錯誤,如果用jdk1.8你的注釋寫的不規范就編譯不過。 } // 生成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報404錯誤,請在bintray創建一個倉庫,這里填改成你創建的倉庫的名字,如何創建請看下圖。) name = "andserver" // 發布到Bintray上的項目名字,這里的名字不是compile 'com.yanzhenjie:andserver:1.0.1'中的andserver。 userOrg = 'bintray_user' // Bintray的用戶名。 websiteUrl = siteUrl vcsUrl = gitUrl licenses = ["Apache-2.0"] publish = true // 是否是公開項目。 } }
說一下可能有疑問的地方:
-
APIKey和user存放和讀?。?/strong>
因為我們上傳項目到github上的時候會把gradle文件傳上去,所以不要把帳號密碼的信息直接寫在這里,寫在local.properties中,這里動態讀取。
- 那么問題來了,apikey在哪里找呢還有上面的git倉庫又在哪里找呢?
先說一下apikey:
-
git倉庫地址:
首先打開你項目在GitHub里的頁面,然后點左邊的一個綠色的一個Clone or download的框框,然后把它切換到SSH,這時現實的就是你git倉庫的地址
把Library上傳到Bintray上
- 首先我建議把你的項目在AS上再朝GitHub那邊Commit and Push一次,然后就可以準備傳到Bintray
- 完成了以后,打開AS的Terminal控制臺,在里面輸入這兩句(分開輸)
gradew install //系統配置gradle的用戶環境
gradew bintrayUpload //上傳到Bintray
或者在AS的右邊有一個Gradle,用里面的插件bintrayUpload
來上傳也可以,但是要切到gradle控制臺里看是否BUILD SUCCESSFUL.
(感覺命令行更好用些)
去你Bintray的maven倉庫下進行確認是否上傳成功
如果你到Bintray上發現你的項目存在,但是下面沒有Gradle的依賴,大概就像這樣:
正常的庫
不正常的庫(假裝有圖)
這個。。。由于換電腦的原因,之前留的圖片全都沒備份就把上一個電腦的系統重裝了(啊啊啊,暴風式哭泣。。。
總之就是,上面那張圖的最下面的gradle可以復制的一段代碼消失了,沒有可以導入的庫的代碼
如果有可復制的依賴代碼,那么說明你的庫就已經上傳成功啦,要是沒有的話建議去看一下Android Studio 的gradle控制臺在run的時候有沒有報錯,比如說哪一個文件沒有生成或者生成的時候出現了問題之類的。
最后一步:添加到jcenter,提交給管理員審核
最后一步最關鍵的審核你和管理員的緣分(哈哈哈,開玩笑的)其實我感覺我都還好,沒遇到傳說中審核沒通過的事情,基本上提交了以后等一陣子(一般是1~3天都會有回復,如果沒有通過我記得會給原因。。。吧)
提交步驟很簡單,在頁面左側有一個 Linked to(0), 然后你只要點下面的Add to JCenter 按鈕就可以,然后在彈出的提交界面寫上對應的信息就好啦,然后就可以等管理員審核過后給你在Binary上綁定的郵箱里面發通知郵件咯
啰嗦一些可能遇見的小問題
如果報錯了建議先去看gradle控制臺的運行記錄,看里面有沒有什么異常
-
關于default-pom.xml莫名無法生成 :
這一個問題我一般是直接刪掉之前放開源庫相應代碼的package,然后直接新建一個package,名字要和之前的package一樣,但是在build.gradle 里面的version(即版本號)要改一個新的版本號,然后也是上面的步驟再重復一遍。但是在有一篇博客里提到了關于default-pom.xml無法生成的解決方法,要是嫌上面的方法麻煩的話,可以看一下解決方法(我沒有試過)。
然后基本上就是這些啦,要是還有什么為問題的話可以在評論區留言呀。
這是我第一次寫博客,啰里八嗦說了一大堆,措辭也要改進,而且自己也拖了好久,唉,感覺自己好菜啊,如果有什么不足之處希望大家直接說好了,我是一個耿直girl,不會介意的,最后就是蟹蟹大家能一直看到最后,又聽我啰里八嗦一大堆。
哈哈(尬笑