欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Gradle在Android Studio中的应用技巧

程序员文章站 2024-01-11 15:24:52
...

《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包:

Gradle在Android Studio中的应用技巧

为了在库中正常引用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中的一些技巧,有什么错误欢迎指出,有什么不清楚留言给我。