2016-11-19 8 views
2

에서 인라인 어셈블리를 사용하는 것과 비슷한 Android 용 Java에서 바이트 코드를 실행할 수 있는지 궁금합니다. C++에서는 어셈블리를 실행하고 그 결과를 프로그램에서 사용할 수 있습니다.Android가 C++의 인라인 어셈블리와 같은 Dalvik 바이트 코드를 실행합니다

런타임 중에 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은 더 이상 사용되지 않으며 어쨌든 Android에 관해 묻고 있습니다. – Antimony

답변

4

Java에서 인라인 어셈블리를 포함 할 수있는 방법이 없습니다. 자바, 언어가 지정되어 있고 그 사양은 인라인 어셈블리를 포함하지 않습니다. 그러나 Java 코드는 궁극적으로 dex 파일로 컴파일됩니다.

안드로이드 플랫폼은 dex 파일 만보고 어떻게 생성되었는지 상관하지 않습니다. smali와 같은 도구를 사용하여 dex 바이트 코드를 직접 작성할 수 있습니다. 더 나아가, 이러한 커스텀 클래스는 자바 나 다른 언어로 컴파일 된 클래스와 자유롭게 상호 작용할 수 있습니다. 그러나 Java 언어는 바이트 코드보다 엄격하고 Java가 아닌 바이트 코드는 Java 언어에서 보장되는 불변의 것을 유지할 수 있다고 보장하지 않습니다.