2012-04-08 3 views
3

Байт-код для системных классов, таких как 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?

ответ

3

android.jar, в котором вы компилируете свой код, содержит только общедоступные классы с общедоступными (постоянными) полями и общедоступными методами, но все эти методы не содержат реализации. Все методы с возвратным типом, которые void выкидывают «Штук!» RuntimeException.

Библиотека времени исполнения с реальной реализацией связана с вашим приложением только на телефонном устройстве или в эмуляторе.

+0

Вы имеете в виду, что ни один из классов в android.jar не содержит реального кода, и у него есть только куча заглушек, чтобы сделать javac счастливым? Где я могу найти библиотеку времени выполнения (как исходный код, так и байт-код)? – dacongy

+0

Да, это просто фальшивка, чтобы удовлетворить вашу зависимость от времени компиляции в API андроида. Насколько я знаю, вы не можете получить работоспособную банку без реального устройства Android или эмулятора, потому что она опирается на некоторые собственные функции. – Natix

+0

Что касается источника, вы можете просмотреть его, например, здесь: http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ или вы можете просто загрузить его через Android SDK Manager в Eclipse. Он находится под узлом API15, но он работает с любой более старой версией API. – Natix

Смежные вопросы