Eng版本手机ROM安兔兔跑分异常崩溃的问题

来源:互联网 发布:kmp算法next题目 编辑:程序博客网 时间:2024/06/05 07:00
使用安兔兔Antutu对Eng版本手机进行跑分,可能会出现异常崩溃无法测试完毕。查看Log,可以看到出错的信息:
F/libc    (18606): Fatal signal 6 (SIGABRT), code -6 in tid 18649 (Thread-181)I/DEBUG   (  181): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***I/DEBUG   (  181): Build fingerprint: 'Android/aosp_hammerhead/hammerhead:5.0/LRX21M/howell01121337:eng/test-keys'I/DEBUG   (  181): Revision: '11'I/DEBUG   (  181): ABI: 'arm'I/DEBUG   (  181): pid: 18606, tid: 18649, name: Thread-181  >>> com.antutu.ABenchMark:antutu3dtest <<<I/DEBUG   (  181): signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------I/DEBUG   (  181): Abort message: 'art/runtime/check_jni.cc:65] JNI DETECTED ERROR IN APPLICATION: the return type of CallObjectMethodV does not match void com.google.analytics.tracking.android.Tracker.setAppVersion(java.lang.String)'I/DEBUG   (  181):     r0 00000000  r1 000048d9  r2 00000006  r3 00000000I/DEBUG   (  181):     r4 a3292db8  r5 00000006  r6 00000002  r7 0000010cI/DEBUG   (  181):     r8 00000000  r9 b504f550  sl a3014000  fp 00000001I/DEBUG   (  181):     ip 000048d9  sp a3292940  lr b6f22af9  pc b6f467bc  cpsr 60070010I/DEBUG   (  181):I/DEBUG   (  181): backtrace:I/DEBUG   (  181):     #00 pc 0003a7bc  /system/lib/libc.so (tgkill+12)I/DEBUG   (  181):     #01 pc 00016af5  /system/lib/libc.so (pthread_kill+52)I/DEBUG   (  181):     #02 pc 00017707  /system/lib/libc.so (raise+10)I/DEBUG   (  181):     #03 pc 00013f75  /system/lib/libc.so (__libc_android_abort+36)I/DEBUG   (  181):     #04 pc 00012a3c  /system/lib/libc.so (abort+4)I/DEBUG   (  181):     #05 pc 0022604b  /system/lib/libart.so (art::Runtime::Abort()+170)I/DEBUG   (  181):     #06 pc 000a72e9  /system/lib/libart.so (art::LogMessage::~LogMessage()+1360)I/DEBUG   (  181):     #07 pc 000b1401  /system/lib/libart.so (art::JniAbort(char const*, char const*)+1112)I/DEBUG   (  181):     #08 pc 000b1945  /system/lib/libart.so (art::JniAbortF(char const*, char const*, ...)+68)I/DEBUG   (  181):     #09 pc 000b2361  /system/lib/libart.so (_ZN3art11ScopedCheck8CheckSigEP10_jmethodIDPKcb.constprop.130+284)I/DEBUG   (  181):     #10 pc 000b9a11  /system/lib/libart.so (art::CheckJNI::CallObjectMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+72)I/DEBUG   (  181):     #11 pc 003f8758  /data/app/com.antutu.ABenchMark-1/lib/arm/libabench3d.so (_JNIEnv::CallObjectMethod(_jobject*, _jmethodID*, ...)+36)



这种情况一般是对JNI调用进行比较严格的检查,而这种检查在User版本一般是不存在的,在Eng版本中一般存在。控制Android系统是否对JNI调用进行检查(比如检查是否GlobalRef表项太对、JNI返回值类型是否正常)是使用系统属性来控制的。
在Android5.0之前,该属性是:dalvik.vm.checkjni
而到了Android5.0之后,属性值是: ro.kernel.android.checkjni

当该属性值取值为1的时候,表示需要进行检查,取值为0的时候,不需要检查。Eng版的该属性值默认为1,User版默认为0。
对于Eng版,我们只要修改该属性值即可。该属性值位于/system/build.prop文件中。

在PC上执行如下的命令:
$ adb remount && adb pull /system/build.prop && cat build.prop | sed 's/checkjni=1/checkjni=0/' > build.prop.new && adb push build.prop.new /system/build.prop && adb shell chmod 644 /system/build.prop

重启手机可以测试通过了。

0 0