前記
對于經(jīng)歷過Eclipse開發(fā)時代的人來說,如今在Android Studio中通過 compile 命令來添加外部庫引用簡直爽的不要不要的嚷狞,在使用github上數(shù)以千計的開源庫時察纯,最常用方式就是:compile 'com.android.support:recyclerview-v7:23.4.0'互墓,那么如何讓自己寫的庫也能通過這樣的方式引用呢?
其實就是將自己寫好的庫打包發(fā)布到JCenter即可纫事,本來看著非常簡單渗鬼,但是實際做起來每一步都有很多坑等著你去踩览露。經(jīng)歷過從入門到失敗到放棄到成功的過程后,現(xiàn)在將一步步的過程和雷區(qū)記錄下來譬胎,希望能幫助別人越過深坑直達(dá)彼岸~~~
準(zhǔn)備工作
準(zhǔn)備一個庫
新建Module,選擇Library
注冊谷歌郵箱賬號
我知道你不想翻墻差牛,但你遲早需要這個賬號的命锄,早準(zhǔn)備早升天。
注冊Bintray賬號
最終需要通過這個賬號發(fā)布到JCenter上多糠。注冊地址官網(wǎng):https://bintray.com/累舷,這里就有一個坑浩考,現(xiàn)在這個地址默認(rèn)是注冊組織的夹孔,注冊后會有一個月試用期。
我們一般需要的是個人類型析孽,正確的注冊地址為:
這里是沒有填寫組織名稱的搭伤。可以使用第三方注冊袜瞬,常用的就是 github賬號怜俐,需要注意:如果github賬號綁定的郵箱不是gmail郵箱,Bintray無法注冊成功邓尤。所以這個時候你需要完成第一步然后通過gmail郵箱完成注冊拍鲤。
正式開始起飛
創(chuàng)建組織
使用注冊賬號登錄后,點擊 Add New Organization
接著下一步
接著下一步
最后點擊create完成創(chuàng)建汞扎。
創(chuàng)建倉庫
點擊 Add New Repository 創(chuàng)建倉庫
創(chuàng)建成功后季稳,在剛才的界面 Add New Repository 下面可以看到創(chuàng)建的倉庫。點擊進(jìn)去查看詳細(xì)信息澈魄,此時里面是空的景鼠。
在Android Studio 中添加配置
主要涉及到的配置文件有三個:
- 第一個:工程項目(project)的 build.gradle文件
- 第二個:模塊庫(module) 的 build.gradle文件
- 第三個:工程項目的 local.properties文件
配置第一個
在你Project的build.gradle文件中加入Maven和Jfrog Bintray的依賴插件:
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
配置第二個
第二項配置較多,可以參考下面完整的進(jìn)行補(bǔ)充:
P.S. 有注釋的是需要替換自己的參數(shù)痹扇,其他復(fù)制即可
apply plugin: 'com.android.library'
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'
def siteUrl = 'https://github.com/leonHua/LFilePicker' // 項目的主頁
def gitUrl = 'https://github.com/leonHua/LFilePicker.git' // Git倉庫的url
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
version = "1.0" //發(fā)布版本號
group = "com.leon" //最終引用形式铛漓,如compile 'com.leon.lfilepicker:1.0.0',其中l(wèi)filepicker在后面配置
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'
}
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
pkg {
repo = 'leonlibrary'//自己創(chuàng)建的倉庫名字
name = 'lfilepicker'//上傳到JCenter的名字,最終引用的名字
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ['MIT']//不能隨便寫鲫构,只能是倉庫創(chuàng)建時選擇的license type
userOrg = 'mumusalibrary' //自己創(chuàng)建的organization名稱
publish = true // 是否是公開項目浓恶,公開別人可以引用
version {
name = '1.0'
desc = 'leon open library.'//描述,自己定義
released = new Date()
vcsTag = 'v1.0'
attributes = ['gradle-plugin': 'com.use.less:com.use.less.gradle:gradle-useless-plugin']
}
}
configurations = ['archives']
}
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
// Add your description here
name 'Leon Android'
description 'leon open library.'
url siteUrl
// Set your license
licenses {
license {
name 'MIT' //和之前自己定義的協(xié)議一致
url 'https://raw.githubusercontent.com/minggo620/Pluto-Android/master/LICENSE'
}
}
developers {
developer {
id 'leonhua2017' //填寫bintray或者github的用戶名
name 'leonhua2017' //姓名
email 'leon.gitlibrary@gmail.com'//郵箱
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
failOnError false //必須添加以免出錯
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
javadoc {
options{
//如果你的項目里面有中文注釋的話结笨,必須將格式設(shè)置為UTF-8问顷,不然會出現(xiàn)亂碼
encoding "UTF-8"
charSet 'UTF-8'
author true
version true
links "http://docs.oracle.com/javase/7/docs/api"
}
}
以上添加成功后,點擊編譯下項目禀梳,會下載一些插件東西杜窄,成功后繼續(xù)。
配置第三個
在local.properties中添加賬戶名稱和apikey信息
apikey信息可以通過以下方式獲得:
執(zhí)行命令
在Android Studio中的Terminal窗口中輸入命令:gradlew -v
正常的話會顯示版本信息算途,如果還沒有安裝的話會自動安裝塞耕,安裝后也會顯示版本信息。
然后在輸入命令:gradlew install
此時也會顯示下載安裝一些東西嘴瓤,耐心等待即可扫外,完成后顯示“BUILD SUCCESSFUL”即表示成功莉钙。
最后上傳,在Terminal窗口輸入命令:gradle bintrayUpload
然后等待上傳筛谚,顯示“BUILD SUCCESSFUL”即表示成功磁玉。
發(fā)布
回到倉庫頁面可以看到剛才上傳的項目:
點擊項目后進(jìn)入詳細(xì)界面,這個時候點擊界面右下角的add to JCenter,然后輸入描述發(fā)送即可驾讲。
然后等待審核蚊伞,我這個比較快,10分鐘就通過吮铭。
遇到的坑
1:官網(wǎng)地址
前面已經(jīng)說過时迫,注冊地址一定要選對
2:Unsupported major.minor version 52.0
首先檢查JDK版本問題,需要更換到JDK8谓晌,環(huán)境變量配置后一定記得需要在Android Studio中配置
如果JDK沒問題掠拳,還有可能是Studio里各項配置的版本問題,查了很多資料纸肉,總的來說就是當(dāng)前環(huán)境的整體配置版本(以下三項)要一致:
- compileSdkVersion
- buildToolsVersio
- gradle
3: HTTP/1.1 401 Unauthorized
這個一般是因為賬號和apikey信息錯誤溺欧,仔細(xì)檢查local.properties文件中的配置是否正確
4: gradlew 不是內(nèi)部或外部命令
配置gradle的環(huán)境變量,和配置JDK類似柏肪,如果配置過后還不行姐刁,所有的命令更換為 gradle 也可以。
5: 路徑問題
如果環(huán)境中除了需要打包的庫還有其他模塊预吆,那么在命令行窗口中需要先切換到對應(yīng)的目錄環(huán)境下再執(zhí)行命令龙填。
End
弄到這里終于算是成功了。發(fā)布到JCenter有很多種方式拐叉,這里只是用了其中的一種岩遗,自己做的時候也參考了很多文章,有一些時間早點的文章會出現(xiàn)很多莫名其妙的問題凤瘦∷藿福可能別人成功實現(xiàn)的方法,自己在做的過程中還是會發(fā)生很多原文章中沒有提(遇)到的問題蔬芥。希望自己的總結(jié)可以幫到后來者梆靖,同時不可避免的還會有一些文中沒有的問題出現(xiàn),歡迎留言交流笔诵。
歡迎訪問博客: https://leonhua.github.io/ 返吻,查看更多文章。