【新手入門】Android Studio 項目結構拆解,快速理解文件作用!

目? ? 錄

一、【Project】視圖下項目結構(真實目錄)

二、【Android】視圖下項目結構

三、【app/】下重要文件解析

1、?build.gradle

2、AndroidManifest.xml?

3、res/


? ?作為剛剛接觸Android開發的小白,使用Android Studio創建項目后,對于項目中的各種文件就是兩眼一抹黑,因此把自己的學習記錄在這篇筆記中。

一、【Project】視圖下項目結構(真實目錄)

????????如圖1所示是Android Studio項目真實目錄。

圖1?【Project】視圖下項目結構(真實目錄)

MyApp/                                     ← 項目根目錄
├── .gradle/                               ← Gradle 構建緩存文件夾
├── .idea/                                 ← AS項目配置文件(編碼格式、依賴索引等)
│
├── app/                                   ← 主模塊目錄(Module,存放源碼和資源)
│   ├── build/                             ← 編譯生成的中間文件(自動生成,可刪除)
│   ├── libs/                              ← 第三方庫的 .jar / .aar 文件
│   ├── src/                               ← 源碼目錄
│   │   ├── main/                          ← 主代碼和資源
│   │   │   ├── java/                      ← Java 或 Kotlin 源碼
│   │   │   ├── res/                       ← 資源文件(布局、圖片、字符串等)
│   │   │   └── AndroidManifest.xml        ← 應用清單文件(組件聲明、權限配置)
│   │   ├── androidTest/                   ← Android 儀器化測試(UI 測試)
│   │   └── test/                          ← 本地單元測試代碼
│   │
│   ├── build.gradle                       ← 模塊級 Gradle 配置文件(依賴、編譯參數)
│   └── proguard-rules.pro                 ← ProGuard 混淆規則文件
│
├── gradle/                                ← Gradle Wrapper 相關文件
│   ├── wrapper/
│   │   ├── gradle-wrapper.jar             ← Gradle Wrapper 的可執行 JAR(執行構建)
│   │   └── gradle-wrapper.properties      ← Wrapper 配置文件(Gradle 版本、下載路徑)
│   └── libs.versions.toml                 ← Gradle 版本目錄文件(管理依賴版本號)
│
├── .gitignore                             ← Git 忽略規則(哪些文件不提交到倉庫)
├── build.gradle                           ← Gradle配置文件(全局插件、倉庫、依賴)
├── gradle.properties                      ← Gradle 全局屬性(構建優化、內存設置、全局變量)
├── local.properties                       ← 本地配置文件(SDK 路徑、私有信息,不提交到 Git)
├── settings.gradle                        ← 定義項目包含的模塊(多模塊工程時在這里注冊)
│
├── gradlew                                ← Unix/Linux Gradle 執行腳本
├── gradlew.bat                            ← Windows Gradle 執行腳本
└── External Libraries                     ← AS自動管理的外部依賴庫(JDK、第三方庫等)

二、【Android】視圖下項目結構

? ? ? ? Android視圖是對物理文件結構的邏輯整理,更關注功能和用途分類,隱藏了配置文件,源代碼以包結構顯示,更貼合Java開發習慣。圖2所示為Android視圖下的項目結構。

圖2 【Android】視圖下項目結構

MyApp
├── manifests                      ← 應用清單文件集合(主要是 AndroidManifest.xml)
│    └── AndroidManifest.xml       ← 應用聲明和權限配置
│
├── java                           ← 應用的Java/Kotlin源代碼(按包名顯示)
│    └── com.example.myapp          ← 按包劃分的源碼目錄
│         ├── MainActivity.java
│         └── ...
│
├── res                            ← 資源文件,按類型分類
│    ├── drawable                  ← 圖片資源(png、jpg、xml等)
│    ├── layout                    ← 布局文件(XML定義UI界面)
│    ├── values                    ← 字符串、顏色、尺寸、樣式等資源配置
│    ├── mipmap                    ← 啟動圖標資源
│    └── ...                      ← 其他資源目錄(menu、raw等)
│
├── build.gradle (Project)        ← 項目級Gradle腳本
├── build.gradle (Module: app)    ← 模塊級Gradle腳本
├── settings.gradle               ← 項目模塊設置
├── gradle.properties             ← Gradle構建參數配置
│
└── External Libraries             ← 項目依賴的外部庫(JDK、第三方庫等)

