Android Studio--gradle,jCenter

一、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按鈕加入你的包發佈(可能你的包名會搜索不出來,我就遇到了,但也還是成功的)好啦,現在已經大功告成啦。

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