安卓应用在启动时出现“E/dex2oat: Failed to create oat file”和“non-0 exit status”的错误导致崩溃。

57
我的应用程序(仍在开发中)在不同设备上运行良好。但是突然,在华为荣耀7(Android 6.0 / EMUI 4.0.3)上拒绝启动。 Logcat 给我以下信息:
“E/dex2oat: Failed to create oat file:
/data/dalvik-cache/arm64/data@app@myapp.mycomp.de.myapp-1@split_lib_slice_1_apk.apk@classes.dex:
Permission denied”
紧随其后的是
“07-12 19:23:49.223 11280-11280/myapp.mycomp.de.myapp W/art: Failed execv(/system/bin/dex2oat --runtime-arg-classpath--runtime-arg --debuggable --instruction-set=arm64 --instruction-set-features=smp,a53 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m -- runtime-arg -Xmx512m --instruction-set-variant=generic --instruction-set-features=default --dex-file=/data/app/myapp.mycomp.de.myapp-1/split_lib_slice_1_apk.apk --oat-file=/data/dalvik-cache/arm64/data@app@myapp.mycomp.de.myapp-1@split_lib_slice_1_apk.apk@ classes.dex) because non-0 exit status”。
这个错误会发生9次,适用于spli_lib_slice_N_apk.apk-parts。我真的不知道可能是什么原因,尤其是因为它直到今天都很好地运行。我没有更改代码。 我也不使用任何multidex,据我所知。
感谢您的任何提示!
2017年7月13日更新:
我记录了一个始终正常工作的设备上的应用程序启动,我得到了与上面相同的“错误”。 因此,这些消息似乎是正常的... 在此之后,我查看了故障设备的崩溃日志,并在上面发布的错误之后找到了以下行:
“07-12 20:30:35.985 3209-3421/? I/logserver: extract_appname, forward search, appname=myapp.mycomp.de.myapp
07-12 20:30:35.985 3209-3421/? I/logserver: get_fault_appname, appname=myapp.mycomp.de.myapp
07-12 20:30:35.987 3209-3420/? I/logserver: handle_notify_event, send msg [submit:trigger=0,bugtype=2,modulename=myapp.mycomp.de.myapp,level=1,testtype=NORMAL,path=/data/log/unzip/PLK-L01_PLK-L01C432B390_0000000000_20170712203035_crash,mode=1;]
07-12 20:30:36.014 21797-21899/myapp.mycomp.de.myapp I/System:core_booster,getBoosterConfig = false
07-12 20:30:36.290 21797-21797/myapp.mycomp.de.myappI/Process:Sending signal.PID:21797 SIG:9”。
似乎该进程被 Sigkill 9 杀死,也可在此处查看:App dies with "Sending signal." but no exception or other info
但是,我仍不知道是什么引起了这种情况。在此之后,我在 Android 应用首选项中清除了应用数据,突然应用程序又可以运行了。调查将继续...

PS:清除设备的dalvik-cache也没有帮助。 - knutella
8
您在Android Studio中是否启用了即时运行?如果是,请尝试禁用它。 - Alex Lipov
@AlexLipov 谢谢,我刚刚部署了一个禁用Intant Run的新版本。由于这个问题需要1-2天才能出现,我将在几天后告诉你结果。 - knutella
更新于2017年7月17日:我尝试了一个禁用即时运行(IR)的构建,再也没有遇到这种情况了。不确定IR是否与此有关,但我会给@AlexLipov点赞,因为现在它可以正常工作了;-) 不幸的是,我没有足够的声望来关闭我的问题。 - knutella
1个回答

1
尝试禁用即时运行,查看这里。然后编辑您的主dex文件,请参阅Android开发者网站上的资源,以确保在您的主dex文件中启用了正确的类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接