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

时间:2014-06-04 00:18:52

标签: android android-ndk gradle

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

jniLibs/armeabi/libtess.so
jniLibs/armeabi-v7a/libtess.so
...

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

ndk {
    moduleName "myJNILib"
    stl "stlport_shared"
    ldLibs "log", "tess"
}

它无法找到它。

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

1 个答案:

答案 0 :(得分:0)

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

无论如何,您需要关注this教程。它非常巧妙地适用于我自己的东西。您也很可能想要阅读this introduction to Android.mk files。这对调试非常有帮助,并确保您正确链接。

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

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