Какая магия мне нужна, чтобы прочитать APK с помощью dex2jar?

Я пытаюсь использовать dex2jar для чтения файла dex (Android APK) в обычном Java-приложении.

У меня есть файловый объект для APK, а затем я просто вызываю new DexFileReader(dex)

Однако это вызывает следующее исключение «не поддерживает магию»:

com.googlecode.d2j.DexException: not support magic.
at com.googlecode.d2j.reader.DexFileReader.<init>(DexFileReader.java:160)
at com.googlecode.d2j.reader.DexFileReader.<init>(DexFileReader.java:258)
at com.googlecode.d2j.reader.DexFileReader.<init>(DexFileReader.java:276)

Исходный код показывает следующий блок:

in = in.asReadOnlyBuffer().order(ByteOrder.BIG_ENDIAN);
int magic = in.getInt() & 0xFFFFFF00;

final int MAGIC_DEX = 0x6465780A & 0xFFFFFF00;// hex for 'dex ', ignore the 0A
final int MAGIC_ODEX = 0x6465790A & 0xFFFFFF00;// hex for 'dey ', ignore the 0A

if (magic == MAGIC_DEX) {
    ...
} else if (magic == MAGIC_ODEX) {
    ...
} else {
    throw new DexException("not support magic.");
}

Я предполагаю, что я пропустил шаг и что необходимо преобразование из APK в базовый формат dex, но это не показано в примере раздела «Хочу прочитать файл dex с помощью dex2jar» в вики (ссылка выше).

Как мне успешно прочитать APK? Что я пропустил?


person Nick Cardoso    schedule 16.01.2018    source источник
comment
Вам нужно передать ему файл dex, а не весь APK. Вы передаете файл dex один после извлечения его из APK?   -  person Codebender    schedule 16.01.2018
comment
Нет! Спасибо, сейчас посмотрю, хотя нужен был весь пакет.   -  person Nick Cardoso    schedule 16.01.2018


Ответы (1)


АПК в основном представляет собой zip-файл. Он содержит декс - но это гораздо больше, чем это. Поэтому сначала извлеките оттуда dex, а затем запустите dex2jar.

person ligi    schedule 16.01.2018