使用gradle链接到NDK的预构建库

xgr*_*rtl 6 android gradle android-ndk

我有一个包含NDK代码的Android项目.从这段代码中,我需要调用其他使用NDK构建的库中的函数,我在jniLibs文件夹中有这些函数:

jniLibs/armeabi/libtess.so
jniLibs/armeabi-v7a/libtess.so
...
Run Code Online (Sandbox Code Playgroud)

如果我尝试从java加载这些库,如System.loadLibrary("tess"),它可以正常工作.但是,当我尝试通过将其添加到build.gradle来链接我的NDK库时:

ndk {
    moduleName "myJNILib"
    stl "stlport_shared"
    ldLibs "log", "tess"
}
Run Code Online (Sandbox Code Playgroud)

它无法找到它.

当然,如果我没有链接它,它就无法编译myJNILib,因为它无法找到符号.无论如何使用gradle来完成这项工作?或者我真的需要在gradle之外构建我的库,如果我想与其他预建的库链接?

小智 0

我认为你想做的主要是依靠自然的 NDK 构建......东西......我不确定什么是一个好词。

无论如何,您都会想要遵循教程。它对我自己的东西非常有效。您很可能还想阅读Android.mk 文件的介绍。这对于调试和确保链接正确非常有帮助。

执行此操作时您可能会遇到两个问题:

  1. 未定义的符号错误,这绝对是一种痛苦。您很可能希望消除这种依赖性。我花了几个小时研究这个问题,最后得出结论:该文件一定不存在。不知何故。
  2. 您还可能遇到无法找到您正在处理的文件的扩展名的情况(因此,它可能会说 foo1.so 找不到库 foo2.so.# 尽管您已经链接了 foo2.so。如果发生这种情况,您可能必须编译 .a 库,但这可能不是最好的解决方案。)。

嗯,我希望这有帮助!