2016-11-19 2 views
2

Je suis curieux de savoir s'il est possible d'exécuter bytecode en Java pour Android similaire à la façon dont vous pouvez utiliser inline-assembly dans . En C++, je peux lancer l'assemblage et utiliser son résultat dans le programme.Android exécuter Dalvik bytecode comme l'assemblage en ligne en C++

Je ne souhaite pas injecter le bytecode pendant l'exécution mais avant la compilation proprement dite de apk.

// example of MSVC-syntax inline-asm syntax; not actually doing anything useful. 
__asm { 
     mov bl, 2 
     sub bl, 0 
     div bl 
     add ax, 0 
} 
+1

[Jasmin] (http://jasmin.sourceforge.net/about.html). –

+0

@Elliot Jasmin est obsolète, et la question se pose à propos de Android de toute façon. – Antimony

Répondre

4

Il n'existe aucun moyen d'intégrer un assemblage en ligne dans Java. Java, la langue est spécifiée et cette spécification n'inclut pas l'assemblage en ligne. Cependant, votre code Java est finalement compilé en fichiers dex.

La plate-forme Android ne voit que les fichiers dex et ne se soucie pas de la façon dont ils ont été générés. Vous pouvez écrire le bytecode dex à la main en utilisant des outils tels que smali. De plus, de telles classes personnalisées peuvent interagir librement avec des classes compilées à partir de Java ou d'autres langages. Notez cependant que le langage Java est plus strict que le bytecode et que le bytecode non-Java n'est pas garanti pour respecter les invariants garantis dans le lanaguage Java.