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 服務器下載類庫的。基本上有jcenter和Maven 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_ID是com.david.gradientuilib,ARTIFACT_ID是gradientuilibrary,VERSION是1.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_ID,artifact就是之前提到的ARTIFACT_ID,libraryVersion就是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