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.propertiesGradle 构建的属性配置文件,可以设置 JVM 参数、构建选项等。
gradlewgradlew.batGradle 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" // 应用的唯一 IDminSdk 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 属性

五、结语

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97551.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql的内置函数

文章目录mysql的内置函数时间函数1. 返回值的数据类型和格式2. 功能侧重点3. 函数别名情况我现在想给一个日期加上十天&#xff0c;然后输出加上十天之后的日期&#xff0c;我该怎么做&#xff1f;我现在想给一个日期减去两天&#xff0c;然后输出减去两天之后的日期&#xff0…

【动态规划】子序列问题

一、[最长递增子序列](https://leetcode.cn/problems/longest-increasing-subsequence/description/)二、[摆动序列](https://leetcode.cn/problems/wiggle-subsequence/description/)三、[最长递增子序列的个数](https://leetcode.cn/problems/number-of-longest-increasing-s…

P2P技术应用:去中心化

P2P技术应用&#xff1a;https://www.bilibili.com/video/BV1WH4y1Y7i9 P2P与下载器 P2P技术实现的下载协议&#xff1a; 1、种子文件 2、磁力 3、电骡 播放器&#xff1a; 快车、电骡、迅雷 BT&#xff08;种子&#xff09;下载的基本技术原理 网盘与P2P技术 网盘公司的主…

数据结构(C语言篇):(八)栈

目录 前言 一、概念与结构 二、栈的实现 2.1 头文件的准备 2.2 函数的实现 2.2.1 STInit( )函数&#xff08;初始化&#xff09; 2.2.2 STDestroy( )函数&#xff08;销毁&#xff09; 2.2.3 STPush( )函数&#xff08;入栈&#xff09; 2.2.4 STPop( )函数&#…

Elasticsearch数据迁移快照方案初探(一):多节点集群配置踩坑记

背景介绍 在生产环境中&#xff0c;我们经常需要将测试环境的Elasticsearch索引数据迁移到生产环境。这次我们遇到了一个典型的多节点集群快照配置问题&#xff1a;需要为所有节点添加path.repo配置&#xff0c;但过程中遇到了各种挑战。 问题描述 我们的Elasticsearch集群包含…

leedcode 算法刷题第二十天

39. 组合总和 class Solution { public:vector<vector<int>> result;vector<int> temp;void backtructing(vector<int>& candidates, int target, int sum,int start){if(sumtarget){result.push_back(temp);return;}if(sum>target){return;}f…

身份证实名认证API集成—身份核验接口-网络平台安全合规

在数字化浪潮席卷各行各业的今天&#xff0c;网络空间的安全问题日益受到关注。为防范网络诈骗、虚假注册、身份盗用等风险&#xff0c;国家陆续出台多项法律法规&#xff0c;如《网络安全法》《个人信息保护法》等&#xff0c;明确要求互联网服务提供者落实用户真实身份核验机…

谷歌TIGER爆火!生成式召回颠覆推荐系统:用语义ID破解冷启动+多样性难题,3大数据集性能碾压传统模型

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》&#xff08;跟我一起学人工智能&#xff09;【陈敬雷编著】【清华大学出版社】 清华《GPT多模态大模型与AI Agent智能体》书籍配套视频课程【陈敬雷…

分享一个实用的B站工具箱(支持音视频下载等功能)

文章目录 📖 介绍 📖 🏡 演示环境 🏡 📒 一款实用的B站工具箱 📒 💥 项目亮点 💥 🛠️ 下载与安装 🚀 使用指南 📢 注意事项 ⚓️ 相关链接 ⚓️ 📖 介绍 📖 很多小伙伴在B站追番或者学习时,总会遇到一个很头疼的问题:想把视频下载到本地,要么被限…

大话 IOT 技术(4) -- 答疑篇

文章目录前言手机能与设备直接通信吗多协议能统一用一个吗假设我们统一用http协议假设我们统一用mqtt协议bypass服务端和设备不能mqtt直接通信设备必有wifi 和蓝牙功能设备为什么不能自己连接网络配网模式是什么后话当你迷茫的时候&#xff0c;请点击 物联网目录大纲 快速查看前…

机器视觉学习-day14-绘制图像轮廓

1. 轮廓的概念轮廓是目标物体或者区域在图像外部的边界线&#xff0c;通常由一系列像素点相连组成&#xff0c;这些像素点共同构成了一个封闭的形状&#xff0c;这样形状就是轮廓。轮廓与边缘不同&#xff1a;轮廓是连续的&#xff0c;边缘可以连续也可以离散轮廓是完整的&…

Linux shell getopts 解析命令行参数

Linux shell getopts 解析命令行参数getopts语法 getopts 选项字符串 名称 [ 参数 ...]示例1&#xff08;有前置冒号&#xff09;: while getopts ":hdo:" optname; do ...... done示例1&#xff08;无前置冒号&#xff09; while getopts "hdo:" optname…

DeepInteraction++基于多模态交互的自动驾驶感知与规划框架

DeepInteraction++基于多模态交互的自动驾驶感知与规划框架 1 论文核心概念 DeepInteraction++ 提出了一种名为"模态交互"(modality interaction)的新策略,用于自动驾驶中的多模态(LiDAR 和相机)感知任务。其核心思想是不将多模态信息融合为单一表示,而是分别…

忆联参与制定消费级SSD团体标准正式出版! 以“高可靠”引领行业提质增效与用户体验升级

引言​在AIPC爆发、数据价值凸显的当下&#xff0c;存储设备已超越简单容器&#xff0c;成为智能体验基石&#xff0c;其性能与可靠性直接关乎用户效率与资产安全。然而&#xff0c;消费级SSD长期缺乏统一权威的可靠性标准&#xff0c;使厂商缺乏质量对标依据&#xff0c;用户亦…

微服务搭建(SpringBoot + Dubbo + Nacos)

1.项目接口2. 编辑pom.xml和application.yml文件2.1父工程pom.xml<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:s…

android中常见布局及其约束

0 布局的定义 布局可以理解为一种​​容器​​&#xff0c;用于​​组织与排列界面上的控件​​。 布局是一个相框&#xff0c;控件就是你要展示的照片。• 你&#xff08;布局规则&#xff09;决定这些照片怎么排列&#xff1a;是从上到下整齐放&#xff08;LinearLayout&am…

Rust语言能干什么

Rust 语言的应用范围非常广&#xff0c;几乎覆盖了现代软件开发的全部领域。它最初以“系统级语言”身份出道&#xff0c;但现在已经远远超出了这个范畴。下面我从几个关键方向给你梳理一下&#xff0c;Rust 到底能干什么&#xff0c;以及为什么在这些领域它特别有优势。 1. 系…

只需一个设置就可以解决Microsoft Edge浏览器打不开网页的问题

Microsoft Edge是一款功能强大的网络浏览器&#xff0c;预装在Windows 10、11系统中。通过这个简单易懂的教程&#xff0c;学习如何修复Microsoft Edge浏览器打不开的问题。1、打开计算机找到C盘&#xff0c;双击打开&#xff1a;2、打开【用户】➜【Admin】➜【AppData】➜【L…

AI 应用 图文 解说 (二) -- 百度智能云 ASR LIM TTS 语音AI助手源码

文章的目的为了记录AI应用学习的经历&#xff0c;降低AI的入门难度。同时记录开发流程和要点有些记忆模糊&#xff0c;防止忘记。也希望可以给看到文章的朋友带来一些收获。 相关链接&#xff1a; AI 应用 图文 解说 (一) -- 百度智能云 实现 语音 聊天-CSDN博客 AI 应用 图文 …

计算机Python毕业设计推荐:基于Django的博客网站设计与实现【python/大数据/深度学习/机器学习定制】

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、项目介绍二、…