Android 項(xiàng)目中資源文件 -- asset 目錄和 res 目錄

無圖你說個(gè)丁丁資源

為了引出了本片文章的主題,我專門去找了一張資源圖片

都說“巧婦難為無米之炊”,不錯(cuò)的,對于我們做Android開發(fā)的筒靴們是一樣的,要想頁面效果搞的花里胡哨的,那你不得給我們一點(diǎn)資源(一張圖片,一個(gè)視頻,一段音頻,一個(gè)字體文件,一個(gè)html文件)。有時(shí)候這些資源比較固定不更換的,我們往往會把它直接放在整個(gè)項(xiàng)目中,然后打包進(jìn)apk,程序運(yùn)行的時(shí)候就直接可以使用了。

assets目錄 res目錄

在Android中,我們常常提到資源文件一般只要分為兩種:

  • assets目錄 的文件,被稱為原生文件,在apk的編譯打包流程不會生成資源ID,也就是說我們無法通過R.xxx.xxx的方式去訪問,這個(gè)目錄下的文件在被打包生成apk的時(shí)候不會進(jìn)行壓縮。

  • res目錄 的文件,這類文件在打包生成apk的時(shí)候,直接通過aapt(資源文件打包工具)打包res資源文件,生成R.java、resources.arsc和res文件,我們可以直接通過R.xxx.xxx的方式訪問到資源文件。(注意:raw下的文件會被原封不動的打包到apk中)

assets文件和res文件

assets目錄 res/raw目錄

先說說raw目錄吧。它是創(chuàng)建在res文件下的一個(gè)資源文件(常見的會放一些視頻/音頻文件等等)。它雖然是res的子目錄但是它里面的文件在打包生成apk的時(shí)候不會像其他res文件一樣,對資源文件進(jìn)行壓縮,這一點(diǎn)和assets文件相似。

下面就再說一下assets目錄 和 res/raw目錄的異同

相同點(diǎn)

assets和res/raw工程目錄下都可以放一些小于1M的文件(2.3版本以前的要求,現(xiàn)在無限制)兩個(gè)文件夾下的文件都會被原封不動的打包到APK中應(yīng)用使用。而不會像其它資源文件那樣被編譯成二進(jìn)制的形式。(不管放在哪個(gè)文件夾下apk的大小是不變的)

不同點(diǎn)
  • res/raw中的文件會被映射到R.java文件中,訪問的時(shí)候直接使用資源ID即R.id.xxx;assets文件夾下的文件不會被映射到R.java中,訪問的時(shí)候需要AssetManager類。
  • res/raw不可以有目錄結(jié)構(gòu),而assets則可以有目錄結(jié)構(gòu),也就是assets目錄下可以再建立文件夾

Since raw is a subfolder of Resources (res), Android will >automatically generate an ID for any file located inside it. This ID >is then stored an the R class that will act as a reference to a file, >meaning it can be easily accessed from other Android classes >and methods and even in Android XML files. Using the >automatically generated ID is the fastest way to have access to >a file in Android.

The Assets folder is an “appendix” directory. The R class does not generate IDs for the files placed there, so its less compatible with some Android classes and methods. Also, it’s much slower to access a file inside it, since you will need to get a handle to it based on a String. However some operations are more easily done by placing files in this folder, like copying a database file to the system’s memory. There’s no (easy) way to create an Android XML reference to files inside the Assets folder.

raw是res的子目錄,Android會自動的為這個(gè)目錄中的所有資源文件生成一個(gè)ID并映射到R.java文件中,作為一個(gè)文件的引用。這樣我們就可以很容易的訪問到它了,在Android XML文件中可以用@raw/xxx的形式引用。mp3,mp4等文件適合放在這個(gè)目錄下。
assets文件更像是一個(gè)附錄類型的目錄,Android不會為這個(gè)目錄中的資源文件創(chuàng)建ID。同時(shí),訪問的時(shí)候需要一個(gè)字符串路徑來獲取這個(gè)目錄下的文件描述,所以訪問的速度會更慢。而且我們只能通過AssetManager這個(gè)統(tǒng)一管理類來訪問這些文件。數(shù)據(jù)庫、字體文件、json文件、html文件適合放在這里。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容