1. 先在Activity裡面調用getAssets()來擷取AssetManager引用。2. 再用AssetManager的open(String fileName, int accessMode)方法則指定讀取的檔案以及訪問模式就能得到輸入資料流InputStream。 3. 然後就是用已經open file 的inputStream讀取檔案,讀取完成後記得inputStream.close()。4.調用AssetManager.close()關閉AssetManager。
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);
可以看到如果需要打包資料庫的童鞋檔案過大就需要注意了。
解決方案如下:
1.將你的資源檔尾碼改成上面列出的尾碼。
2.在命令列上使用-0參數來指定不需要壓縮的檔案尾碼。當你使用Eclipse內的ADT目前還不知道有什麼方法可以傳遞-0參數給aapt。
3.將你的資源檔分割成UNCOMPRESS_DATA_MAX(1M)以下的檔案.