我的問題與這個問題類似,只是在那個問題中,他想將引數直接從 gradle 傳遞給 CMake。但就我而言,我不是直接呼叫 cmake 構建,而是“顫振正在為我做這件事”
因此,將它們放在一起,當應用程式構建開始時:
- 應用程式的 gradle 構建開始(
build.gradle在顫振專案中)------(1) - 上面的構建呼叫插件的gradle構建(
build.gradle在插件的專案中)------(2) - 插件的gradle構建呼叫插件的CMake構建(
CMakeLists.txt在插件專案中)------(3)
現在將 args 從步驟 (2) 發送到步驟 (3) 就像上面的鏈接中提到的那樣。
我的問題是如何將 args 從步驟 (1) 發送到步驟 (2)?
我對 gradle 不是很有經驗,但我嘗試檢查build.gradle步驟 (1) 的檔案以查看它從哪里呼叫build.gradle插件,但我無法做到這一點。
更新:
- 這個答案與我想要的非常相似,除了正如我提到的,我想從間接呼叫 cmake 的 gradle 構建中傳遞變數。
- 我的用例如下:插件有一些C代碼并使用共享庫,這些庫有不同的版本,用戶必須在構建時選擇其中一個,這就是為什么我希望用戶將變數傳遞給cmake,因為前任:
externalNativeBuild {
cmake {
arguments "-DLIB_VERSION=VERSION_WITH_SOME_OPTION"
}
}
然后在 CMake 中:
if(${LIB_VERSION})
# link some version of the shared libs
else()
# link another version
uj5u.com熱心網友回復:
所以我找到了一個解決方案,但我不知道這是否是正確的方法,因為它定義了要作為“全域 gradle 變數”傳遞的變數。
所以我們有3個檔案:
(1)android/app/build.gradle在flutter app的專案檔案夾中
(2)android/build.gradle在插件的專案檔案夾中
(3)CMakeLists.txt在插件的專案檔案夾中
我們想要將引數從 (1) 傳遞到 (3)(因為插件的用戶只能訪問 (1)):
- 在(1)中,定義要傳遞的變數,將其放在檔案末尾:
ext {
Q16 = 1
HDRI = 0
}
- 在(2)中,讀取檔案開頭的變數:
def Q8
def Q16
def HDRI
if(rootProject.hasProperty("Q8")){
Q8 = 1
}
else{
Q8 = 0
}
if(rootProject.hasProperty("Q16")){
Q16 = 1
}
else{
Q16 = 0
}
if(rootProject.hasProperty("HDRI")){
HDRI = 1
}
else{
HDRI = 0
}
然后將它們傳遞給(3)(因為(2)直接呼叫(3)):
android{
...
defaultConfig{
...
externalNativeBuild{
cmake {
arguments "-DQ8=${Q8}" , "-DQ16=${Q16}" , "-DHDRI=${HDRI}"
}
}
}
}
- 現在我們可以在 (3) 中讀取它們:
message("from CMakeLists.txt: Q8 = ${Q8}")
message("from CMakeLists.txt: Q16 = ${Q16}")
message("from CMakeLists.txt: HDRI = ${HDRI}")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/527589.html
標籤:安卓扑毕业典礼制作
上一篇:如何在java或groovy中將字串轉換為Json物件
下一篇:包圍所有字符
