Gradle使用PreBuilt静态库

时间:2015-01-08 18:30:16

标签: android build gradle

我正在从Eclipse迁移到Android Studio,我正在尝试使用Gradle来包含PreBuilt静态库。 我正在关注随ndk示例项目提供的两个libs示例,并在Android Studio中实现它。

我有什么:

预构建的静态库:

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

库的头文件:

[NDK路径] \样品\两库\ JNI \ first.h

包含一个方法:

extern int first(int  x, int  y);

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

我尝试了什么:

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

[机器人工作室项目路径] \应用\ SRC \主\ jniLibs \ armeabi-V7A \ libtwolib-first.a

并将头文件添加到:

[机器人工作室项目路径] \应用\ SRC \主\ JNI \ first.h

代码更改:

在java中: 称为本地方法Foo。

在JNI头文件中: 宣布了Foo方法。

在实现JNI标头的c文件中: 添加了#include" first.h" 并称之为第一种方法。

但是我在编译期间遇到错误:

"错误:未定义引用'首先'"

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

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

1 个答案:

答案 0 :(得分:1)

我正在努力解决同样的问题并尝试各种各样的技巧,浪费了相当多的时间,直到我碰到这个: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中预建lib的路径:

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

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