Android Studio 中使用Gradle發(fā)布項目到JCenter倉庫

目錄.png

前言

在Android Studio 中使用aar庫非常方便靶草,在模塊化開發(fā)中尤為重要。在項目中經(jīng)常從網(wǎng)絡(luò)上獲取公開的第三方類庫進行開發(fā),而這個網(wǎng)絡(luò)位置就是JCenter幢哨。在在gradle中使用:

repositories {
    jcenter()
}

jCenter是Bintray提供的公開下載服務(wù),使用自身開發(fā)的artifactory開源應(yīng)用搭建襟企,后緒會介紹如何使用artifactory來搭建團隊內(nèi)部的私有倉庫嘱么。

dependencies {
    compile 'com.facebook.fresco:fresco:0.14.1'
}
在 Android Studio 中引用一個 Module  Library 是不是很方便,類似于這樣格式的開源庫都是上傳到了`bintray`上的顽悼,然后在發(fā)布成開源曼振。

JCenter 是全世界最大的 Java 倉庫,也是 Android Studio 中 repositories 的默認節(jié)點蔚龙。JCenter 支持 Maven, Gradle, lvy , SBT 等大部分構(gòu)建工具冰评。

需要注意,發(fā)布到JCenter上面的庫是開源的或是經(jīng)過混淆的木羹,否則就放棄這種想法甲雅,直接提供Jar包給第三方好了解孙。


一、注冊 Bintray 賬號

 JCenter是由 [Bintray](https://bintray.com/) 公司在維護抛人,所以先注冊一個Bintray賬號弛姜。

bintray上注冊一個賬號 建議注冊個人賬號⊙叮可以使用github賬號直接授權(quán)登錄廷臼。

由于 Bintray網(wǎng)站 改版了,增加了Organization的概念绝页。如果點擊中間那個大大的綠色按鈕荠商,用那個點了注冊就錯了!续誉! 變成了注冊一個組織莱没,注冊地址是 https://bintray.com/signup 提交aar的時候就會出現(xiàn)Unauthorized這個錯誤 注意:個人的注冊地址為https://bintray.com/signup/oss
注意一點:不能使用國內(nèi)的郵箱注冊。

image.png

上圖:點擊首頁默認注冊的是組織號

image.png

個人注冊如上圖

注冊完了不知道自己注冊是個人賬號還是組織賬號酷鸦?


image.png
image.png

如果不小心注冊成了組織賬號了怎么辦饰躲?
用國外的郵箱谷歌、雅虎等井佑。新注冊個賬號即可属铁。

二、獲取 API Key

image.png

然后輸入登錄密碼就可以獲取到API KEY了躬翁。


三焦蘑、后臺創(chuàng)建Maven倉庫

image.png
image.png

上圖中注意:創(chuàng)建的maven倉庫名字和類型都要寫成maven。


四盒发、添加依賴

添加 maven-gradle和gradle-bintray插件

項目的Project下的build.gradle中添加:

classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'   
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'

android-maven-gradle-plugin插件是用來打包Maven所需文件的例嘱。
gradle-bintray-plugin插件是用來將生成的Maven所需文件上傳到Bintray的。


五宁舰、Gradle配置

1.在library model下創(chuàng)建一個bintrayUpload.gradle文件拼卵,文件內(nèi)容如下:

apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
// This is the library version used when deploying the artifact
// 配置版本
version = "1.0.0"

// 定義相關(guān)網(wǎng)站
def siteUrl = 'https://github.com/lugq/permissionDemo'  // 項目的主頁
def gitUrl = 'git@github.com:lugq/permissionDemo.git'   // Git倉庫的url
group = "com.lugq.jcenterdemo"                          // Maven Group ID for the artifact,一般填你唯一的包名

// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓定義 pom 并打包 aar↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                // Add your description here
                name 'JCenter Demo'
                url siteUrl
                // Set your license
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer {
                        id 'luguoqiang'        //填寫的一些基本信息
                        name 'luguoqiang'
                        email 'luguoqiang@yahoo.com' // 填寫郵箱
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}
// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑定義 pom 并打包 aar↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

// 打包 javadocjar 和 sourcejar
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}
task javadoc(type: Javadoc) {
    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
}
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty("bintray.user")
    key = properties.getProperty("bintray.apikey")
    configurations = ['archives']
    pkg {
        repo = "maven"
        name = "JcenterDemo"    //發(fā)布到JCenter上的項目名字
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}
javadoc { //jav doc采用utf-8編碼否則會報“GBK的不可映射字符”錯誤
    options{
        encoding "UTF-8"
        charSet 'UTF-8'
    }
}

