一、gradle簡介
gradle是一個基於jvm的項目構建工具,使用groovy語言編寫,主要面向java應用。集成了Maven和ant的功能。
二、主要文件
以我的SortContact工程爲例,自己可以看文件目錄細節:app和library是兩個module,app是application型的,library是library型。
1. SortContact/gradle/gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip
gradle下載地址爲:http://www.gradle.org/downloads。這個as在項目構建成功時會自動下載好。
默認存儲地址:C:\User.gradle\wrapper\dists
以上這些默認路徑一般不會更改,gradle-2.8-all.zip是gradle版本,很多導包不成功的原因就是因爲它的版本問題,會有提示。
2. 列表內容SortContact/setting.gradle
include ':app', ':library'
項目裏需要加入的module,若還有其它模塊都需按此種格式加進去,不然就使用不了這些模塊的方法。
3. 列表內容SortContact/build.gradle
此文件是整個項目的gradle基礎配置文件
buildscript {
repositories {
jcenter()
}
dependencies {
//聲明android gradle plugin的版本,這個我當時的as版本是1.3的所以gradle plugin 1.3的版本,現在是1.5正式版,2.0正式版也快出來了,到時as版本升級,下面這個版本號也得相應改變。
classpath 'com.android.tools.build:gradle:1.3.0'
}
}
allprojects {
repositories {
jcenter()//jcenter是一個由 bintray.com維護的Maven倉庫
//以前版本是mavenCentral(),由sonatype.org維護的Maven倉庫
//jcenter和Maven Central 都是標準的 android library倉庫,但是它們維護在完全不同的服務器上,兩者之間毫無關係。
// 在jcenter上有的可能 Maven Central 上沒有,反之亦然。
}
}
Maven Central最大問題是上傳library非常困難,同時也有安全方面等原因,as團隊就把他換爲jCenter,我們的庫也就是從這裏得到的。jCenter是全世界最大的java倉庫,所以相對Maven Central來說有的東西更多一點。然後他上傳library到倉庫也很簡單,若想把library上傳到 Maven Central 也可以在bintray網站上實現。
4. SortContact/app/build.gradle
app這個module的gradle配置文件(library的就不講了,因爲同爲module)
apply plugin: 'com.android.application' //聲明爲android程序,其他module比如我的項目裏library就得爲com.android.library
android {
compileSdkVersion 23 //編譯版本
buildToolsVersion "23.0.2" //build工具版本,在SDK Manager下載相應版本,也是導包不成功原因之一,與eclipse一樣的道理
defaultConfig { //默認配置
applicationId "com.xiong.sortcontact" //包名
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes { //創建類型
release {
minifyEnabled false //是否進行混淆
// 前一部分android默認的混淆文件,包含了基本的混淆聲明,目錄在 /tools/proguard/proguard-android.txt?
// 後一部分是我們項目裏的自定義的混淆文件,聲明一些第三方依賴的一些混淆規則,目錄在 /app/proguard-rules.txt
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions{
abortOnError false
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar']) //編譯libs目錄下所有jar包
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile project(':library') //編譯這個項目除了app的其他模塊,此處只要一個library
}
三、Gradle獲取library
知道了大概的gradle構建文件,那他是如何compile就能獲取library的呢
一般library字符串形式有三部分:
groupID(該library的具體包名):artifactID(library的真實名字):version
添加了依賴gradle就會詢問maven倉庫的服務器,查看此library是否存在,若有就按着詢問的網址下載與我們項目一起編譯,這就不用我們自己去手動下載了。倉庫裏的library有兩種:jar包和arr文件。
arr文件就比jar包多了一些什麼mainifest、資源等這類東西,其實就是在jar包基礎上植入一些android特性,爲android開發設計。
四、上傳我們的library到jCenter
前面也大概介紹了jCenter,既然as能直接compile下載bintray服務器裏的代碼,那我們何不把自己的library放到倉庫裏開源出去,以後就不用移植了也compile下來就是了,而且也可以讓別人也使用。然後google了很多這方面的資料,好多既麻煩還不成功,然後在我老大那弄到一種最簡單的辦法,那就是藉助bintray-release插件來將類庫上傳至binary,具體步驟如下:
1.先進入bintray官網註冊帳號,然後點擊maven,然後在add package,注意這個package name就是你在第二步裏要填的artifactId
2.還是以原先這個項目爲例,我的library模塊就是需要上傳的,也就是我剛上面省略沒講的,我乾脆直接複製過來,然後在旁邊有註釋就代表是我們需要手動加上的。
apply plugin: 'com.android.library'
apply plugin: 'com.novoda.bintray-release'//插件bintray-release
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions{
abortOnError false
}
}
//下載插件路徑,我是這麼理解的
buildscript {
repositories {
jcenter {
url "http://jcenter.bintray.com/"
}
}
dependencies {
classpath 'com.novoda:bintray-release:0.3.4'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
}
//配置bintray的信息
publish {
userOrg = 'xiong-hui-hui'//bintray裏的用戶名
//我以後需要compile'com.xiong.sortcontact.library:sort:1.0'所以後面三項自己看着填吧
groupId = 'com.xiong.sortcontact.library'//方法所在包名
artifactId = 'sort' //bintray裏你建的包名
publishVersion = '1.0' //版本號
desc = 'for some data to sort'//描述:隨便寫別用中文就行,反正我是出錯了的
website = 'https://github.com/xiong-hui-hui/SortContact' //指明github裏該項目的位置
}
3.然後就是構建命令
gradlew clean build bintrayUpload -PbintrayUser=xiong-hui-hui -PbintrayKey=你的API key -PdryRun=false 用戶名也改爲自己的
4.Linked to jcenter
這個需要審覈,可能需要一天,審覈通過後會出現!這個圖標,點擊它進入jCenter頁面,再點擊最後一步發佈也是在這裏完成,點擊Include My Package按鈕加入你的包發佈(可能你的包名會搜索不出來,我就遇到了,但也還是成功的)好啦,現在已經大功告成啦。