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


82

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

回答:


85

ブログ記事はほとんど正しいですが、完全ではありません。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を使用します。

https://github.com/JesusFreke/smali/wiki/DeodexInstructions


APKファイルをreodexする方法を教えてください。
Basher51 2014

23

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

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

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


私のアプリが同じ機能を持っていることを望む場合(アプリはAPKではなくodexで実行されます)、それを行う方法は?
user1253435 2012年

あなたはマイナスを得るはずです!dalvikは起動時間を最適化しません。コンパイラのように高レベルの言語から低レベルの言語に最適化されたコードですが、この場合、dalvikのコードはほとんど機械語への翻訳です。これが、JavaだけでなくC ++からアプリを作成できる理由です。
cox 2014

あなたはそれを確信していますAPKs contain certain .odex files?!
AmirRezazadeh19年

3

アート

ドキュメントによると:http://web.archive.org/web/20170909233829/https://source.android.com/devices/tech/dalvik/configure.odexファイル:

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

さらに、アプリを入手した場合は次のことを確認するため、通常の共有ライブラリのように見えます。

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動作しているようですし、いくつかの意味の解体(だけでなく、いくつかのゴミのセクション)を得ました。

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