三、【app/】下重要文件解析

1、?build.gradle

? ? ? ?app/build.gradle是當前模塊的Gradle構建配置文件,配置依賴庫、編譯選項、打包配置等。了解該文件能夠幫助解決常見構建問題。(說多了都是淚😢)

// 指定構建項文件所需的插件
plugins {alias(libs.plugins.android.application) // 所有的項目都需要該插件(com.android.application)
}// 模塊構建配置
android {// 應用的命名空間namespace 'com.example.myapplication'// 編譯時使用的 Android SDK 版本compileSdk 36defaultConfig {// 應用的唯一標識符(正式發布時不能隨便改)applicationId "com.example.myapplication"// 支持的最低 Android 系統版本(API 級別)minSdk 24// 目標適配的 Android 系統版本(API 級別)targetSdk 36// 應用的內部版本號(整數,提交商店時用來區分版本)versionCode 1// 應用的對外版本名(字符串,用戶可見的版本號)versionName "1.0"// 指定 Android 儀器化測試運行器testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {// release 構建類型(用于正式打包發布)release {// 是否啟用代碼混淆和壓縮(false 表示不啟用)minifyEnabled false// 混淆配置文件(默認規則 + 自定義規則)proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {// Java 源代碼兼容版本sourceCompatibility JavaVersion.VERSION_11// Java 字節碼兼容版本targetCompatibility JavaVersion.VERSION_11}buildFeatures {// 啟用 ViewBinding 功能(方便綁定布局文件)viewBinding true}
}// 項目依賴
dependencies {// implementation定義項目主源代碼的依賴implementation libs.appcompatimplementation libs.materialimplementation libs.constraintlayoutimplementation libs.navigation.fragmentimplementation libs.navigation.ui// testImplementationd定義項目測試(test目錄下)代碼依賴testImplementation libs.junit// androidTestImplementation定義AndroidTest目錄下的代碼依賴androidTestImplementation libs.ext.junitandroidTestImplementation libs.espresso.core
}

2、AndroidManifest.xml?

? ? ? ? AndroidManifest.xml文件是 Android 項目的系統清單文件,它用于控制 Android 應用的名稱、圖標、訪問權限等整體屬性。除此之外 Andriod 應用的 Activity、Service、ContentProvider、BroadcastRecevier這4大組件都需要在該文件中配置。

<!-- 聲明 XML 文件的版本與編碼 -->
<?xml version="1.0" encoding="utf-8"?><!-- manifest 元素是 Android 應用清單文件的根標簽xmlns:android  -> 聲明 Android 的 XML 命名空間xmlns:tools    -> 聲明 tools 命名空間
-->
<!-- 指定該應用包名,包名用于唯一標識該應用 -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><!-- 指定應用的圖標、標簽、圓圖標等--><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.MyApplication"><!-- 聲明一個 Activity(應用的界面組件) --><activityandroid:name=".MainActivity"android:exported="true"android:theme="@style/Theme.MyApplication"><!-- Intent 過濾器:定義該 Activity 能響應的 Intent 類型 --><intent-filter><!-- MAIN 表示這是應用的入口(主啟動點) --><action android:name="android.intent.action.MAIN" /><!-- LAUNCHER 指定加載該應用時運行該activity --><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

3、res/

? ? ? ?res 目錄存放 Android 項目的各種資源文件,如下表所示為常見資源類別。

目錄名作用 / 存放內容常見文件示例
drawable/

位圖圖像、形狀圖形、XML 形狀定義等可繪制資源

icon.pngbg.xml

mipmap/

啟動圖標資源(不同分辨率),優先用于 android:icon

ic_launcher.png

layout/

布局文件(XML 定義界面結構)

activity_main.xml

values/

各類 XML 常量定義,如字符串、顏色、尺寸、樣式等

strings.xmlcolors.xmlstyles.xml

menu/

菜單資源(選項菜單、上下文菜單等)

main_menu.xml?

xml/

其他任意 XML 配置文件

network_security_config.xml

raw/

原始文件(音頻、視頻、二進制文件等,不會被編譯處理)

music.mp3

font/

自定義字體文件

roboto.ttf

color/

獨立顏色資源文件(API 23+)

app_colors.xml

