【问题标题】:How can I add a static library to Android NDK using the build.gradle file?如何使用 build.gradle 文件将静态库添加到 Android NDK?
【发布时间】:2015-06-15 01:56:16
【问题描述】:

我正在尝试学习在AndroidStudio中使用NDK,我想导入“native-activity”示例中使用的“android_native_app_glue”文件,这样我就有了一个框架,可以用于显示等基本功能, touch 等。在示例中,它会在 android.mk 文件中使用此行加载库:

LOCAL_STATIC_LIBRARIES := android_native_app_glue

然后简单地将其导入“main.c”:

#include <android_native_app_glue.h>

但在 AndroidStudio 中,据我试验,它根本不使用 android.mk 文件,而是使用 build.gradle 文件来执行所有相同的功能。因此,例如,为了替换 android.mk 中的 LOCAL_LDLIBS := ...,我在 build.gradle 中使用了 ldLibs = ...。什么 gradle 代码替换了LOCAL_STATIC_LIBRARIES

是否还有一个资源可以解释,一般来说,如何从 android.mk 转换为 build.gradle?

【问题讨论】:

标签: android android-ndk static-libraries android-gradle-plugin


【解决方案1】:

如果你真的想让它在没有 Makefiles 的情况下运行,你可以复制 ndk\sources\android\native_app_glue\android_native_app_glue.(c|h) 并将其粘贴到你的 jni 文件夹中,然后将 android 添加到你的 ldLibs

否则,您仍然可以依赖经典的 Makefile,方法是停用对 ndk-build 的默认调用,并使 gradle 使用 libs 目录中的库:

sourceSets.main {
    jniLibs.srcDir 'src/main/libs'
    jni.srcDirs = [] //disable automatic ndk-build call
}

在这种情况下,你必须自己打电话给ndk-build,但你也可以让 gradle 为你打电话:

// call regular ndk-build(.cmd) script from app directory
task ndkBuild(type: Exec) {
    if (Os.isFamily(Os.FAMILY_WINDOWS)) {
        commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath
    } else {
        commandLine 'ndk-build', '-C', file('src/main').absolutePath
    }
}

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn ndkBuild
}

【讨论】:

  • 我不确定它的哪些部分去哪里了。所以我会添加“lbLibs =“Android”,然后我将把“ndk/sources/.../android_native_app_glue”放在哪里?对于其余的代码,它会放在 gradle 文件中吗?我尝试将它添加到那里,但它说“找不到方法:main()”。“sourceSets.main”是否需要进入 gradle 文件的某些特定部分,例如在 android{} 中?
  • 进一步玩,我发现如果我添加“#include <..>” 那么它将编译本机胶水代码,但如果我尝试调用任何函数(例如,“app_dummy()”),它会给出“未定义的引用”错误。我还需要添加什么来确保它可以真正使用 android_native_app_glue.h 中声明的函数吗?
  • 是的,您将添加ldLibs "android"。然后您将 .c 和 .h 从 android_native_app_glue 复制到您的 jni 源。从您的代码中,照常引用标题#include &lt;android_native_app_glue.h&gt;。 sourceSets.main 位于 android {} 中,但仅当您想使用自己的 Makefile 时才放置此代码。
猜你喜欢
  • 2011-12-01
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 2018-06-27
相关资源
最近更新 更多