assetsフォルダには1MB以上の非圧縮ファイルを設置できない
Androidでファイルを設置する場合にassetsフォルダを使用することがありますが、このフォルダにはファイルの容量制限があります。
[参考記事] assetsフォルダのファイルを扱う方法 AssetManager
この容量を超えたものをインストールしようとすると、次のようなエラーが出ることがあります。
W/ResourceType(11947): Unable to get buffer of resource asset file
またインストールできたとしても、実行時に次のようなエラーが出て突如アプリが閉じます。
D/asset ( 300): Data exceeds UNCOMPRESS_DATA_MAX (1353552 vs 1048576)
この容量はOSの次のファイルの『UNCOMPRESS_DATA_MAX』の値で制限されています。
frameworks/base/include/utils/asset.h
#ifdef HAVE_ANDROID_OS UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024 #else UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024 #endif
実機では端末によって設定が異なるため、値が違うことがあります。
assetsフォルダ内の全容量ではなく、ファイルごとの容量です。
res/xml以下のxmlファイルも該当します。
res/xmlフォルダの1MB以上のxmlファイルは読み込めない
制限されている値は、
UNCOMPRESS_DATA_MAX = 『非圧縮データの最大容量』
ということなので、圧縮されている場合にはこの制限はありません。
assetsフォルダに大きなファイルを設置するには、圧縮して設置する方法や、分割して設置する方法があります。
またそもそもassetsフォルダに設置せず、サーバからダウンロードするという方法もあります。
assetsフォルダに圧縮ファイルを設置して、解凍するサンプルコード
bigfile.dataを圧縮してbigfile.zipとしたものを次の場所に設置した場合、
/assets/datadir/bigfile.zip
次の場所に解凍されます。
/data/data/com.example.sample.text/files/bigfile.data
String path = null; try { AssetManager am = getResources().getAssets(); InputStream is = am.open("datadir/bigfile.zip", AssetManager.ACCESS_STREAMING); ZipInputStream zis = new ZipInputStream(is); ZipEntry ze = zis.getNextEntry(); if (ze != null) { path = getFilesDir().toString() + "/" + ze.getName(); FileOutputStream fos = new FileOutputStream(path, false); byte[] buf = new byte[1024]; int size = 0; while ((size = zis.read(buf, 0, buf.length)) > -1) { fos.write(buf, 0, size); } fos.close(); zis.closeEntry(); } zis.close(); } catch (Exception e) { e.printStackTrace(); }
関連記事
- OracleとGoogleとのJavaについての訴訟
- 画面UIパーツのclass一覧
- ListViewにArrayAdapterを渡すサンプルコード(一覧項目から選択する場合のUI)
- assetsフォルダのファイルを扱う方法 AssetManager
- AndroidManifest.xml の permission一覧
- SDカードが接続されているかどうか知る方法 書き込み可能かどうか 読み込み可能かどうか
- SDカードの空き容量を調べる方法
- Colorクラスでの色指定
- 画像を解像度ごとに振り分ける方法 国際化する方法(drawable、layout、valuesなどの修飾句)
- Mobile Network Code(MNC)の一覧[V-Z]
- Mobile Network Code(MNC)の一覧[T-U]
- Mobile Network Code(MNC)の一覧[S]
- Mobile Network Code(MNC)の一覧[O-R]
- Mobile Network Code(MNC)の一覧[M-N]
- Mobile Network Code(MNC)の一覧[J-L]
- Mobile Network Code(MNC)の一覧[H-I]
- Mobile Network Code(MNC)の一覧[E-G]
- Mobile Network Code(MNC)の一覧[C-D]
- Mobile Network Code(MNC)の一覧[A-B]
- Androidマーケットに表示されるアプリはSIMで制限されています
- Mobile Country Code(MCC)の一覧
- SDカードからサムネイル画像を取り出す getThumbnailメソッド
- 文字列の置き換えを行う方法 (replaceAllで気をつけること)
- 文字列の部分一致検索を行う方法
- 処理中を表すプログレスダイアログを表示する
- res/xmlフォルダの1MB以上のxmlファイルは読み込めない
- apkファイルインストール時のエラー一覧
- Java メモリー使用量を取得する方法
- Activityのメソッド順
- SDカードに保存したファイルをギャラリーなどに反映させる方法
- アプリケーションプロセスを強制的に終了する方法
- res/drawableの画像を変更しても、変更が反映されない場合
- Singletonパターンを使ってクラスのインスタンスを1つにする(共有クラスのリソースを削減する方法)
- apkファイルのインストール時に INSTALL_FAILED_INSUFFICIENT_STORAGE と出る場合
- AndroidアプリでTextViewに使用できるフォントの一覧
- TextViewに独自フォントを使用する方法
- コマンドプロンプトの文字コードを変える方法
- EditTextのソフトキーボードの『完了』を虫メガネアイコンなどに変更する方法
- Viewの表示・非表示を切り替える方法
- apkファイルをAndroid端末にUSB接続でインストールする方法 (開発者ではない人向け)
- Xperia(Sony Ericsson)のUSBドライバをインストールする方法
- リソースファイルの設置場所と利用方法
- OSのバージョンと特徴
- 画像を拡大縮小する方法
- LinearLayout をスクロールさせる方法(ScrollViewの使用方法)
- タイトルバーやステータスバーを非表示にする方法
- ステータスバーの高さを取得する方法
- 画面解像度などディスプレイの情報を取得する方法
- アプリ起動時にスプラッシュ画面を表示させる方法
- 最初に呼び出されるJavaファイル(Activity)を指定する方法
- WebViewの設定一覧
- WebViewで横の隙間を消す方法(スクロールバー領域を消す)
- layoutのbackgroundで透過(transparent)を指定する方法
- Android実行時にError:ShouldNotReachHere() [hs_err_pid.log]
- WebViewを使ってWebサイトを表示する方法 WebKitからアプリ、アプリからWebKitへの連携処理
- UIを操作するのにhandlerを使う理由 thread WebViewCoreThread exiting due to uncaught exception
- アプリが実行されるまでの流れ ソースコードから実行まで
- deleteOnExit()メソッドは環境によって動作が違う JVM+Windows
- [暗号化]ブロック暗号とは(AES/DES/Blowfish PKCS5Padding ECB/CBC IV)
- MediaPlayer のメソッド一覧
- EclipseのビューをカスタマイズしてファイルエクスプローラやLogCatを表示する
- xmlファイルの開始タグと閉じタグは大文字小文字も同じにする
- 動画を再生する方法 MediaPlayer
- 動画を再生する方法 VideoView
- Androidでマルチスレッド処理をする方法
- Androidのソースファイルを入手する方法
- テーマ機能を使ってアプリケーション全体にスタイルを適用させる方法
- スタイルを使って属性を一括で管理する方法
- よく使うUIパーツのプロパティ
- wrap_contentとfill_parentの違い
- Androidのlayoutで使用できるパーツの一覧 ビュー(部品)
- ターミナルで端末操作をする方法
- アプリケーションのログを見る方法
- ログの出力 アプリのステータスを確認する
- layoutの種類と使用方法
- 画面の向きによってレイアウトを変更する方法
- Java標準以外のライブラリ(パッケージ)を読み込む方法 jarファイルを追加する
- apkファイルをサーバから端末にダウンロードする
- build.propの設定値
- 2.0/2.1以前で再生できる動画が2.2以降で再生できない
- /data/anr/traces.txtファイルとは
- プロジェクトが実行ができない main.out.xml string.out.xml
- Android Maps API Keyを取得する方法 Google Mapsを利用する
- 実機内やエミュレータ内のファイルを操作する DDMS、adbとサンプルコード
- EclipseでAndroidプロジェクトを作る方法
- iPhoneアプリやAndroidアプリを簡単に作成する方法 ハイブリッドアプリケーション
- Android公式の開発者向けサイト
- アプリからネットワーク通信を行う場合
- Androidアプリの開発環境を作る方法
- 実機のスクリーンショットをとる方法
- 開発中のアプリケーションを実機でテストする方法
- 横画面に固定する、縦画面に固定する(表示モードの固定)
- EditTextで改行させない方法
スポンサーリンク