- PVSM.RU - https://www.pvsm.ru -
В этом статье я сжато, без «воды», расскажу как отлаживать приложения для Android не имея их исходного кода на Java. Статья не совсем для новичков. Она пригодиться прежде всего тем кто более или менее понимает синтаксис Smali [1] и имеет некоторый опыт в reversing engineering приложений для Android.
Нам понадобится Apk-tool 1.4.1 [2] и NetBeans 6.8 [3]. Да-да, именно эти древние версии! С более новыми версиями отладка к сожалению «не заводится», о чем уже неоднократно упоминалось в различных обсуждениях (см. например тут [4] и тут [5]).
На установке подробно не останавливаюсь. NetBeans устанавливается по умолчанию, просто запускам инсталляцию и кликаем Next-Next-Next. Установка Apk-tools заключается в обычной распаковке файла apktool.jar
в любую папку.
В этом разделе дана пошаговая инструкция. Она писалась для Windows, но вероятно сработает и на Linux и Mac OS. Черновик этой инструкции на английском также есть у меня в блоге, но ссылку не дам, ибо правила. Эта инструкция более или менее повторяет оригинальную инструкцию [6] с Apk-tool wiki, однако содержит некоторые дополнительные пункты, без которых отладка может «не завестись». В своё время у меня не заводилась, и я нашел эти дополнительные пункты методом усиленного гугления и «научного тыка». Надеюсь, теперь мой опыт кому-то сэкономит время.
Пожалуйста, следуйте инструкции в точности – это важно!
out
с помощью Apk-tool. Для этого используйте опцию -d
:
java -jar apktool.jar d -d my.app.apk out
В результате в директории out/smali
у вас будет куча .java файлов с закомментированным Smali кодом внутри. Это нормально, так и должно быть.
android:debuggable="true"
в секцию <application>
файла out/AndroidManifest.xml
out
обратно в .apk файл:
java -jar apktool.jar b -d out my.app.to.debug.apk
my.app.to.debug.apk
и установите его на реальное устройство или эмулятор, на котором вы собираетесь его отлаживать.out/build
(она может помешать создать проект на шаге 6 и 7).
out
в качестве «Project Folder». Кликните «Next».out/smali
в список «Source Package Folder». Кликните «Next», а затем «Finish». В результате в проект будут добавлены те самые .java файлы с закомментированным Smali кодом внутри.my.app.to.debug.apk
на реальном устройстве или эмуляторе (если вы используете реальное устройство, то убедитесь что оно подключено к вашему компьютеры с помощью USB кабеля и ваша система его «видит»).
86xx / 8700
".
8700
(или какой там номер порта у вас был на предыдущем шаге). Остальные поля оставте без изменений. Кликните «OK».Вот и всё, если вкратце.
Без подвоха тут конечно никак. Обычно всё идёт хорошо, строго по инструкции, аж до шага 13. А вот на шаге 13 люди часто ставят breakpoint в самом начале кода приложения: например в методе onCreate(...)
в activity с которой начинается выполнение приложения. Оно вроде бы и логично – если не совсем понятно откуда начинать отлаживать приложение, лучше начинать с самого начала. Однако в большинстве случаев дело не идёт. Отлаживаемое приложение работает себе как ни в чем не бывало, а подлый breakpoint в onCreate(...)
ни в какую не желает срабатывать.
Это происходит из-за того что мы подсоединяем отладчик к уже работающему приложению. Это значит код в начале приложения (например в том же методе onCreate в activity с которой начинается выполнение приложения) уже выполнился, и ставить на него breakpoint'ы как правило (хотя не всегда конечно) бесполезно. Более того, когда мы присоединяем отладчик к работающему приложению, оно не останавливается пока не сработает наш breakpoint или пока мы его сами не остановим – об этом моменте также стоит помнить.
Уважаемое читатели дало мне инвайт, и следующей статье я покажу пару трюков, которые позволяют отлаживать Java приложения для Android без исходного кода с самого начала, т.е. именно с того самого первого метода onCreate(...)
(или даже конструктора) в activity с которой начинается выполнение приложения.
Если есть вопросы – пожалуйста задавайте их в комментариях или в личных сообщениях. Постараюсь ответить по-возможности оперативно, но если буду тупить – пожалуйста наберитесь терпения. Постараюсь ответить всем.
Автор: dimakovalenko
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android/14415
Ссылки в тексте:
[1] Smali: http://code.google.com/p/smali/
[2] Apk-tool 1.4.1: http://code.google.com/p/android-apktool/downloads/detail?name=apktool1.4.1.tar.bz2&can=1&q=
[3] NetBeans 6.8: http://netbeans.org/downloads/6.8/index.html
[4] тут: http://code.google.com/p/android-apktool/issues/detail?id=339&q=dima&colspec=ID%20Stars%20Type%20Status%20Priority%20Milestone%20Owner%20Summary
[5] тут: https://groups.google.com/forum/?fromgroups=#!topic/apktool/ryBHd29ikBA
[6] оригинальную инструкцию: http://code.google.com/p/android-apktool/wiki/SmaliDebugging
Нажмите здесь для печати.