Ошибка [INSTALL_FAILED_DEXOPT] в Android 5.1 - PullRequest
0 голосов
/ 22 мая 2018

Прежде чем объяснить, почему я должен был опубликовать этот вопрос, позвольте мне объяснить, что я уже прошел большинство других ответов в списке безрезультатно.

Проблема, с которой я сталкиваюсь при установке APK(через adb.exe на реальном устройстве) это [INSTALL_FAILED_DEXOPT] со следующим выводом из LogCat:

INFO:

PackageManager(  725): init_copy idx=0: InstallParams{1d0ac875 file=/data/local/tmp/PruebaMapas.apk cid=null}
PackageManager(  725): Trying to bind to DefaultContainerService
PackageManager(  725): onServiceConnected
PackageManager(  725): onServiceConnected: true, 0
PackageManager(  725): mcs_bound
PackageManager(  725): startCopy UserHandle{-1}: InstallParams{1d0ac875 file=/data/local/tmp/PruebaMapas.apk cid=null}
PackageManager(  725): Apk copy done
PackageManager(  725): Checking for more work or unbind...
PackageManager(  725): Posting delayed MCS_UNBIND
PackageManager(  725): Start parsing apk: null
PackageManager(  725): Parsing done for apk: null
PackageManager(  725): Start installation for package: null
PackageManager(  725): Linking native library dir for /data/app/com.actividad.PruebaMapas-1
PackageManager(  725): Perform pre-dex opt for package: com.actividad.PruebaMapas
PackageManager(  725): Running dexopt on: /data/app/com.actividad.PruebaMapas-1/base.apk pkg=com.actividad.PruebaMapas isa=arm vmSafeMode=false
PackageManager(  725): Dexopt done on: com.actividad.PruebaMapas
PackageManager(  725): Installation done for package: null
PackageManager(  725): mcs_check
PackageManager(  725): mcs_check(true, 1)
PackageManager(  725): disconnectService: false
PackageManager(  725): mcs_unbind
PackageManager(  725): calling disconnectService()

ОШИБКА:

PlayCommon( 9265): [745] com.google.android.play.b.h.a(553): Failed to connect to server: java.net.UnknownHostException: Unable to resolve host "play.googleapis.com": No address associated with hostname
AEE/AED (24646): AM write failure (32 / Broken pipe)
AEE/AED (24646): timed out waiting for tid=24637 to stop
AEE/AED (24646): timed out waiting for tid=24638 to stop
AEE/AED (24646): timed out waiting for tid=24639 to stop
AEE/LIBAEE(24646): aee_try_get_word: read:24640 addr:0x00000006 ret:-1, 5
AEE/AED (24646): timed out waiting for tid=24640 to stop
installd(  224): DexInv: --- END '/data/app/com.actividad.PruebaMapas-1/base.apk' --- status=0x0006, process failed

проблема исчезнет, ​​если я уберу поддержку Google Maps V2 и ссылки на android.support.v4. *, но, поскольку мне это явно нужно, просто удалить это не вариант.

Я уже уменьшил зависимости, чтобы сделать сгенерированныйAPK (classes.dex, то есть приложение компилируется в 2,3 МБ) меньше 5 МБ.

Я уже реализовал мультидексинг, чтобы каждый .dex был намного меньше 5 МБ.

Приложение устанавливается и прекрасно работает на старом устройстве под управлением Android 4.4.Как и многие другие устройства, работающие под разными версиями ОС.

Это заставляет меня думать, что, поскольку я тестирую это на умных часах Finow X5 Air, которые не уверены, что это действительно версия 5.1, она может быть более старой и устаревшей.что это 5.1 ??Я не знаю, это китайские часы, поэтому все ставки сняты.(Обновление: ОС Smartwatch не виновата, это подлинная ОС 5.1, хотя качество часов ужасное.)

Я не использую Gradle или Android studio.Я использую свой собственный компилятор, который я разрабатываю, поэтому я компилирую приложение с помощью командной строки.Но исходный код написан на Java, и он ничем не отличается от кода, используемого в Android Studio.

Все, что мне нужно сообщить, чтобы получить помощь, я сделаю.Спасибо.

РЕДАКТИРОВАТЬ: Я добавил больше информации logcat.

1 Ответ

0 голосов
/ 15 июня 2018

У меня та же проблема при использовании Android Gradle Plugin 3.1.2.

После обновления версии до 3.1.3 эта проблема исчезает:

dependencies {
    classpath 'com.android.tools.build:gradle:3.1.3'
}

Я полагаюэто выпуск D8:

Новый компилятор DEX, D8

По умолчанию Android Studio теперь использует новый компилятор DEX под названием D8.Компиляция DEX - это процесс преобразования байт-кода .class в байт-код .dex для среды выполнения Android (или Dalvik для более старых версий Android).По сравнению с предыдущим компилятором, который назывался DX, D8 компилируется быстрее и выводит меньшие DEX-файлы, но при этом имеет одинаковую или лучшую производительность во время выполнения приложения.

D8 не должен изменять ваш рабочий процесс разработки приложений.Однако, если у вас возникнут какие-либо проблемы, связанные с новым компилятором, пожалуйста, сообщите об ошибке.Вы можете временно отключить D8 и использовать DX, включив в файл gradle.properties вашего проекта:

android.enableD8=false

См .: https://developer.android.com/studio/releases/gradle-plugin#D8


Также я попробовалAndroid Gradle Plugin 3.1.2 + android.enableD8=false, тоже работает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...