? 在 Android 中,drawable 和 mipmap 都可按屏幕密度劃分為 -ldpi(低,~120dpi)、-mdpi(中,~160dpi)、-hdpi(高,~240dpi)、-xhdpi(超高,~320dpi)、-xxhdpi(超超高,~480dpi)、-xxxhdpi(超超超高,~640dpi)等子目錄,用于適配不同分辨率的圖片資源,其中 drawable 主要存放普通界面圖片,而 mipmap 主要存放應用啟動圖標,并針對啟動器顯示進行緩存與縮放優化,以確保在各種設備上圖標清晰顯示。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93555.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93555.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93555.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python實現點云Kmeans、歐式和DBSCAN聚類

本節我們分享點云處理中的三種常見聚類方法&#xff0c;分別是K-means、歐氏與 DBSCAN聚類。具體介紹如下&#xff1a;1. K-means 聚類定義&#xff1a;一種基于距離度量的無監督學習算法&#xff0c;將數據劃分為 K 個緊湊的簇&#xff0c;使簇內數據相似度高、簇間差異大。算…

【Java后端】MyBatis-Plus 原理解析

MyBatis-Plus 原理解析 其實 MyBatis-Plus 的 Service 層設計就是為了讓開發者不用重復寫很多樣板代碼。我們來一點點剖析 UserServiceImpl、IService、UserService、ServiceImpl 之間的關系和調用鏈。1. 類/接口關系圖IService<T>▲│UserService (接口) <-- 自定義…

Nacos 注冊中心學習筆記

&#x1f389; Alibaba微服務組件 Nacos 注冊中心超詳細學習筆記 &#x1f389; &#x1f4cc; 寫在前面&#xff1a;本文基于官方PDF文檔與實戰經驗&#xff0c;整理了Nacos注冊中心的核心知識點、部署流程與實戰技巧&#xff0c;力求圖文并茂、通俗易懂&#xff0c;適合收藏反…

java 策略模式 demo

策略模式介紹策略模式&#xff08;Strategy Pattern&#xff09;是一種行為型設計模式&#xff0c;它定義了一系列算法&#xff0c;將每個算法封裝起來并使它們可相互替換。策略模式讓算法的變化獨立于使用算法的客戶端&#xff0c;從而實現靈活的算法切換。核心角色&#xff1…

SAP Valuation Category在制造業成本核算中的使用場景與配置方案

Valuation Category在制造業成本核算中的使用場景與配置方案一、核心使用場景&#xff08;制造業特有&#xff09;1. 內制 vs 外購成本分離業務需求&#xff1a;同一物料可能通過內部生產&#xff08;成本含料工費&#xff09;或外部采購&#xff08;成本含采購價運費&#xff…

我的 LeetCode 日記:Day 36 - 動態規劃,背包問題的千變萬化

昨天&#xff0c;我初步掌握了 0/1 背包問題的理論基礎和標準解法。今天&#xff0c;我將這種思想應用到了更廣泛的場景中。今天的幾道題&#xff0c;乍一看和背包沒什么關系&#xff0c;但通過巧妙的數學轉化&#xff0c;它們的核心都變成了 0/1 背包問題。 這讓我深刻體會到…

本地處理不上傳!隱私安全的PDF轉換解決方案

PDF能鎖定排版、字體、圖片位置&#xff0c;無論在什么設備打開都保持一致。它是無廣告、簡潔高效的專業PDF處理工具。功能豐富&#xff0c;支持批量操作&#xff1a;只需將文件拖入界面&#xff0c;選擇目標格式&#xff08;如Word、PPT、Excel、圖片等&#xff09;&#xff0…

Docker build創建鏡像命令入門教程

一、核心概念Dockerfile 定義鏡像構建步驟的文本文件&#xff0c;包含一系列指令和配置&#xff0c;用于自動化創建鏡像。鏡像層&#xff08;Layer&#xff09; Docker 鏡像由多層只讀層疊加而成&#xff0c;每個指令&#xff08;如 RUN、COPY&#xff09;會生成一個新的層。層…

Redis 是單線程模型嗎?

最近在面試中經常被問到這個問題&#xff1a;"Redis是單線程的嗎&#xff1f;"很多同學都會脫口而出&#xff1a;"是的&#xff01;"但其實這個答案并不完全正確。今天我們就來聊聊Redis的線程模型&#xff0c;把這個問題徹底搞清楚。 先說結論 Redis的線程…

Hologres實戰:路徑分析函數

