Image

Imagestiver_rus wrote in Imageru_java

Байткод для Android'a

Если ли в сообществе люди, разбирающиеся в устройстве новомодной платформы Android? Насколько я понимаю, под нее можно писать и пишут на Яве. Очень интересует спецификация байткода, который генерирует его компилятор. Все чаще приходится сталкиваться с классами, которые не проходят стандартную верификацию и содержат "android" в названиях и строках. Сегодня попался такой метод:

protected void org.[...].onActivityResult(int, int, android.content.Intent)

0000	9A002C	ifne 0000002C	
0003	02	iconst_null	
0004	3604	istore 4	
0006	1502	iload 2	
0008	1504	iload 4	
000A	A00022	if_icmpne 0000002C	
000D	B200F5	getstatic #00F5<java.lang.String org.[...].EXTRA_TILE>	
0010	3A04	astore 4	
0012	03	iconst_0	
0013	3605	istore 5	
0015	2D	aload_3	
0016	1904	aload 4	
0018	1505	iload 5	
001A	B6003D	invokevirtual #003D<int android.content.Intent.getIntExtra(java.lang.String o, int i)>	
001D	3606	istore 6	
001F	2A	aload_0	
0020	B400F7	getfield #00F7<org.[...] org.[...]>
0023	3A04	astore 4	
0025	1904	aload 4	
0027	1506	iload 6	
0029	B60043	invokevirtual #0043<void org.[...].setSelectedTile(int i)>	
002C	B1	return	

то есть выполнение начинается с ifne, которая предполагает непустой стек. Но Sun'овская спецификация утверждает "For the first instruction of the method, the local variables that represent parameters initially contain values of the types indicated by the method's type descriptor; the operand stack is empty."

Что это такое за явление, откуда и почему оно берется и где можно про него почитать?