android - Android NDK 构建 cmake 包含 .aar 库中包含的 .so 库
问题描述
我有一个包含library.so和一些其他资源和 java 文件的android_library.aar文件。
我将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
推荐阅读
- flutter - 使用状态小部件访问状态类的方法?
- java - 如何在 Firebase 中获取孩子的数据
- c# - _AppDomainPtr Load_3 方法示例?
- voip - Freeswitch 1.8 和tone_stream 的播放
- python - 如何计算 DecisionTreeClassifier 的 0-1 确定性分数?
- javascript - 如何防止javascript array.push中的重复项
- java - JsonSerialize / JsonDeserialize 在 Apache Tomcat (TomEE) 中不起作用
- java - Android中图像缩放动画后如何保持质量?
- c# - 如何自动为生成的实体添加数据注释?
- angular - 如何使用 Effects 在 POST 之前或 GET 请求之后构造/操作数据