新版Bintray下將Android Library 開源到JCenter 的正確姿勢

前記

對于經(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

Android Studio建庫
Android Studio建庫

注冊谷歌郵箱賬號

我知道你不想翻墻差牛,但你遲早需要這個賬號的命锄,早準(zhǔn)備早升天。

注冊Bintray賬號

最終需要通過這個賬號發(fā)布到JCenter上多糠。注冊地址官網(wǎng):https://bintray.com/累舷,這里就有一個坑浩考,現(xiàn)在這個地址默認(rèn)是注冊組織的夹孔,注冊后會有一個月試用期。

組織賬號有試用期
組織賬號有試用期

我們一般需要的是個人類型析孽,正確的注冊地址為:

https://bintray.com/signup/oss

個人注冊地址
個人注冊地址

這里是沒有填寫組織名稱的搭伤。可以使用第三方注冊袜瞬,常用的就是 github賬號怜俐,需要注意:如果github賬號綁定的郵箱不是gmail郵箱,Bintray無法注冊成功邓尤。所以這個時候你需要完成第一步然后通過gmail郵箱完成注冊拍鲤。

正式開始起飛

創(chuàng)建組織

使用注冊賬號登錄后,點擊 Add New Organization

創(chuàng)建組織-1
創(chuàng)建組織-1

接著下一步

創(chuàng)建組織-2
創(chuàng)建組織-2

接著下一步

創(chuàng)建組織-3
創(chuàng)建組織-3

最后點擊create完成創(chuàng)建汞扎。

創(chuàng)建倉庫

點擊 Add New Repository 創(chuàng)建倉庫

創(chuàng)建倉庫-1
創(chuàng)建倉庫-1
創(chuàng)建倉庫-2
創(chuàng)建倉庫-2

創(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
添加賬戶和apikey

apikey信息可以通過以下方式獲得:

獲取apikey
獲取apikey

執(zhí)行命令

在Android Studio中的Terminal窗口中輸入命令:gradlew -v
正常的話會顯示版本信息算途,如果還沒有安裝的話會自動安裝塞耕,安裝后也會顯示版本信息。

然后在輸入命令:gradlew install
此時也會顯示下載安裝一些東西嘴瓤,耐心等待即可扫外,完成后顯示“BUILD SUCCESSFUL”即表示成功莉钙。

install 成功
install 成功

最后上傳,在Terminal窗口輸入命令:gradle bintrayUpload
然后等待上傳筛谚,顯示“BUILD SUCCESSFUL”即表示成功磁玉。

upload 成功
upload 成功

發(fā)布

回到倉庫頁面可以看到剛才上傳的項目:

發(fā)布成功
發(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配置
JDK配置

如果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/ 返吻,查看更多文章。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乎婿,一起剝皮案震驚了整個濱河市测僵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖捍靠,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沐旨,死亡現(xiàn)場離奇詭異,居然都是意外死亡榨婆,警方通過查閱死者的電腦和手機(jī)磁携,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來良风,“玉大人谊迄,你說我怎么就攤上這事⊥虾穑” “怎么了鳞上?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵这吻,是天一觀的道長吊档。 經(jīng)常有香客問我,道長唾糯,這世上最難降的妖魔是什么怠硼? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮移怯,結(jié)果婚禮上香璃,老公的妹妹穿的比我還像新娘。我一直安慰自己舟误,他們只是感情好葡秒,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嵌溢,像睡著了一般眯牧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赖草,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天学少,我揣著相機(jī)與錄音,去河邊找鬼秧骑。 笑死版确,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乎折。 我是一名探鬼主播绒疗,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼骂澄!你這毒婦竟也來了吓蘑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤酗洒,失蹤者是張志新(化名)和其女友劉穎士修,沒想到半個月后枷遂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡棋嘲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年酒唉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沸移。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡痪伦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出雹锣,到底是詐尸還是另有隱情网沾,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布蕊爵,位于F島的核電站辉哥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏攒射。R本人自食惡果不足惜醋旦,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望会放。 院中可真熱鬧饲齐,春花似錦、人聲如沸咧最。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矢沿。三九已至滥搭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咨察,已是汗流浹背论熙。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留摄狱,地道東北人脓诡。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像媒役,于是被迫代替她去往敵國和親祝谚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容