Формат файлов .dex для Android 2.1 (Eclair), т.е. уровень API 7 - PullRequest
0 голосов
/ 12 мая 2019

Я пишу ассемблер для файлов Android / Dalvik .dex. официальные документы для Android , кажется, описывают только новейшую версию формата .dex (очевидно, 038 по состоянию на май 2019 г.), с несколькими короткими заметками, описывающими различия назаддо версии 035. быстрый взгляд на источники Android , по-видимому, предполагает, что версия 035 формата соответствует Android уровень API 13 , что означает Android 3.2.x (Honeycomb).У меня есть устройство с Android 2.1 (Eclair), которое , по-видимому, означает уровень API 7 .Я хотел бы узнать, как создавать правильные файлы .dex и .apk для этого устройства, и надеюсь добавить поддержку этих файлов в мой ассемблер.

Где я могу найти информацию, которая может мне помочьиспускать правильные файлы .dex для Android 2.1 (Eclair), то есть уровень API 7? Я даже не знаю, что такое строка версии формата .dex для этого уровня API!

Для "бонусных баллов",Мне бы очень хотелось найти хороший справочник, объясняющий различия в формате .dex между всеми уровнями API (по крайней мере, до уровня API 7).Мне также было бы интересно узнать, существуют ли какие-либо существенные различия в формате двоичных файлов .xml и файлов ресурсов (в виде инструмента aapt) между уровнями API Android.Я предполагаю, что есть большая вероятность, что сам формат .apk, а также алгоритм подписи, мы надеемся, не изменили вообще , учитывая, что это тот же формат, который используется для подписи файлов .jar Java (т.е.обычный .zip с несколькими простыми специальными файлами в подкаталоге META-INF/).Но спецификация формата .dex (включая байт-коды), вероятно, является наиболее важной частью или, по крайней мере, хорошей отправной точкой.

1 Ответ

1 голос
/ 13 мая 2019

https://source.android.com/devices/tech/dalvik/dex-format имеет несколько быстрых размышлений о различиях между версиями.

Note: Support for version 037 of the format was added in the Android 7.0 
release. Prior to version 037 most versions of Android have used version 035 of 
the format. The only difference between versions 035 and 037 is the addition of 
default methods and the adjustment of the invoke.

Note: Support for version 038 of the format was added in the Android 8.0 
release. Version 038 added new bytecodes (invoke-polymorphic and invoke- 
custom) and data for method handles.

Хотя, обратите внимание, что самая последняя версия - 039, которая, кажется, не упоминается в документе. iirc, 039 добавил инструкции invoke-custom/range, const-method-handle и const-method-type.

Другие источники информации включают просмотр журнала изменений этих документов: https://android.googlesource.com/platform/docs/source.android.com/+log/refs/heads/master/en/devices/tech/dalvik/dex-format.html https://android.googlesource.com/platform/docs/source.android.com/+log/refs/heads/master/en/devices/tech/dalvik/dalvik-bytecode.html

А до этого, перед тем как файлы были перемещены:

https://android.googlesource.com/platform/docs/source.android.com/+log/a3b748b40bab557fb47fe5a48a5bfb642837fb05/src/devices/tech/dalvik/dex-format.jd https://android.googlesource.com/platform/docs/source.android.com/+log/a3b748b40bab557fb47fe5a48a5bfb642837fb05/src/devices/tech/dalvik/dalvik-bytecode.jd

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

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

...