最近做一个项目的时候,引入一个第三方的库,包含so,发现在android studio上编译的能够运行,但是放到系统同,写入mk编译,结果抛出如下错误:
06-19 10:42:06.168 6129-7384/com.android.messaging E/art: JNI DETECTED ERROR IN APPLICATION: JNI GetMethodID called with pending exception java.lang.NoSuchMethodError: no non-static method "Lcom/android/test/l;.rsltCb([C[BII)V"
06-19 10:42:06.168 6129-7384/com.android.messaging E/art: at int com.android.test.Test.testFunction(char[], java.lang.String, java.lang.String, java.lang.String, java.lang.Object) (Unknown:-2)
06-19 10:42:06.168 6129-7384/com.android.messaging E/art: at void com.android.test.thirdparty.l.i() (Unknown:-1)
06-19 10:42:06.168 6129-7384/com.android.messaging E/art: at void com.android.test.thirdparty.l.a(android.os.Message) (Unknown:-1)
06-19 10:42:06.168 6129-7384/com.android.messaging E/art: at void com.android.test.thirdparty.s.handleMessage(android.os.Message) (Unknown:-1)
06-19 10:42:06.168 6129-7384/com.android.messaging E/art: at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:110)
06-19 10:42:06.168 6129-7384/com.android.messaging E/art: at void android.os.Looper.loop() (Looper.java:203)
06-19 10:42:06.168 6129-7384/com.android.messaging E/art: at void android.os.HandlerThread.run() (HandlerThread.java:61)
06-19 10:42:06.168 6129-7384/com.android.messaging E/art: in call to GetMethodID
06-19 10:42:06.168 6129-7384/com.android.messaging E/art: 0000000000defac /system/lib64/libart.so (_ZN3art9ArtMethod6InvokeEPNS_6ThreadEPjjPNS_6JValueEPKc+256)
06-19 10:42:06.169 6129-7384/com.android.messaging E/art: native: #13 pc 000000000028e1ac /system/lib64/libart.so (_ZN3art11interpreter34ArtInterpreterToCompiledCodeBridgeEPNS_6ThreadEPNS_9ArtMethodEPKNS_7DexFile8CodeItemEPNS_11ShadowFrameEPNS_6JValueE+312)
06-19 10:42:06.169 6129-7384/com.android.messaging E/art: native: #14 pc 0000000000287198 /system/lib64/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+596)
06-19 10:42:06.169 6129-7384/com.android.messaging E/art: native: #15 pc 00000000005586ac /system/lib64/libart.so (MterpInvokeStatic+356)
06-19 10:42:06.170 6129-7384/com.android.messaging E/art: native: #16 pc 00000000000c4e14 /system/lib64/libart.so (ExecuteMterpImpl+14612)
06-19 10:42:06.170 6129-7384/com.android.messaging E/art: at com.iflytek.msc.MSC.QISRRegisterNotify(Native method)
06-19 10:42:06.170 6129-7384/com.android.messaging E/art: at com.iflytek.cloud.thirdparty.l.i(Unknown:-1)
06-19 10:42:06.170 6129-7384/com.android.messaging E/art: at com.iflytek.cloud.thirdparty.l.a(Unknown:-1)
06-19 10:42:06.170 6129-7384/com.android.messaging E/art: at com.iflytek.cloud.thirdparty.s.handleMessage(Unknown:-1)
06-19 10:42:06.170 6129-7384/com.android.messaging E/art: at android.os.Handler.dispatchMessage(Handler.java:110)
06-19 10:42:06.170 6129-7384/com.android.messaging E/art: at android.os.Looper.loop(Looper.java:203)
06-19 10:42:06.170 6129-7384/com.android.messaging E/art: at android.os.HandlerThread.run(HandlerThread.java:61)
异常是因为找不到方法,
从上面黄色高亮的地方:Lcom/android/test/l;.rsltCb([C[BII)V
方法里面竟然有l这种无意义的符号,推测是做了混淆,所以需要在mk里面,把混淆去掉。即在proguard.flag里面,添加-keep public class com.android.test.* { *; }