2、项目结构解析:了解Android项目目录结构(src、res、manifest、gradle),掌握各文件作用
刚入行那会儿,我打开一个Android项目,第一反应是——这文件夹也太多了吧?
src、res、manifest、gradle……每个目录下面还套着子目录。说实话,如果不搞清楚这些文件是干嘛的,你连代码该往哪儿写都不知道。
今天我就带你把这个结构彻底捋一遍。搞懂了,后面写代码就顺了。
核心要点:Android项目结构可以归纳为四大模块——源代码(src)、资源文件(res)、清单文件(manifest)、构建配置(gradle)。这四块各司其职,缺一不可。
2.1 src/ 目录——你的代码大本营
src 是 source 的缩写,说白了就是放源代码的地方。Android Studio 默认会帮你建好三个子目录:
- main/java/ —— 主代码目录。你写的 Activity、Fragment、ViewModel 全放这儿。
- test/ —— 单元测试目录。跑 JUnit 测试的地方。
- androidTest/ —— 仪器测试目录。需要 Android 环境才能跑的测试。
我个人习惯在 main/java 下面按功能分包,比如 ui/、data/、utils/。这样找代码快很多。
小技巧:如果你用 Kotlin,代码文件会放在 main/kotlin/ 下。其实 Java 和 Kotlin 可以混用,但建议统一语言,别给自己挖坑。
2.2 res/ 目录——资源文件集中营
res 是 resource 的缩写。Android 把资源文件单独拎出来,是为了方便适配不同屏幕、语言、主题。
常见的子目录有这些:
| 目录名 | 存放内容 | 常见文件 |
|---|---|---|
| layout/ | 界面布局文件 | activity_main.xml, fragment_home.xml |
| drawable/ | 图片、形状、选择器 | ic_launcher.png, bg_button.xml |
| values/ | 字符串、颜色、尺寸、主题 | strings.xml, colors.xml, themes.xml |
| mipmap/ | 应用图标(带适配密度) | ic_launcher.webp |
| menu/ | 菜单布局 | main_menu.xml |
| anim/ | 补间动画 | fade_in.xml, slide_out.xml |
嗯,这里要注意:drawable 和 mipmap 的区别。mipmap 专门放应用图标,系统会根据屏幕密度自动选择合适尺寸。drawable 放其他图片和自定义图形。
避坑指南:我曾经在 drawable 里放了应用图标,结果在部分手机上图标显示模糊。后来才发现应该放 mipmap 目录下。记住:图标用 mipmap,其他图片用 drawable。
2.3 AndroidManifest.xml——应用的身份证
这个文件在 src/main/ 目录下。它是 Android 系统的入口文件,系统启动你的应用前,会先读这个文件。
它主要干这几件事:
- 声明应用的包名、版本号
- 注册四大组件(Activity、Service、BroadcastReceiver、ContentProvider)
- 声明需要的权限(比如网络、相机、定位)
- 指定应用的最低 SDK 版本和目标 SDK 版本
看个最简单的例子:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.MyApp">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
你想想看,如果你忘记在 Manifest 里注册 Activity,运行时直接崩溃。我刚开始学 Android 时就踩过这个坑,找了半天才发现是 Manifest 漏了。
2.4 gradle/ 目录——构建配置中心
Gradle 是 Android 的构建工具。说白了,它负责把你的代码、资源、依赖打包成 APK。
项目里会有好几个 gradle 文件,别搞混了:
| 文件 | 作用 | 修改频率 |
|---|---|---|
| build.gradle(项目级) | 配置全局插件和仓库 | 低 |
| build.gradle(模块级) | 配置依赖、SDK版本、签名 | 高 |
| settings.gradle | 声明项目包含哪些模块 | 低 |
| gradle.properties | 配置 Gradle 运行参数 | 低 |
模块级的 build.gradle 是你最常打交道的。加依赖、改版本号、配签名,全在这儿。
android {
compileSdk 34
defaultConfig {
applicationId "com.example.myapp"
minSdk 21
targetSdk 34
versionCode 1
versionName "1.0"
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.11.0'
}
个人经验:我建议把依赖版本号提取到项目级的 build.gradle 里,用 ext 块统一管理。这样升级版本时改一处就行,不会出现依赖版本冲突。
2.5 其他重要目录
除了上面四大块,还有几个目录也值得了解:
- libs/ —— 放本地 jar 或 aar 包。虽然现在都用远程依赖,但偶尔还是会用到。
- assets/ —— 放原始文件,比如字体、数据库文件。和 res 不同,assets 里的文件不会生成 R 资源 ID,需要通过 AssetManager 读取。
- build/ —— 编译产物目录。不用手动修改,Gradle 会自动生成。
避坑指南:我曾经把字体文件放到了 res/font/ 下,结果在低版本 Android 上无法加载。后来改放到 assets/ 下,用 Typeface.createFromAsset() 加载,问题解决。记住:assets 适合放需要按路径读取的原始文件。
2.6 总结一下
Android 项目结构其实不复杂。记住四个核心目录:
- src/ —— 写代码的地方
- res/ —— 放资源的地方
- AndroidManifest.xml —— 应用的身份证
- gradle/ —— 构建配置中心
搞懂这些,你就能在项目里自由穿梭了。后面写代码时,你会越来越熟悉它们。
公众号:蓝海资料掘金营,微信deep3321