Android开发-工程结构

一、项目视图模式

在开始之前,确保你的 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/ 目录(源码与资源)

这是存放所有源代码和资源文件的地方。主要包含 mainandroidTesttest 等子目录。

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 模块特有的配置。

  • 关键配置包括

    Groovy 复制代码
    android {
        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 属性

五、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

相关推荐
真鬼1231 天前
【Unity安卓】Unity 嵌入 Android Studio 完整流程
android·unity·android studio
星间都市山脉1 天前
Windows 环境 Android 系统 APK 签名操作文档
android·windows
shuaiqinke1 天前
【分享】OrbitV工具箱| 手表手环全能适配 |表盘应用一键装
android·智能手机
子非吾喵1 天前
HBuilder X本地打包的资源放到Android Studio本地打包的记录
android·ide·android studio
simplepeng1 天前
我们都知道但总是忽略的5个Jetpack Compose细节
android·android jetpack
刮风那天1 天前
Android 如何提高进程优先级避免被查杀?
android
修行者对6662 天前
安卓阿里云镜像
android
刮风那天2 天前
Android AMS创建进程不用Binder而用Socket?
android·java·binder
知行合一。。。2 天前
Python--05--面向对象(继承,多态)
android·开发语言·python