Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用C+的问题+;与Android Studio共享对象_Java_C++_Android Studio_Shared Libraries - Fatal编程技术网

Java 使用C+的问题+;与Android Studio共享对象

Java 使用C+的问题+;与Android Studio共享对象,java,c++,android-studio,shared-libraries,Java,C++,Android Studio,Shared Libraries,我试图了解android studio如何使用共享库“.so”文件。他们的简单的Hello World用C++工作得很好,但是我正在致力于移植一大组C++代码到Android,并且希望了解最简单的方法。我不一定要将CMakeLists.txt文件添加到Android Studio,因为有些代码不是使用cmake构建的 我在Android Studio中创建了两个项目。您好,世界CPP与C++支持,它工作良好。我还创建了Hello World Java(没有C++支持) 我的目标是获取Hello

我试图了解android studio如何使用共享库“.so”文件。他们的简单的Hello World用C++工作得很好,但是我正在致力于移植一大组C++代码到Android,并且希望了解最简单的方法。我不一定要将CMakeLists.txt文件添加到Android Studio,因为有些代码不是使用cmake构建的

我在Android Studio中创建了两个项目。您好,世界CPP与C++支持,它工作良好。我还创建了Hello World Java(没有C++支持)

我的目标是获取Hello World CPP项目中创建的libnative-lib.so文件,将它们复制到Hello World Java,并更改Java代码以引用stringFromJNI()函数

在Java版本中,我创建了apps/src/main/jniLibs目录,并从CPP版本复制了整个目录。/app/build/intermediates/transforms/mergeJniLibs/debug/0/lib/。这些是我带来的文件

~/AndroidStudioProjects/HelloJava/app/src/main/jniLibs$ls-R .: arm64-v8a armeabi-v7a x86 x86_64

/arm64-v8a: libnative-lib.so

/armeabi-v7a: libnative-lib.so

/x86: libnative-lib.so

./x86_64: libnative-lib.so

然后,我回到Java版本中的MainActivity类,并在

  static {
        System.loadLibrary("native-lib");
    }
并在onCreate的末尾添加了以下内容。(我将ID添加到布局中,因此R.ID.sample_文本有效。)

Build工作正常,但当我尝试在AVD上运行时,会出现以下错误

E/.gary.hellojav: No implementation found for java.lang.String com.example.gary.hellojava.MainActivity.stringFromJNI() (tried Java_com_example_gary_hellojava_MainActivity_stringFromJNI and Java_com_example_gary_hellojava_MainActivity_stringFromJNI__)
D/AndroidRuntime: Shutting down VM
我已经删除了stringFromJNI调用,它在AVD中运行良好。我已将loadLibrary调用中的库名称更改为无效,loadLibrary引发异常,因此它似乎找到了库,我只是无法正确解析stringFromJNI名称


我有什么建议或明显的疏忽吗?

我发现了问题所在。在native-lib.cpp文件中的问题是,当我从一个项目移动到下一个项目时,完全限定名不正确,因为项目名嵌入到stringFromJNI中。我需要改变

Java_com_example_gary_hcpp_MainActivity_stringFromJNI

Java_com_example_gary_hcpp_MainActivity_stringFromJNI
Java_com_example_gary_hjava_MainActivity_stringFromJNI