Android中有个很恶心的潜规则,就是当assets或是raw目录下单个压缩文件大小超过1024K以后,编译期appt会去强行处理此文件,使得咱们运行期读取的时候会收到一个html
This file can not be opened as a file descriptor; it is probably compressedjava
要解决这个问题能够将文件扩展名改成mp3或是wma这类的就OK了,具体细节能够参考:
web
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" }; |
在Android 2.3之前的任何压缩的资源的原始大小超过1M将不能从APK中读出,若是你使用AssetManager 或 Resources classes方法来获取InputStream,将抛出java.io.IOException的异常以下 DEBUG/asset(1123): Data exceeds UNCOMPRESS_DATA_MAX (20078432 vs 1048576); app
能够看到若是须要打包数据库的童鞋文件过大就须要注意了。工具
解决方法以下:spa
1.将你的资源文件后缀改为上面列出的后缀。.net
2.在命令行上使用-0参数来指定不须要压缩的文件后缀。当你使用Eclipse内的ADT目前还不知道有什么方法能够传递-0参数给aapt。命令行
3.将你的资源文件分割成UNCOMPRESS_DATA_MAX(1M)如下的文件.orm
转自:http://webservices.ctocio.com.cn/429/12134429.shtml