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 參數、構建選項等。
gradlew,?gradlew.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 定義(如?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?模塊特有的配置。
  • 關鍵配置包括
    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
英文地址,請注明出處:http://en.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; 文章目錄 一、項目介紹二、…