前言 Hologres提供了一套高效的路徑分析函數&#xff0c;包括路徑明細計算和結果解析功能&#xff0c;能夠幫助用戶深入理解用戶行為路徑&#xff0c;并通過桑基圖實現數據可視化。 一、核心功能 路徑明細計算&#xff1a;精確記錄用戶在產品或功能中的完整訪問路徑結果解析…

產品開發實踐(常見的軟硬結合方式)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】前面說過&#xff0c;傳統的純軟件開發&#xff0c;在國內的大背景下面是很難存活的。但是如果是把軟件&#xff0c;構建在硬件基礎之上&#xff0c…

Linux | i.MX6ULL網絡通信-套字節 UDP(第十八章)

01 Linux | i.MX6ULL網絡通信-套字節 TCP(第十七章) 02 iTOP-IMX6ULL 實現基于 UDP 的 socket 編程。

學習嵌入式第三十天

文章目錄進程和線程&#xff08;續&#xff09;線程1.線程傳參2.線程屬性3.線程間通信1.概念2.方式3.互斥鎖4.死鎖5.信號量習題 進程和線程&#xff08;續&#xff09; 線程 1.線程傳參使用第四個參數實現對線程內部的傳參 代碼實現&#xff1a; #include <stdio.h> #inc…

GaussDB 數據庫架構師修煉(十三)安全管理(3)-行級訪問控制

1 背景行級訪問控制特性將數據庫的訪問控制精確到數據表行級別 &#xff0c;只允許用戶查看 、更新或刪除特定的行數據。2 實例場景實例以醫生只能看到治療的病人&#xff0c;不能看其它醫生的病人為例&#xff1a;1)醫院病人的信息表pat_info&#xff1a;csdn> set search_…

Wi-Fi 與蜂窩網絡(手機網絡)的核心區別,以及 Wi-Fi 技術未來的發展方向

在日常生活中&#xff0c;我們既離不開家里的 Wi-Fi&#xff0c;也離不開手機的 4G/5G 網絡。它們都能把我們連接到互聯網&#xff0c;但底層的工作方式卻大不相同。一、設計初衷的不同Wi-Fi誕生于 1997 年的 IEEE 802.11 標準&#xff0c;定位是局域網無線替代。它的目標是讓電…

C++編程實戰:高效解決算法與數據結構問題

個人主頁 &#xff1a; zxctscl 專欄 【C】、 【C語言】、 【Linux】、 【數據結構】、 【算法】 如有轉載請先通知 題目1. 數字統計2. 兩個數組的交集3. 牛牛的快遞4. 點擊消除5. 最小花費爬樓梯6. 簡寫單詞1. 數字統計 BC153 數字統計 #include <iostream> using na…

《零基礎入門AI:深度學習中的視覺處理(卷積神經網絡(CNN)進階)》

一、卷積知識擴展 1. 二維卷積 單通道版本 對于單通道輸入圖像 III (尺寸 HWH \times WHW) 和卷積核 KKK (尺寸 FFF \times FFF)&#xff0c;輸出特征圖 OOO 的計算公式為&#xff1a; O(i,j)∑m0F?1∑n0F?1I(im,jn)?K(m,n)O(i,j) \sum_{m0}^{F-1} \sum_{n0}^{F-1} I(im, j…

pyecharts可視化圖表-pie:從入門到精通(進階篇)

歡迎來到pyecharts餅圖系列教程的進階篇&#xff01;在上一篇基礎教程中&#xff0c;我們學習了餅圖的基本概念和簡單實現。在本文中&#xff0c;我們將深入探索pyecharts中餅圖的六種高級用法和自定義選項&#xff0c;包括環形餅圖、富文本標簽餅圖、滾動圖例餅圖、環形圖、嵌…

【JAVA 核心編程】面向對象高級:類變量與方法 抽象類與接口

一、類變量與類方法&#xff08;靜態變量&#xff09; 1&#xff09;類變量 class Child{private String name;//定義一個變量count&#xff0c;是一個類變量&#xff08;靜態變量&#xff09;static靜態//該變量最大的特點就是會被Child 類的所有對象訪問public static int co…

【Java基礎面試題】數據類型

Java面試高頻總結&#xff1a;基本數據類型深度解析 &#x1f4ca; 八種基本數據類型詳解數據類型關鍵字字節數位數默認值取值范圍核心特性字節型byte180-128 ~ 127最小整數類型短整型short2160-32,768 ~ 32,767較少使用整型int4320-2 ~ 2-1 (約21億)最常用整數類型長整型long8…