android res与assets资源的区别

来源:互联网 发布:网络摄像头ip扫描工具 编辑:程序博客网 时间:2024/05/20 13:38

android应用可以将资源存储在两个目录:res和assets。其中res目录中的资源只能存储在相应的
子目录(如res/layout、res/values等)中,不能直接将资源存储在res目录中。assets目录中的
资源可以任意存放,也可以建立任意层次的子目录。res和assets资源的主要区别如下。
1、引用资源的方式不同
     res目录中的所有资源都会在R类的相应子类中生成对应的int类型变量,需要使用这些变量
来引用资源。例如res/layout/main.xml是布局文件资源,会在R.layout类中生成一个名为main的
变量,所以需要使用R.layout.main来引用main.xml。
     assets目录中的资源需要直接使用文件名来引用,例如assets/xyz.xml、assets/abc/test.db是
assets目录中的两个资源文件,其中abc是assets中的子目录。可以使用如下的代码引用这两个资源文件,
并返回与资源文件对应的InputStream对象,剩下的操作就是普通的Java代码输入流操作了。

InputStream is1=getResources().getAssets().open("xyz.xml");
InputStream is2=getResources().getAssets().open("abc/test.db");


2、处理方式不同
    res目录中的资源子目录除了raw外,其他资源目录中的资源文件都会被编译,这也是为什么
将APK文件解压后无法直接查看XML格式资源文件内容的原因。而assets与res/raw目录中的资源
文件不会做任何处理,所以将APK解压后,这两个目录中的资源文件都会保持原样.

3、子目录不同
     res目录只能有一层子目录,而且这些子目录必须是预定义的,如res/layout、res/values等都是
合法的,而res/abc,res/xyz并不是合法的资源目录,在assets目录中可以建任意层次的子目录(只受操作系统的限制)


1.assets:不会在R.java文件下生成相应的标记,assets文件夹可以自己创建文件夹,必须使用AssetsManager类进行访问,存放到这里的资源在运行打包的时候都会打入程序安装包中,

2.res:会在R.java文件下生成标记,这里的资源会在运行打包操作的时候判断哪些被使用到了,没有被使用到的文件资源是不会打包到安装包中的。

res/raw和assets文件夹来存放不需要系统编译成二进制的文件,例如字体文件等


在res文件夹下还可以定义一下目录:

res/anim:这里存放的是动画资源。

res/xml:可以在Activity中使用getResource().getXML()读取这里的资源文件

res/raw:该目录下的文件可以直接复制到设备上,不能有子文件夹编译软件时,这里的数据不需要编译,直接加入到程序安装包中,使用方法是getResource().OpenRawResources(ID),其中参数ID的形式是R.raw.XXX.


原创粉丝点击