February 3, 2016

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 проекта, я выяснил, что эта проблема встречается довольно редко, официального решения по ней я не нашел, так что пришлось мне самому взяться за исследования.

Read the rest of this entry »