gpt4 book ai didi

android - 使用预构建静态库的 Gradle

转载 作者:行者123 更新时间:2023-11-30 02:26:41 33 4
gpt4 key购买 nike

我正在从 Eclipse 迁移到 Android Studio,并且我正在尝试使用 Gradle 以包含预构建静态库。我正在按照 ndk 示例项目提供的两个库示例进行操作,并在 Android Studio 中实现它。

我有什么:

预建静态库:

[ndk-path]\samples\two-libs\obj\local\armeabi-v7a\libtwolib-first.a

库的头文件:

[ndk-path]\samples\two-libs\jni\first.h

包含一个方法:

extern int first(int  x, int  y);

现在如何将它用作 android studio 中的预构建静态库?

我尝试了什么:

添加文件:通过创建 jniLibs 将库添加到我的 android studio 项目中(我读到它用于 preBuild 动态库,不确定 preDuilt 静态库是否也应该使用此路径):

[android-studio-project-path]\app\src\main\jniLibs\armeabi-v7a\libtwolib-first.a

并将头文件添加到:

[android-studio-project-path]\app\src\main\jni\first.h

代码更改:

在Java中:称为 native 方法 Foo。

在JNI头文件中:声明了 Foo 方法。

在实现JNI头文件的c文件中:添加了#include "first.h"并调用了第一个方法。

但是在编译过程中出现错误:

“错误:对‘第一’的 undefined reference ”

我猜这是因为在编译期间它没有找到 first.h 的实现文件并且无法动态加载它。如果我添加 first.c 文件(实现文件而不是将其作为库加载,它可以工作)

我是 c 代码和 JNI 的新手,所以任何帮助都会很好!

最佳答案

我一直在为同样的问题而苦苦挣扎,并尝试了各种浪费时间的技巧,直到我遇到这个问题:https://groups.google.com/d/msg/adt-dev/FoyeXl2vl3s/jLvH5lztDwAJ并找到了解决方案。在您的 build.gradle 文件中,将预构建的库作为 ldLibs 的一部分放入 android.ndk 部分,例如

android.ndk {
moduleName = "myJniModule"
stl = "gnustl_shared" // Or whichever you like
// Put your cppFlags or CFlags here too
ldLibs += ['twolib-first'] // The name of your prebuilt lib without file suffix and 'lib' prefix
}

然后在productFlavors中添加ldFlags中预建库的路径:

android.productFlavors {
create("arm") {
ndk.with {
abiFilters += "armeabi-v7a"
ndk.ldFlags += "-L${file("app/src/main/jniLibs/armeabi-v7a/")}".toString()
}
}
}

这至少对我有用。我正在使用实验性 Gradle 插件 v0.2.0。

关于android - 使用预构建静态库的 Gradle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27847100/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com