AndroidStudio怎麼將開源項目發佈到jcenter

AndroidStudio是從哪裏下載類庫的?

我們在用AndroidStudio寫Android程序的時候經常會看到在build.gradle文件裏面添加引用的類庫,只需要一行代碼。
例如:

dependencies {
    compile 'com.david.gradientuilib:gradientuilibrary:1.0.1'
}

有的時候我會感到好奇,爲什麼AndroidStudio裏面引用類庫就只需要一行代碼,不像Eclipse裏面引用類庫需要實際的jar文件纔可以,其實AndroidStudio的類庫也是需要實際的jar,aar這樣的文件的,之所以配置一行代碼就能實現引用類庫,就在於Gradle可以幫助我們通過相應的配置下載對應的類庫文件
那麼問題來了,下載下來的文件去哪裏了呢?
答案就在用戶目錄目錄下面的.gradle文件夾可以找到,Mac和Linux平臺也能找到相應的路徑

AndroidStudio是從Maven Repository 服務器下載類庫的。基本上有jcenterMaven Central這兩個服務器用於下載Android的類庫。
在代碼裏配置如下:
jcenter倉庫

allprojects {
    repositories {
        jcenter()
    }
}

Maven Central倉庫

allprojects {
    repositories {
        mavenCentral()
    }
}

一開始AndroidStudio是使用MavenCentral作爲默認的遠程倉庫下載類庫的。
但是MavenCentral有一些問題沒有解決。首先是對於開發者不友好,開發者想上傳自己的類庫到MavenCentral非常困難,所以後來AndroidStudio團隊決定把默認遠程倉庫換成jcenter

jcenter上傳下載速度快,而且是最大的java類庫倉庫,最最重要的一點是,如果你上傳類庫到jcenter成功了,那麼如果你還想上傳類庫到MavenCentral,就會變得非常容易,只需要用鼠標bintray網站上點幾下就可以了。

怎麼從遠程倉庫pull一個AndroidLibrary下來?

在講述如何上傳類庫到jcenter,我們需要先了解我們寫的那一行gradle代碼的意義。

compile 'com.david.gradientuilib:gradientuilibrary:1.0.1'

基本上我們可以從這一行代碼可以瞭解到,引用一個library的代碼需要3個部分,即:

GROUP_ID:ARTIFACT_ID:VERSION

在這句代碼裏面的GROUP_IDcom.david.gradientuilibARTIFACT_IDgradientuilibraryVERSION1.0.1。按照我的理解,GROUP_ID就像是我們寫一個項目使用的公司包名一樣,表示自己所在的團隊或個人,ARTIFACT_ID我認爲就是這個類庫的名稱,用於區分同一個GROUP下不同的類庫,最後的VERSION顧名思義就是版本號。

怎麼上傳你的類庫到jcenter倉庫?

基本上大致的步驟可以慨括爲,在AndroidStudio上準備好要上傳的庫項目,配置相關gradle代碼,然後上傳到bintray網站上,最後同步到jcenter倉庫裏。

第一步:在Bintray上創建一個package

步驟如下:

1. 在bintray.com上面註冊一個賬號,然後登錄進去。

bintray可以通過github賬號來登錄,所以建議最好是有一個github賬號,也方便後面的工作。

2.註冊登錄完成之後,點擊Maven

3.點擊Add New Package

4.填寫必要信息,然後點擊Create Package

注意這裏的Version control是必填的,所以在上傳類庫到bintray之前最好是把項目push到github上,這樣就會很方便了。

5.Create Package成功之後,就可以看到自己創建的Package了

第二步:創建好要上傳的AndroidStudio項目

在這裏我們將要上傳的是Android Library module

然後我們需要設置bintray的username和API Key來進行bintray的加密認證,這些信息將寫在local.properties文件裏。寫在local.properties的原因在於,bintray的username和APIKey是敏感的私人信息,自己應該保管好,而不是把它上傳到github上,正好把local.properties文件寫在.gitignore裏面過濾掉不會影響上傳的github項目。

代碼如下:

bintray.user=YOUR_BINTRAY_USERNAME
bintray.apikey=YOUR_BINTRAY_API_KEY

這裏的username就是你bintray賬號的用戶名,APIKey可以在bintray頁面的Edit Profile找到

在要上傳的庫module的build.gradle文件裏面添加如下代碼:

apply plugin: 'com.android.library'

ext {
    bintrayRepo = 'maven'
    bintrayName = 'GradientUI'

    publishedGroupId = 'com.david.gradientuilib'
    libraryName = 'GradientUI'
    artifact = 'gradientuilibrary'

    libraryDescription = 'The gradient ui that View can change from one background to another background. (Such as the background of ImageView, the color of TextView)'

    siteUrl = 'https://github.com/wangdong20/AndroidGradientUI'
    gitUrl = 'https://github.com/wangdong20/AndroidGradientUI.git'

    libraryVersion = '1.0.1'

    developerId = 'david'
    developerName = 'David Wong'
    developerEmail = '[email protected]'

    licenseName = 'The Apache Software License, Version 2.0'
    licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
    allLicenses = ["Apache-2.0"]
}

在這裏需要把bintrayName寫成之前Create Pacakge所填寫的package name,publishedGroupId就是我們之前提到的GROUP_IDartifact就是之前提到的ARTIFACT_IDlibraryVersion就是VERSION

如果上傳成功的話,那麼我們引用該類庫的代碼就是:

compile 'com.david.gradientuilib:gradientuilibrary:1.0.1'

最後我們還需要配置bintray upload的相關代碼

apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'
apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'

這兩行代碼添加到前面修改過的library module的build.gradle的最後面。

然後是在整個project的build.gradle裏面添加最後三行代碼。

dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1"
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
    }
}

最後在AndroidStudio提供的Terminal窗口執行如下命令:

gradlew install

如果順利的話,過幾分鐘就會出現

BUILD SUCCESSFUL

接下來需要把build成功的文件upload到bintray上

gradlew bintrayUpload

順利的話,也會出現

BUILD SUCCESSFUL

檢查你在bintray創建的package,你會看到對應的版本號

在這裏我覺得我有必要提一下,在我執行gradlew bintrayUpload命令的時候遇到的一些問題。

我遇到的問題是在build過程中,出現javadoc生成失敗的問題,百度了一下,原因是編碼問題,中文的註釋對應的編碼是GBK編碼,上傳的時候會出問題,沒有找到太好的解決方案。最後我採用了一個簡單粗暴的方法,就是把所有有中文註釋的地方都換成了英文,改完後順利地上傳成功。

到目前爲止,你已經成功地把類庫文件上傳到bintray上,接下來就是同步到jcenter上了。

第三步:同步library文件到創建的bintray倉庫


這一步需要做的是最簡單的,只需要在如上頁面點擊右下角的Add to JCenter按鈕,可能是我已經上傳過了,所以現在沒有顯示Add to JCenter按鈕。

接下來會跳到一個Request to include package GradientUI in jcenter的頁面,什麼都不用做,直接點擊Send按鈕就可以了。

大概過個2,3個小時,通過jcenter那邊的審覈就會在bintray上收到jcenter那邊的同意消息提醒。
至此就要恭喜你,你的類庫上傳到jcenter成功了!

到這裏大家就可以用我寫的類庫GradientUI,僅僅只需要添加一行代碼:

dependencies {
    compile 'com.david.gradientuilib:gradientuilibrary:1.0.1'
}

寫在最後

GradientUI的介紹GradientUI即我的上一篇博客
開源地址AndroidGradientUI
參考文章:How to distribute your own Android library through jCenter from AndroidStudio

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章