Tag: zip

[問題] Android 如何存取 Raws 內的 zip 壓縮檔

一個 2MB 的 sqlite 檔案,壓縮後大小可減低至 70KB。

所以如果你的 APP 內有用到大量的資料庫,在發佈前先將檔案壓縮可以讓你的 apk 檔小很多。

並且早期版本的 android,有最大檔案 1MB 的限制,如果超過會造成 IOException

套用 CodeJava 所提供的 UnzipUtility.java檔案說明

修改UnzipUtility.java,因為原始檔的 input 部份是透過 讀取 zipfilepath,但是在 android 內是透過 openRawResource()

public void unzip(String zipFilePath, String destDirectory) throws IOException {
   ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
   unzip(zipIn, destDirectory);
}
public void unzip(ZipInputStream zipIn, String destDirectory) throws IOException {
   File destDir = new File(destDirectory);
   if (!destDir.exists()) {
      destDir.mkdir();
   }
   ...
}

使用方法

private void unzipRawResource() throws Exception {
   ZipInputStream zin = new ZipInputStream(
              myContext.getResources().openRawResource(
              yourPackageName.R.raw.yourFileName));
   UnzipUtility uzu = new UnzipUtility();
   uzu.unzip(zin, yourDestinationDirectory); // 如:"/data/data/yourPackageName/databases/"
}
Tags : ,