我有一个android_library.aar文件,其中包含library.so以及其他一些资源和Java文件。
我将android_library.aar导入了我的项目。我的项目在NDK中使用c ++代码。我的问题是我无法使用CMake编译依赖于library.so的C ++代码。在CMake编译之前,如何从aar中提取library.so?我想直接在Java中将library.so包含在我的C ++代码中。我知道如何在项目中包含。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