2、项目结构解析:了解Android项目目录结构(src、res、manifest、gradle),掌握各文件作用

刚入行那会儿,我打开一个Android项目,第一反应是——这文件夹也太多了吧?

src、res、manifest、gradle……每个目录下面还套着子目录。说实话,如果不搞清楚这些文件是干嘛的,你连代码该往哪儿写都不知道。

今天我就带你把这个结构彻底捋一遍。搞懂了,后面写代码就顺了。

核心要点:Android项目结构可以归纳为四大模块——源代码(src)、资源文件(res)、清单文件(manifest)、构建配置(gradle)。这四块各司其职,缺一不可。

Android 项目核心结构 src/ 源代码目录 Java/Kotlin 文件 res/ 资源文件目录 布局/图片/字符串 AndroidManifest 清单文件 组件注册/权限声明 gradle/ 构建配置 依赖/版本/签名 main/java/ test/ androidTest/ layout/ drawable/ values/ mipmap/ <application> <activity> <uses-permission> build.gradle(项目) build.gradle(模块) settings.gradle gradle.properties 四大模块协同工作,构成完整的 Android 项目

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