オリジナルフォントを設定する方法で、assetsの未圧縮ファイル上限(UNCOMPRESS_DATA_MAX )について触れましたが、回避策としては

  1. Zipファイルで圧縮してassetsフォルダに配置し、初回起動時に解凍する
  2. 対象ファイルをサーバに配置し、初回起動時にダウンロードする

の2つの方法があります。

今回は、回避策1のZipファイルをassetsフォルダに置く際のサンプルコードです。
ただし、Zipファイルに1ファイルのみが圧縮されているという前提コードになっています。
複数ファイルを圧縮している場合は、ZipInputStream.getNextEntryがnullになるまでループしてあげればOKです。

1 try {
2     AssetManager    am  = context.getResources().getAssets();
3     InputStream is  = am.open("sample.zip", AssetManager.ACCESS_STREAMING);
4     ZipInputStream  zis = new ZipInputStream(is);
5     ZipEntry        ze  = zis.getNextEntry();
6  
7     if (ze != null) {
8         String path = context.getFilesDir().toString() + "/" + ze.getName();
9         FileOutputStream fos = new FileOutputStream(path, false);
10         byte[] buf = new byte[1024];
11         int size = 0;
12  
13         while ((size = zis.read(buf, 0, buf.length)) > -1) {
14             fos.write(buf, 0, size);
15         }
16         fos.close();
17         zis.closeEntry();
18     }
19     zis.close();
20 } catch (Exception e) {
21     // TODO: handle exception