【问题标题】:Why is Android Studio ignoring my .bashrc file on OSX?为什么 Android Studio 会忽略我在 OSX 上的 .bashrc 文件?
【发布时间】: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


【解决方案1】:

对于 Android Studio 的损坏的 PATH 我们无能为力,但很容易解决 ndk-build 的问题 - 一劳永逸。

将以下块添加到 模块(应用程序或库)的 build.gradle 文件顶部:

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def ndkBuild = properties.getProperty('ndk.dir') + '/ndk-build'
import org.apache.tools.ant.taskdefs.condition.Os
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
    ndkBuild += '.cmd'
}

这里是 gradle 任务:

task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
    commandLine "$ndkBuild" …
}

【讨论】:

  • 感谢此链接和解释。实际上,与大约 14 年不同的是,现代 Android Studio 期望您在 local.properties 中有这个 ndk.dir 设置,甚至提供了很好的 GUI 来填充这个值。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-15
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 2014-07-10
  • 1970-01-01
相关资源
最近更新 更多