如何将现有的.so库添加到Android Studio项目中?

3
有几个资源建议在src/main/中创建一个名为jniLibs/armeabi的目录,并将编译好的.so文件添加到此位置。然后使用System.loadLibrary("nameOflib")加载库。 我的问题是,在定义函数时:
public native long create();

create() 函数报错:

无法解析 JNI 函数 Java_com_brendan_myApplication_MainActivity_create。在 Java 中声明了本地方法,但在项目中找不到相应的 JNI 函数。

有任何想法吗?


你正在使用哪个版本的Android Studio和哪个gradle插件? - Alex Cohn
Android Studio 1.5.1,gradle 2.8 - Brendan Cordingley
这是 [tag:gradle-experimental] 吗? - Alex Cohn
不确定,这可能是最新版本之一。我可以尝试使用旧版本来查看是否有差异。 - Brendan Cordingley
是的,在build.gradle文件语法上有很大的区别。如果你有apply plugin: 'com.android.application',那么piotrek1543这里提供的说明正是你所需要的。但不要期望Android Studio能够自动解析本地方法声明为预构库。 - Alex Cohn
2个回答

3
原来我仍然可以调用JNI方法,尽管出现了“无法解析相应的JNI函数”的错误。

1

要解决这个问题,只需按照以下步骤并访问下面的链接:

在Android Studio 1.0.2中添加.so库

  1. 在“src/main/”内创建文件夹“jniLibs”
  2. 将所有的.so库放入“src/main/jniLibs”文件夹中
  3. 文件夹结构如下,
    |--app:
    |--|--src:
    |--|--|--main
    |--|--|--|--jniLibs
    |--|--|--|--|--armeabi
    |--|--|--|--|--|--.so Files
  4. 无需额外的代码,只需同步项目并运行应用程序。

    参考资料
    https://github.com/commonsguy/sqlcipher-gradle/tree/master/src/main

来自:如何在Android Studio中包含*.so库?

编辑:我想这可能不是配置问题,而是与在Android NDK中声明本机方法签名的方式有关

请查看此链接:在Android NDK中编写本机方法签名的正确方法是什么?

希望它能帮到你


这就是我正在做的事情,而且我得到了上面描述的错误。 - Brendan Cordingley
请查看下面的链接“How to include...”,那里还有更多答案。 - piotrek1543
我尝试了这些解决方案,但没有成功。 - Brendan Cordingley
1
我感觉你说得对。我相信我的库正在正确加载。我曾经在Eclipse中使用jni而没有问题,所以我想知道为什么我的声明变得固执了。 - Brendan Cordingley
我有另一个应用程序的.so文件,我对其进行了反编译,但我没有该.so文件的native-lib.cpp文件,这意味着我没有本地代码,我只有.so文件。那么,当我运行项目时,我是否可以集成并运行它?因为当我运行项目时,会出现以下错误:java.lang.UnsatisfiedLinkError: No implementation found for int com.krunal.camarademo.Libs.nativesystem.DMDHDR.getBracketedCount() (tried Java_com_krunal_camarademo_Libs_nativesystem_DMDHDR_getBracketedCount and Java_com_krunal_camarademo_Libs_nativesystem_DMDHDR_getBracketedCount__) - karan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接