Android NDK build cmake include .so库包含在.aar库中

Android NDK build cmake include .so library included in .aar library

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

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

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

示例代码如下:

在模块的 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