android - CMAKE_CURRENT_BINARY_DIR 的 Gradle 模拟是什么?
问题描述
我正在开发一个包含本机代码的 Android 应用程序。我运行javac
以生成 JNI 标头。
我想以编程方式确定这些 JNI 标头的目标目录,以便将它们放在它们所属的模块附近。
最好的方法是什么?
在 CMake 中,我会简单地-h ${CMAKE_CURRENT_BINARY_DIR}/headers
在 javac 命令行中添加类似的内容,但它是 Gradle。
目前我的模块build.graddle
包含以下几行
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs += ["-h", "app/build/headers"]
}
}
这里,"app"
是模块的名称。此代码在其中创建app/build/headers
目录和头文件。
如果我省略它,那么将与目录build/headers
一起创建上一层。app
我怎样才能以"app"
编程方式获得它?我希望,这将使我能够将这些说明移至项目的build.gradle
解决方案
这是project.getBuildDir()
我还发现我可以删除gradle.projectsEvaluated
: help fortasks
表示该对象包含该项目的所有任务。
现在我在模块中build.gradle
:
def JNI_header_path = new File(project.getBuildDir(), "headers")
tasks.withType(JavaCompile) {
options.compilerArgs += ["-h", JNI_header_path]
}
...
android {
...
defaultConfig {
...
externalNativeBuild {
cmake {
arguments "-DJNI_INCLUDE_DIR="+JNI_header_path
}
}
...
}
在模块的 CMakeLists.txt 中:
include_directories(${JNI_INCLUDE_DIR})
我还在 DSL 中发现了一些不匹配的地方。Android Studio 将其称为“模块”,而 Gradle 将其称为“项目”。Android Studio 将“项目”称为包含多个模块的更大实体。
推荐阅读
- java - Google InApp Billing - 从 onSkuDetailsResponse 获得的 skuDetailsList 的标题绑定到列表视图控件
- node.js - 无法通过 jenkins 作业中的“npm install cypress”安装 cypress
- python - 如何向当前登录的用户 Django 发送电子邮件
- python - 如何在不存在的值上使用 if else
- java - 为什么 BigDecimal("20") 不等于 BigDecimal("2E+1")
- python - 如何优化python中的for循环?
- python - 美丽的汤不会从“下一页”中抓取数据
- python - keras - 1D-CNN 输入兼容性错误,时间序列问题
- sql-server - 联合和空行为
- javascript - 滚动时隐藏标题 - 向上滚动延迟