5

Play ストア以外の特定のユーザー セットに配布するために、大規模なアプリを作成したいと考えています。これを ADB 経由でインストールするつもりですが、サイズ制限に関する確かな情報が見つかりません。

簡単なテスト apk を作成し、1.8 GB のコンテンツを assets フォルダーにダンプしました。ADB は次のエラーをスローします。

could not allocate buffer for 'sizetest.apk'

7Gb の空き容量があるデバイスでこれを試したので、このエラーの原因は何なのか疑問に思っています。デバイスストレージ/システムストレージ/デバイスメモリ/マイPCメモリ/ADB自体で、回避策はありますか?

4

2 に答える 2

4

これADB の問題でした。ADB は、ファイルが APK であることを確認し、インストール前にファイル全体をメモリに読み込むために使用します。これによりmallacが返されNULL、ADB セッションが閉じられる可能性があります ( file_sync_client.cの 335 ~ 341行を参照)。

これはここで修正されました。

送信前に APK 全体をメモリ (!) に読み取っていたため、ネットワーク経由で送信する前に APK を検証するサポートを削除しました。


単純な hello world プロジェクトを作成し、大きなファイル (1.8 GB) を作成して、そのファイルをアセットに追加しました。ADB は APK をデバイスに正常にインストールしました。

デバイスに十分な空き容量がある限り、APK をインストールできます。それでもエラーが発生する場合はcould not allocate buffer for 'APK'、adb を更新します。

DEX の制限:

私が知っている唯一のサイズ制限は、dex ファイルのサイズです。dex ファイル (APK の classes.dex) が 5 MB を超え、Froyo または Gingerbread にインストールする必要がある場合、インストールは失敗します。最近のバージョンの Android では、8 MB または 16 MB のバッファーが使用されます。multidexを使用してこの問題を解決できます。ただし、おそらく dex ファイルのサイズを気にする必要はありません (詳細)。

于 2016-02-08T09:19:17.783 に答える
0

これは良い答えではないか、探しているものではないかもしれません。しかし、それはまともな回避策かもしれません。カスタム android rom の一部としてパッケージ化し、それをインストールする予定のデバイスに rom をフラッシュすることができます。

于 2013-08-14T11:18:59.783 に答える