android中res目录和assets目录的用处

2024-05-05 07:25

1. android中res目录和assets目录的用处

    1.assets:可以存放项目一些较大的资源文件,例如:图片、音乐、字体等。
  2.res:可以存放项目中所有的资源文件,例如:图片(*.png、*.jpg)、文本等。

  3.res/drawable-hdpi:保存高分辨率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。

  4.res/drawable-ldpi:保存低分辩率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。

  5.res/drawable-mdpi:保存中等分辨率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。

  6.res/layout:存放所有的布局文件,主要是用于排列不同的显示组件,在Android程序中要读取此配置。
  7.res/values:   存放一些资源文件的信息,用于读取文本资源,在本文件夹之中有一些约定的文件名称:

android中res目录和assets目录的用处

2. 如何在Android Studio中放置assets文件夹

有时候需要放置一些文件而且不被proguard压缩,可以放到assets目录中。
熟悉了eclipse的ide,在as中创建的项目并不会自动新建assets目录。
答案就是手动创建:/src/main/assets。
我们知道Eclipse创建的工程默认是有个assets文件夹的,但是Android studio默认没有帮我们创建,那么我们就自己创建一个就好啦。
(1)手动创建
在项目的顶部有个下拉,默认选择的是Android,

但是在Android 模式下不能真实反映整个工程的目录结构,所以我们点击它在下拉选项中选择Project,选完之后目录发生了变化

我们找到/src/main,选中main文件夹右键新建一个文件夹,命名为assets,这样就OK了。
(2)自动创建
Android studio提供了一个快捷的创建方式

3. Android中assets目录和raw目录的区别和使用情况

今天看到有人问Android中assets目录和raw目录的区别和使用情况。


能提出这个问题的,应该都了解它们的共同点:


它们会被原封不动的拷贝到APK中,而不会像其它资源文件那样被编译成二进制的形式。


要说区别,当然最直观的就是获取它们的InputStream的API不一样了。


assets:InputStream assets = getAssets().open("xxxx");


raw:InputStream raw = getResources().openRawResource(R.raw.xxxx)


有人可能会有疑问,既然它们都是被原封不动的拷贝到APK中,而assets可以创建目录结构,又能够动态的列出assets中的所有资源getAssets().list(String path);,这些raw都做不到,那raw还有什么用呢?


下面我们来说说它们主要的区别:


由 于raw是Resources (res)的子目录,Android会自动的为这目录中的所有资源文件生成一个ID,这个ID会被存储在R类当中,作为一个文件的引用。这意味着这个资源 文件可以很容易的被Android的类和方法访问到,甚至在Android XML文件中你也可以@raw/的形式引用到它。在Android中,使用ID是访问一个文件最快捷的方式。MP3和Ogg文件放在这个目录下是比较合适 的。
assets目录更像一个附录类型的目录,Android不会为这个目录中的文件生成ID并保存在R类当中,因此它与 Android中的一些类和方法兼容度更低。同时,由于你需要一个字符串路径来获取这个目录下的文件描述符,访问的速度会更慢。但是把一些文件放在这个目 录下会使一些操作更加方便,比方说拷贝一个数据库文件到系统内存中。要注意的是,你无法在Android XML文件中引用到assets目录下的文件,只能通过AssetManager来访问这些文件。数据库文件和游戏数据等放在这个目录下是比较合适的。
另 外,网上关于assets和raw的资料都千篇一律了,因此关于这两者中单个文件大小不能超过1M的**错误**描述也在传播,即如果读取超过1M的文件 会报"Data exceeds UNCOMPRESS_DATA_MAX (1314625 vs 1048576)"的IOException,还引申出种种解决方案。个人认为不应该有这样的限制,为了验证这个说法写了个Demo,发现将近5M的压缩 包在assets和raw中都能正常访问,因此在这里纠正一下,理论上只要打包不超过Android APK 50M大小的限制都是没有问题的。当然了,不排除是Android很早期的时候因为设备硬件原因aapt在编译的时候对这两个文件夹大小做出了限制,如果 是这样,较新版的ADT应该不会出现这种情况。


更新:为了验证我最后一段的描述,避免导致结果误 导,晚上写了几个小Demo验证之后又花了点时间查阅了一些资料,最后找到这篇文章http://ponystyle.com/blog/2010/03 /26/dealing-with-asset-compression-in-android-apps/ ,文章比较简单清晰,我就不翻译了。这篇文章应该还蛮有说服力的,从根本上说明了当时Android2.3以前产生资源文件单个文件大小不能超过1M的原 因和部分解决方法。不过由于限制是当时的aapt决定的,现在已经更新了多个版本的aapt已经不存在这种问题了,也印证了我最后一段的猜想。

Android中assets目录和raw目录的区别和使用情况

4. assets文件是什么

assets文件是Android工程文件下的文件夹,里面保存的是一些原始的文件,可以以任何方式来进行组织。这些文件最终会被原装不动地打包在apk文件中。如果要在程序中访问这些文件,那么就需要指定文件名来访问。             
             演示机型:华为MateBook X    系统版本:win10       assets文件是Android工程文件下的文件夹,里面保存的是一些原始的文件,可以以任何方式来进行组织。这些文件最终会被原装不动地打包在apk文件中。如果要在程序中访问这些文件,那么就需要指定文件名来访问。