这里只介绍几个重要的概念和几个重要的操作和理解。

先看看创建一个默认工程的项目结构,并运行生成build文件夹:

android studio2022 使用 android studiod_根目录

  

android studio2022 使用 android studiod_根目录_02

我们着重理解其中的Gradle文件:MyFirstApplication/build.gradle、MyFirstApplication/gradle.properties、MyFirstApplication/app/build.gradle、MyFirstApplication/gradle/wrapper/gradle-wrapper.properties

➊MyFirstApplication/build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
allprojects {
    repositories {
        google()
        jcenter()
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

翻译成中文表述即可知道它的整个含义:

->顶层构建脚本文件,你可以在其中添加所有子项目/模块通用的配置选项。
构建脚本{
    仓库{
        谷歌()
        JAVA中心()
    }
    依赖{
        类路径 'com.android.tools.build:gradle:3.6.3'(安卓构建工具gradle的版本是3.6.3)
        ->不要将应用程序的依赖项放在此处;它们属于单独模块的build.gradle文件。
    }
}
所有的工程{
    仓库{
        谷歌()
        JAVA足以()
    }
}
任务 clean(类型: 删除){
    删除 根目录/构建的build目录
}

➋MyFirstApplication/gradle.properties

# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
->项目范围内的Gradle设置。
->IDE(如Android Studio)用户:
->通过IDE配置的Gradle将会*覆盖*任何在这里的设置。
->更多配置构建环境的内容,访问http://www.gradle.org/docs/current/userguide/build_environment.html
->为守护进程指定JVM参数。这个设置尤其对调整内存设置有用。
org.gradle.jvmargs=-Xmx1536m(gradle的jvm参数设置为:最大内存1536M)
->当配置完成后,Gradle将会潜伏于并行模式。这个选项应该仅用于单独的项目。
->更多细节,访问http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true(gradle并行模式=true)
->AndroidX包结构可以使安卓工程的包结构更加清晰,它将被打包进你的应用APK文件中。
->关于AndroidX细节,访问https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true(使用AndroidX特性)
->自动使用AndroidX转换第三方库到AndroidX的包结构
android.enableJetifier=true(启用将依赖包迁移到AndroidX)

Android AndroidX的迁移

➌MyFirstApplication/app/build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "com.example.myfirstapplication"
        minSdkVersion 22
        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'])(工程的libs文件夹下的所有jar包)

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.navigation:navigation-fragment:2.0.0'
    implementation 'androidx.navigation:navigation-ui:2.0.0'
    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'
android{
    编译Sdk版本 29
    构建工具版本 "29.0.3"
    默认配置{
        应用ID "com.example.myfirstapplication"
        最低Sdk版本 22
        目标Sdk版本 29
        版本号 1
        版本名称 "1.0"
        
        测试用例运行对象 "androidx.test.runner.AndroidJUnitRunner"(AndroidJUnitRunner能运行junit3和junit4风格的测试用例,InstrumentationTestRunner只能运行junit3类型的测试用例)
    }
    构建类型{
        release版本{
            不启用混淆(混淆其实是包括了代码压缩、代码混淆以及资源压缩等的优化过程)
            混淆文件 获取默认混淆文件('proguard-android-optimize.txt')以及'proguard-rules.pro'
        }
    }
}
依赖{
    安装启用 文件树(目录: 'libs',包含目录下的: ['*.jar'])(即工程libs目录下的所有jar包)

    安装启用 'androidx.appcompat:appcompat:1.1.0'
    安装启用 'com.google.android.material:material:1.0.0'
    安装启用 'androidx.constraintlayout:constraintlayout:1.1.3'
    安装启用 'androidx.navigation:navigation-fragment:2.0.0'
    安装启用 'androidx.navigation:navigation-ui:2.0.0'
    安装启用测试 'junit:junit:4.12'
    安装启用android测试 'androidx.test.ext:junit:1.1.1'
    安装启用android测试 'androidx.test.espresso:espresso-core:3.2.0'
}

➍MyFirstApplication/gradle/wrapper/gradle-wrapper.properties

#Mon May 04 13:45:45 CST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
#Mon May 04 13:45:45 CST 2020
指派的根目录=GRADLE_USER_HOME(环境变量)
指派的路径=(根目录/)wrapper/dists
zip压缩文件存储根目录=GRADLE_USER_HOME(环境变量)
zip压缩文件路径=(根目录/)wrapper/dists
=>指派路径与压缩包的路径是相同的!
指派的Url地址=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip(注意冒号要转义)

我们看一下Mac系统根目录下的.gradle目录(我们可以看到.gradle文件夹是隐藏的文件):

android studio2022 使用 android studiod_android_03

各个版本对应如下:

'com.android.tools.build:gradle:【3.6.3】'

compileSdkVersion 【29】

buildToolsVersion "【29.0.3】"

distributionUrl=https\://services.gradle.org/distributions/gradle-【5.6.4】-all.zip

android studio2022 使用 android studiod_android_04

  

android studio2022 使用 android studiod_根目录_05

  

android studio2022 使用 android studiod_android_06

'androidx.appcompat:appcompat:【1.1.0】'
'com.google.android.material:material:【1.0.0】'
'androidx.constraintlayout:constraintlayout:【1.1.3】'
'androidx.navigation:navigation-fragment:【2.0.0】'
'androidx.navigation:navigation-ui:【2.0.0】'
'junit:junit:【4.12】'
'androidx.test.ext:junit:【1.1.1】'
'androidx.test.espresso:espresso-core:【3.2.0】'

android studio2022 使用 android studiod_根目录_07

  

添加依赖:

android studio2022 使用 android studiod_Gradle_08

  

android studio2022 使用 android studiod_根目录_09

可更新的依赖:

android studio2022 使用 android studiod_Gradle_10

添加一个Module(模块):

android studio2022 使用 android studiod_根目录_11

  

android studio2022 使用 android studiod_Gradle_12

android studio2022 使用 android studiod_根目录_13

添加这个library后它的build.gradle:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        minSdkVersion 22
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles 'consumer-rules.pro'
    }

    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.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}