Как получить файлы классов или байт-код Dalvik стандартных библиотек Java, которые используются Dalvik VM?

Я хочу получить байт-код Dalvik для стандартных библиотек Java, я имею в виду библиотеки Java, которые используются Android (например, коллекции java.util.*).

Мне нужно получить эти файлы классов, потому что я хочу их проанализировать, не все из них, а что-то вроде java.util.*, java.lang.* и т. д.

Однако при компиляции любых приложений для Android не будут генерироваться файлы классов этих стандартных библиотек, за исключением кода приложения и библиотек зависимостей.

Итак, мне интересно, как получить скомпилированные файлы классов (и соответствующие файлы dex при компиляции в Dalvik VM)?

Я попытался вытащить стандартные библиотеки Java в проект Android, например, получить весь исходный код Java и добавить их в качестве кода приложения, ИЛИ поместить classes.jar (rt.jar) в папку libs, однако эти два способа не работают, потому что источник код или файл jar в проекте будут конфликтовать со средой компиляции по умолчанию и выдавать страшную ошибку Conversion to Dalvik format failed with error 1

Любая идея, как получить то, что я хочу?


person monica    schedule 14.08.2013    source источник
comment
Ваш вопрос требует более подробной информации, так как я не понимаю, почему вы ищете файлы классов коллекций, а в Android уже есть классы коллекций.   -  person Morrison Chang    schedule 14.08.2013
comment
@MorrisonChang Обновил вопрос.   -  person monica    schedule 14.08.2013
comment
Я на самом деле не понимаю, что вы пытаетесь сделать. Вы просто хотите просмотреть исходный код некоторых основных библиотек Java, используемых Android, или действительно хотите включить эти классы в свой проект? (и если да, то почему?)   -  person JesusFreke    schedule 14.08.2013
comment
@JesusFreke Не смотрит в источник. Мне нужно включить эти классы в проект, чтобы я мог их анализировать (байт-код).   -  person monica    schedule 14.08.2013


Ответы (1)


Исходники и двоичные файлы системных библиотек доступны как часть Android SDK. Просто загляните в каталог установки platforms/android-{version}/android.jar для бинарных файлов и sources/android-{version} для исходников (если вы его установили).

person Henry    schedule 14.08.2013
comment
android.jar не содержит фактических двоичных файлов файлов классов. Если вы изучите содержимое, вы увидите, что все реализации методов являются заглушками и только для общедоступного нескрытого кода. Этот файл jar — это то, что SDK может скомпилировать + связать. - person fadden; 14.08.2013
comment
@Henry Благодаря вашей информации я наконец-то получил весь байт-код Dalvik для android.jar. Я использовал dx --core-library --dex --output="android2.apk" "android.jar" , чтобы сначала превратить его в файл apk, который можно извлечь с помощью apktool. Или android.jar можно преобразовать в формат .dex напрямую с помощью dx. Затем файл dex можно разобрать с помощью инструмента Dedexer. - person monica; 14.08.2013