1. 程式人生 > >Android studio gradle高階使用(一)

Android studio gradle高階使用(一)

簡單介紹

在android studio中新建一個工程,開啟app資料夾下這個Module的build.gradle配置檔案,也可以算是整個專案最主要的gradle配置檔案,預設配置如下:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.2"
    defaultConfig {
        applicationId "com.ds.test"
        minSdkVersion 15
        targetSdkVersion 26
versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs'
, include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:26.0.0-alpha1' testCompile 'junit:junit:4.12' }

接下來,認識下他們:

/*
apply plugin表明當前module是一個app
如果是library則寫成 apply plugin: 'com.android.library';
* */
apply plugin: 'com.android.application' //android {...} 配置了android相關的構建選項: android { compileSdkVersion 26//編譯的sdk版本 buildToolsVersion "26.0.2"//構建工具版本 defaultConfig {//defaultConfig 配置了AndroidManifest中的一些引數,在構建時會覆蓋AndroidManifest applicationId "com.ds.test" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes {//buildTypes 配置瞭如何構建app,預設有debug和release兩種 release { minifyEnabled false//是否進行混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//混淆檔案的位置 } } } /* dependencies 表明了當前module依賴關係,一個module可以用三種方式依賴。 * */ dependencies { //compile project(":lib")//方式1.依賴統一工程下的另一個module compile fileTree(dir: 'libs', include: ['*.jar'])//方式2.依賴libs目錄下的jar檔案 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:26.0.0-alpha1'//方式3.依賴遠端庫 testCompile 'junit:junit:4.12' }

學習一些技巧

1.自定義apk包名包含資訊是否為debug或是release版本、打包時間、版本號等。
2.將build.gradle中數字相關的定義在gradle.properties檔案中。
build.gradle檔案:

/*
apply plugin表明當前module是一個app
如果是library則寫成 apply plugin: 'com.android.library';
* */
apply plugin: 'com.android.application'

//android {...} 配置了android相關的構建選項:
android {
    compileSdkVersion COMPILE_SDK_VERSION as int//編譯的sdk版本
    buildToolsVersion BUILD_TOOLS_VERSION//構建工具版本
    defaultConfig {//defaultConfig 配置了AndroidManifest中的一些引數,在構建時會覆蓋AndroidManifest
        applicationId APPLICATION_ID
        minSdkVersion MIN_SDK_VERSION as int
        targetSdkVersion TARGET_SDK_VERSION as int
        versionCode VERSION_CODE as int
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                def fileName = "${variant.flavorName}_release_v${variant.versionName}.apk"
                if (variant.buildType.isDebuggable()) {
                    fileName = "${variant.flavorName}_debug_v${variant.versionName}.apk"
                }
                output.outputFile = new File(output.outputFile.parent, fileName)
            }
        }
    }
    buildTypes {//buildTypes 配置瞭如何構建app,預設有debug和release兩種
        release {
            minifyEnabled false// 是否進行混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'// 混淆檔案的位置
        }
    }
    //構建不同的編譯版本
    productFlavors {
        demo {
            applicationId APPLICATION_ID1
            versionName VERSION_NAME+"_"+buildTime()
        }
        full {
            applicationId APPLICATION_ID2
            versionName VERSION_NAME+"_"+buildTime()
        }
    }
}
def buildTime() {
    return new Date().format('yyyyMMdd')
}
/*
dependencies 表明了當前module依賴關係,一個module可以用三種方式依賴。
* */
dependencies {
    //compile project(":lib")//方式1.依賴統一工程下的另一個module
    compile fileTree(dir: 'libs', include: ['*.jar'])//方式2.依賴libs目錄下的jar檔案
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'//方式3.依賴遠端庫
    testCompile 'junit:junit:4.12'
}

gradle.properties檔案

APPLICATION_ID = com.ds.test
APPLICATION_ID1 = com.ds.test1
APPLICATION_ID2 = com.ds.test2
COMPILE_SDK_VERSION = 26
BUILD_TOOLS_VERSION = 26.0.2
MIN_SDK_VERSION = 15
TARGET_SDK_VERSION = 26
VERSION_CODE = 1
VERSION_NAME = 1.0

經過上面的配置,我們可生成四種名字的apk:
demo_debug_v1.0_20171120.apk
demo_release_v1.0_20171120.apk
full_debug_v1.0_20171120.apk
full_release_v1.0_20171120.apk