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


193

dexファイルについて質問があります

  • dexAndroidのファイルとは何ですか?
  • Androidではdexはどのように機能しますか?
  • Androidアプリのデバッグにどのように使用されますか?
  • それらはJavaクラスファイルに似ていますか?

特定の情報が必要です。これについて助けてください。実際の例は大歓迎です!



回答:


226

.dexファイルについて:

の最も注目すべき機能の1つDalvik Virtual Machine(Androidシステムでの主力)は、Javaバイトコードを使用しないことです。代わりに、DEXと呼ばれる独自のフォーマットが導入され、バイトコード命令でさえJavaバイトコード命令と同じではありません。

Compiled Android application code file.

Androidプログラムは.dex(Dalvik Executable)ファイルにコンパイルさ.apkれ、デバイス上の単一のファイルに圧縮されます。.dexJavaプログラミング言語で記述されたコンパイル済みアプリケーションを自動的に翻訳することにより、ファイルを作成できます。

Dexファイル形式:

 1. File Header
 2. String Table
 3. Class List
 4. Field Table
 5. Method Table
 6. Class Definition Table
 7. Field List
 8. Method List
 9. Code Header
10. Local Variable List

AndroidにはDalvik Executable Format.dexファイル)に関するドキュメントがあります。詳細については、公式ドキュメント:Dexファイル形式をご覧ください。

.dex ファイルはjavaクラスファイルに似ていますが、古いAndroidバージョンではDalkvik仮想マシン(DVM)の下で実行され、デバイスでのインストール時に、新しいAndroidバージョンではARTを使用してネイティブコードにコンパイルされました。

android-sdkで提供されるツールをdecompile使用して.dexを実行できdexdumpます。

ファイルから、またはファイルから作成するリバースエンジニアリングテクニックもあります。jar filejava class file.dex


私のjarファイルには、assetsフォルダーにいくつかのxmlが含まれています。これを.dexの一部にしたいこれを実装する方法はありますか?
AndroidGuy 2013

@AndroidGuy-このためにAndroidライブラリパッケージを使用する必要があるAndroidリソースパッケージ(/ asset)がJARファイルに含まれていません。
user370305 2013

Android LollipopのARTでどのように機能しますか?そこでどのファイルがどのパスで使用されていますか?より多くのスペースが必要になると言う人もいます。本当ですか?もしそうなら、どうして?つまり、ネイティブコードは常にバイトコードよりもはるかに小さいようであり、dexファイルはその機能の点でバイトコードに似ています。
Android開発者

注意すべき重要な点の1つdexdumpは、逆コンパイラではなく逆アセンブラであるということです
ゲンギスカー

90
.dex file

コンパイルされたAndroidアプリケーションコードファイル。

Androidプログラムは.dex(Dalvik Executable)ファイルにコンパイルされ、デバイス上の単一の.apkファイルに圧縮されます。.dexファイルは、Javaプログラミング言語で記述されたコンパイル済みアプリケーションを翻訳することにより、Androidによって自動的に作成できます。


2
私のjarファイルには、assetsフォルダーにいくつかのxmlが含まれています。これを.dexの一部にしたいこれを実装する方法はありますか?
AndroidGuy 2013

87

dex fileは、Dalvik VMで実行されるファイルです。

Dalvik VMには、パフォーマンスの最適化、検証、監視のためのいくつかの機能が含まれています。その1つがDalvik Executable(DEX)です。

Javaソースコードは、Javaコンパイラによって.classファイルにコンパイルされます。次に、dxAndroid SDKの一部である(dexer)ツールが、.classファイルをDEXDalvikバイトコードを含むと呼ばれるファイル形式に処理します。このdxツールは、クラスに存在するすべての冗長な情報を排除します。ではDEX、すべてのアプリケーションのクラスが一つのファイルにパックされています。次の表は、JVM jarファイルとdexツールによって処理されるファイルのコードサイズの比較を示しています。

この表は、システムライブラリ、Webブラウザーアプリケーション、および汎用アプリケーション(目覚まし時計アプリ)のコードサイズを比較しています。すべての場合において、dexツールはコードのサイズを50%以上削減しました。

ここに画像の説明を入力してください

標準のJava環境では、Javaコードの各クラスは1つの.classファイルになります。つまり、Javaソースコードファイルにパブリッククラスが1つと匿名クラスが2つある場合、たとえばイベント処理の場合、Javaコンパイラーは合計3つの.classファイルを作成します。

コンパイル手順はAndroidプラットフォームでも同じであるため、複数の.classファイルが生成されます。しかし、.classファイルが生成された後、「dx」ツールを使用して、すべての.classファイルが単一の.dex、つまりDalvik実行可能ファイルに変換されます。それはある.dexのDalvik VM上で実行されるファイル。.dexファイルには、メモリの使用状況に合わせて最適化されており、設計は主にデータの共有によって駆動されます。


18
良い情報。指摘すべきことが1つだけあります。メソッド呼び出し命令数の制限により、複数のdexファイルが存在する場合があります。この制限は65kメソッドです。その場合、コードは1つのファイル内ではなく、2つ以上のファイルに含まれますが、それ以外のすべてが引き続き適用されます。また、動的クラスローディングも利用できるので、ファイルから(再びdex形式で)コードをロードできるため、コードは複数のdexファイル内にあります。
IgorČordaš2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.