Assets目录下的文件大小是否有限制?

面试中遇到的问题:Assets目录下的文件大小是否有限制?

在Android 2.3以前的任何压缩的资源的原始大小超过1M将不能从APK中读出,当assets或是raw目录下单个压缩文件大小超过1024K之后,编译器appt会去强行处理此文件(报出异常:This file can not be opened as a file descriptor; it is probably compressed),如果你使用AssetManager 或 Resources classes方法来获取InputStream,将抛出java.io.IOException的异常如下
DEBUG/asset(1123): Data exceeds

要解决这个问题可以将文件扩展名改为mp3或是wma这类的就OK了,参考:
   Android Asset Packaging Tool(aapt)使用这个工具可打包所有数据, Image 、XML文件 、任何资源文件.在生成APK时aapt选择性的压缩各种资源来节省设备空间,aapt使用后缀来决定哪个资源需要压缩,aapt源码定义一些不需要压缩的文件后缀。

以下是aapt源码Package.cpp片段:
view plainprint?
   /* these formats are already compressed, or don’t compress well */
   static const char* kNoCompressExt[] = {
  “.jpg”, “.jpeg”, “.png”, “.gif”,
  “.wav”, “.mp2”, “.mp3”, “.ogg”, “.aac”,
  “.mpg”, “.mpeg”, “.mid”, “.midi”, “.smf”, “.jet”,
  “.rtttl”, “.imy”, “.xmf”, “.mp4”, “.m4a”,
  “.m4v”, “.3gp”, “.3gpp”, “.3g2”, “.3gpp2”,
  “.amr”, “.awb”, “.wma”, “.wmv”
  };

  可以看到如果需要打包数据库的,文件过大就需要注意了。
  解决方法如下:
  1.将你的资源文件后缀改成上面列出的后缀。
  2.在命令行上使用-0参数来指定不需要压缩的文件后缀。当你使用Eclipse内的ADT目前还不知道有什么方法可以传递-0参数给aapt。
  3.将你的资源文件分割成UNCOMPRESS_DATA_MAX(1M)以下的文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值