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