2.在library modelbuild.gradle追加如下代碼:

apply from: "bintrayUpload.gradle"

3.在local.properties文件中添加從Bintray申請到的API Key

#bintray
bintray.user=your bintray username
bintray.apikey=your apikey

建議將local.properties文件加入忽略文件中不上傳蛮艰,以保護你的apikey腋腮。


六、將項目提交到Bintray

如果你一完成了上述的配置后壤蚜,下面只需要一行代碼就可以完成將項目提交到Bintray即寡。

打開終端進入項目目錄下,執(zhí)行gradlew bintrayUpload命令即可袜刷。
或者雙擊Tasts文件夾下的publishing下的bintrayUpload文件聪富;

執(zhí)行完成后,打開你的bintray主頁如果在Owned Repositories下的maven選中看到你的倉庫著蟹,則說明你已經(jīng)將你的倉庫成功上傳到bintray了墩蔓。


最后蒂萎、中途遇到的坑

坑一

Error:Execution failed for task ':module:bintrayUpload'.
> java.io.FileNotFoundException: /Users/peter/AndroidStudioProjects/JCenterDemo/module/build/poms/pom-default.xml (No such file or directory)

如果是這樣的話說明你執(zhí)行bintrayUpload的方式是在Android Studio的Gradle窗口中選擇"Run *** bintrayUpload"湃交,請不要用這種方式執(zhí)行bintrayUpload
正確的姿勢應(yīng)該是在命令行中執(zhí)行g(shù)radlew bintrayUpload

坑二

peter:JCenterDemo peter$ gradlew bintrayUpload
bash: gradlew: command not found

解決:
macwindows不同 要在gradlew命令下加上./ 胸蛛,
于是添加上了./蝎土,開始執(zhí)行./gradlew bintrayUpload命令

坑三

peter:botbrain-sdk-video peter$ ./gradlew bintrayUpload
bash: ./gradlew: Permission denied
peter:botbrain-sdk-video peter$ 

解決:改變gradlew的權(quán)限

chmod +x gradlew
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市阵面,隨后出現(xiàn)的幾起案子葡粒,更是在濱河造成了極大的恐慌,老刑警劉巖膜钓,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卿嘲,居然都是意外死亡颂斜,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門拾枣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沃疮,“玉大人,你說我怎么就攤上這事梅肤∷臼撸” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵姨蝴,是天一觀的道長俊啼。 經(jīng)常有香客問我,道長左医,這世上最難降的妖魔是什么授帕? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮浮梢,結(jié)果婚禮上跛十,老公的妹妹穿的比我還像新娘。我一直安慰自己秕硝,他們只是感情好芥映,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著远豺,像睡著了一般奈偏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上憋飞,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天霎苗,我揣著相機與錄音,去河邊找鬼榛做。 笑死唁盏,一個胖子當著我的面吹牛内狸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播厘擂,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼昆淡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刽严?” 一聲冷哼從身側(cè)響起昂灵,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舞萄,沒想到半個月后眨补,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡倒脓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年撑螺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崎弃。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡甘晤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出饲做,到底是詐尸還是另有隱情线婚,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布盆均,位于F島的核電站塞弊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏缀踪。R本人自食惡果不足惜居砖,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驴娃。 院中可真熱鬧奏候,春花似錦、人聲如沸唇敞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疆柔。三九已至咒精,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旷档,已是汗流浹背模叙。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鞋屈,地道東北人范咨。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓故觅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親渠啊。 傳聞我的和親對象是個殘疾皇子输吏,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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