Android NDK 构建 cmake 包含 .aar 库中包含的 .so 库

标签 android c++ android-ndk java-native-interface aar

我有一个包含 library.so 和一些其他资源和 java 文件的 android_library.aar 文件。

我将 android_library.aar 导入到我的项目中。我的项目使用带有 NDK 的 c++ 代码。我的问题是我无法使用 CMake 编译依赖于 library.so 的 C++ 代码。如何从 中提取 library.so阿尔在 CMake 编译之前?我想在没有 java 的情况下直接将 library.so 包含到我的 C++ 代码中。我知道如何包含 .so 在一个项目中,但我不知道如何从 aar 内部进行操作。

最佳答案

经过 1 周的研究,我自己找到了解决方案。我从 Google GVR 代码中找到了一些代码。但这对我的情况不起作用。我改了 build.dependsOn preBuild.dependsOn 然后它起作用了。它可能会在 future 帮助一些人。

以下是示例代码:

在模块的 build.gradle 文件中:

sourceSets {
    main {
        jniLibs.srcDirs = ["jniLibs"]
    }
}

task extractSo(type: Copy) {
    println 'Extracting *.so file(s)....'

    from zipTree("${project.rootDir}/ModuleName/ModuleName.aar")
    into "${project.rootDir}/${project.name}/src/main/jniLibs/"
    include "jni/**/*.so"

    eachFile {
        def segments = it.getRelativePath().getSegments() as List
        println segments
        it.setPath(segments.tail().join("/"))
        return it
    }
    includeEmptyDirs = false
}

preBuild.dependsOn extractSo

关于Android NDK 构建 cmake 包含 .aar 库中包含的 .so 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51930836/

相关文章:

c++ - boost::variant for boost::arrays of arbitrary size

c++ - #include <filename> 和 #include "filename"有什么区别?

调试 ARM 程序集(Neon 扩展)

android - 安装 OpenGL ES 并为 android 编译代码

Android,ImageView 优于 ImageView

c++ - Interactive Brokers API C++ 控制台非常基本的东西

java - 如何在android App中添加简单的产品查询

android - “GradleBuild”任务意外失败

android - Google Play 商店是否会从 apk 中删除未使用的资源?

java - findviewbyid - 无法解析