MultiDex и java.lang.NoClassDefFoundError
Originally published at О разработке для Android и гаджетах. Please leave any comments there.
Как правило, во время разработки я использую для тестирования приложений эмулятор Genymotion. Это удобный и быстрый инструмент, и он мне нравится куда больше того, что предлагает Google (хотя со времен незапускающихся эмуляторов на Eclipse многое изменилось, и я слышал, что дефолтные эмуляторы сейчас вполне ничего, но проверить не хватает времени), однако у него есть ряд ограничений. Так, для тестирования библиотек Google Cloud Messaging его нельзя использовать, потому что на нем отсутствуют библиотеки Google Play Services.
Другим моим постоянным тестовым устройством является Nexus 7 2013 — с ним все просто: это мой рабочий планшет, с кастомным ядром и рутованной прошивкой, но с ней все в порядке — это чистый Android Marshmallow (на текущий момент). На работе есть и другие устройства, и я сам ими довольно редко пользуюсь (Google Play Services не часто используется в рабочих проектах), но в этот раз мне пришлось изменить своим традициям.
При запуске рабочего приложения PlentyFi Social на Galaxy Nexus (Jelly Bean), я столкнулся с такой ошибкой
02-03 12:10:43.767 18560-18560/com.dynamixsoftware.plentyfisocial E/AndroidRuntime: java.lang.NoClassDefFoundError: com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener 02-03 12:10:43.767 18560-18560/com.dynamixsoftware.plentyfisocial E/AndroidRuntime: at com.nostra13.universalimageloader.core.ImageLoader.(ImageLoader.java:65) 02-03 12:10:43.767 18560-18560/com.dynamixsoftware.plentyfisocial E/AndroidRuntime: at com.nostra13.universalimageloader.core.ImageLoader.getInstance(ImageLoader.java:74) 02-03 12:10:43.767 18560-18560/com.dynamixsoftware.plentyfisocial E/AndroidRuntime: at com.dynamixsoftware.plentyfisocial.PlentyFi.onCreate(PlentyFi.java:48) 02-03 12:10:43.767 18560-18560/com.dynamixsoftware.plentyfisocial E/AndroidRuntime: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
Немного покурив GitHub проекта, я выяснил, что эта проблема встречается довольно редко, официального решения по ней я не нашел, так что пришлось мне самому взяться за исследования.