Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法

今天使用第三方的so库时候,调用JNI方法时出现了错误。报错如下所示:

03-08 10:29:36.989 27896-27896/? E/art: No implementation found for void com.lee.testso.jni.MCHKeyTools.natInit() (tried Java_com_lee_testso_jni_MCHKeyTools_natInit and Java_com_lee_testso_jni_MCHKeyTools_natInit__)
03-08 10:29:36.990 27896-27896/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                   Process: com.lee.testso, PID: 27896
                                                   java.lang.UnsatisfiedLinkError: No implementation found for void com.lee.testso.jni.MCHKeyTools.natInit() (tried Java_com_lee_testso_jni_MCHKeyTools_natInit and Java_com_lee_testso_jni_MCHKeyTools_natInit__)
                                                       at com.lee.testso.jni.MCHKeyTools.natInit(Native Method)
                                                       at com.lee.testso.jni.MCHKeyTools.<init>(MCHKeyTools.java:16)
                                                       at com.lee.testso.jni.MCHKeyTools.getInstance(MCHKeyTools.java:21)
                                                       at com.lee.testso.MainActivity.onCreate(MainActivity.java:17)
                                                       at android.app.Activity.performCreate(Activity.java:6161)
                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112)
                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2507)
                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2640)
                                                       at android.app.ActivityThread.access$800(ActivityThread.java:182)
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1493)
                                                       at android.os.Handler.dispatchMessage(Handler.java:111)
                                                       at android.os.Looper.loop(Looper.java:194)
                                                       at android.app.ActivityThread.main(ActivityThread.java:5682)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at java.lang.reflect.Method.invoke(Method.java:372)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:963)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:758)

错误分析


 No implementation found for void com.lee.testso.jni.MCHKeyTools.natInit() (tried Java_com_lee_testso_jni_MCHKeyTools_natInit and Java_com_lee_testso_jni_MCHKeyTools_natInit__)

然后我去咨询了一下第三方提供so库的工作人员,回复说MCHKeyTools类的包名一定要是com.mchsdk.paysdk.jni。原因是JNI接口Java_com_mchsdk_paysdk_jni_MCHKeyTools_natInit中,com.mchsdk.paysdk.jni代表的是package name,MCHKeyTools则是class name。

错误解决方法

我新建一个包名为com.mchsdk.paysdk.jni,并把MCHKeyTools类移到该包名地下。


然后重新编译,成功运行。


猜你喜欢

转载自blog.csdn.net/rorntuck7/article/details/79480742