Android开发-工程结构

发布于:2025-09-02 ⋅ 阅读:(18) ⋅ 点赞:(0)

一、项目视图模式

在开始之前,确保你的 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 参数、构建选项等。
gradlewgradlew.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 定义(如 shapeselector)。
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:尺寸定义(如 16dp24sp)。
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 模块特有的配置。
  • 关键配置包括
    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 属性

五、结语

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


网站公告

今日签到

点亮在社区的每一天
去签到