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

無(wú)圖你說(shuō)個(gè)丁丁資源

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

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

assets目錄 res目錄

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

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

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

assets文件和res文件

assets目錄 res/raw目錄

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

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

相同點(diǎn)

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

不同點(diǎn)
  • res/raw中的文件會(huì)被映射到R.java文件中,訪問(wèn)的時(shí)候直接使用資源ID即R.id.xxx;assets文件夾下的文件不會(huì)被映射到R.java中,訪問(wèn)的時(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會(huì)自動(dòng)的為這個(gè)目錄中的所有資源文件生成一個(gè)ID并映射到R.java文件中,作為一個(gè)文件的引用。這樣我們就可以很容易的訪問(wèn)到它了,在Android XML文件中可以用@raw/xxx的形式引用。mp3,mp4等文件適合放在這個(gè)目錄下。
assets文件更像是一個(gè)附錄類型的目錄,Android不會(huì)為這個(gè)目錄中的資源文件創(chuàng)建ID。同時(shí),訪問(wèn)的時(shí)候需要一個(gè)字符串路徑來(lái)獲取這個(gè)目錄下的文件描述,所以訪問(wèn)的速度會(huì)更慢。而且我們只能通過(guò)AssetManager這個(gè)統(tǒng)一管理類來(lái)訪問(wèn)這些文件。數(shù)據(jù)庫(kù)、字體文件、json文件、html文件適合放在這里。

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

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