gradle

列子

project


//定義全局屬性
buildscript {
    //定義依賴包的來源倉庫
    repositories {
        //使用jcenter作為倉庫竖幔,jcenter是maven庫的分支板乙,可以和maven互相切換并且支持https
        jcenter()

        //使用maven
//        maven {
//            url "http://repo.acmecorp.com/maven2"
//        }
    }
    //構(gòu)建過程中的依賴信息,一般不建議定義model中的依賴包拳氢,只需要定義android插件
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
        classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.1.5'
        // 配置apt 插件, 使用該插件募逞,dagger2生成的class在build/generated目錄中。這樣可以直接引用馋评。
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

//定義各個model的默認(rèn)屬性
allprojects {
    repositories {
        jcenter()
    }
}

//擴展屬性放接,可以定義一些全局常量
ext{
    //model 中使用 "compileSdkVersion rootProject.ext.compileSdkVersion"
    compileSdkVersion = 23
    buildToolsVersion = '23.0.1'

    supportLibraryVersion = '23.0.1'

    junitVersion = '4.12'
    mockitoVersion = '1.10.19'
    espressoVersion = '2.2.1'
}

model

/**
 * 官方文檔
 * http://google.github.io/android-gradle-dsl/current/index.html
 */

/**
 * 只影響該model的配置
 */

/**
 * 指明該model build時使用的工具,這里使用android官方提供的插件留特,可以直接使用內(nèi)置的屬性和task纠脾。
 * com.android.application 調(diào)用android的應(yīng)用插件玛瘸,用于應(yīng)用的構(gòu)建和打包。
 * com.android.library  調(diào)用依賴庫插件
 */
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt' // 注釋處理

//配置android屬性
android {
    /*
     * 這兩個屬性是必須的
     */
    //應(yīng)用編譯版本號
    compileSdkVersion rootProject.ext.compileSdkVersion
    //build應(yīng)用時使用的build工具的版本號(aapt,zipalign,dx and renderscript)
    buildToolsVersion rootProject.ext.buildToolsVersion

    //定義model的核心屬性苟蹈,會重寫manifest.xml中的屬性
    defaultConfig {
        /*重寫manifest中的包名package name
         * 但是appId和pname之間有點不同:在使用gradle build項目之前糊渊,pname有兩個作用,一個是應(yīng)用的唯一標(biāo)志慧脱,另一個是用作R資源的包名渺绒。
         * package name依然被用來作為包名和R文件的包名,而applicationid將被用于設(shè)備和應(yīng)用商店中的唯一標(biāo)志。
         */
        applicationId "hj.demo"
        minSdkVersion 14
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }

    //聲明本地文件存儲路徑
    sourceSets {
        main {
            //導(dǎo)入libs下的資源文件菱鸥,有時候需要這樣才能導(dǎo)入so文件
            jniLibs.srcDirs = ['libs']

//            manifest {
//                srcFile 'AndroidManifest.xml'
//            }
//            res {
//                srcDir 'res'
//            }
//            java {
//                srcDir 'src'
//            }
//            assets {
//                srcDir 'assets'
//            }
        }

    }

    //定義一個本地倉庫
    repositories {
        flatDir {
            /**
             * 當(dāng)要引入一個第三方的model時宗兼,可以引入該model的aar包(聲明名com.android.library類型的model編譯后會在build/output/aar/下生成一個aar文件)。
             * 然后在當(dāng)前項目下新建一個aars文件夾氮采,將第三方的aar文件拷貝到該目錄下针炉。
             * 如果引入成功的話,在當(dāng)前項目中可以看見該aar文件夾扳抽。目錄:build/intermediates/exploded-aar/(aar名字)
             */
            dirs 'aars'
        }
    }

    compileOptions {
        // 使用Java1.8
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8

    }


    packagingOptions {
        // 注釋沖突 解決dagger2和butterknife沖突
        exclude 'META-INF/services/javax.annotation.processing.Processor'
    }

    //簽名證書
//    signingConfigs{
//        debug {
//            storeFile file("D:\\keystore\\debug.keystore")
//            storePassword "android"
//            keyAlias "androiddebugkey"
//            keyPassword "android"
//        }
//
//        release {
//            storeFile file("D:\\keystore\\kjtj.keystore")
//            storePassword "client51tjzjkjtj"
//            keyAlias "kjtj.keystore"
//            keyPassword "client51tjzjkjtj"
//        }
//    }

    //項目 build類型篡帕,一般就只有兩個:debug和release
//    buildTypes {
//        debug{
//            // 是否進行混淆
//            minifyEnabled false
//            // 混淆文件的位置 前一個是系統(tǒng)默認(rèn)的混淆文件,后一個是用戶自定義的混淆文件
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//
//            // 簽名 調(diào)用上面debug簽名證書
//            signingConfig signingConfigs.debug
//        }
//        release {
//            minifyEnabled true
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//            signingConfig signingConfigs.release
//        }
//    }

    //發(fā)布各個版本
    productFlavors{

        baidu{
            minSdkVersion 14
            targetSdkVersion 21
            manifestPlaceholders = [APP_CHANNEL_VALUE: "百度",APP_NAME_VALUE: "百度test"]
        }
        huawei{
            minSdkVersion 14
            targetSdkVersion 21
            manifestPlaceholders = [APP_CHANNEL_VALUE: "華為"]
        }
        //直接使用flavor的name,這樣就不需要在各個flavor中配置manifestPlaceholders了贸呢。
//        productFlavors.all { flavor ->
//            flavor.manifestPlaceholders = [APP_CHANNEL_VALUE: name]
//        }
    }
}

dependencies {
    //導(dǎo)入本地jar包:導(dǎo)入本地libs文件下的所有jar包
    compile fileTree(dir: 'libs', include: ['*.jar'])

    /**
     * 使用第三方model
     * 1. 直接引入model項目: compile project(':libraryname') libraryname一般是model項目名(參照settings中的配置或者model項目下的iml文件中的project.id)
     * 2. 使用aar文件導(dǎo)入: compile(name:'aarFilename', ext:'aar') aarFilename是aar文件的名字镰烧。簡寫:compile ':aarFilename@aar'
     */
  
    /**
     * 依賴包格式:group:name:version
     * 如 com.android.support:appcompat-v7:22+
     * 完整格式:group:'group',name:'name',version:'version'
     * 如 group:'com.android.support',name:'appcompat-v7',version:'23.1.0'
     */
    //version使用了動態(tài)版本"+":使用最新的版本(不建議,有可能不穩(wěn)定).
    compile (group:'com.android.support',name:'appcompat-v7',version:"$rootProject.supportLibraryVersion")
    //compile 'com.android.support:appcompat-v7:+'

    compile "com.android.support:design:$rootProject.supportLibraryVersion"

    //xml和java之間的id映射
    compile 'com.jakewharton:butterknife:7.0.1'

    //dagger2
    compile 'com.google.dagger:dagger:2.0.2'
    compile 'com.google.dagger:dagger-compiler:2.0.2'

    compile 'io.reactivex:rxandroid:1.1.0' // RxAndroid
    compile 'io.reactivex:rxjava:1.1.0' // 推薦同時加載RxJava


    compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' // Retrofit網(wǎng)絡(luò)處理
    compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2' // Retrofit的rx解析庫
    compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' // Retrofit的gson庫

    //java注釋解析 dagger2自身依賴此包
    provided 'org.glassfish:javax.annotation:10.0-b28'


    testCompile "junit:junit:$rootProject.ext.junitVersion"

    androidTestCompile "junit:junit:$rootProject.ext.junitVersion"

    // Google Espresso UI Testing
    //簡單說下楞陷,下來在詳細學(xué)習(xí)下(will study) Espresso 單應(yīng)用測試怔鳖,Uiautomator支持多應(yīng)用測試。
    androidTestCompile "com.android.support.test.espresso:espresso-core:$rootProject.espressoVersion"
    androidTestCompile "com.android.support.test.espresso:espresso-contrib:$rootProject.espressoVersion"
    androidTestCompile "com.android.support.test.espresso:espresso-intents:$rootProject.espressoVersion"

}

/**

    compile 是對所有的build type以及favlors都會參與編譯并且打包到最終的apk文件中固蛾。
    provided 是對所有的build type以及favlors只在編譯時使用结执,類似eclipse中的external-libs,只參與便于,不打包到最終apk艾凯。
    apk 只會打包到apk文件中献幔,而不參與編譯,所以不能再代碼中直接調(diào)用jar中的類或方法趾诗,否則在編譯時會報錯
    testCompile,androidTestCompile 僅僅是針對單元測試代碼的編譯編譯以及最終打包測試apk時有效蜡感,而對正常的debug或者release apk包不起作用。
    debugCompile 僅僅針對debug模式的編譯和最終的debug apk打包恃泪。
    releaseProvided 僅僅針對Release 模式的編譯和最終的Release apk打包郑兴。
*/

補充

compile

在上面的例子中會出現(xiàn)compile,androidTestCompile贝乎,testCompile等例如*Compile 的樣式情连。這個編譯多個依賴項目時很有用。
比如有一個主項目module0,還有幾個其他依賴項目module1,module2,module3览效,module4等却舀,項目會根據(jù)不同情況依賴不同的module球榆。

android {
    productFlavors {
        proa
        prob
    }
}
dependencies {
    compile project(':module1')  //module1是各種情況都需要的
    proaCompile project(':module2') //proa 使用module2和module3
    proaCompile project(':module3')    
    probCompile project(':module4') //proa 使用module4和module3   
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市禁筏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衡招,老刑警劉巖篱昔,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異始腾,居然都是意外死亡州刽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門浪箭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來穗椅,“玉大人,你說我怎么就攤上這事奶栖∑ケ恚” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵宣鄙,是天一觀的道長袍镀。 經(jīng)常有香客問我,道長冻晤,這世上最難降的妖魔是什么苇羡? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮鼻弧,結(jié)果婚禮上设江,老公的妹妹穿的比我還像新娘。我一直安慰自己攘轩,他們只是感情好叉存,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著度帮,像睡著了一般鹉胖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上够傍,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天甫菠,我揣著相機與錄音,去河邊找鬼冕屯。 笑死寂诱,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的安聘。 我是一名探鬼主播痰洒,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼瓢棒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了丘喻?” 一聲冷哼從身側(cè)響起脯宿,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泉粉,沒想到半個月后连霉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嗡靡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年跺撼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讨彼。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡歉井,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哈误,到底是詐尸還是另有隱情哩至,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布蜜自,位于F島的核電站憨募,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏袁辈。R本人自食惡果不足惜菜谣,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晚缩。 院中可真熱鬧尾膊,春花似錦、人聲如沸荞彼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸣皂。三九已至抓谴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寞缝,已是汗流浹背癌压。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荆陆,地道東北人滩届。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像被啼,于是被迫代替她去往敵國和親帜消。 傳聞我的和親對象是個殘疾皇子棠枉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

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