【发布时间】:2016-02-16 23:25:21
【问题描述】:
我已经下载了一个使用 Android 的 ndk 的项目。 gradle 文件包含以下行:
task ndkBuild(type: Exec) {
commandLine 'ndk-build', '-B', '-C', file('src/main/jni').absolutePath
}
这在运行./gradlew assembleDebug 时工作正常。我的~/.bashrc中有以下内容:
# Append android sdk paths and stuff.
export ANDROID_HOME=/Users/gradha/instalacion_manual/android-sdk-r10-mac_x86
#export ANDROID_NDK_ROOT=/Users/gradha/instalacion_manual/android-ndk-r8b
export ANDROID_NDK_ROOT=/Users/gradha/instalacion_manual/android-ndk-r10e
export NDK_PATH="${ANDROID_NDK_ROOT}"
export NDK_HOME="${ANDROID_NDK_ROOT}"
export PATH=$PATH:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:/Users/gradha/instalacion_manual/apache-maven-3.3.3/bin:"${ANDROID_NDK_ROOT}"
但是,当我尝试从 Android Studio 内部构建项目时,我得到了
process.internal.ExecException: A problem occurred starting process 'command 'ndk-build''
at org.gradle.process.internal.DefaultExecHandle.setEndStateInfo(DefaultExecHandle.java:196)
at org.gradle.process.internal.DefaultExecHandle.failed(DefaultExecHandle.java:325)
at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:83)
... 1 more
Caused by: net.rubygrapefruit.platform.NativeException: Could not start 'ndk-build'
at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27)
at net.rubygrapefruit.platform.internal.WrapperProcessLauncher.start(WrapperProcessLauncher.java:36)
at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:65)
... 1 more
Caused by: java.io.IOException: Cannot run program "ndk-build" (in directory "/Users/gradha/project/questionity/archivo/SuperpoweredSDK/Android/CrossExample/app"): error=2, No such file or directory
at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
... 3 more
Caused by: java.io.IOException: error=2, No such file or directory
... 4 more
这表明PATH 变量未在环境中正确设置,甚至ndk-build 进程也无法运行。 Touching .bashrc is supposed to make this work。为什么Android Studio 不拾取.bashrc 文件中指定的PATH 环境变量?
编辑伪答案:Android Studio 遵循other development environments like Xcode 以避免用户个人配置文件更改软件构建过程。正确的解决方法like Alex mentions 是读取外部local.properties 文件,其中ndk.dir 变量指向正确的路径,并获取此变量以构建到ndk-build 的完整路径,而不是依赖环境的PATH . local.properties 文件可以不受源代码控制的影响,并且可以为每次检出进行自定义。
【问题讨论】:
-
你刚刚设置了吗?尝试注销/登录或重新启动
-
除非您从命令行启动 Android Studio,否则不太可能继承 .bashrc 中的任何内容
-
@ChrisStratton 从命令行使用
/Users/gradha/Applications/Android\ Studio.app/Contents/MacOS/studio启动 Android Studio 不会改变结果,似乎 IDE 显式生成了一个忽略所有用户配置文件的 shell。 -
Android studio 在与 ndk 的合作方面历来臭名昭著。您应该测试是否可以从命令行运行 ndk-build;如果没有,您的问题是您没有将其添加到路径中,或者您的 ndk 安装已损坏。但是如果可以从命令行运行,问题是android studio还是坏了。
-
天哪,当你不得不使用 osx 时,环境变量似乎是最困难的事情之一 apple.stackexchange.com/questions/119711/… / stackoverflow.com/questions/135688/…
标签: android macos android-studio android-ndk