Это набор скриптов (bat) для упрощения жизни мобильным разработчикам в Delphi XE.
Основу составляет dex2jar - кроссплатформенный набор скриптов, предназначенный для конвертации dex файлов в class файлы. В данной инструкции описано как использовать DEX Explorer Kit для просмотра содержимого и модификации файла classes.dex.
APK - исполнимый файл Android приложения. По сути ZIP архив, внутри которого лежит classes.dex, AndroidManifest.xml, нативные библиотеки (.so) и пр. ресурсы. Embarcadero Delphi XE использует собственный classes.dex, который помещается в каждое Android приложение, собранное в этой IDE. Файл различается в разных версиях Delphi XE. Чтобы использовать Java классы или Java библиотеку в Android приложении на Delphi, нужно добавить их в classes.dex и подменить его в процессе сборки.
Декомпиляция — процесс воссоздания исходного кода декомпилятором.
Чтобы открыть командную строку в текущей папке, используйте SHIFT + клик правой кнопкой мыши -> Открыть командную строку здесь.
- В командной строке вызвать: "<dex2jar_home>/d2j-dex2jar.bat <dex_path>", где
dex2jar_home - путь к папке, в которую установлен dex2jar (в этом наборе ./decompile/dex2jar-2.0);
dex_path - путь к файлу classes.dex. - Открыть получившийся jar в программе-декомпиляторе java приложений (jd-gui, например), чтобы увидеть исходники.
JD-GUI не входит в этот набор, но её можно скачать с сайта разработчика http://jd.benow.ca/
Используемая в наборе версия пакета dex2jar 2.0. Перед началом работы рекомендуется проверить наличие новой версии здесь https://sourceforge.net/projects/dex2jar.
- Разместить исходники класса внутри папки src.
- Разместить classes.dex в папке lib.
Если во время исполнения скрипта файл classes.dex не будет обнаружен в папке lib, будет использоваться classes.dex от Embarcadero (к нему необходимо указать путь - EMBO_DEX) - Внести изменения в build.bat: указать путь к *.java файлам. Найти и заменить src\com\company\package\*.java в 28 строке файла build.bat.
- Запустить ./build.bat из командной строки (находясь в папке compile, содержащей этот файл).
Результатом слияния, если оно прошло успешно, будет output\dex\classes.dex. - Если ваш класс Service или Activity, вероятно, его необходимо будет прописать в шаблоне манифеста - AndroidManifest.template.xml. Такой шаблон можно найти в папке любого проекта на Delphi XE с target-platform = Android.
- Модифицированный classes.dex необходимо подключить к проекту в меню Project -> Deployment на подобие того, как это сделано с оригинальным classes.dex. Оригинальный classes.dex при этом следует отключить.
При первом использовании рекомендуется заглянуть в build.bat и определить переменные ANDROID и EMBO_DEX в соответствии со своим рабочим окружением.
- ANDROID - Путь к ANDROID SDK (рекомендуется использовать SDK, распространяющийся вместе с Delphi XE);
- EMBO_DEX - Путь к classes.dex от Embarcadero (не нужен, если присутствует classes.dex в папке lib этого набора).
- PROJ_DIR - Рабочая директория (т.е. папка, из которой запущен скрипт).
(актуально для Delphi XE5/XE6)
- Разместить библиотеку в папке lib, переименовать в sdk.jar (либо исправить имя в 27 строке файла merge_jar_dex.bat);
- Разместить classes.dex в папке lib.
Если во время исполнения скрипта файл classes.dex не будет обнаружен в папке lib, будет использоваться classes.dex от Embarcadero (к нему необходимо указать путь - EMBO_DEX) - Внести изменения в build.bat: указать путь к sdk, если он указан неверно.
- Запустить ./merge_jar_dex.bat из командной строки (находясь в папке compile, содержащей этот файл).
Результатом слияния, если оно прошло успешно, будет output\dex\classes.dex. - Модифицированный classes.dex необходимо подключить к проекту в меню Project -> Deployment на подобие того, как это сделано с оригинальным classes.dex. Оригинальный classes.dex при этом нужно отключить.
При первом использовании следует заглянуть в merge_jar_dex.bat и определить переменные ANDROID и EMBO_DEX в соответствии со своим рабочим окружением.
- ANDROID - Путь к ANDROID SDK (рекомендуется использовать SDK, распространяющийся вместе с Delphi XE);
- EMBO_DEX - Путь к classes.dex от Embarcadero (не нужен, если присутствует classes.dex в папке lib этого набора).
- PROJ_DIR - Рабочая директория (т.е. папка, из которой запущен скрипт).
Начиная с версии XE7 работу с Java кодом значительно упростили, поэтому лучше следовать инструкции в этом блоге http://delphifmandroid.blogspot.com.by/2015/03/jar.html
-
'java' is not recognized as an internal or external command
java не найдена.
Решение: настроить переменные окружения (JAVA_HOME и PATH). JAVA_HOME содержит путь к java, а в PATH нужно добавить %JAVA_HOME%\bin -
Dx bad class file magic (cafebabe) or version ...
Может возникать при сочетании dx.jar из Delphi XE5 (Android 4.2) и Java 7. (Текущая версия Java выводится в начале работы скрипта)
Решение: использовать Java 6. -
Чёрный экран при запуске приложения.
Внутри apk находится более одного classes.dex.
Решение: лишние classes.dex нужно отключать/удалять в меню Project -> Deployment.
Скрипты написаны для личного использования, распространяются "как есть", никакой ответственности за последствия их использования я не несу. Разрешается использовать и изменять по своему усмотрению.
- Автор оригинального скрипта build.bat: Brian Long aka blong (http://blong.com/Articles/DelphiXE5AndroidActivityResult/ActivityResult.htm)
- Автор dex2jar: Bob Pan aka pxb1988 (https://sourceforge.net/projects/dex2jar/)
- Инструкция и изменения в скрипте: Pavel Homal aka naXa!