Как убрать sla sh в имени задачи в Gradle - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь запустить старый проект Android, но у меня есть ошибки в файле build.gradle (: app).

ndk_projects.each { File file ->

//noinspection GroovyAssignabilityCheck
 task "copy $file" (dependsOn: "build $file", type:Copy) {
     from "$buildDir/tmplibs"
     into "$buildDir/libs"
 }


//noinspection GroovyAssignabilityCheck
 task "build $file" (dependsOn: ["copy $OpenNI2_path",  "copy $OpenCL_path"], type:Exec) {
     workingDir file
     commandLine "${ndkDir}/ndk-build",
             "NDK_PROJECT_PATH=${buildDir}/intermediates/ndk"  ,
             "NDK_APPLICATION_MK=${file.absolutePath}/jni/Application.mk" ,
             "APP_BUILD_SCRIPT=${file.absolutePath}/jni/Android.mk",
             "NDK_LIBS_OUT=${buildDir}/tmplibs"
             environment NDK_MODULE_PATH: ndk_projects[0].absolutePath + "/jni" + ":" + OpenCL_path + "/obj/local/"
 }

}

Ошибка говорит task name must not contain any of the following characters: [/, \, :, <, >, ", ?, *, |].. Поскольку он использует путь к файлу в качестве имени задачи, я должен изменить это. Простое исправление может состоять в том, чтобы удалить все косые черты в путях и использовать это в качестве имени задачи. Но я ничего не знаю о синтаксисе Gradle. Может кто-нибудь сказать мне, как это сделать? Спасибо.

1 Ответ

0 голосов
/ 30 марта 2020

Gradle использует Groovy, что обычно совместимо с Java. Groovy имеет replaceAll методы для String, которые вы можете использовать здесь с регулярным выражением:

task "build ${file.path.replaceAll("[/\\\\:<>\"?*|]", ' ')}" (...) {
    // ...
}

Вы можете заменить меньшее количество символов, если хотите, это заменяет все недопустимые символы на пробел.

...