NoClassDefFoundError во время выполнения класса внутри .AAR в Android Studio

Я много часов искал возможное решение этой проблемы, но что бы я ни пытался, это просто терпит неудачу. Вот пояснение ситуации:

У меня есть этот проект библиотеки на Android Studio, который генерирует файл app-debug.aar. Затем я добавляю этот новый модуль в реализующий проект, следуя указаниям мастера импорта .JAR/.AAR, я выбираю .aar и обновляю зависимость для :app в структуре проекта.

После очистки проекта (даже с использованием ./gradlew clean-Mac OS X) я могу ссылаться на этот класс и его методы в любых действиях.

Теперь во время выполнения, после создания и установки на реальных устройствах, приложение будет аварийно завершать работу, вызывая вышеупомянутое исключение времени выполнения.

Примечание. Я импортирую .aar, потому что мне нужно защитить код, а у него есть ресурсы, поэтому .jar не может быть и речи. И если я импортирую библиотечный модуль (с исходным кодом и всем остальным вместо an.aar), то у приложения не будет проблем во время выполнения.

Я пробовал все, и если кто-нибудь может пролить свет на то, что это может быть, это будет высоко оценено.

Класс расширяет ViewGroup и создается во время выполнения, если это что-то подразумевает. Код был предоставлен мне, поэтому серьезные изменения могут быть невозможны, если в этом нет крайней необходимости.

Заранее спасибо всем!

Армандо


person Armando    schedule 06.02.2015    source источник


Ответы (2)


Для тех, кто все еще ищет решение, следующие два варианта помогли мне решить ту же проблему, что и OP.

  • Включите (проблемную) библиотечную зависимость в целевой модуль, т.е. в моем случае я включил protobuf-lite в качестве зависимости к моему библиотечному модулю, но получил ошибку noclassdefFound при импорте библиотеки как .aar в модуль приложения. В качестве обходного пути я также добавил зависимость protobuf-lite к моему модулю приложения, и это сработало как шарм.

  • Второй вариант, который сработал для меня, заключался в том, что вместо добавления зависимости gradle `compile 'com.google.protobuf:protobuf-lite:3.0.1' я загрузил protobuf-jar из maven и добавил вручную в библиотеки моего библиотечного модуля, и проблема решилась.

Не знаю, что не так с плагином gradle, но надеюсь, что он поможет кому-то еще, кто ищет ту же проблему.

person Qasim    schedule 02.05.2017

Ошибка NoClassDefFound на самом деле происходит с библиотекой обратной совместимости, используемой этим классом, который я упомянул в вопросе («Класс A»). Никаких подробностей не было дано, кроме того, что класс A не мог быть найден, а позже выяснилось, что у другого класса была аналогичная проблема, НО он указывал на эту библиотеку совместимости с тем же исключением, и я заметил, что класс A также вызывал свои методы и реализовывал свои обратные вызовы. Подняв min version (для использования собственного API), я смог решить эту проблему. Это действительно была проблема с включением этой библиотеки обратного компа в .aar или так кажется. Если я пойму эту проблему намного лучше, я обновлю этот «ответ».

person Armando    schedule 07.02.2015