02 项目结构解析¶
跑通第一个项目后,我们来拆解一个安卓工程(Android 视图下)各部分是什么。
2.1 顶层结构¶
MyFirstApp/
├── app/ # 主模块,绝大多数代码都在这
├── gradle/ # Gradle 版本配置
├── build.gradle.kts # 项目级构建脚本(或 .gradle)
├── settings.gradle.kts # 声明包含哪些模块
└── gradlew # Gradle 命令行包装器(Linux/macOS 用 ./gradlew)
2.2 app 模块内部¶
app/
├── src/
│ ├── main/
│ │ ├── java/com/example/myfirstapp/
│ │ │ └── MainActivity.java # Java 源码
│ │ ├── res/ # 资源:布局/图片/文字/颜色
│ │ │ ├── layout/ # XML 布局文件
│ │ │ ├── values/ # strings.xml / colors.xml / themes.xml
│ │ │ ├── drawable*/ # 图片、形状
│ │ │ └── mipmap*/ # 应用图标
│ │ └── AndroidManifest.xml # 清单
│ └── test/ / androidTest/ # 单元测试 / 仪器测试
├── build.gradle.kts # app 模块构建脚本(依赖、SDK 版本)
└── proguard-rules.pro # 混淆规则(发布用)
2.3 AndroidManifest.xml 要点¶
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:label="@string/app_name" <!-- 应用显示名 -->
android:icon="@mipmap/ic_launcher"> <!-- 应用图标 -->
<activity android:name=".MainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
- 每个 Activity 都要在这里注册,忘了注册启动会崩(
ClassNotFoundException/无法找到 Activity); MAIN + LAUNCHER组合表示这是 App 的入口 Activity;- Android 12+ 要求显式声明
android:exported。
2.4 res 资源:代码怎么引用¶
资源文件编译后都能用 R.xxx.yyy 引用(R 是自动生成的资源类):
| 资源 | 例子 | Java 里引用 |
|---|---|---|
| 布局 | res/layout/activity_main.xml |
R.layout.activity_main |
| 文字 | res/values/strings.xml 的 <string name="app_name"> |
R.string.app_name |
| 颜色 | res/values/colors.xml 的 <color name="red"> |
R.color.red |
| 图片 | res/drawable/logo.png |
R.drawable.logo |
为什么要把文字放 strings.xml 而不是写死在代码里? 方便多语言、统一管理,也符合规范。
2.5 Gradle:依赖与 SDK 版本¶
app/build.gradle.kts 关键部分:
android {
namespace = "com.example.myfirstapp" // 包名
compileSdk = 34 // 编译用的 SDK 版本
defaultConfig {
applicationId = "com.example.myfirstapp" // 应用唯一 ID
minSdk = 24 // 最低支持版本
targetSdk = 34 // 目标版本
versionCode = 1 // 版本号(整数,升级要递增)
versionName = "1.0" // 版本名(给人看)
}
}
dependencies {
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.11.0")
// 想加第三方库就在这里加,比如图片加载 Glide、网络 OkHttp
}
新版 AS 用 Kotlin DSL(
.kts);老项目可能是 Groovy(.gradle),写法略不同但概念一样。想加第三方依赖,去 https://mvnrepository.com 或库官网复制坐标即可。
本章练习:打开自己的项目,找到 AndroidManifest.xml、MainActivity.java、activity_main.xml、build.gradle.kts,对照本文各看一遍,把 versionName 改成 0.1 试试同步。