当前位置: 首页>后端>正文

【Android -- 工具】Gradle文件

build.gradle : 文件包含项目构建所使用的脚本。 settings.gradle :文件将包含必要的一些设置,例如,任务或项目之间的依懒关系等。 settings.gradle编译优先级高于build.gradle

一、工作流程

1.1 初始化阶段

首先解析settings.gradle

1.2 Configration阶段:

  • 解析每个Project中的build.gradle,解析过程中并不会执行各个build.gradle中的task。

经过Configration阶段,Project之间及内部Task之间的关系就确定了。一个 Project 包含很多 Task,每个 Task 之间有依赖关系。Configuration会建立一个有向图来描述 Task 之间的依赖关系,所有Project配置完成后,会有一个回调project.afterEvaluate,表示所有的模块都已经配置完了

1.3 执行Task任务

二 settings.gradle

settings.gradle 用于配置 project。

2.1 文件配置

  • 初始化后的样式
// 插件管理
pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
// 依赖关系解析管理
dependencyResolutionManagement {
   repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
}
// 父模块的名称
rootProject.name = "PageGridView"
//项目模块
include ':app'

  • 多模块
// 为指定父模块的名称 平台根
rootProject.name = 'project-root'
//包含子系统以及模块
include ':project-core'
//Hello系统模块的加载
include ':project-hello'
//World系统模块的加载
include ':project-world'

三 根目录build.gradle

和 settings.gradle 在同一目录下的 build.gradle 是一个顶级的 build 配置文件,在这里可以为所有的 project 以及 module 配置一些常用的配置。

plugins {
    id 'com.android.application' version '7.4.2' apply false
    id 'com.android.library' version '7.4.2' apply false
}


四 模块级 build.gradle

除了在目录下的 build 文件,gradle 支持对每个 module 进行配置,主要有三个重要的代码块:plugin、android 和 dependencies

4.1 演示

plugins {
    id 'com.android.application'
    id 'com.android.library'
}

android {
    namespace 'com.project'
    compileSdk 33

    defaultConfig {
        applicationId "com.project"
        minSdk 24
        targetSdk 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

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

dependencies {

    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

4.2 plugin {...}

指定用的是哪个插件

  • com.android.application Android APP插件(打包得到的是.apk文件)

  • com.android.library Android库插件(打包得到的是.aar文件)

  • 其他插件

kotlin-android : kotlin bugly.gradle : 腾讯bugly walle.gradle : 美团walle打包

4.3 android {...}

4.3.1 默认项

配置了所有 android 构建所需的参数,这也是 Android DSL 的入口点。

  • 默认情况下,只有 compileSdk 和 buildtoolsVersion 这两个属性是必须的。 compileSdk : 基于哪个 SDK 编译,设置编译时用的Android版本 buildToolsVersion: 基于哪个构建工具版本进行构建的
4.3.2 defaultConfig {...}
  • applicationId 配置包名的
  • versionCode 版本号
  • versionName 版本名称
  • minSdkVersion app能够运行的最小版本
  • targetSdkVersion 目标设备sdk(向前兼容)

补充说明: 一般 minSdkVersion < targetSdkVersion <= compileSdkVersion

  • miniSdkVersion: app能运行的最小版本,比如 minSdkVersion=18(Android 4.3)那么在低于这个系统版本的设备上就会提示不能安装或运行。
  • compileSdkVersion: 是我们告诉 Gradle,我们是用哪一版本的Android Sdk去编译程序的,可以使用这个版本的 API,比如我们使用的是 7.0 的版本 compileSdkVersion=24,那么我们对于拍照裁剪图片等功能的操作,就可以使用 FileProvider了。
  • targetSdkVersion: 系统通过 targetSdkVersion 来保证 Android 的向前兼容性,在 Android4.4 之后的设备上,系统会判断你的 targetSdkVersion 是否小于 19,如果小于的话,那就按照 19 之前的 api 方法,如果大于等于 19,那么就按照之后的 api 方法来走,保证了程序运行的一致性。也就是向前兼容性。
4.3.3 buildTypes {...}

buildTypes 是构建类型,默认情况下,Android Plugin 会自动给项目构建 debug 和 release 版本,可以在这里面启用混淆,启用 zipAlign 以及配置签名信息等。

4.4 dependencies {...}

dependencies DSL 就不属于 Android 专有的配置了,它是 Gradle API 的一部分,这里定义了该 module 需要依赖的 jar,aar,jcenter库信息。

dependencies {
    // 本地项目依赖
    implementation project(":mylibrary")

    // 本地包依赖
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    // 远程包依赖
    implementation 'com.example.android:app-magic:12.3'
}

  • 本地项目依赖 这声明了对一个名为“mylibrary”(此名称必须与在您的 settings.gradle文件中使用 include: 定义的库名称相符)的 Android 库模块的依赖关系。在构建您的应用时,构建系统会编译该库模块,并将生成的编译内容打包到 APK 中。

  • 本地包依赖

// 第一种方式
implementation fileTree(dir: 'libs', include: ['*.jar'])
// 第二种
implementation files('libs/foo.jar', 'libs/bar.jar')

Gradle 声明了对项目的 module_name/libs/ 目录中 JAR 文件的依赖关系(因为 Gradle 会读取 build.gradle 文件的相对路径)。

  • 远程包依赖
// 依赖关系解析管理
dependencyResolutionManagement {
   repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
}


Gralde 支持从 Maven 或 jcenter 仓库中拉取依赖文件,首先需将仓库添加到列表中,再在 dependencies 中添加声明的包


https://www.xamrdz.com/backend/34z1935229.html

相关文章: