Je vais en apprendre un peu plus sur Dalvik VM, dex et Smali.
J'ai lu sur smali, mais je n'arrive toujours pas à comprendre clairement où sa place dans la chaîne de compilateurs. Et quel est son but.
Voici quelques questions:
Merci d'avance.
Lorsque vous créez un code d'application, le fichier apk contient un fichier .dex, qui contient le bytecode Dalvik binaire. C'est le format que la plateforme comprend réellement. Cependant, il n'est pas facile de lire ou de modifier du code binaire, il existe donc des outils pour convertir vers et depuis une représentation lisible par l'homme. Le format lisible par l'homme le plus courant est appelé Smali. C'est essentiellement le même que le dissembleur que vous avez mentionné.
Par exemple, disons que vous avez Java code qui fait quelque chose comme
int x = 42
En supposant qu'il s'agit de la première variable, le code dex de la méthode contiendra très probablement la séquence hexadécimale
13 00 2A 00
Si vous exécutez baksmali dessus, vous obtiendrez un fichier texte contenant la ligne
const/16 v0, 42
Ce qui est évidemment beaucoup plus lisible que le code binaire. Mais la plateforme ne sait rien de smali, c'est juste un outil pour faciliter le travail avec le bytecode.
Dalvik et ART prennent tous les deux des fichiers .dex contenant le bytecode dalvik. Il est complètement transparent pour le développeur de l'application, la seule différence est ce qui se passe dans les coulisses lorsque l'application est installée et exécutée.