web-dev-qa-db-ja.com

AndroidのODEXファイルとは何ですか?

いくつかのAndroidアプリをインストールした後、スマートフォンでodexファイル(apkではなく)に変更されることがわかりました。どうやって起こるの?誰が教えてくれるのか、とても興味があります。

70
user1253435

ブログ記事 はほとんど正しいですが、完全ではありません。 Odexファイルの機能を完全に理解するには、アプリケーションファイル(APK)の動作について少し理解する必要があります。

アプリケーションは、基本的には栄光に満ちたZipアーカイブです。 Javaコードは、classes.dexというファイルに保存され、このファイルはDalvik JVMによって解析され、処理されたclasses.dexファイルのキャッシュは電話のDalvikキャッシュに保存されます。

Odexは基本的に、Dalvikの実行準備が整ったアプリケーションのclasses.dexの前処理済みバージョンです。アプリケーションがodexされると、classes.dexはAPKアーカイブから削除され、Dalvikキャッシュには何も書き込まれません。 Odexされていないアプリケーションは、classes.dexファイルの2つのコピーで終わります。APKにパッケージ化されたものと、Dalvikキャッシュに処理されたものです。また、Dalvikはclasses.dexファイルを抽出して処理する必要があるため、初めて起動するのに少し時間がかかります。

カスタムROMを構築する場合、ユーザーがインストールしたアプリの内部ストレージスペースを最大化するために、フレームワークJARファイルとストックアプリの両方をodexすることをお勧めします。テーマを設定する場合は、deodex->​​テーマを適用-> reodex->​​リリースを選択します。

実際にdeodexするには、smallとbaksmaliを使用します。

http://code.google.com/p/smali/wiki/DeodexInstructions

72
Nathan Strong

このブログ記事 ODEXファイルの内部について説明しています:

WHAT IS AN ODEXファイル?

Androidファイルシステムでは、アプリケーションには拡張子.apkのパッケージが付属しています。これらのアプリケーションパッケージまたはAPKには、スペースを節約することを想定した特定の.odexファイルが含まれています。これらの「odex」ファイルは、実際には起動前に最適化されたアプリケーションの一部のコレクションです。これにより、アプリケーションの一部がプリロードされるため、ブートプロセスが高速化されます。一方、コーディングの一部が実行前に別の場所に既に抽出されているため、これらのアプリケーションのハッキングも困難になります。

18
theomega

ART

ARTでは、.odexファイルには以下が含まれます。

aPKのメソッドのAOTコンパイル済みコードが含まれています。

ドキュメントによると: http://web.archive.org/web/20170909233829/https://source.Android.com/devices/tech/dalvik/configure

さらに、アプリを入手して以下をチェックするため、これらは通常の共有ライブラリのように見えます。

file /data/app/com.Android.appname-*/oat/arm64/base.odex

それは言います:

base.odex: ELF shared object, 64-bit LSB arm64, stripped

およびaarch64-linux-gnu-objdump -d base.odexは機能し、意味のある逆アセンブリを提供しているようです(ごみのセクションもあります)。