Как адаптировать Android-приложение для использования Retrofit без multiDex
Автор вопроса: vee_essОтветов: 2
У меня есть проект Android, который выиграет от использования Retrofit. Он все еще находится на очень ранней стадии, и существует менее дюжины определений функций и классов. Как только я добавляю Retrofit в Gradle, у меня возникает исключение DexIndexOverflowException.
Кажется, слишком рано добавлять multiDex в проект, тем более, что он, похоже, вызван добавлением одной зависимости. Конечно, я должен делать что-то неправильно, так как базовые примеры, похоже, не требуют multiDex. Что я должен делать по-другому?
Файл DEX содержит определения классов и дополнительные данные для вашего приложения, включая его зависимости. Должно быть несколько файлов DEX, если есть> 64K методов, включая методы платформы Android и библиотечные методы.
Совершенно новое приложение начинается с множества методов. Я не знаю, сколько методов включено в платформу Android, но их много, и я уверен, что от тысяч до десятков тысяч. Я не знаю, сколько методов включено в Службы Google Play, но по слухам, более 28 тыс..
Между фреймворком Android и сервисами Google Play, вероятно, нет места более чем для нескольких тысяч методов.
Retrofit - это уровень абстракции, построенный поверх OkHttp. OkHttp охватывает множество вещей, включая SPDY, HTTP/2, шифрование, пул соединений и т. д., и зависит от многих фреймворков Java. Любой фреймворк, который так широко охватывает что-то, будет иметь множество методов. В моей ситуации этого достаточно, чтобы преодолеть барьер в 64 КБ. Наверное, это разумная сумма.
Скомпилируйте только необходимые методы из сервисов Google PlayЭтот ответ на аналогичную проблему показал, что вы можете импортировать только API, необходимые для сервисов Google Play очень легко в конфигурации Gradle. Дополнительные сведения см. в документации Google.
Ответ 2 · рейтинг -1 · Bruno Felix
Хорошо, у меня была такая же проблема. Если вы хотите использовать Retrofit с multiDex и хотите сохранить сервис Google Play в своем проекте, чтобы использовать его API, выполните следующие действия: