build.gradle:由于“没有这样的文件或目录”,命令行任务失败
Posted
技术标签:
【中文标题】build.gradle:由于“没有这样的文件或目录”,命令行任务失败【英文标题】:build.gradle: commandLine task failed due to "No such file or directory" 【发布时间】:2021-11-21 23:27:16 【问题描述】:tl;dr 问题:在我使用 android Studio 的 Mac 上,在 gradle 中运行 bash 脚本任务失败,因为“没有这样的文件或目录”错误,即使文件在那里。
背景: 我正在我的 Mac 上使用 Android Studio 构建一个 Android 应用程序,该应用程序需要构建一个 C SDK,我为此使用 NDK 和 CMake。在我的 APP_FOLDER/app/build.gradle 中,我试图在为 NDK 构建 CMake 之前运行一个脚本。这是所需的构建顺序:
app:runBuildScript
app:configureCMakeDebug
app:externalNativeBuildDebug
app:compileDebugSources
...
在 CMake 之前运行脚本的原因是因为脚本会设置 CMake 将使用的值。
这是我的应用程序/build.gradle
plugins
id 'com.android.application'
android
compileSdk 31
defaultConfig
applicationId "com.example.sdk"
minSdk 28
targetSdk 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild
cmake
cppFlags ''
ndk
abiFilters 'armeabi-v7a'
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
compileOptions
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
externalNativeBuild
cmake
path file('src/main/cpp/CMakeLists.txt')
version '3.21.3'
dependencies
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:2.0.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
task runBuildScript(type: Exec)
// commandLine 'source ./src/main/cpp/build-tools/bin/set-env.sh'
workingDir './src/main/cpp/build-tools/bin'
commandLine 'source ./set-env.sh'
project.afterEvaluate
tasks.getByName("buildCMakeDebug").dependsOn runBuildScript
问题: 由于错误,该脚本无法运行。这是我从 Android Studio 构建时收到的错误:
> Task :app:runBuildScript FAILED
Execution failed for task ':app:runBuildScript'.
> A problem occurred starting process 'command 'source ./set-env.sh''
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:runBuildScript'.
...
Caused by: java.io.IOException: Cannot run program "source ./set-env.sh" (in directory "/Users/xxxxxx/AndroidStudioProjects/SDKDemo/app/src/main/cpp/build-tools/bin"): error=2, No such file or directory
但是,文件位于:
88665a32ce18:bin XXXXX$ pwd
/Users/XXXXX/AndroidStudioProjects/SDKDemo/app/src/main/cpp/build-tools/bin
88665a32ce18:bin XXXXX$ ls
build-tools.sh set-env.sh
知道为什么会这样吗?不确定它是否相关,但我 Mac 上的默认 shell 是 zsh。坚持了几天,感谢您的帮助。
【问题讨论】:
【参考方案1】:仍然不确定为什么会这样,但我想出了一个解决方法:
-
创建一个新的 .sh 文件 (
source-settings.sh
),其唯一任务是执行 source ./set-env.sh
。
将commandLine 'source ./set-env.sh'
更改为commandLine "bash", "-c", './source-settings.sh'
【讨论】:
以上是关于build.gradle:由于“没有这样的文件或目录”,命令行任务失败的主要内容,如果未能解决你的问题,请参考以下文章
intellij idea更新gradle项目报错:Could not run build action using Gradle distribution
java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor