Я декомпилировал код apk с помощью apktool. Код, который я получил, содержит setContentView (2130903087); Мой вопрос в том, как найти имя макета из этой строки.setContentView показывает номер; как я могу найти макет после декомпиляционного кода?
ответ
Сначала преобразовать это десятичное число в шестнадцатеричное. Затем, после декомпиляции файла dex, вы получите файл R.java внутри вашего декомпилированного кода. В этом поиске для шестнадцатеричного числа вы получите файл макета.
HI Nigam. В папке gen отсутствует файл R.Java, есть только BuildConfig.java. Скажите, пожалуйста, как я продолжаю. –
Я говорю после разложения, он должен быть внутри исходной папки. –
@RahulVats, есть ли у вас это? –
Apktool использует smali для демонтажа приложений. Код, который вы написали, не был создан apktool.
Позволяет взять пример приложения и декодировать его. (apktool d test.apk
). Затем загляните в файл, который, как мы знаем, использует setContentView
.
const v0, 0x7f040037
invoke-virtual {p0, v0}, Lcom/android/deskclock/Screensaver;->setContentView(I)V
Как вы можете видеть. v0
заполнен шестнадцатеричным эквивалентом идентификатора ресурса макета. Так что теперь нам нужно только grep
для этого ID.
res/values/public.xml: <public type="layout" name="desk_clock_saver" id="0x7f040037" />
Итак, теперь мы знаем, что макет был desk_clock_saver
. Поэтому мы можем заглянуть в res/layout
.
[email protected]:~/test$ file res/layout/desk_clock_saver.xml
res/layout/desk_clock_saver.xml: XML document text
У нас оно есть.
Супер полезно, спасибо! –
Если у вас есть файл R.java, найдите идентификатор с этим значением. это требуемый вид/макет. –
Нет файла R.java. Тогда расскажи мне, как я продолжаю. –