Android Studio 3.1.2 - 无法运行C ++子例程“找不到Java.lang.String的实现...”

时间:2018-05-18 19:09:59

标签: java android c++ java-native-interface

我的代码编译,但是当我调用C ++子例程时,应用程序死于UnsatisfiedLinkError。

在CMakeLists.txt中:

add_library( # Sets the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/cpp/crlTCheckkey.cpp)

在Tab1.java中:

package com.labyrinthsys.crltext;

String statusString;
String keyPath;
            statusString = crlTCheckkey(keyPath);
...

public native String crlTCheckkey(String keyPath);

在crlTCheckkey.cpp中:

#include <jni.h>
#include <string>

using namespace std;

extern "C" JNIEXPORT jstring

JNICALL
Java_com_labyrinthsys_crltext_Tab1_crlTCheckkey(
    JNIEnv *env,
    jobject, /* this */
    jstring keyFilePath) {

我得到的错误是:

java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String com.labyrinthsys.crltext.Tab1.crlTCheckkey(java.lang.String) (tried Java_com_labyrinthsys_crltext_Tab1_crlTCheckkey and Java_com_labyrinthsys_crltext_Tab1_crlTCheckkey__Ljava_lang_String_2)
                  at com.labyrinthsys.crltext.Tab1.crlTCheckkey(Native Method)
                  at com.labyrinthsys.crltext.Tab1.onClick(Tab1.java:118)

我在当地问过没有运气。我错过了什么?谢谢!

1 个答案:

答案 0 :(得分:1)

这非常烦人,但是我从构建中完全删除了有问题的cpp文件,然后从头开始再次将它带入,并且现在它以某种方式运行。