我在没有使用NDK的情况下编写了应用程序,它可能会随机操作崩溃并出现以下错误:
12-20 14:21:13.590 15718-15725 A/jazz: mediatek/protect/dalvik/vm/jazz/dexlang/dex_lang-inl.h:2415] void jazz::DexLang<BitcodeGenerator>::EmitInstruction(const jazz::AIR&) [with BitcodeGenerator = jazz::dixieland::BitcodeGenerator] unimplemented not
12-20 14:21:13.590 15718-15725 E/dalvikvm: VM aborting
12-20 14:21:13.590 15718-15725 A/libc: Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread 15725 (Compiler)
12-20 14:21:13.591 15718-15725 A/libc: Send stop signal to pid:15718 in debugger_signal_handler
我在不同的模拟器和设备上运行应用程序,但在我的设备上它经常崩溃。
设备:
PHONE_MODEL=JY-G4S
ANDROID_VERSION=4.2.2
BUILD=TIME=1402319802000
FINGERPRINT=JIAYU/S8/S8:4.2.2/JDQ39/1402319714:user/test-keys
HARDWARE=mt6592
USER=scm
HOST=vanzo68
DEVICE=S8
TAGS=test-keys
MODEL=JY-G4S
BOOTLOADER=unknown
VERSION.CODENAME=REL
VERSION.INCREMENTAL=eng.scm.1402319714
VERSION.RELEASE=4.2.2
VERSION.SDK_INT=17
VERSION.RESOURCES_SDK_INT=17
VERSION.SDK=17
CPU_ABI=armeabi-v7a
CPU_ABI2=armeabi
MANUFACTURER=JYT
BRAND=JIAYU
TYPE=user
PRODUCT=S8
我是否可以在不刷新设备的情况下以编程方式修复此错误?
答案 0 :(得分:2)
我发现有一件事是使用下一代(D8)dex编译器可能会导致此问题。根据我的经验,似乎在./gradle/gradle.properties文件中添加属性android.enableD8=true
可能会在某些棒棒糖前设备上导致此问题。
再次删除后,它们开始处理我们之前看到崩溃的麻烦设备。
答案 1 :(得分:0)
看起来定制mediatek Dalvik JIT没有实现dex&#34;不是&#34;指令。 D8生成此指令,DX很可能没有。我们将通过永远不会生成&#34;而不是&#34;来解决VM错误。在针对Dalvik虚拟机时D8中的指令。
我们正在推出针对Android Studio 3.1的修复程序,以便在Android Studio 3.1稳定后这不会成为问题。
答案 2 :(得分:0)
TL; DR不要将D8与Android Gradle Build Plugin 3.0.x一起使用。
我在我们的应用程序中捕获了联想P70-A上的这个JIT编译器崩溃。在我们的例子中,错误是:
F/jazz (11964): mediatek/protect/dalvik/vm/jazz/dexlang/dex_lang-inl.h:2523] void jazz::DexLang<BitcodeGenerator>::EmitInstruction(const jazz::AIR&) [with BitcodeGenerator = jazz::dixieland::BitcodeGenerator] unimplemented not
E/dalvikvm(11964): VM aborting
F/libc (11964): Fatal signal 6 (SIGABRT) at 0x00002ebc (code=-6), thread 11970 (Compiler)
然后是崩溃转储:
I/DEBUG (12113): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG (12113): Build fingerprint: 'Lenovo/P70-A/P70-A:4.4.4/KOT49H/P70-A_S142_161230_16G_ROW:user/release-keys'
I/DEBUG (12113): pid: 11964, tid: 11970, name: Compiler >>> com.myapp <<<
I/DEBUG (12113): signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
I/DEBUG (12113): r0 00000000 r1 00002ec2 r2 00000006 r3 00000000
I/DEBUG (12113): r4 00000006 r5 00000000 r6 00002ec2 r7 0000010c
I/DEBUG (12113): r8 85d1ea6d r9 40159bd4 sl 76dd58ac fp 8283af64
I/DEBUG (12113): ip fffd1aa8 sp 76dd5630 lr 40109431 pc 40117dec cpsr 000f0010
I/DEBUG (12113):
I/DEBUG (12113): backtrace:
I/DEBUG (12113): #00 pc 00025dec /system/lib/libc.so (tgkill+12)
I/DEBUG (12113): #01 pc 0001742d /system/lib/libc.so (pthread_kill+64)
I/DEBUG (12113): #02 pc 00017625 /system/lib/libc.so (raise+10)
I/DEBUG (12113): #03 pc 0001633b /system/lib/libc.so
I/DEBUG (12113): #04 pc 0002569c /system/lib/libc.so (abort+4)
I/DEBUG (12113): #05 pc 0008a8fd /system/lib/libdvm.so (dvmAbort+80)
I/DEBUG (12113): #06 pc 0015a1e9 /system/lib/libdvm.so (jazz::LogMessage::~LogMessage()+576)
I/DEBUG (12113): #07 pc 0014f49d /system/lib/libdvm.so (jazz::DexLang<jazz::dixieland::BitcodeGenerator>::EmitInstruction(jazz::AIR const&)+1016)
I/DEBUG (12113): #08 pc 0014f60b /system/lib/libdvm.so (jazz::dixieland::Frontend::Compile(unsigned int, jazz::AIRMethod const&)+346)
I/DEBUG (12113): #09 pc 00153925 /system/lib/libdvm.so (jazz::dixieland::SubCompiler::Compile(unsigned int, jazz::AIRMethod const&)+32)
I/DEBUG (12113): #10 pc 00154443 /system/lib/libdvm.so (jazz::Jazz::Compile(jazz::CompilationUnit&)+126)
I/DEBUG (12113): #11 pc 00140d4d /system/lib/libdvm.so (jazz::Compiler::JitMethod(Method const&, jazz::jex::CompiledRawCode const*&, jazz::jex::CompiledRawCode const*&)+164)
I/DEBUG (12113): #12 pc 0011873d /system/lib/libdvm.so (jazzDoJITCompile(JitJazzMethodDescription const&, JitTranslationInfo&)+128)
I/DEBUG (12113): #13 pc 000f204f /system/lib/libdvm.so (dvmCompilerDoWork(CompilerWorkOrder*)+50)
I/DEBUG (12113): #14 pc 000d9f77 /system/lib/libdvm.so
I/DEBUG (12113): #15 pc 000a0485 /system/lib/libdvm.so
I/DEBUG (12113): #16 pc 0000d838 /system/lib/libc.so (__thread_entry+72)
I/DEBUG (12113):
I/DEBUG (12113): stack:
...
正如其他答案中所提到的,它是由D8实现引起的,它在Dalvik二进制代码中使用not
指令,但此设备上的JIT编译器不支持该指令。解决方案是通过从android.enableD8=true
删除gradle.properties
来为AGP 3.0.x禁用编译中的D8。稳定的AGP 3.1将包含fix for this。
编辑:可能这种情况发生在运行KitKat的Mediatek SOC设备上。