Dalvik VM、dex、Smaliについて少し学習します。
私はsmaliについて読んだことがありますが、それでもコンパイラのチェーンのどこにあるのかを明確に理解することはできません。そしてその目的。
ここでいくつかの質問:
前もって感謝します。
アプリケーションコードを作成すると、apkファイルには.dexファイルが含まれ、バイナリDalvikバイトコードが含まれます。これは、プラットフォームが実際に理解する形式です。ただし、バイナリコードの読み取りや変更は簡単ではないため、人間が読み取れる表現との間で変換するツールがあります。最も一般的な人間が読める形式は、Smaliとして知られています。これは、あなたが言及した逆アセンブラーと本質的に同じです。
たとえば、Javaのようなコードを実行するコードがあるとします
int x = 42
これが最初の変数であると仮定すると、メソッドのdexコードには16進シーケンスが含まれている可能性が高い
13 00 2A 00
Baksmaliを実行すると、次の行を含むテキストファイルが取得されます。
const/16 v0, 42
バイナリコードよりも明らかに読みやすいです。しかし、プラットフォームはsmaliについて何も知らず、バイトコードを簡単に操作できるようにするためのツールにすぎません。
DalvikとARTは、どちらもdalvikバイトコードを含む.dexファイルを取ります。アプリケーション開発者には完全に透過的です。唯一の違いは、アプリケーションをインストールして実行したときに舞台裏で何が起こるかです。