Gradle在Android Studio中的應用技巧

《android 高級進階》讀書筆記
Gradle是Android Studio標配的構建系統,想要熟練使用Android Studio進行Android開發,必須對Gradle有一定程度的認知。這裏主要是說一下關於Gradle的使用技巧

共享變量的定義

Gradle開發中會涉及到很多配置,比如不同module中都要配置compileSdkVersion、buildToolsVersion等變量值,我們把這些公共的配置項稱爲共享變量。一般情況下他們的取值都是保持一致的,如果每個module自己管理自己的這些配置,則可能會導致不同module取值不同,也可能會導致修改某個配置項時需要到每個module中都修改一遍。爲了解決這個問題,我們定義一個名爲common_config.gradle的文件,並放在工程根目錄中,文件內容如下:

project.ext{
    // Java 相關
    javaVersion = 8
    javaMaxHeapSize = '4G'

    // Android 編譯版本相關
    compileSdkVersion = 25
    buildToolsVersion = "25.0.2"
    minSdkVersion = 16
    targetSdkVersion = 25

    //混淆相關
    minifyEnable = true
    shrinkResEnable = minifyEnable

    // JDK版本兼容
    sourceCompatibility = this.&getJavaVersion()
    targetCompatibility = this.&getJavaVersion()
}

def getJavaVersion(){
    switch (project.ext.javaVersion){
        case "6":
            return JavaVersion.VERSION_1_6
        case "7":
            return JavaVersion.VERSION_1_7
        case "8":
            return JavaVersion.VERSION_1_8
        default:
            return JavaVersion.VERSION_1_6
    }
}

工程中各個module 的build.gradle文件引用全局配置項如下:

apply from: "${project.rootDir}/common_config.gradle"

android {
    compileSdkVersion project.ext.compileSdkVersion
    buildToolsVersion project.ext.buildToolsVersion
    defaultConfig {
        minSdkVersion project.ext.minSdkVersion
        targetSdkVersion project.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions{
        sourceCompatibility project.ext.sourceCompatibility
        targetCompatibility project.ext.targetCompatibility
    } 
}

通用配置

在多Module項目中,不同Module除了共享一些變量值以外,還會共享一些通用的配置,例如項目中有8個Module,那麼我們需要爲每個Module的build.gradle文件中添加對common_config.gradle的引用。

apply from: "${project.rootDir}/common_config.gradle"

這顯然是可以解決的,比較常見的就是在工程的根目錄的build.gradle文件中配置subprojects,語句如下:

subprojects{
        apply from: "${project.rootDir}/common_config.gradle"
    }

aar函數庫的引用

要輸出 aar 文件,必須將 Module 配置爲 library,在 gradle 文件中如下:

輸出 aar :apply plugin: 'com.android.library'
輸出 apk :apply plugin: 'com.android.application'

aar它的本質上是一個壓縮包,裏面包含了jar文件和Android相關的資源,如圖解壓後的aar包:

這裏寫圖片描述

爲了在庫中正常引用aar文件中的類,可以在該庫的build.gradle文件中添加如下配置:

...
// 爲了能夠在工程的libs目錄中找到其中的aar文件
repositories{
    flatDir{
        dirs 'libs'
    }
}
dependencies{
    ...
    // aar 文件的依賴配置
    compile(name: 'xxx', ext: 'aar')
    compile(name: 'xxx', ext: 'aar')
    ...
}

但是如果其他模塊依賴該庫,只有上面的配置是不夠的,Android Studio會提示找不到aar文件的錯誤。爲了子其他模塊使用該庫提供的API,以及引用到其中的aar文件,我們需要在項目根目錄中的build.gradle文件中增加如下配置:

allprojects{
    repositories {
        ...
        flatDir {
            dirs '../xxx/libs'
        }
    }
}

簽名和混淆的配置

APK在發佈時需要進行簽名和代碼混淆,在項目的Application Module中的build.gradle文件中進行少量配置即可實現自動簽名和混淆,

android {
    signingConfigs{
    // *** 需要替換成項目自己的值,其中***.keystore 文件和build.gradle位於同級目錄
        myConfig{
            storeFile file("***.keystore")
            storePassword "***"
            keyAlias "***"
            keyPassword "***"
        }
    }

    buildTypes {
        // debug 版本可簽名也可不簽名
        debug{
            signingConfig signingConfig.myConfig
            // debug 版本可以不進行代碼混淆,以便於調試
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            // 簽名配置
            signingConfig signingConfig.myConfig
            // release版本一定要進行代碼混淆
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

這些都是Gradle在Android Studio中的一些技巧,有什麼錯誤歡迎指出,有什麼不清楚留言給我。

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