Как правило, во время разработки я использую для тестирования приложений эмулятор Genymotion. Это удобный и быстрый инструмент, и он мне нравится куда больше того, что предлагает Google (хотя со времен незапускающихся эмуляторов на Eclipse многое изменилось, и я слышал, что дефолтные эмуляторы сейчас вполне ничего, но проверить не хватает времени), однако у него есть ряд ограничений. Так, для тестирования библиотек Google Cloud Messaging его нельзя использовать, потому что на нем отсутствуют библиотеки Google Play Services.

Другим моим постоянным тестовым устройством является Nexus 7 2013 — с ним все просто: это мой рабочий планшет, с кастомным ядром и рутованной прошивкой, но с ней все в порядке — это чистый Android Marshmallow (на текущий момент). На работе есть и другие устройства, и я сам ими довольно редко пользуюсь (Google Play Services не часто используется в рабочих проектах), но в этот раз мне пришлось изменить своим традициям.

При запуске рабочего приложения PlentyFi Social на Galaxy Nexus (Jelly Bean), я столкнулся с такой ошибкой

Немного покурив GitHub проекта, я выяснил, что эта проблема встречается довольно редко, официального решения по ней я не нашел, так что пришлось мне самому взяться за исследования.

Они продолжались недолго: эта ошибка связана с тем, что имеется ссылка на класс, который однако как будто не существует. Я уже когда-то сталкивался с чем-то подобным, так что сразу обратил свой взор на build.gradle, а особенно на эту строку:

В проекте не используется большое количество библиотек, но конкретно от Google есть несколько, а после подключения

При компиляции проект стал отваливаться с ошибкой

Что такое MultiDex и превышение лимитов количества 65К методов описывать здесь не буду, достаточно почитать доки, я просто хотел показать, что включение multidex в проекте было необходимо.

Тут вопрос внимательности, на самом деле: мало добавить строчку в build.gradle, нужно еще и инициализировать MultiDex в приложении. Этого можно добиться двумя путями: либо в манифесте указать класс для Application

в том случае, если вы не используете расширение от класса Application в вашем приложении. Но лично я использую его всегда для начальной инициализации данных (БД, тот же UniversalImageLoader и проч.), поэтому в моем случае нужно инициализировать MultiDex в приложении самому.

После этого все заработало, ошибка пропала… хотя время компиляции (очень долго) осталось.