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

xiaohuochai 阅读:135 2025-02-15 21:57:57 评论:0

我有一个包含 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
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号