Androidがインストール済みアプリのAPKファイルを保持するのはなぜですか?


31

Androidは、インストールされたユーザーアプリのAPKファイルを/data/appディレクトリに、システムアプリの/system/appディレクトリにディレクトリを保持します。

アプリを起動するたびにAndroidがAPKファイルからdexファイルを抽出するということですか?そうでない場合、APKファイルを安全に削除してもアプリを実行できますか?

回答:


43

通常、Android APKにはこれらのものが含まれています。

assets/
lib/
META-INF/
res/
AndroidManifest.xml
classes.dex

インストール時に、APKファイルはにコピーされ/data/appclasses.dex実行dex2oatされて「最適化」されます(Android 5以降lib/も抽出されます)。最適化の結果はに保存される/data/dalvik-cache/ため、インストールまたは更新ごとに1回だけアプリを最適化する必要があります。その他はすべてAPK内に保持されます。以下のようなもの:非常に明確である最初の答えはそうassetsres、アプリで必須です提供されなければならない、と彼らはAPKの内側にあります。APKファイルはサポート目的で保持されます。APKを削除すると、アプリは完全に起動しなくなります。(アプリ:私の資産はどこですか?)

第二に、Google Playはかなり前「Delta Update」のサポートを追加しました。デルタ更新手順では、古いパッケージと新しいパッケージの違いが計算されます。次にGPは「デルタ」をダウンロードし、元のAPKに変更を適用して更新されたAPKを生成し、ダウンロードサイズを削減します。

APKは常に署名されています。これにより、パッケージに対する悪意のある変更を防ぐことができます。何が変更されたか、またはウイルスが注入されたかどうかを知らずに、改造されたアプリをインストールすることは絶対に望まないでしょう。META-INF/APK の内部はこの目的のために機能します。非公式の変更により署名が一致しなくなり、Androidシステムはmoddedアプリのインストールを拒否します。

また、Android OSを更新すると、すべてのdexファイルが再び「最適化」されるため、1つずつ再インストールする必要はありません。前述のとおり、最適化にはclasses.dex元のパッケージのファイルが必要です。


5
Google Playストアのデルタ更新機能は、インストールされたバージョンと更新されたバージョン間のデルタを計算するAPKを持っていること、およびその後のパッチ適用に依存することに注意してください。さらに、APKは圧縮されているので、スペースを節約できます(古いZipzipAlignを覚えている人はいますか?)
タモフナチョードリー

@Tamoghna Spaceは実際には問題ではありません。そうでなければ、Android 5+はlib/APKから抽出されず、iOSはIPAからすべてを抽出しませんでした。基本的な整合性チェックのためだけです。
-iBug

実行可能ファイルが圧縮されることはめったにありません。スペースの節約は、抽出されないバイナリ化されたXMLファイルなどの圧縮リソースにより関連しています。また、そのZipAlignについて-リソースアクセスは、最適化された(ワードアラインされた)圧縮ファイルで多少速くなる可能性があります。
タモフナチョードリー

1
では、htmlやjsファイルなどのアセットファイルは、apkからAndroidファイルシステムの特定の場所にコピーされませんか?
user1788736

1
@ user1788736はい。APKに残っています。
-iBug
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.