Android Gradle(1)- build.gradle介绍

前言

android项目中,gradle相关文件如下:

  • 项目build.gradle:配置项目的整体属性,比如指定使用的代码仓库、依赖的Gradle插件版本等等。
  • 模块build.gradle:配置当前Module的编译参数。
  • gradle-wrapper.properites:配置Gradle Wrapper。
  • gradle.properties:配置Gradle的编译参数。具体配置见Gradle官方文档
  • settings.gradle:配置Gradle的多项目管理。
  • local.properties:一般用来存放该Android项目的私有属性配置,比如Android项目的SDK路径。

下面介绍下开发中经常用到的项目build.gradle模块build.gradle

1. 项目的build.gradle

新建一个Android项目,它的项目build.gradle的内容如下:

buildscript {
    repositories {
        google()
        jcenter()   
    }
    dependencies {
        //配置依赖的Gradle插件版本
        classpath 'com.android.tools.build:gradle:4.0.1' //1
    }
}

allprojects {
    repositories {
        google()
        jcenter()  
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Gradle插件属于第三方插件,因此这里在buildscrip块中配置谷歌的Maven库和JCenter库,这样Gradle系统才能找到对应的Gradle插件 如果使用google()not found: 'google()'错误,可以用如下代码替代:

maven { url 'https://maven.google.com' }

2. 模块的build.gradle

新建一个项目,它的模块build.gradle如下:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' 
}

2.1. Gradle的Android插件类型

apply引入的插件id为com.android.application,说明当前模块是一个应用程序模块,Gradle的Android插件有多个类型分别为:

  • 用程序插件**,插件id为com.android.application,会生成一个APK。
  • 库插件,插件id为com.android.library,会生成一个AAR,提供给其他应用程序模块用。
  • 测试插件,插件id为com.android.test,用于测试其他的模块。
  • feature插件,插件id为com.android.feature,创建Android Instant App时需要用到的插件。
  • Instant App插件,插件id为com.android.instantapp,是Android Instant App的入口。

2.2. Android块

Android块用于描述该Module构建过程中所用到的所有参数。

  • compileSdkVersion:配置编译该模块的SDK版本
  • buildToolsVersion:Android构建工具的版本

2.2.1. defaultConfig块

Android块中的defaultConfig块用于默认配置,常用的配置如下所示。

属性描述
applicationId指定App的包名
minSdkVersionApp最低支持的sdk版本
targetSdkVersion基于哪个sdk版本开发
versionCodeapp内部的版本号,用于控制app升级
versionNameapp版本名称,也即是发布的版本号
testApplicationId配置测试app的包名
testInstrumentationRunner配置单元测试用的Runner,默认为android.test.InstrumentationTestRunner
proguardFileProguardFile混淆所使用的配置文件
proguardFiles同时配置多个ProguardFile文件
signingConfig配置默认的签名信息

2.2.2. buildTypes块

buildTypes块用于配置构建不同类型的APK。 当我们新建一个项目时,在Android块已经默认配置了 buildTypes块:

...
android{
    ...
    buildTypes {
       release {
           minifyEnabled false
           proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
       }
    }
    ...
}

在AS的Terminal中执行gradlew.bat build命令,会在该模块的build/outputs/apk目录中生成release和debug的APK,虽然只配置了release ,但release和debug是默认配置,即使我们不配置也会生成。也可以修改默认的release和debug,甚至可以自定义构建类型,比如:

...
android{
    ...
    buildTypes {
       release {
           minifyEnabled false
           proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
       }
       debug {
           debuggable true
       }
       privitedebug{
           applicationIdSuffix ""
       }
   }
    ...
}

这时会在build/outputs/apk目录中生成release、debug、privitedebug的APK。

buildTypes块还可以配置很多属性,常用的配置如下所示。

属性描述
applicationIdSuffix配置applicationId的后缀
debuggable表示是否支持断点调试
jniDebuggable表示是否可以调试NDK代码
buildConfigField配置不同的开发环境,比如测试环境和正式环境
shrinkResources是否自动清理未使用的资源,默认值为false
zipAlignEnabled是否开启开启zipalign优化,提高apk运行效率
proguardFileProGuard混淆所使用的ProGuard配置文件
proguardFiles同事配置多个ProGuard配置文件
signingConfig配置默认的签名信息
multiDexEnabled是否启用自动拆分多个Dex的功能

2.2.3. signingConfigs块

用于配置签名设置,一般用来配置release模式。

属性描述
storeFile签名证书文件
storePassword签名证书文件的密码
storeType签名证书的类型
keyAlias签名证书中密钥别名
keyPassword签名证书中密钥的密码
signingConfigs {
        release {
            storeFile file('../signfiles/keystore.jks')
            storePassword 'android'
            keyAlias 'androidreleasekey'
            keyPassword 'android' 
        }
}

2.2.4. 其他配置块

android块中除了前面讲的defaultConfig块、buildTypes块、signingConfigs块还有其他的配置块,这里列举一些:

描述
sourceSets配置目录指向
productFlavors多个渠道配置
lintOptionsLint配置
dexOptionsDEX工具配置
adbOptionsadb配置
packagingOptions打包时的相关配置

2.3. dependencies块

dependencies 块用于配置该module构建过程中所依赖的所有库。Gradle插件3.4版本新增了 api 和 implementation 来代替 compile 配置依赖,其中 api 和此前的 compile是一样的。dependencies和api主要以下的区别:

  • implementation:可以让module在编译时隐藏自己使用的依赖,但是在运行时这个依赖对所有模块是可见的。而api与compile一样,无法隐藏自己使用的依赖。
  • 如果使用api,一个module发生变化,这条依赖链上所有的module都需要重新编译,而使用implemention,只有直接依赖这个module需要重新编译。

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
img
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓

PS:群里还设有ChatGPT机器人,可以解答大家在工作上或者是技术上的问题
图片

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值