首頁  >  文章  >  後端開發  >  如何在 Android NDK DSL 中定義 LOCAL_SRC_FILES?

如何在 Android NDK DSL 中定義 LOCAL_SRC_FILES?

Susan Sarandon
Susan Sarandon原創
2024-11-16 04:11:03884瀏覽

How to Define LOCAL_SRC_FILES in Android NDK DSL?

在 NDK DSL 中定義 LOCAL_SRC_FILES

Android NDK DSL 允許您為模組指定本機來源檔案。然而,在舊版的 DSL 中,沒有直接的方法來手動定義 LOCAL_SRC_FILES。

實驗性外掛程式解決方案

使用實驗性 Android Gradle 外掛程式 0.4.0,現在您可以根據模式從 NDK 建置中排除來源檔案。例如:

android.sources {
    main {
        jni.source {
            srcDirs = ["~/srcs/jni"]
            exclude "**/win.cpp"
        }
    }
}

舊版外掛程式的解決方法

不幸的是,對於舊版的 DSL,無法直接定義 LOCAL_SRC_FILES。相反,建議使用傳統的 Android.mk 檔案來管理您的原生原始檔。

您可以停用預設的NDK 建置任務並注入自訂任務來編譯您的原生原始檔:

def ndkBuild = android.ndkDirectory
import org.apache.tools.ant.taskdefs.condition.Os
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
    ndkBuild += '.cmd'
}

task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
    commandLine '$ndkBuild', 'NDK_PROJECT_PATH="$jniSrc/..'
}

task cleanNative(type: Exec, description: 'Clean JNI object files') {
    commandLine '$ndkBuild', 'clean', 'NDK_PROJECT_PATH="$jniSrc/..'
}
clean.dependsOn 'cleanNative'
tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn buildNative
}
tasks.all {
    task -> if (task.name.contains('compileDebugNdk') || task.name.contains('compileReleaseNdk')) task.enabled = false
}

注意事項

請注意,此解決方法可能不會產生可偵錯的設定。為了解決這個問題,您可以使用 ndk-build 建立靜態庫並將其與必要的物件連結以從庫中提取符號。

以上是如何在 Android NDK DSL 中定義 LOCAL_SRC_FILES?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn