【问题标题】:Problems with using C++ Shared Object with Android Studio在 Android Studio 中使用 C++ 共享对象的问题
【发布时间】:2018-09-14 16:23:42
【问题描述】:

我正在尝试了解 android studio 如何处理共享库“.so”文件。他们简单的带有 C++ 的 Hello World 工作正常,但我正在努力将大量 C++ 代码移植到 android 并想了解最简单的方法。我不一定想将 CMakeLists.txt 文件添加到 Android Studio,因为某些代码不是使用 cmake 构建的。

我所做的是在 Android Studio 中创建了两个项目。支持 C++ 的 Hello World CPP,它运行良好。我还创建了一个 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_text 有效。)

TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setText(stringFromJNI());

构建工作正常,但当我尝试在 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 名称。

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

【问题讨论】:

    标签: java c++ android-studio shared-libraries


    【解决方案1】:

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

    Java_com_example_gary_hcpp_MainActivity_stringFromJNI
    

    Java_com_example_gary_hjava_MainActivity_stringFromJNI
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 2019-12-05
      • 1970-01-01
      相关资源
      最近更新 更多