Android Studio 项目目录结构全方位详解

Android Studio 项目目录结构全方位详解

文章目录

  • [Android Studio 项目目录结构全方位详解](#Android Studio 项目目录结构全方位详解)
    • 前言
    • 一、根目录结构(单模块项目)
      • [1. 核心配置文件](#1. 核心配置文件)
      • [2. 自动生成的临时文件(完全不需要修改)](#2. 自动生成的临时文件(完全不需要修改))
    • [二、app 模块目录结构详解](#二、app 模块目录结构详解)
      • [1. `build/` ------ 自动生成的构建目录](#1. build/ —— 自动生成的构建目录)
      • [2. `libs/` ------ 本地第三方库目录](#2. libs/ —— 本地第三方库目录)
      • [3. `src/` ------ 源代码 & 资源](#3. src/ —— 源代码 & 资源)
        • [3.1 `main/` ------ 正式代码和资源目录](#3.1 main/ —— 正式代码和资源目录)
          • [① `java / kotlin` 目录 ------ 业务代码](#① java / kotlin 目录 —— 业务代码)
          • [② `AndroidManifest.xml` ------ 应用的"身份证"](#② AndroidManifest.xml —— 应用的“身份证”)
          • [③ `res/` ------ 所有资源文件(界面、图片、文字)](#③ res/ —— 所有资源文件(界面、图片、文字))
        • [3.2 `test/` ------ 单元测试目录](#3.2 test/ —— 单元测试目录)
        • [3.3 `androidTest/` ------ 仪器化测试目录](#3.3 androidTest/ —— 仪器化测试目录)
      • [4. `build.gradle` (模块级别) ------ 最重要的配置文件](#4. build.gradle (模块级别) —— 最重要的配置文件)
      • [5. `proguard-rules.pro` ------ 混淆规则文件](#5. proguard-rules.pro —— 混淆规则文件)
      • [6. `consumer-rules.pro`](#6. consumer-rules.pro)
    • [三、Java 项目与 Kotlin 项目的目录结构差异](#三、Java 项目与 Kotlin 项目的目录结构差异)
    • 四、单模块项目与多模块项目的目录结构差异
      • [1. 单模块项目结构](#1. 单模块项目结构)
      • [2. 多模块项目结构](#2. 多模块项目结构)
      • [3. 核心差异对比](#3. 核心差异对比)
    • [五、为什么 Android 项目采用这样的目录结构?](#五、为什么 Android 项目采用这样的目录结构?)
    • 六、总结

前言

刚接触 Android 开发时,很多人都会被 Android Studio 里密密麻麻的目录和文件吓到------.ideagradleappbuild......到底哪个才是写代码的地方?哪个能改,哪个绝对不能动?

这篇文章会用最白话的方式 ,带你一次性看懂 Android 项目的每一个目录和文件,并把最核心的 app 模块拆开来揉碎了讲。无论你是刚刚新建第一个空项目,还是准备从 Java 转向 Kotlin、从单模块转向多模块,这篇都值得收藏。


一、根目录结构(单模块项目)

这是你在 Android Studio 中新建一个 "Empty Activity" 项目后看到的最顶层目录结构,我会按照重要性排序讲解。

1. 核心配置文件

文件/目录名 自动生成 可手动修改 核心作用 存在必要性
.idea/ ⚠️ 部分可改 Android Studio 的项目配置目录 存储 IDE 的所有项目级设置,包括代码风格、运行配置、版本控制集成、依赖索引等。没有它 Android Studio 无法正确识别和打开项目。
app/ 应用的主模块目录 包含应用的所有源代码、资源文件和模块级构建配置。这是你 90% 以上开发工作会进行的地方。
gradle/ ⚠️ 极少修改 Gradle 包装器目录 包含 Gradle Wrapper 的 jar 包和配置文件,确保所有开发者使用相同版本的 Gradle 构建项目,避免"在我电脑上能跑"的问题。
.gitignore Git 版本控制忽略文件 指定哪些文件和目录不需要提交到 Git 仓库。如果没有它,会把大量自动生成的临时文件和本地配置文件提交到仓库,导致仓库臃肿和团队协作冲突。
build.gradle (Project级别) 项目级构建配置文件 定义整个项目的全局构建配置,包括构建脚本依赖、仓库地址、全局变量等。
gradle.properties Gradle 全局属性文件 配置 Gradle 构建系统的全局参数,如 JVM 内存、并行构建、签名信息等。
gradlew Mac/Linux 系统的 Gradle 包装器脚本 无需本地安装 Gradle 即可执行构建命令。
gradlew.bat Windows 系统的 Gradle 包装器脚本 同上,Windows 平台专用。
settings.gradle Gradle 项目设置文件 声明项目中包含哪些模块,以及依赖解析的全局配置。
local.properties ⚠️ 本地专用 本地环境配置文件 存储 Android SDK 的路径等本地特定配置。绝对不能提交到 Git 仓库,因为每个开发者的本地环境都不同。

2. 自动生成的临时文件(完全不需要修改)

文件/目录名 自动生成 可手动修改 核心作用
.gradle/ Gradle 构建缓存目录
build/ 项目级构建输出目录

二、app 模块目录结构详解

app 目录是整个 Android 项目的灵魂,你绝大部分时间都在和它打交道。先看它的整体结构:

复制代码
app/
├── build/              👉 构建产物(自动生成)
├── libs/               👉 本地依赖包(手动放)
├── src/                👉 源代码 + 资源(核心中的核心)
├── build.gradle        👉 模块构建配置(必须改)
├── proguard-rules.pro  👉 代码混淆规则(发布用)
└── consumer-rules.pro  👉 库模块混淆规则(很少用)

下面逐一拆解。

1. build/ ------ 自动生成的构建目录

作用 :存放编译后的代码、资源、APK、中间文件,完全由 Android Studio 自动生成。

包含内容 :最终 APK 文件、R 文件、编译后的 class/dex 文件、资源编译产物等。

关键点

  • ✅ 自动生成
  • ❌ 永远不要手动修改
  • ✅ 可以随时删除(删除后下次编译会自动恢复)
  • ✅ 提交 Git 时必须忽略

为什么必须存在?

Android 构建系统需要一个统一目录存放编译结果,否则无法打包 APK。

2. libs/ ------ 本地第三方库目录

作用 :存放你手动下载的 .jar(Java库)或 .aar(Android库)。

使用场景 :某些第三方 SDK 只提供离线包,无法在线依赖;或者企业内部私有 SDK。

如何使用 :在 build.gradle 中添加:

gradle 复制代码
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])

为什么需要它?

并不是所有库都在公共 Maven 仓库,必须提供本地包导入方式。

3. src/ ------ 源代码 & 资源

复制代码
src/
├── main/           👉 正式代码
├── test/           👉 单元测试
└── androidTest/    👉 仪器化测试
3.1 main/ ------ 正式代码和资源目录
复制代码
main/
├── java (或 kotlin)/    业务代码
├── res/                 资源文件
└── AndroidManifest.xml  应用清单文件
java / kotlin 目录 ------ 业务代码

所有 Activity、Fragment、ViewModel、工具类、网络请求、数据类等代码都放在这里。例如:

复制代码
com.xxx.myapp/
├── ui/              Activity、Fragment
├── viewmodel/       ViewModel
├── model/           数据模型
├── network/         网络
├── db/              数据库
└── utils/           工具类

为什么代码必须放这里? 这是 Gradle 编译时默认扫描源代码的路径,放别的地方无法编译。

AndroidManifest.xml ------ 应用的"身份证"

必背作用

  1. 声明 App 包名
  2. 声明四大组件(Activity/Service/Receiver/Provider)
  3. 声明权限
  4. 声明应用图标、名称、主题
  5. 配置启动项、深度链接等

为什么必须存在? Android 系统不认代码,只认清单。没有它,App 无法安装、无法启动。

res/ ------ 所有资源文件(界面、图片、文字)

res 目录是 Android 最有特色的设计,它让代码和资源彻底分离。

复制代码
res/
├── drawable/      图片、形状、Selector
├── layout/        UI 布局 XML
├── mipmap/        应用图标
├── values/
│   ├── strings.xml  文字
│   ├── colors.xml   颜色
│   ├── dimens.xml   尺寸
│   └── styles.xml   样式/主题
└── xml/            配置文件
  • drawable/:放图片(png、jpg、webp、svg)、按钮效果 selector、形状 shape、渐变等。Android 会根据设备屏幕密度自动匹配合适图片,保证清晰度且不浪费内存。
  • layout/ :所有界面 XML(如 activity_main.xmlfragment_home.xml)。用 XML 是为了将代码与界面分离,方便可视化和屏幕适配。
  • mipmap/:专门存放应用启动图标。系统启动器需要更高优先级的图标资源,因此单独放在这里。
  • values/ :存放字符串、颜色、尺寸、样式。
    • strings.xml:统一管理所有文字,方便做多语言。
    • colors.xml:统一颜色,换肤更容易。
    • dimens.xml:统一尺寸,适配各种屏幕。
    • styles.xml:统一样式,避免重复写属性。
      把文字、颜色、尺寸抽出来的原因:便于全局修改、支持多语言、支持暗黑模式、便于团队协作。

除了这些基础目录,还可以有:

  • values-night/:夜间模式专用的颜色、样式。
  • layout-land/:横屏专用的布局文件。
  • drawable-hdpi/:为不同屏幕密度提供不同分辨率的图片。
3.2 test/ ------ 单元测试目录

存放不需要 Android 系统环境的测试代码,直接运行在 JVM 上,执行速度极快。适合测试计算、工具类、数据转换等纯逻辑。

3.3 androidTest/ ------ 仪器化测试目录

存放需要 Android 系统环境的测试代码,如 UI 测试、数据库测试,必须在模拟器或真机上运行。

4. build.gradle (模块级别) ------ 最重要的配置文件

用来配置当前模块的构建信息:

  • compileSdk / minSdk / targetSdk
  • 应用包名
  • 版本号 versionCode、versionName
  • 第三方依赖
  • 混淆、多渠道、签名等

为什么必须存在? Gradle 靠它知道如何把你的代码打包成 APK。

5. proguard-rules.pro ------ 混淆规则文件

作用:压缩代码、混淆类名和方法名、移除无用代码,从而减小包体积、防止反编译。

什么时候用? 打正式包(release)时自动启用。

6. consumer-rules.pro

如果你的模块作为库(library)被其它项目引用,才会用到。普通应用开发中几乎可以忽略。


三、Java 项目与 Kotlin 项目的目录结构差异

Android Studio 新建项目默认使用 Kotlin,但也完全兼容 Java。两者的差异很小:

差异点 Java 项目 Kotlin 项目
源代码目录 只有 src/main/java/ src/main/kotlin/,也可以同时保留 java/ 进行混合开发
默认文件类型 生成 .java 文件 生成 .kt 文件
构建配置 不需要 Kotlin 插件 build.gradle 中会自动添加 Kotlin 插件和依赖
测试目录 测试代码放在 java/ 测试代码可以放在 java/kotlin/

重要说明:Kotlin 与 Java 完全兼容,你可以在同一个项目中同时使用两种语言,互相调用毫无障碍。


四、单模块项目与多模块项目的目录结构差异

1. 单模块项目结构

复制代码
MyApp/
├── .idea/
├── app/  # 唯一的模块
│   ├── src/
│   └── build.gradle
├── gradle/
├── build.gradle (Project级别)
└── settings.gradle

2. 多模块项目结构

复制代码
MyApp/
├── .idea/
├── app/  # 主应用模块
│   ├── src/
│   └── build.gradle
├── feature_login/  # 登录功能模块
│   ├── src/
│   └── build.gradle
├── feature_home/  # 首页功能模块
│   ├── src/
│   └── build.gradle
├── common_base/  # 公共基础模块
│   ├── src/
│   └── build.gradle
├── gradle/
├── build.gradle (Project级别)
└── settings.gradle  # 包含所有模块的声明

3. 核心差异对比

对比项 单模块项目 多模块项目
模块数量 只有一个 app 模块 有一个主 app 模块和多个功能模块/库模块
settings.gradle 只包含 include ':app' 包含所有模块声明,如 include ':app', ':feature_login', ':common_base'
依赖关系 没有模块间依赖 模块之间可以相互依赖,如 app 依赖 feature_login
构建速度 项目变大后构建变慢 支持增量构建,只构建修改过的模块,速度更快
代码复用 较困难 可将公共代码提取到基础模块,方便复用
团队协作 容易出现代码冲突 不同团队负责不同模块,减少冲突

五、为什么 Android 项目采用这样的目录结构?

这套目录结构是 Google 多年实践优化出来的,背后有着清晰的设计思想:

  1. 清晰的职责分离

    代码与资源分离、构建配置与源代码分离,使得项目易于管理和扩展。

  2. 标准化的资源管理

    通过目录名后缀(如 -zh-land-xhdpi)实现多语言、横竖屏、多密度的自动适配,无需修改一行代码。

  3. 模块化的设计思想

    从一开始就鼓励将应用拆分成独立模块,提高可维护性、可复用性,支持增量构建和动态功能模块。

  4. 与 Android 系统架构一致

    AndroidManifest.xml 对应系统的组件管理,res/ 对应资源管理,四大组件的组织方式也贴合系统生命周期机制。


六、总结

Android Studio 的项目目录结构是精心设计的标准化产物,它既是开发规范,也是 Android 系统设计思想的体现。

对于新人,推荐从单模块项目入手,先把 app/src/main 下的目录和文件玩熟,再逐步接触多模块和分层架构。

一句话记住核心:

  • app/ 是你的整个应用
  • src/main 里写代码、写界面、放资源
  • res/ 管图片、文字、布局、颜色
  • AndroidManifest.xml 是应用的身份证
  • build.gradle 告诉系统怎么打包

把这套目录结构吃透,你就真正推开了 Android 开发的大门。


如果这篇文章对你有帮助,欢迎点赞、收藏、关注,接下来我还会继续分享 Android 资源命名规范、MVVM 架构实战、屏幕适配完全指南等内容!

相关推荐
霸道流氓气质1 小时前
通义灵码 IDEA 插件完全使用指南
java·ide·intellij-idea
__Witheart__2 小时前
Android编译错误:Soong阶段因缺失res目录导致panic (Iwlan模块)
android
酿情师3 小时前
逆向exe文件:CRT 初始化流程详细分析
android·软件构建·逆向·re·crt‘
C+-C资深大佬4 小时前
在PyCharm中创建虚拟环境的具体步骤是什么?
ide·python·pycharm
问心无愧05135 小时前
ctf show web入门71
android·前端·笔记
夜勤月5 小时前
AQS 与 ThreadPoolExecutor 深度拆解:JDK 高并发底层设计精髓
android·java·开发语言
Yeyu5 小时前
Android 卡顿诊断 SDK:从痛点出发的设计思考
android
上天_去_做颗惺星 EVE_BLUE6 小时前
Ubuntu Android 虚拟机安装使用教程
android·linux·测试工具·ubuntu·安卓
我命由我123456 小时前
Android 开发问题:Could not find com.github.PicnicSupermarket:FingerPaintView:1.2.
android·github·android studio·安卓·android jetpack·android-studio·android runtime