【App开发】05:Android Studio项目配置文件全解析( App 项目结构)
第五部分:项目配置文件全解析
在 Android 开发中,配置文件是项目的 “骨架与规则”,它们定义了应用的身份、构建流程、依赖关系、资源样式等核心信息,下面逐一解析关键配置文件的作用、位置及相互关系。
一、核心配置文件分类与作用
1. 应用身份与组件配置:AndroidManifest.xml
- 位置:
app → manifests → AndroidManifest.xml - 作用:
- 声明应用的核心组件:Activity(界面)、Service(后台服务)、BroadcastReceiver(广播接收器)、ContentProvider(内容提供者);
- 配置应用元数据:应用 ID、版本号(
versionCode/versionName)、应用名称、图标、权限(如android.permission.INTERNET); - 定义组件间关系:如 Activity 的启动模式、Intent 过滤器(用于隐式跳转);
- 声明硬件 / 软件特性:如支持的屏幕方向、最低 SDK 版本(
minSdkVersion)。
- 示例片段:
xml
<?xml version="1.0" encoding="utf-8"?> <!-- 根标签:manifest,所有组件和配置都包裹在这里 --> <!-- xmlns:android:引入Android系统自带的属性命名空间(必须有) --> <manifest xmlns:android="http://schemas.android.com/apk/res/android"<!-- package:应用的基础包名(唯一标识应用,与build.gradle的applicationId最终一致) --><!-- 作用:区分不同应用,比如手机上安装的多个APP靠包名识别,不能重复 -->package="com.example.myapp"><!-- application标签:配置应用全局信息,所有组件(Activity/Service等)都在这里声明 --><application<!-- android:icon:应用图标(引用res/mipmap目录下的图片资源) -->android:icon="@mipmap/ic_launcher"<!-- android:label:应用名称(引用strings.xml中的字符串资源,避免硬编码) -->android:label="@string/app_name"<!-- android:theme:应用全局主题(引用styles.xml中的样式,控制界面整体风格) -->android:theme="@style/Theme.MyApp"<!-- android:allowBackup:是否允许系统备份应用数据(默认true,测试环境可关闭) -->android:allowBackup="true"<!-- android:supportsRtl:是否支持从右到左的布局(适配阿拉伯语等语言,默认true) -->android:supportsRtl="true"<!-- android:usesCleartextTraffic:是否允许HTTP明文请求(默认false,需联网时可设为true) -->android:usesCleartextTraffic="true"><!-- activity标签:声明一个Activity(界面容器),每个界面都要在这里注册 --><activity<!-- android:name:Activity的完整类名(.MainActivity等价于com.example.myapp.MainActivity) -->android:name=".MainActivity"<!-- android:exported:是否允许其他应用启动该Activity(入口Activity必须设为true) -->android:exported="true"<!-- android:screenOrientation:屏幕方向(portrait竖屏,landscape横屏,默认unspecified自动) -->android:screenOrientation="portrait"><!-- intent-filter:意图过滤器,声明该Activity的"功能角色" --><intent-filter><!-- action:声明该Activity是应用的"入口"(MAIN表示主入口) --><action android:name="android.intent.action.MAIN" /><!-- category:声明该Activity会显示在系统 launcher(桌面图标)中 --><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><!-- 若有其他Activity/Service,需在这里继续声明,示例:<activity android:name=".SecondActivity" android:exported="false" /><service android:name=".MyService" />--><!-- 声明应用需要的权限,示例(联网权限):<uses-permission android:name="android.permission.INTERNET" />--></application></manifest>
关键解说:
- 必须注册组件:任何 Activity、Service 等组件,不在这里声明就无法使用(运行时会崩溃);
- 入口 Activity:只有配置了
<action android:name="android.intent.action.MAIN" />和<category android:name="android.intent.category.LAUNCHER" />的 Activity,才会作为 APP 启动的第一个界面; - package 与 applicationId:早期两者一致,现在
applicationId在build.gradle中配置(唯一标识应用,决定 APP 在应用商店的唯一 ID),package主要用于引用资源和组件。
2. Gradle 构建系统配置(项目构建的 “总指挥”)
Android 项目基于Gradle构建,以下是核心 Gradle 配置文件:
(1)settings.gradle.kts
- 位置:项目根目录 →
settings.gradle.kts - 作用:
- 声明项目包含的模块(Module),如
include ':app'表示项目包含app模块(多模块项目可声明多个模块,如include ':app', ':utils'); - 配置仓库地址(可选,也可在 project 级 build.gradle 中配置)。
- 声明项目包含的模块(Module),如
- 示例片段:
kotlin
// 项目名称(会显示在Android Studio的项目面板中,可自定义) rootProject.name = "MyApp"// 声明项目包含的模块(Module):":app"表示包含名为"app"的模块 // 多模块项目可添加多个,比如 include(":app", ":utils", ":network") // 每个模块对应一个独立的功能模块(如工具类模块、网络模块) include(":app")// 可选配置:仓库地址(若在project级build.gradle中未配置,可在这里添加) // pluginManagement { // repositories { // google() // mavenCentral() // gradlePluginPortal() // } // }
(2)build.gradle.kts (Project: MyApp)
- 位置:项目根目录 →
build.gradle.kts (Project: MyApp) - 作用:
- 配置项目级构建脚本,如 Gradle 插件版本(
classpath("com.android.tools.build:gradle:8.2.0")); - 声明全局仓库地址(如 Google、MavenCentral),所有模块的依赖都会从这些仓库拉取;
- 配置项目级依赖(如 Android Gradle 插件、Kotlin 插件等)。
- 配置项目级构建脚本,如 Gradle 插件版本(
- 示例片段:
kotlin
// buildscript:配置Gradle构建脚本自身的依赖(如Android Gradle插件) buildscript {// repositories:声明依赖的仓库地址(Gradle从这些仓库下载插件/依赖库)repositories {google() // Google官方仓库(包含Android SDK相关依赖)mavenCentral() // 中央仓库(包含绝大多数第三方开源库)}// dependencies:构建脚本需要的依赖(如Android Gradle插件、Kotlin插件)dependencies {// Android Gradle插件(AGP):版本需与Android Studio兼容(如AS 2023.1对应AGP 8.2+)classpath("com.android.tools.build:gradle:8.2.0")// Kotlin Gradle插件:用于编译Kotlin代码,版本需与项目中Kotlin版本一致classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0")} }// allprojects:配置所有模块的通用设置(如所有模块共用的仓库地址) allprojects {repositories {google()mavenCentral()// 若需要引用本地库或私有仓库,可在这里添加,示例:// maven { url "https://jitpack.io" } // Jitpack仓库(很多开源库托管在这里)} }// 可选:清理构建产物的任务(执行./gradlew clean时会触发) tasks.register("clean", Delete::class) {delete(rootProject.buildDir) // 删除根目录下的build文件夹(构建产物存放目录) }
(3)build.gradle.kts (Module:app)
- 位置:
app → build.gradle.kts (Module:app) - 作用:
- 配置模块级构建规则,是 Gradle 配置的 “核心战场”:
- 编译配置:
compileSdk(编译 SDK 版本)、defaultConfig(应用 ID、版本号、目标 SDK 等); - 依赖管理:
dependencies块中声明模块依赖(如implementation("androidx.core:core-ktx:1.10.0")); - 构建类型:
buildTypes(如debug和release的签名、混淆配置); - 产品风味(可选,多渠道打包时使用)。
- 编译配置:
- 配置模块级构建规则,是 Gradle 配置的 “核心战场”:
- 示例片段:
kotlin
// 应用插件:决定该模块的类型和功能 plugins {// com.android.application:标记该模块是"应用模块"(可独立打包成APK)// 若为库模块(供其他模块依赖),则改为 com.android.libraryid("com.android.application")// org.jetbrains.kotlin.android:启用Kotlin语言支持(编译Kotlin代码)id("org.jetbrains.kotlin.android") }// android:核心配置块(模块的编译、构建、资源等规则都在这里) android {// 编译SDK版本(必须是本地已下载的SDK版本,如34对应Android 14)// 建议设置为最新稳定版,能使用最新的Android APIcompileSdk = 34// defaultConfig:默认配置(所有构建类型都共用的基础配置)defaultConfig {// 应用ID(APP的唯一标识,上传应用商店时不能修改)// 格式:域名反转(如com.example.myapp),避免与其他APP冲突applicationId = "com.example.myapp"// 最小支持的SDK版本(如24对应Android 7.0,低于该版本的手机无法安装)minSdk = 24// 目标SDK版本(表示APP已适配到该版本的Android系统,建议与compileSdk一致)targetSdk = 34// 版本号(整数,用于应用内版本判断,如1、2、3,必须递增)versionCode = 1// 版本名称(显示给用户的版本,如"1.0"、"1.0.1",可自定义格式)versionName = "1.0"// 测试相关配置(新手可暂时忽略)testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"}// buildTypes:构建类型(默认有debug和release两种,可自定义)buildTypes {// debug构建类型(开发调试用)debug {// isMinifyEnabled:是否启用代码混淆(debug模式默认false,混淆会影响调试)isMinifyEnabled = false// isDebuggable:是否允许调试(debug模式默认true,release模式默认false)isDebuggable = true}// release构建类型(发布上线用)release {// isMinifyEnabled:启用代码混淆(保护代码,减小APK体积)isMinifyEnabled = true// proguardFiles:指定混淆规则文件(系统默认规则+自定义规则)proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), // 系统默认混淆规则"proguard-rules.pro" // 自定义混淆规则(在app目录下))// 可选:配置签名信息(发布到应用商店必须签名,新手后续再学)// signingConfig = signingConfigs.getByName("release")}}// compileOptions:Java编译选项(指定Java版本)compileOptions {sourceCompatibility = JavaVersion.VERSION_1_8 // 源Java版本targetCompatibility = JavaVersion.VERSION_1_8 // 目标Java版本}// kotlinOptions:Kotlin编译选项(指定Kotlin版本)kotlinOptions {jvmTarget = "1.8" // 与Java编译版本保持一致}// 资源配置(指定资源目录、语言、屏幕适配等,默认无需修改)sourceSets {named("main") {res.srcDirs("src/main/res") // 资源文件目录(默认路径)}} }// dependencies:模块依赖配置(引用第三方库、系统库、其他模块) dependencies {// 系统/支持库依赖(AndroidX相关,官方推荐的替代旧版Support库)implementation("androidx.core:core-ktx:1.10.0") // Kotlin扩展库(简化Android API调用)implementation("androidx.appcompat:appcompat:1.6.1") // 基础兼容库(Activity、ActionBar等)implementation("com.google.android.material:material:1.9.0") // Material Design组件库(按钮、卡片等)// 测试依赖(新手可暂时忽略)testImplementation("junit:junit:4.13.2")androidTestImplementation("androidx.test.ext:junit:1.1.5")androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") }
(4)gradle-wrapper.properties
- 位置:
gradle → wrapper → gradle-wrapper.properties - 作用:
- 配置Gradle Wrapper 版本,确保团队成员使用统一的 Gradle 版本(避免因版本差异导致构建失败);
distributionUrl指定 Gradle 的下载地址和版本(如https\://services.gradle.org/distributions/gradle-8.4-bin.zip)。
- 示例片段:
-
# Gradle Wrapper的版本(必须与项目兼容,如AGP 8.2.0对应Gradle 8.4+) # 作用:确保所有开发者使用相同的Gradle版本,避免版本差异导致构建失败 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists # 下载Gradle的地址(bin表示仅二进制文件,体积小;all包含源码和文档,体积大) distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists # 可选:Gradle运行时的JVM参数(如内存分配,默认无需修改) # org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
-
(5)gradle.properties
- 位置:项目根目录 →
gradle.properties - 作用:
- 配置Gradle 运行时属性,如 JVM 内存分配(
org.gradle.jvmargs=-Xmx2048m); - 启用 / 禁用特性(如
android.enableJetifier=true用于兼容旧版支持库); - 定义全局变量(可在 build.gradle 中引用,如
MY_APP_KEY=abc123)。
- 配置Gradle 运行时属性,如 JVM 内存分配(
- 示例片段:
-
# 项目级全局属性(可在build.gradle中通过project.property("key")引用)# JVM内存分配(Gradle构建时使用的最大内存,避免内存不足导致构建失败) org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8# 启用AndroidX(替代旧版Support库,必须设为true,Android Studio新建项目默认开启) android.useAndroidX=true# 启用Jetifier(自动将旧版Support库的依赖转换为AndroidX,兼容第三方库) android.enableJetifier=true# 可选:定义全局变量(示例) # MY_APP_VERSION=1.0 # 在build.gradle中引用:versionName = project.property("MY_APP_VERSION") as String
-
(6)libs.versions.toml
- 位置:项目根目录 →
libs.versions.toml - 作用:
- (Android Studio Arctic Fox 及以上支持)集中管理依赖版本,避免在 build.gradle 中分散定义版本号,方便统一维护;
- 示例:
toml
# [versions]:集中管理依赖版本号(所有版本在这里统一维护,方便修改) [versions] androidGradlePlugin = "8.2.0" # Android Gradle插件版本 kotlin = "1.9.0" # Kotlin版本 coreKtx = "1.10.0" # core-ktx库版本 appcompat = "1.6.1" # appcompat库版本 material = "1.9.0" # Material库版本# [libraries]:定义依赖的"别名+坐标"(module级build.gradle中通过别名引用) [libraries] # 格式:别名 = { module = "依赖坐标", version.ref = "versions中的key" } coreKtx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" } appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" } material = { module = "com.google.android.material:material", version.ref = "material" }# [plugins]:定义插件的"别名+坐标"(build.gradle中通过别名引用插件) [plugins] androidApplication = { id = "com.android.application", version.ref = "androidGradlePlugin" } kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } - 在 build.gradle 中引用:
implementation(libs.coreKtx)- 引用示例(在
module级build.gradle中) -
plugins {alias(libs.plugins.androidApplication) // 替代 id("com.android.application")alias(libs.plugins.kotlinAndroid) // 替代 id("org.jetbrains.kotlin.android") }dependencies {implementation(libs.coreKtx) // 替代 implementation("androidx.core:core-ktx:1.10.0")implementation(libs.appcompat)implementation(libs.material) }
- 引用示例(在
(7)local.properties
- 位置:项目根目录 →
local.properties - 作用:
- 配置本地开发环境路径,如 Android SDK 的位置(
sdk.dir=/Users/yourname/Library/Android/sdk); - 该文件不上传至版本控制(因每个开发者的 SDK 路径可能不同)。
- 配置本地开发环境路径,如 Android SDK 的位置(
- 示例:
-
# 本地Android SDK的路径(自动生成,无需手动修改) # 每个开发者的SDK安装路径可能不同,所以该文件不上传至Git(.gitignore中已排除) sdk.dir=/Users/yourname/Library/Android/sdk # Mac/Linux示例 # sdk.dir=C:\\Users\\yourname\\AppData\\Local\\Android\\Sdk # Windows示例# 可选:其他本地配置(如NDK路径,新手可忽略) # ndk.dir=/Users/yourname/Library/Android/sdk/ndk/25.1.8937393
-
3. 代码混淆配置:proguard-rules.pro
- 位置:
app → proguard-rules.pro - 作用:
- 在release 构建时混淆代码(将类名、方法名替换为无意义的字符),保护代码知识产权;
- 配置保留规则(如某些第三方库、自定义类不能混淆,否则会运行崩溃)。
- 示例片段:
pro
# 混淆规则文件:用于release构建时"混淆代码"(将类名、方法名改为a、b、c等无意义字符) # 核心目的:1. 保护代码知识产权;2. 减小APK体积;3. 防止逆向工程# 1. 保留系统组件不被混淆(系统需要通过完整类名找到组件,混淆后会崩溃) -keep public class * extends android.app.Activity # 保留所有Activity子类 -keep public class * extends android.app.Service # 保留所有Service子类 -keep public class * extends android.content.BroadcastReceiver # 保留广播接收器 -keep public class * extends android.content.ContentProvider # 保留内容提供者# 2. 保留自定义组件/工具类(根据自己的项目修改,示例) -keep class com.example.myapp.utils.** { *; } # 保留utils包下所有类和方法 -keep class com.example.myapp.model.** { *; } # 保留数据模型类(序列化/反序列化需保留)# 3. 保留注解相关代码(混淆会破坏注解逻辑) -keepattributes *Annotation*# 4. 保留泛型(避免泛型类型擦除导致崩溃) -keepattributes Signature# 5. 保留第三方库不被混淆(很多第三方库已自带混淆规则,或需要手动保留) # 示例:保留Gson库(JSON解析库) # -keep class com.google.gson.** { *; } # -keep class com.google.gson.reflect.TypeToken { *; }# 6. 保留枚举类(枚举的values()和valueOf()方法会被混淆) -keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String); }# 7. 优化选项(默认启用,可根据需求调整) -optimizationpasses 5 # 混淆优化次数 -dontusemixedcaseclassnames # 不使用混合大小写类名(避免Windows系统大小写不敏感问题) -dontskipnonpubliclibraryclasses # 不跳过非公共库的类
4. 资源配置:res目录下的配置文件
res目录用于存放应用的非代码资源(如字符串、颜色、布局、图片等),核心配置文件集中在values和xml目录:
(1)values目录(字符串、颜色、尺寸、样式等)
strings.xml:定义应用中所有字符串(如应用名称、按钮文字),支持多语言适配;xml
<?xml version="1.0" encoding="utf-8"?> <resources><!-- 应用名称(被AndroidManifest.xml引用) --><string name="app_name">我的第一个APP</string><!-- 按钮文字(被activity_main.xml引用,避免硬编码) --><string name="button_click">点击我试试</string><!-- 提示文本(可在代码中通过getString(R.string.toast_msg)引用) --><string name="toast_msg">你成功触发了点击事件!</string><!-- 长文本(用CDATA包裹,支持换行等特殊字符) --><string name="long_text"><![CDATA[这是一段很长的文本,支持换行显示,不需要转义特殊字符。]]></string> </resources>-
解说:
- 所有界面文字都放在这里,方便多语言适配(如新建
res/values-zh-rCN/strings.xml存放中文,values-en/strings.xml存放英文); - 避免硬编码(直接在 XML / 代码中写文字),后续修改文字时只需改这里,无需到处找。
- 所有界面文字都放在这里,方便多语言适配(如新建
-
colors.xml:定义颜色值(如主题色、文本色),方便统一修改;xml
<?xml version="1.0" encoding="utf-8"?> <resources><!-- 主题色(应用的主要颜色,如ActionBar、按钮背景) --><color name="color_primary">#6200EE</color> <!-- 紫色 --><!-- 主题色深色版(用于状态栏、导航栏) --><color name="color_primary_dark">#3700B3</color><!-- 辅助色(用于强调元素,如选中状态、提示文本) --><color name="color_accent">#03DAC6</color> <!-- 青色 --><!-- 文本颜色 --><color name="text_black">#000000</color> <!-- 黑色 --><color name="text_gray">#666666</color> <!-- 灰色 --><color name="text_white">#FFFFFF</color> <!-- 白色 --><!-- 背景色 --><color name="bg_gray">#F5F5F5</color> <!-- 浅灰色背景 --> </resources>-
解说
- 集中管理颜色,后续修改主题色时,只需改这里的颜色值,整个 APP 的相关颜色都会同步变化;
- 颜色格式:
#RRGGBB(6 位)或#AARRGGBB(8 位,AA 是透明度,00 全透明,FF 不透明)。
-
dimens.xml:定义尺寸值(如边距、控件大小),适配不同屏幕密度;xml
<?xml version="1.0" encoding="utf-8"?> <resources><!-- 边距(margin/padding) --><dimen name="margin_small">8dp</dimen> <!-- 小边距 --><dimen name="margin_medium">16dp</dimen> <!-- 中等边距(最常用) --><dimen name="margin_large">24dp</dimen> <!-- 大边距 --><!-- 文本大小 --><dimen name="text_size_small">12sp</dimen> <!-- 小文本 --><dimen name="text_size_normal">16sp</dimen> <!-- 正常文本(最常用) --><dimen name="text_size_large">20sp</dimen> <!-- 大文本 --><!-- 控件尺寸 --><dimen name="button_height">48dp</dimen> <!-- 按钮高度 --><dimen name="image_size">100dp</dimen> <!-- 图片尺寸 --> </resources>-
解说
- 尺寸单位:
dp:布局尺寸(适配不同屏幕密度,推荐用);sp:文本尺寸(适配系统字体缩放,推荐用);- 避免用
px(像素,不适配不同屏幕);
- 统一尺寸命名,让布局更规范,适配更简单。
- 尺寸单位:
-
styles.xml:定义界面样式(如 Activity 主题、控件风格),实现界面风格统一;xml
<?xml version="1.0" encoding="utf-8"?> <resources><!-- 应用全局主题(被AndroidManifest.xml的android:theme引用) --><!-- parent:继承自Material Design主题(提供默认的ActionBar、控件样式等) --><style name="Theme.MyApp" parent="Theme.MaterialComponents.DayNight.NoActionBar"><!-- 主色调(对应colors.xml中的color_primary) --><item name="colorPrimary">@color/color_primary</item><!-- 主色调深色版(状态栏颜色) --><item name="colorPrimaryVariant">@color/color_primary_dark</item><!-- 辅助色(选中状态、按钮点击色等) --><item name="colorAccent">@color/color_accent</item><!-- 窗口背景色 --><item name="android:windowBackground">@color/bg_gray</item><!-- 状态栏文字颜色(true:深色文字;false:白色文字) --><item name="android:windowLightStatusBar">true</item></style><!-- 自定义按钮样式(可在布局文件中引用) --><style name="MyButtonStyle" parent="Widget.MaterialComponents.Button"><item name="android:layout_width">match_parent</item> <!-- 宽度占满父容器 --><item name="android:layout_height">@dimen/button_height</item> <!-- 固定高度 --><item name="android:textSize">@dimen/text_size_normal</item> <!-- 文本大小 --><item name="android:layout_marginHorizontal">@dimen/margin_medium</item> <!-- 水平边距 --><item name="backgroundTint">@color/color_primary</item> <!-- 按钮背景色 --><item name="android:textColor">@color/text_white</item> <!-- 按钮文字色 --></style> </resources>-
解说
- 主题(Theme):全局样式(控制整个 APP 的界面风格);
- 样式(Style):局部样式(控制单个控件的风格,如自定义按钮);
- 布局中引用样式:
android:theme="@style/MyButtonStyle"(给控件应用自定义样式)。
-
(2)xml目录(系统配置文件)
- 存放系统级配置文件,如偏好设置(
preferences.xml)、权限配置、自定义视图属性等; - 示例:偏好设置配置(用户设置项)。
二、配置文件间的依赖与协作关系
Android 项目的配置文件是分层且相互依赖的,核心协作逻辑如下:
-
构建流程的驱动:
settings.gradle.kts→ 确定项目模块 →project级build.gradle→ 配置全局构建规则 →module级build.gradle→ 配置模块构建与依赖 → 最终编译出 APK。
-
资源与代码的关联:
res/values中的资源(如strings.xml)被AndroidManifest.xml(应用名称)和布局文件(如activity_main.xml)引用;- 布局文件(
activity_main.xml)被MainActivity加载,实现 “界面与逻辑” 的绑定。
-
构建与运行的联动:
local.properties提供 SDK 路径 →gradle-wrapper.properties指定 Gradle 版本 → Gradle 读取build.gradle的配置 → 编译代码并打包 APK;proguard-rules.pro在release构建时被module级build.gradle引用,完成代码混淆。
三、总结:配置文件的 “角色分工”
| 配置文件类型 | 核心作用 | 关键协作关系 |
|---|---|---|
| 应用身份配置 | AndroidManifest.xml | 声明组件、权限、版本,依赖res资源和build.gradle的版本配置 |
| Gradle 构建配置 | 各build.gradle、gradle-* | 驱动项目编译、依赖管理,是连接 “代码” 与 “APK” 的桥梁 |
| 资源配置 | res/values、res/xml | 为界面、逻辑提供字符串、颜色、样式等资源,被Manifest和代码引用 |
| 混淆配置 | proguard-rules.pro | 由module级build.gradle在 release 构建时触发,保护代码安全 |
理解这些配置文件的作用和关系,是从 “会写代码” 到 “能掌控项目” 的关键一步。新手可先聚焦AndroidManifest.xml和module级build.gradle,再逐步深入其他配置,就能对 Android 项目的 “运转逻辑” 了如指掌。
