在解释我为什么要发布这个问题之前,让我解释一下,我已经通过列表中的大多数其他答案都无济于事。
我在安装APK(通过真实设备上的adb.exe)安装过程中遇到的问题是[INSTALL_FAILED_DEXOPT],其中包含LogCat的以下输出:
信息:
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()
ERROR:
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.3MB)小于5MB。
我已经实现了多dexing,使每个.dex远小于5MB。
该应用程序在运行Android 4.4的旧设备中安装并完美运行。以及运行各种OS版本的许多其他设备。
这让我想到,因为我在Finow X5 Air Smartwatch上测试这个,我不确定它是不是真的5.1,它可能更老并且说它是5.1?我不知道,这是一款中国手表,所以所有的赌注都没有了。 (更新:Smartwatch操作系统不应该受到指责,它是一款真正的5.1操作系统,虽然手表的质量很糟糕。)
我没有使用Gradle或Android工作室。我正在使用自己正在开发的编译器,因此,我正在使用命令行编译应用程序。但是源代码是用Java编写的,它与Android Studio中使用的代码没什么区别。
我需要说明的任何其他事情以获得帮助。感谢。
编辑: 我添加了更多logcat信息。
答案 0 :(得分:1)
使用Android Gradle Plugin 3.1.2
时遇到同样的问题。
将版本更新为3.1.3
后,此问题将消失:
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
}
我猜这是D8
:
新的DEX编译器,D8
默认情况下,Android Studio现在使用名为D8的新DEX编译器。 DEX编译是转换的过程 .class字节码转换为Android运行时的.dex字节码(或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
,它也有效......