Когда вы используете ProGuard, вы должны всегда разрешать все предупреждения.
Эти предупреждения говорят вам, что библиотеки ссылаются на некоторый код, и для этого нет источников. Это может и не совсем нормально. Это зависит от того, вызвал ли проблемный код.
В этом случае предупреждения для Okio и Retrofit2 могут быть проигнорированы. Пакет java.nio.*
недоступен на Android и не будет вызываться. Вы можете смело игнорировать эти предупреждения. Также классы Java 8 не будут использоваться.
Добавьте это в свою конфигурацию ProGuard, он должен исправить вашу проблему:
-dontwarn okio.**
-dontwarn retrofit2.Platform$Java8
Команда Dalvik хотела бы создать первоклассную библиотеку генерации кода времени выполнения. Мы отслеживаем запрос функции как ошибку Android 6322 . К сожалению, у нас очень длинный список проблем с производительностью и корректностью, поэтому я не могу назвать вам график, когда мы будем уделять время решению этой проблемы.
Есть несколько альтернатив, но все они потребуют некоторой работы:
Запустите приложение на стандартной JVM и выполните там генерацию всего кода времени выполнения. Выгрузите файлы .class из памяти в файлы, а затем запустите dx для этих файлов. Если вы достаточно опытны, вы можете интегрировать всю эту работу в свою сборку.
Включите инструмент dx с открытым исходным кодом в качестве библиотеки проекта и запустите его программно изнутри вашего приложения, возможно, в загрузчике классов вашего приложения. Это приведет к раздуванию двоичного файла вашего приложения.
есть ли способ загрузить файлы dex / байт-коды в приложение во время выполнения?
Посмотрите на DexFile
и DexClassLoader
.
Я использовал ASM и BCEL для генерации классов Java, а затем преобразовал их в файлы Dex. Наконец, я создал файлы JAR для динамической загрузки на устройство.
Вы можете проверить мой код:)