Resources and Assets

在帮助文档中有关于资源文件的描述和解释,可以自己去查看。

Resources and Assets

 

1. 如何处理资源文件和*.db的数据库文件

  1. 在应用程序初始化时将raw中的db文件拷贝到/data/data/package_name/database/下,然后通过正常方式进行访问;但是只有用户拥有root权限,才有资格访问/data/data/package_name/目录。也就是说,我们开发的程序只能在有root权限的手机上才可以使用。
  2. 读取raw的文件:activity.getResources().openRawResource(id) //获得一个InputStream;
  3. 将资源文件放入SD卡,通过File、InputStream和OutputStream读取。

2. 资源文件大小限制:Asset限制文件大小UNCOMPRESS为1MB

      无论是使用Res\raw还是使用Asset存储资源文件,对文件大小有一个限制。在Emulator中不存在问题,但放到真机G1上时会出现问题,经过查看UNCOMPRESS_DATA_MAX的取值为1048576字节,除以1024不难发现是1MB 。也就是说GPhone在处理资源文件时不能大于1MB的体积(使用raw或asset存放的文件大小不能超过1048576字节),否则会在logcat下看到如下报错信息

Resources and Assets

      解决方法:将文件放入到sdcard(缺点:IO效率不好、耗电大、sd卡可移除);或者SQLite。下面是android开发社区的一个问题QA截取,从中可以看到如果想改变UNCOMPRESS_DATA_MAX ,只能重新编译android源代码。但是自己编译出来的android SDK并不会被GPhone手机厂商所采用,所以这个方法通过自己刷机,自己娱乐娱乐还是可以的。

  • Q: I am trying to load a file using resource. my file size is more than 1mb.
    res/raw: contains a file named abc_fb2. But i am getting UNCOMPRESS_DATA_MAX error in catlog.
    as per my google, i found that there might be asset.h file, which we need to change. with some more value like 3*1024*1024
    so kindly if any body suggest me that how to download the source code of android1.5 sdk. In i will be able to change.
  • A: This is baked into the Android framework. It's not something you canchange unless you're building your own platform.
    If the data is uncompressed and aligned (with zipalign) it can be memory-mapped directly, which is easier on the system than dedicating a large piece of physical memory to hold the entire uncompressed file. 

源代码编译修改UNCOMPRESS_DATA_MAX

修改/frameworks/base/include/utils/Asset.h,"UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024" 改为 "UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024"