Android資源知識(一)之Resources概覽
資源(Resources
)是指應用中的圖片、媒體檔案、字串、顏色值等。Android程式設計師在開發過程中隨時要和Resources
打交道,比如R.layout.activity_main
、@string/hello
……
一、Android應用資源的構成
Android系統提供了一套強大的資源管理框架Resources
和AssetManager
,下面我們從工程目錄結構來學習下Android應用資源體系的構成,工程目錄結構圖如下:
從圖中可以看到Android應用資源由兩部分構成:資源目錄和資原始檔。
1、資源目錄
資源目錄就是res
目錄下的各個子目錄,如anim、drawable、drawable-hdpi、layout、menu、raw、values
等。這些目錄都必須是系統預定義的,也就是說像res/drawable
,res/layout
都是合法的,而像res/kinbos
、res/abcd
都不是合法的,系統是識別不了的。無法在R類中生成相應的資料。
res/anim
是存放動畫相關資源的。
res/drawable
是存放圖片資源的。
res/layout
是存放xml佈局檔案的。
res/menu
是存放選單樣式資源的。
res/raw
是存放音訊、視訊等純資料檔案資源的。
res/values
是存放字串、顏色值、陣列等常量定義的檔案的。
2、資原始檔
資原始檔就是資源目錄下的資料檔案,比如.xml、圖片、音視訊檔案等。注意:資原始檔只能放在資源目錄下,而不能放在res
目錄下。
二、Android應用程式的編譯步驟
這裡之所以提到Android應用程式的編譯步驟是因為Android對應用資源的處理貫穿了應用的整個開發流程的。下面我們按步驟Properties——>Builders開啟工程的Properties
對話方塊,截圖如下:
Android應用程式的編譯過程主要有以下4個步驟:
1、Android Resource Manager
Android通過aapt
工具(aapt
工具位於路徑:[sdk目錄]/build-tools/[android-xx]
)根據res
目錄下的資源在R
類中生成與之相對應的巢狀子類及static final
型常量。R.java
檔案程式碼如下:
package com.kinbos.note;
public final class R {
public static final class anim {
public static final int abc_fade_in=0x7f040000;
public static final int abc_fade_out=0x7f040001;
public static final int abc_slide_in_bottom=0x7f040002;
public static final int abc_slide_in_top=0x7f040003;
public static final int abc_slide_out_bottom=0x7f040004;
public static final int abc_slide_out_top=0x7f040005;
}
}
從上述程式碼中我們可以看出,res
目錄下的子目錄是巢狀子類的類名,如程式碼中的anim
,具體的檔名稱是anim
類的static final
型常量。
2、Android Pre Compiler
這個步驟是將res
目錄下的檔案資源編譯成二進位制格式。比如把.xml
檔案編譯成二進位制格式。注意:res/raw
目錄中的資源除外。
3、Java Builder
把.java
原始碼編譯成.class
檔案,包括R.java
。
4、Android Package Builder
這個步驟是把.class
檔案編譯成.dex
格式的檔案。.dex
檔案是Dalvik
虛擬機器所特有的檔案格式,最後將.dex
檔案和其他檔案打包成.apk
檔案。
為了更加簡潔清晰的理解Android應用的編譯和打包流程,我們將引用範懷宇著的《Android開發精要》一書裡的一張插圖來說明,如下圖:
kinbos 編譯打包流程.jpg
三、使用Android資源
1、從XML
檔案中呼叫資源
語法:@[包名]資源型別 / 資源名稱
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/holo_blue_dark"
android:text="@string/hello_world" />
2、使用程式碼呼叫資源
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
四、assets
和res
的區別
1、res
目錄中的所有資源都會註冊在R
類中,可以通過R類直接呼叫;而assets
中的資源則不會被註冊在R
類中,所以只能通過檔名引用。
2、assets
目錄中的檔案和res/raw
不做處理,所以在解壓apk
檔案後可以看到原檔案。
相關文章
- Java併發程式設計知識概覽(一)Java程式設計
- Spring原始碼知識概覽Spring原始碼
- SAP SD基礎知識之流程概覽
- angular知識一覽Angular
- AI 知識概論AI
- ISWC 2018概覽:知識圖譜與機器學習機器學習
- Android 儲存概覽Android
- 資源包的一些知識
- 學習Tomcat(一)之容器概覽Tomcat
- 1.5 基礎知識——GP2.3 提供資源(Resources) 與 GP2.4 分配職責(Responisbility)
- Redis進階知識一覽Redis
- 領域綜述 | 知識圖譜概論(一)
- 關於圖演算法 & 圖分析的基礎知識概覽演算法
- 01 知識圖譜概論
- Android埋點技術概覽Android
- Android應用原始碼 概覽Android原始碼
- Android 資源目錄的相關知識 raw drwable valuesAndroid
- 開源跨平臺資料格式化框架概覽框架
- 概覽資料庫索引資料庫索引
- SpringMVC 解析(一)概覽SpringMVC
- Express 實戰(一):概覽Express
- 跨域資源共享 CORS 一些知識點跨域CORS
- 概覽
- ROS知識(20)----SLAM資源集合ROSSLAM
- Android 知識點回顧之 FragmentAndroidFragment
- Node基礎之總體概覽
- 概覽,如何管控資料
- Retrofit原始碼分析一 概覽原始碼
- 機器學習:新手入門概覽(一)機器學習
- Android 之 Notification 必須掌握知識點Android
- Android知識重溫之生命週期Android
- Android面試之——數學基礎知識Android面試
- MS(2):Android之基礎知識篇Android
- Android知識點回顧之Intent/IntentFilterAndroidIntentFilter
- Android知識點回顧之LoaderAndroid
- 機器學習概覽機器學習
- Android WebView Resources$NotFoundExceptionAndroidWebViewException
- JAVA學習資源一覽Java