Использование Android dx

У меня есть файл JAR, созданный из приложения Android, потому что я пометил его как "Является ли библиотека" в затмении во время создания. Теперь DexClassLoader не может загрузить этот файл, потому что у него нет записи, помеченной classes.dex. Это похоже на стандартную банку. Как я могу преобразовать такую ​​банку в dxed банку с dx, которую может загрузить DexClassLoader? Любая помощь приветствуется!

2 ответа

Решение

Вы можете использовать инструмент dx из sdk, из командной строки. Что-то вроде:

dx --dex --output=dexed.jar hello.jar

Работает для меня. Интеграция таких вещей в ваш процесс сборки - это нечто черное, в основном включающее взлом скриптов Ant, предоставляемых SDK. Если ваша библиотека обновляется только изредка, возможно, будет целесообразно сделать это вручную.

В моем случае я храню файл dexed.jar в своей папке resources / raw. Во время выполнения я копирую его оттуда в файловую систему, а затем передаю путь к файловой системе в DexClassLoader. Это... немного неровно.

Библиотеки Android не предназначены для запуска на устройстве. Они могут быть включены только как часть проектов Android, которые преобразуют все файлы.jar из библиотеки Android, на которые есть ссылки, в один общий .dex файл и упаковать их в .apk файл.

Если вы хотите протестировать свою библиотеку Android, и она действительно имеет некоторые точки входа для этого, то единственный способ сделать это - временно изменить библиотеку Android на Android Project (отметив эту опцию в настройках).

Другие вопросы по тегам