2013-01-09 14 views
36

winrar(圧縮ファイルを開くためにs/w)でapkファイルを開くとき。 apkの中にたくさんのファイルが入っています。 class.dexは1つです。私の質問は、このファイルの役割は何ですか、私たちが同じファイルを変更/削除するとAPKに影響しますか?apkファイル内のclasses.dexファイルの役割

答えて

46

APKファイルを作成するには、まずAndroid用のプログラムをコンパイルし、そのすべての部分を1つのファイルにパッケージします。これは、そのプログラムのコード(これらは.dex filesです)、リソース、アセット、証明書、マニフェストファイルのすべてを保持します。

プログラムは通常Javaに書かれ、bytecodeにコンパイルされます。デバイスにインストールする前に、Java Virtual Machine-compatible .class filesからDalvik-compatible .dex(Dalvik Executable)ファイルに変換されます。コンパクトなDalvik Executable形式は、メモリとプロセッサ速度の面で制約のあるシステムに適しています。

  • classes.dex:のDalvik仮想マシンが理解できるDEXファイル形式でコンパイルされたクラス

.dexファイルはAPKのリソースを保持しているように、これらのファイルのいずれかの編集が 直接意志APKに影響を与えます。

+2

複数の.classファイルが存在する場合、なぜclasses.dexが1つしかないのか知りませんか?これはdexingによって行われた最適化によるか、それは.jarファイルのようなパッケージのちょうど良いものですか? – PSIXO

+0

dexファイルには私が信じるリソースが含まれていません。 classes.dexが作成された後にマージされます。 – zgulser

9

.dexファイル コンパイル済みのAndroidアプリケーションコードファイル。

From Android API GUIDES

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

これらのファイルを削除すると、APKに影響します。

4

classes.dexは基本的にアプリケーションロジックのすべてです。与えられたアプリケーションのコードはjavaで書かれ、クラスファイルにコンパイルされ、これらのクラスファイルはdalvik VMフォーマットにクロスコンパイルされます(多くの最適化を伴います)。アプリケーションコードでもある.soファイルがあるかもしれませんが、これらはNDKが使用されたときに生成されます。 このファイルは削除できません。しかし、最初にこのユーティリティhttps://code.google.com/p/smali/を実行することによってそれを変更することができます。このコンパイルされたデックスからsmaliコードが生成されます。これはjavaと幾分似ており、理解できます。また、ツールApkOneClickまたはApkMultiToolを使用してsmaliファイルからJavaソースを取得することもできますが、これらはおそらく完璧ではないため、さらに修正する必要があります。必要なコードを変更したら、再度classes.dexをビルドして、既存のzip/apkファイルに入れてください。既存の証明書ファイル(META-INF)はもう有効ではないので、電話またはエミュレータにインストールするには、このフォルダを削除してapkパッケージを辞退する必要があります。詳細情報については

あなたもWhat are .dex files in Android?

この質問をチェックすることができます。また、これはAPKでhttp://blog.vogella.com/2011/02/14/disassemble-android-dex

0

.dexファイルが作られている圧縮ファイルで既存のツールを使用してDEXファイルを逆アセンブルに大きなチュートリアルですアプリケーションコード内のすべてのJavaクラスのうちの1つです。 jarファイルとは異なります。 jarファイルは、分離された.classファイルの集合です。解凍したらjar、すべてのクラスを別々に取得します。一方、.dexファイルは、アプリケーションコードからすべての.classファイルで構成された単一のファイルです。

コードコンパイル・フロー: 複数の.javaファイル - >複数.classesファイル - >単一.dexファイル

.dexファイルDVMによって実行されている実行可能ファイルがある...のDalvik仮想マシンこれはAndroid用のランタイムです。

.dexにはリソースが含まれません。リソースは個別に.apkの/ resフォルダに保持されます

1

このファイルの役割は何ですか?

classes.dexのAndroidでの役割は、プレーンJavaのJARファイルの役割とよく似ています。これはバイトコードを含むファイルです。 Androidの場合、バイトコードはDalvikバイトコードであり、Javaバイトコードとは異なります。

同じファイルを変更/削除するとapkに影響しますか?

classes.dexを変更すると、プログラムの動作が変更されます。再プログラム後に動作する場合と動作しない場合があります。 classes.dexを削除すると、アプリケーションにコードがなく、そのコードが動作するとは思わないはずです。

関連する問題