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

Android build.gradle 解析

程序员文章站 2024-03-23 22:45:40
...

外层 build.gradle

buildscript {
    ext.kotlin_version = '1.3.71'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

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

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

google()jcenter() 分别对应了一个代码仓库, google() 仓库中包含的主要是 Google 自家的扩展依赖库, jcenter() 仓库中包含的大多是一些第三方的开源库。

dependencies 闭包中使用 classpath 声明了两个插件,com.android.tools.build:gradle:3.6.3 用来构建 Android 项目,版本号通常与 Android Studio 是对应的。org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version 表示当前项目由 Kotlin 开发。

app 目录下的 build.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"

    defaultConfig {
        applicationId "com.example.helloworld"
        minSdkVersion 21
        targetSdkVersion 29
        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 "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.core:core-ktx:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

插件 com.android.application 表示这是一个应用程序模块,可替换成 com.android.library, 表示这是一个库模块。应用程序模块可以直接运行,库模块只能作为代码库依附于别的应用程序模块来运行。

如果要使用 Kotlin 开发,必须应用 kotlin-android 插件。

插件 kotlin-android-extensions 帮助我们实现了一些非常好用的 Kotlin 扩展功能。

紧接着是一个大的android 闭包,在这个闭包中我们可以配置项目构建的各种属性:
compileSdkVersion 用于指定项目的编译版本
buildToolsVersion 指定项目构建工具的版本

android 闭包中的 defaultConfig 闭包,可以配置项目的更多细节:
applicationId 应用的唯一标识符,默认会使用创建项目时使用的包名
minSdkVersion 最低兼容的 Android 系统版本
targetSdkVersion 指定的值表示你在该目标版本上已经做过了充分的测试,系统会为你的应用程序启用一些新的功能和特性。比如 Android 6.0 系统中引入了运行时权限功能,如果 targetSdkVersion 指定成23或者更高,那么系统就会为你的程序启用运行时权限功能,如果低于23,则不会启用。
versionCode 版本号
versionName 版本名
testInstrumentationRunner 用于在当前项目中启用 JUnit 测试,你可以为当前项目编写测试用例,以保证功能的正确性和稳定性。

android 闭包中的 buildTypes 闭包,用于指定生成正式版安装文件的配置,通常有两个子闭包,一个 debug,一个 release
minifyEnabled 是否混淆
proguardFiles 用于指定混淆时使用的规则文件,这里指定了两个文件,第一个 proguard-android-optimize.txt 是在 < Android SDK >/tools/proguard 目录下的,里面是所有项目通用的混淆规则;第二个proguard-rules.pro 是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则。

最后是 dependencies 闭包,可以指定当前项目所以的依赖关系,一般有三种依赖关系:
implementation fileTree 本地依赖声明,可以对本地的 jar 包或目录添加依赖关系
implementation project 库依赖声明,可以对项目中的库模块添加依赖关系
implementation 远程依赖声明, 可以对 jcenter 仓库上的开源项目添加依赖关系

相关标签: Android从零开始