#android #deployment #compilation #dependencies #apk
#Android #развертывание #Сборник #зависимости #apk
Вопрос:
Я попытался скомпилировать reddit-is-fun, программу для чтения reddit для Android. Если я запущу приложение из ADT (либо путем отладки, либо просто запустив), оно запустится и будет корректно работать на моем телефоне (HTC Desire). Однако, если я экспортирую подписанный и выровненный по zip пакет и установлю его, он не будет работать. Logcat показывает исключения NoSuchMethodError для Jackson. Это две банки, присутствующие в репозитории и добавленные в путь сборки. Я убедился, что у них одинаковые версии, и даже заменил их на более новые.
Я не очень хорошо знаком с использованием библиотек jar. Являются ли они «связанными» с результирующим apk, как статическая библиотека, связанная с исполняемым файлом при компиляции C ? Как я могу убедиться, что приложение на устройстве загрузит ту же версию, которая использовалась для компиляции? (что, скорее всего, является проблемой).
Ответ №1:
Похоже, что обфускация Proguard нарушает его. Попробуйте отключить Proguard для подтверждения (или добавить Джексона в белый proguard.cfg
список)
Комментарии:
1. Да, это определенно запутывание. Как я могу внести в белый список всю библиотеку? Проблема в том, что вызовы запутаны, а сама библиотека — нет (я думаю об этом, потому что метод not found называется как a.c.f.d).
2. Вы захотите добавить строку, похожую на
-keep class org.codehaus.jackson.*
toproguard.cfg
.3. Да, это будет не совсем так, но в этом духе.
4. Спасибо, мне удалось выяснить, какие классы были нарушены. Позже я нашел заметку о том, что требуется более новая версия proguard, чтобы она не нарушала эти классы.
Ответ №2:
Я думаю, это означает, что ваши JAR-файлы неправильно переведены из формата JVM в формат виртуальной машины Dalvik. Как вы знаете, Android использует другой байт-код, чем обычная настольная JVM. Вы должны преобразовать свои JAR из байт-кода JVM в байт-код Dalvik. Попробуйте в Google «преобразовать JVM в Dalvik»