Байт-код для системных классов, таких как android.os.Looper
- это просто заглушка. Например, android.os.Looper.loop()
из android.jar
содержит следующие байткод:андроид система класса компиляция
public static final void loop();
Code:
0: new #2; //class java/lang/RuntimeException
3: dup
4: ldc #3; //String Stub!
6: invokespecial #4; //Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V
9: athrow
Но в AOSP, я могу видеть реальный исходный код, который выполняет отправку сообщений (см AOSP_ROOT/frameworks/base/core/java/android/os/Looper.java
). Итак, как этот класс обрабатывается именно системой Android? Является ли реальный код исправленным при компиляции системы android.jar
в файл dex или это происходит во время выполнения в VM Dalvik?
Вы имеете в виду, что ни один из классов в android.jar не содержит реального кода, и у него есть только куча заглушек, чтобы сделать javac счастливым? Где я могу найти библиотеку времени выполнения (как исходный код, так и байт-код)? – dacongy
Да, это просто фальшивка, чтобы удовлетворить вашу зависимость от времени компиляции в API андроида. Насколько я знаю, вы не можете получить работоспособную банку без реального устройства Android или эмулятора, потому что она опирается на некоторые собственные функции. – Natix
Что касается источника, вы можете просмотреть его, например, здесь: http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ или вы можете просто загрузить его через Android SDK Manager в Eclipse. Он находится под узлом API15, но он работает с любой более старой версией API. – Natix