使用Android的Proguard给了我JNI错误

时间:2017-06-27 08:46:00

标签: android android-ndk proguard android-proguard

在Android应用程序上使用ProGuard并使用一些本机(JNI,C ++)代码 - 应用程序在加载过程中崩溃。消息:

  

* < strong> * 构建指纹:   '小米/ markw / markw:6.0.1 / MMB29M / V8.2.4.0.MBEMIDL:用户/释放密钥'   修订版:'0'ABI:'arm'pid:15075,tid:15115,name:Thread-10486

     
    

com.mynamespace.myapp&lt;&lt;&lt;信号6(SIGABRT),代码-6(SI_TKILL),故障地址--------中止消息:     'art / runtime / java_vm_ext.cc:410]应用程序中的JNI检测错误:     使用已删除的全局引用0xe5617166'         r0 00000000 r1 00003b0b r2 00000006 r3 de161978         r4 de161980 r5 de161930 r6 0000000b r7 0000010c         r8 ab4446c8 r9 f52d7378 sl 00000000 fp 00000000         ip 00000006 sp de1609f8 lr f7360f5d pc f7363358 cpsr 40070010

  
     

回溯:       #00 pc 00044358 /system/lib/libc.so(tgkill + 12)       #01 pc 00041f59 /system/lib/libc.so(pthread_kill + 32)       #02 pc 0001ba6f /system/lib/libc.so( raise + 10)       #03 pc 00018c11 /system/lib/libc.so(__libc_android_abort + 34)       #04 pc 000167d0 /system/lib/libc.so(abort + 4)       #05 pc 00321145 /system/lib/libart.so(__ZN3art7Runtime5AbortEv + 212)       #06 pc 000f3cdd /system/lib/libart.so(__ZN3art10LogMessageD2Ev + 2212)       #07 pc 0024f817 /system/lib/libart.so(< em> ZN3art9JavaVMExt8JniAbortEPKcS2 +1526)       #08 pc 0024fc21 /system/lib/libart.so(__ZN3art9JavaVMExt9JniAbortFEPKcS2_z + 68)       #09 pc 0033e107 /system/lib/libart.so(__ZNK3art6Thread13DecodeJObjectEP8_jobject + 686)       #10 pc 0031a031 /system/lib/libart.so(__ZN3art17InvokeWithVarArgsERKNS_33ScopedObjectAccessAlreadyRunnableEP8_jobjectP10_jmethodIDSt9__va_list + 248)       #11 pc 0028e30d /system/lib/libart.so(__ZN3art3JNI10NewObjectVEP7_JNIEnvP7_jclassP10_jmethodIDSt9__va_list + 1064)       #12 pc 0010724f /system/lib/libart.so(__ZN3art8CheckJNI10NewObjectVEP7_JNIEnvP7_jclassP10_jmethodIDSt9__va_list + 866)       #13 pc 00093768 /data/app/com.mynamespace.myapp-1/lib/arm/librhodes.so

任何想法,我做错了什么?

2 个答案:

答案 0 :(得分:0)

尝试解决方案:

  • 首先尝试禁用ProGuard,通过在应用的Build.Gradle中写这个来确定这是否是真正的问题 4. pip install MySQL-python

应该是这样的......

minifyEnabled false
  • 第二次在您使用的库中查找缺少的排除项,您可能忘记在 buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } 文件中添加

  • 最后 read this page,它可以帮助您解决可能错过的常见排除项,以及如何找到导致问题的原因。

祝你好运!

答案 1 :(得分:0)

正确的答案是&#34;使用带有adb的logcat来捕获正常的日志&#34;。我认为这是最好的方式。

  

adb -e logcat&gt; output.txt的

当然这是反射api和重命名私有方法的问题。