最近想倒騰一個小小的 UIKit 到 JCenter,為開源社區貢獻一點綿薄之力,於是就有了一系列慘無人道的踩坑史。好,接下來,直奔主題,以下是發佈流程。 發佈到 JCenter 發佈到 JCenter 需要以下幾個步驟。 註冊 Bintray 賬號並創建倉庫 Bintray 是 JCenter 庫 ...
最近想倒騰一個小小的 UIKit 到 JCenter,為開源社區貢獻一點綿薄之力,於是就有了一系列慘無人道的踩坑史。好,接下來,直奔主題,以下是發佈流程。
發佈到 JCenter
發佈到 JCenter 需要以下幾個步驟。
註冊 Bintray 賬號並創建倉庫
Bintray 是 JCenter 庫的運營商,首先要去這個網站註冊一下賬號 https://bintray.com/signup/oss
網上大多數教程會把你帶到註冊企業賬號的地方,這是第一個坑。
註冊完後創建一個倉庫:
填寫一下必填項即可:
在 Type 處選擇 Maven。接下來創建一個 Package:
註意下 name 這一欄
填上你要發佈的 Library 項目的名字。完成之後大概是這樣的:
插件配置
網上有很多教程是用 android-maven-gradle 插件來發佈 Library,甚至是官方推薦的 gradle-bintray-plugin,其實這兩個配置都比較複雜。下麵要推薦的是 bintray-release 插件,配置非常簡單。首先在項目的 build.gradle 加上:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'com.novoda:bintray-release:0.4.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
然後打開 Library 的 build.gradle,加入:
apply plugin: 'com.android.library'
apply plugin: 'com.novoda.bintray-release'
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
lintOptions {
abortOnError false
}
}
publish {
userOrg = 'KenChoi1992' // 改成你在 bintray 上註冊的用戶名
groupId = 'cn.jiguang.imui' // 改成你的包名(影響別人引用的第一段)
artifactId = 'chatinput' // 改成你的 Library 名字(影響別人引用的第二段)
publishVersion = '0.0.1' // 版本號 (影響別人引用的第三段)
desc = 'im uikit'
website = 'https://github.com/jpush/imui.git'
}
完成了上面的配置之後,別人要引用你的 Library,就可以這樣:
// 由 groupId,artifcatId,version 三段組成
compile 'cn.jiguang.imui:chatinput:0.0.1'
檢查代理
在執行下一步之前,請確保 Android Studio 正確的配置了代理,因為大天朝要科學上網,你懂的。打開 Android Studio 的配置菜單:
點上面的 Check connection,在彈出的視窗輸入一個牆外網站:
然後點擊 OK,如果成功了,是這樣的:
運行任務
最後在 Android Studio 的終端運行:
./gradlew clean build bintrayUpload -PbintrayUser=Username -PbintrayKey=ApiKey -PdryRun=false
將上面的用戶名改成自己的,ApiKey 是從 bintray 網站上得到的:
點擊 Edit Profile,進入編輯資料界面:
然後點擊 API Key 即可查看:
如果執行完上述命令後,成功了,那麼恭喜你!你順利地發佈了自己的 Library,在別人的項目中,只要用一行代碼就可以引用你的庫,實在是高(裝)端(逼)大(必)氣(備),上檔次!請註意,如果失敗了,前方高能!非戰鬥人員撤退!
如果你失敗了!請不要驚訝,因為我也失敗了!!失敗的原因有很多,但是嘗試了許多解決方案之後,終於!……我放棄了!!而且嘗試了上述的三個插件都失敗了!!!所以我並不是標題黨……但是!儘管如此,如果輕易放棄,不是吾輩所為!所以我決定手!動!上!傳!
說是手動上傳,其實也用到了一個工具 release-android-library,在 Library 的 build.gradle 中配置一下:
apply plugin: 'com.android.library'
ext {
PUBLISH_GROUP_ID = 'cn.jiguang.imui'
PUBLISH_ARTIFACT_ID = 'chatinput'
PUBLISH_VERSION = '0.0.1'
}
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.1'
compile 'com.android.support:design:25.1.1'
compile 'com.google.android:flexbox:0.2.5'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:25.1.1'
testCompile 'junit:junit:4.12'
}
apply from: 'https://raw.githubusercontent.com/blundell/release-android-library/master/android-release-aar.gradle'
主要是加入 ext 和 apply from 這兩個相關內容即可。然後在終端中執行命令:
./gradlew clean build generateRelease
完成後,在 build 文件夾下就會生成一個壓縮文件:
回到 bintray 的 package 下,點擊 New Version:
然後創建一個 version,名字和你要發佈的版本號一致,然後點擊確定,接著點擊上傳文件按鈕:
在頁面中上傳剛纔的壓縮文件:
請註意上面紅色方框,一!定!要!勾選這個 Checkbox,否則會發生奇妙的錯誤,別問我怎麼知道的!
然後點擊 Save Changes,接著點擊頁面中的 Publish 按鈕,這樣就發佈了!
接著回到 Package,將 Library 發佈到 JCenter。
點擊 Add to JCenter,點擊後輸入一下評論,然後點擊 OK 即可,等待幾個小時後的審核就可以了。到此為止,我們已經完成了發佈!但是!你以為這就完了?接下來介紹一個快捷,簡單到令人髮指的開源倉庫:JitPack
發佈到 JitPack
打開 JitPack 網站,使用 GitHub 賬號登錄即可,很方便,只需要簡單的兩步即可發佈到 JitPack。
在 GitHub 上發佈一個版本
把 GitHub 的倉庫地址粘貼到 JitPack,然後點擊 Look up 按鈕:
然後在從下麵的列表中選擇一個版本,然後點擊 Get it 即可!接下來,別人只需要在項目的 build.gradle 中加入:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
然後在 Module 的 build.gradle 中引用即可:
dependencies {
compile 'com.github.User:Repo:Tag'
}
就是這樣,so easy !
總結
目前來說 JCenter 雖然是 Android 的預設倉庫,但是發佈的流程還是比較麻煩,而且發佈的過程是一個聞者傷心,見者流淚的辛酸血淚填坑史。JitPack 更加簡單快捷,使用的方式也相差無幾。順便一提,文中的 chatinput 是一個 IM UIKit,可以方便地為聊天界面集成文字,錄音、發圖片、視頻消息。另外我們也發佈了 imui,可以方便地集成聊天界面功能,使用方式:
compile 'cn.jiguang.imui:imui:0.0.1'
更多信息請登錄我們的 GitHub 地址:https://github.com/jpush/imui
後續我們也會不斷地完善和維護,歡迎大家提 PR。
作者:KenChoi - 極光開發者
原文:發佈 Android Library 到 JCenter 從入門到放棄
知乎專欄:極光日報