Android 常見問題之Assets文件大小限制

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

相關文章
相關標籤/搜索