いくつかのAndroid
アプリをインストールした後、スマートフォンでodex
ファイル(apk
ではなく)に変更されることがわかりました。どうやって起こるの?誰が教えてくれるのか、とても興味があります。
ブログ記事 はほとんど正しいですが、完全ではありません。 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を使用します。
このブログ記事 ODEXファイルの内部について説明しています:
WHAT IS AN ODEXファイル?
Androidファイルシステムでは、アプリケーションには拡張子.apkのパッケージが付属しています。これらのアプリケーションパッケージまたはAPKには、スペースを節約することを想定した特定の.odexファイルが含まれています。これらの「odex」ファイルは、実際には起動前に最適化されたアプリケーションの一部のコレクションです。これにより、アプリケーションの一部がプリロードされるため、ブートプロセスが高速化されます。一方、コーディングの一部が実行前に別の場所に既に抽出されているため、これらのアプリケーションのハッキングも困難になります。
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
は機能し、意味のある逆アセンブリを提供しているようです(ごみのセクションもあります)。