一、项目视图模式
在开始之前,确保你的 Project 面板使用的是 【Android】 视图(默认)。这是最常用的视图,它将相关文件按功能逻辑分组展示。
💡 你也可以切换到 【Project】 视图查看完整的文件系统结构。
二、顶级项目结构
一个标准的 Android 项目包含以下顶级目录和文件:
项目 | 说明 |
---|---|
.gradle/ |
Gradle 构建系统的缓存目录(自动生成,无需手动修改)。 |
.idea/ |
Android Studio 的 IDE 配置文件(自动生成,与具体 IDE 相关)。 |
app/ |
应用模块的主目录,包含所有源代码、资源和配置。这是我们最常操作的部分。 |
gradle/ |
包含 Gradle Wrapper 的 jar 包和属性文件,用于在没有全局安装 Gradle 的机器上运行构建。 |
build.gradle (Project) |
项目级别的构建脚本,定义适用于所有模块的全局配置,如仓库(repositories)和依赖管理插件(dependencies)。 |
settings.gradle |
定义哪些模块(Module)属于这个项目。对于单模块项目,通常只包含 include ':app' 。 |
gradle.properties |
Gradle 构建的属性配置文件,可以设置 JVM 参数、构建选项等。 |
gradlew , gradlew.bat |
Gradle Wrapper 的 Unix 和 Windows 脚本,用于在命令行执行构建任务。 |
✅ 核心 :我们开发的重心几乎都在
app/
模块中。
三、应用模块结构 (app/
)
进入 app/
目录,这是整个 Android 应用的核心。其结构如下:
1. src/
目录(源码与资源)
这是存放所有源代码和资源文件的地方。主要包含 main
、androidTest
、test
等子目录。
✅ src/main/
- 主要源码与资源
这是应用的主体部分。
子目录/文件 | 说明 |
---|---|
java/ |
存放所有的 Kotlin 或 Java 源代码文件。包结构(如 com.example.myapp )对应于此。 |
res/ |
资源(Resources)目录,存放所有非代码资源。这是最复杂的部分,详见下文。 |
AndroidManifest.xml |
应用的清单文件,是整个应用的"身份证"和"配置中心"。它声明了: |
- 应用的包名(package name) | |
- 应用图标(android:icon )和名称(android:label ) |
|
- 所需的权限(<uses-permission> ) |
|
- 应用组件(Activities, Services, BroadcastReceivers, ContentProviders) | |
- 应用的主题(theme)和启动 Activity | |
assets/ |
存放原始资源文件,这些文件会原封不动地打包进 APK。常用于存放数据库文件、HTML 文件、字体文件等。可通过 AssetManager 访问。 |
✅ res/
目录详解
res/
目录下的每个子目录都有特定用途,命名规则严格。
目录 | 用途与说明 |
---|---|
drawable/ |
存放图片资源(PNG, JPG, GIF)和 可绘制对象(Drawable)的 XML 定义 (如 shape , selector )。 |
layout/ |
存放 Activity 和 Fragment 的布局 XML 文件 (如 activity_main.xml )。定义了用户界面的结构。 |
mipmap/ |
专门存放应用图标(Launcher Icon) 。与 drawable 不同,系统会根据设备分辨率从不同 mipmap 文件夹(hdpi, xhdpi, xxhdpi, xxxhdpi)中选择合适的图标。推荐将 ic_launcher.png 放在这里。 |
values/ |
存放各种 值资源 的 XML 文件。 |
- strings.xml :应用中所有的字符串文本。强烈建议不要在代码中硬编码字符串! |
|
- colors.xml :颜色值定义(如 #FF0000 )。 |
|
- dimens.xml :尺寸定义(如 16dp , 24sp )。 |
|
- styles.xml :样式和主题定义。 |
|
- themes.xml :主题资源(现代项目可能使用此文件)。 |
|
anim/ |
存放视图动画(View Animation)的 XML 文件(如平移、旋转、透明度变化)。 |
animator/ |
存放属性动画(Property Animation)的 XML 文件。 |
raw/ |
存放原始音频、视频或其他文件。与 assets/ 类似,但可以通过 R.raw.filename 直接引用。 |
xml/ |
存放其他任意的 XML 配置文件,如 SharedPreferences 的配置、搜索配置等。 |
💡 最佳实践 :将资源分类存放,使用清晰的命名(如
btn_submit_background.xml
,ic_settings.xml
),并在strings.xml
中管理所有文本。
✅ src/androidTest/
- Android 测试
- 包含在真实设备或模拟器上运行的 Instrumented Tests(仪器化测试)。
- 使用 Android SDK 中的测试框架(如 JUnit, Espresso)。
- 代码通常放在
java/
目录下,与主代码包名一致。
✅ src/test/
- 本地单元测试
- 包含在本地 JVM 上运行的 Unit Tests(单元测试)。
- 用于测试纯 Kotlin/Java 逻辑,不依赖 Android SDK。
- 使用 JUnit 框架。
2. build/
目录
- 存放 Gradle 构建过程中生成的所有文件,如编译后的 class 文件、打包的 APK、资源索引等。
- 这是自动生成的目录,不应手动修改。清理项目(Clean Project)会删除此目录。
3. libs/
目录
- 用于存放 第三方 JAR 或 AAR 库文件。
- 如果将库文件放在这里,需要在
build.gradle
中通过implementation files('libs/xxx.jar')
引用。 - 现代开发更推荐使用远程依赖(如 Maven Central) ,通过
implementation 'groupId:artifactId:version'
添加。
4. build.gradle
(Module: app)
-
模块级别的构建脚本 ,定义了
app
模块特有的配置。 -
关键配置包括 :
Groovyandroid { compileSdk 34 // 编译时使用的 Android SDK 版本 defaultConfig { applicationId "com.example.myapp" // 应用的唯一 ID minSdk 24 // 最低支持的 Android 版本 targetSdk 34 // 目标 Android 版本 versionCode 1 // 内部版本号(整数) versionName "1.0" // 用户可见的版本名 } buildTypes { release { minifyEnabled false // 是否启用代码混淆 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } dependencies { implementation 'androidx.core:core-ktx:1.13.1' implementation 'androidx.appcompat:appcompat:1.7.0' implementation 'com.google.android.material:material:1.12.0' // ... 其他依赖 }
-
dependencies
块是添加项目依赖(库)的地方。
5. proguard-rules.pro
- 如果启用了代码混淆(
minifyEnabled true
),此文件用于编写 ProGuard 混淆规则,防止关键代码被错误混淆。
四、总结:一张图看懂工程结构
MyApplication/ <-- 项目根目录
├── app/ <-- 应用模块
│ ├── build/ <-- 构建输出(自动生成)
│ ├── libs/ <-- 第三方库(JAR/AAR)
│ ├── src/
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml <-- 应用清单
│ │ │ ├── java/ <-- Kotlin/Java 源码
│ │ │ │ └── com/example/myapp/
│ │ │ │ ├── MainActivity.kt
│ │ │ │ └── ...
│ │ │ ├── res/ <-- 资源文件
│ │ │ │ ├── drawable/ <-- 图片/Drawable
│ │ │ │ ├── layout/ <-- 布局文件
│ │ │ │ ├── mipmap/ <-- 应用图标
│ │ │ │ ├── values/ <-- 字符串/颜色/尺寸
│ │ │ │ └── ...
│ │ │ └── assets/ <-- 原始资源
│ │ ├── androidTest/ <-- Android 测试
│ │ └── test/ <-- 本地单元测试
│ └── build.gradle <-- 模块构建脚本
├── gradle/ <-- Gradle Wrapper
├── .gradle/ <-- Gradle 缓存
├── build.gradle <-- 项目构建脚本
├── settings.gradle <-- 项目设置
└── gradle.properties <-- Gradle 属性
五、结语
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!