Android应用可以将资源保存在两个目录:res和assets目录。其中res目录只能将资源存在相应的目录中,如res/layout、res/values等,不能直接将资源存储在res目录里。assets目录中的资源可以任意存放,也可以建立任意的子目录。他们的主要区别如下:
1.资源的引用方式不同
res目录中的所用资源都会在R类的相应子类中生成对应的int类型变量,在使用时需要引用:R.string.XXXX。
assets目录中的资源需要直接使用文件名来引用,例如assets/text.txt、assets/data/data.db是assets目录中的两个文件,可以使用以下代码引用这两个文件,并返回与资源文件对应的InputStream对象:
InputStream s1 = getResources().getAssets().open("text.txt");
InputStream s2 = getResources().getAssets().open("data/data.db");
2.处理方式不同
res目录中的资源子目录除了raw外,其他资源子目录的资源文件都会被编译,编译成机器码等资源。而assets中的资源文件与res/raw中的资源文件不会做任何处理,所以将apk解压后,这两个目录中的资源文件都会被保持原样。
3.子目录不同
res目录只能有一层子目录,而且这些子目录都是预定义好的,如果你自己定义一个res/abc目录,这是不合法的。而在assets目录中可以建立任意层次的资源文件。