1. Android项目结构深度解析
作为一名从Eclipse时代就开始接触Android开发的老兵,我见证了Android项目结构的多次演变。如今的Android Studio+Gradle组合虽然强大,但对新手来说项目目录确实有些复杂。今天我就带大家彻底拆解一个标准Android项目的骨架,让你从根上理解每个文件和文件夹的作用。
1.1 核心目录结构详解
先来看最关键的几个目录,这些构成了Android应用的"五脏六腑":
code复制project-root/
├── app/ # 主模块
│ ├── manifests/ # AndroidManifest.xml所在处
│ ├── kotlin+java/ # 源码目录(逻辑视图)
│ ├── res/ # 资源文件大本营
│ └── build.gradle.kts # 模块级构建配置
├── gradle/
├── build.gradle.kts # 项目级构建配置
└── settings.gradle.kts # 模块包含声明
1.1.1 manifests目录的玄机
manifests/AndroidManifest.xml是每个Android应用的身份证,它定义了:
- 包名(package) - 应用的唯一标识
- 组件声明(Activity/Service等) - 相当于应用的"器官"
- 权限要求 - 应用需要的能力清单
- 应用元数据 - 图标、主题等基础配置
经验之谈:在Android 12+之后,部分组件(如BroadcastReceiver)需要添加
android:exported显式声明,否则安装时会直接报错。这是很多新手容易踩的坑。
1.1.2 源码目录的演进史
早期的纯Java项目只有src/main/java,Kotlin加入后多了src/main/kotlin。Android Studio为了简化视图,将它们合并显示为kotlin+java这个逻辑节点。但实际上:
-
物理路径仍然保持分离:
bash复制src/ main/ java/ # Java源码 kotlin/ # Kotlin源码 -
Gradle编译时会自动合并两类源码
-
在同一个包(package)下可以混用Java和Kotlin文件
避坑指南:如果发现IDE无法识别Kotlin文件,检查build.gradle是否应用了kotlin插件:
kotlin复制plugins { id("org.jetbrains.kotlin.android") version "1.9.0" }
1.1.3 自动生成的代码
java (generated)目录存放的是各种工具链自动生成的代码,主要包括:
-
View Binding - 为每个XML布局生成绑定类
java复制// 例如ActivityMainBinding.java public final class ActivityMainBinding { private final ConstraintLayout rootView; public final Button myButton; // ... } -
Room DAO实现 - 数据库访问接口的具体实现
-
Dagger组件 - 依赖注入框架生成的代码
-
Proto数据类 - Protocol Buffers的Java实现
重要原则:所有generated目录下的文件都不应该手动修改,它们会在每次编译时重新生成。如果发现生成代码有问题,应该去修改源文件(如XML或注解)。
1.2 资源管理艺术
res/目录是Android应用的资源仓库,采用严格的类型划分:
code复制res/
├── drawable/ # 图片和矢量图
├── layout/ # UI布局文件
├── values/ # 字符串、颜色等
│ ├── str
