Android Gradle 开发与应用 (二): Android 项目结构与构建配置
目录
1. Android 项目的 Gradle 文件结构
1.1 项目根目录
1.2 模块目录
2. Gradle 构建配置详解
2.1 配置 Android 项目的 build.gradle
2.2 配置模块的 build.gradle
2.3 使用 productFlavors 管理多版本应用
2.4 使用 buildConfigField 注入构建常量
在 Android 开发中,Gradle 是一个强大的构建工具,它不仅能帮助我们管理项目的依赖,还能简化构建流程,提高开发效率。然而,要充分利用 Gradle 的优势,了解 Android 项目的结构和 Gradle 的构建配置至关重要。本文将详细解析 Android 项目的 Gradle 文件结构,逐步讲解如何配置构建脚本,使你能更高效地管理和构建 Android 项目。
1. Android 项目的 Gradle 文件结构
1.1 项目根目录
一个典型的 Android 项目由以下几个主要部分组成:
- 根目录 (Project Root):包含项目级别的配置文件,如
settings.gradle
和build.gradle
。 - 模块 (Modules):每个模块都有自己的
build.gradle
文件,通常包括app
模块和其他库模块。
在项目根目录下,主要的 Gradle 文件有:
settings.gradle
:列出项目中包含的所有模块。build.gradle
(Project-level):配置项目级别的构建设置和依赖。
// settings.gradle
include ':app', ':libraryModule'// 根目录下的 build.gradle
buildscript {repositories {google()mavenCentral()}dependencies {classpath 'com.android.tools.build:gradle:7.0.0'// 其他依赖}
}allprojects {repositories {google()mavenCentral()}
}task clean(type: Delete) {delete rootProject.buildDir
}
1.2 模块目录
每个模块(例如 app
)有自己的 build.gradle
文件,用于配置模块级别的构建设置。
// app 模块的 build.gradle
plugins {id 'com.android.application'id 'kotlin-android'
}android {compileSdkVersion 30defaultConfig {applicationId "com.example.myapp"minSdkVersion 21targetSdkVersion 30versionCode 1versionName "1.0"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}
}dependencies {implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.21"implementation 'androidx.core:core-ktx:1.6.0'implementation 'androidx.appcompat:appcompat:1.3.1'// 其他依赖
}
2. Gradle 构建配置详解
2.1 配置 Android 项目的 build.gradle
在项目根目录的 build.gradle
文件中,我们主要配置构建脚本的仓库和依赖。buildscript
块用于声明构建脚本自身的依赖,而 allprojects
块则指定所有模块共享的仓库配置。
buildscript {repositories {google()mavenCentral()}dependencies {classpath 'com.android.tools.build:gradle:7.0.0'// 其他构建脚本依赖}
}allprojects {repositories {google()mavenCentral()}
}task clean(type: Delete) {delete rootProject.buildDir
}
2.2 配置模块的 build.gradle
在模块的 build.gradle
文件中,我们定义具体的应用或库模块的构建配置。以下是一个标准的应用模块配置示例:
plugins {id 'com.android.application'id 'kotlin-android'
}android {compileSdkVersion 30defaultConfig {applicationId "com.example.myapp"minSdkVersion 21targetSdkVersion 30versionCode 1versionName "1.0"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}
}dependencies {implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.21"implementation 'androidx.core:core-ktx:1.6.0'implementation 'androidx.appcompat:appcompat:1.3.1'// 其他依赖
}
2.3 使用 productFlavors 管理多版本应用
通过 productFlavors
,我们可以在同一个项目中管理多个应用版本(
,如免费版和付费版。每个 flavor 可以有不同的配置,如应用 ID 和构建类型。
android {compileSdkVersion 30defaultConfig {applicationId "com.example.myapp"minSdkVersion 21targetSdkVersion 30versionCode 1versionName "1.0"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}debug {applicationIdSuffix ".debug"versionNameSuffix "-debug"}}productFlavors {free {applicationId "com.example.myapp.free"versionNameSuffix "-free"}paid {applicationId "com.example.myapp.paid"versionNameSuffix "-paid"}}
}dependencies {implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.21"implementation 'androidx.core:core-ktx:1.6.0'implementation 'androidx.appcompat:appcompat:1.3.1'// 其他依赖
}
通过 productFlavors
,我们可以在同一个项目中轻松生成多个版本的应用,避免重复配置和代码。
2.4 使用 buildConfigField 注入构建常量
buildConfigField
可以在构建时向应用中注入常量,方便在代码中使用不同的配置。
android {compileSdkVersion 30defaultConfig {applicationId "com.example.myapp"minSdkVersion 21targetSdkVersion 30versionCode 1versionName "1.0"buildConfigField "String", "API_URL", "\"https://api.example.com/\""}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'buildConfigField "String", "API_URL", "\"https://api.example.com/\""}debug {buildConfigField "String", "API_URL", "\"https://api.dev.example.com/\""}}
}
在代码中,我们可以通过 BuildConfig
类访问这些常量:
val apiUrl = BuildConfig.API_URL