2015-11-15 3 views
4

Я загрузил проект, который использует Android ndk. Gradle файл содержит строки:Почему Android Studio игнорирует мой файл .bashrc на OSX?

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 я получаю

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 не выбирает переменную окружения PATH, указанную в файле .bashrc?

EDIT PSEUDO ANSWER: Android Studio следует за other development environments like Xcode, чтобы избежать личных конфигурационных файлов пользователей, изменяющих процесс сборки программного обеспечения. Правильным обходным решением like Alex mentions является просмотр внешнего файла local.properties с переменной ndk.dir, указывающей на правильный путь, и отправьте эту переменную, чтобы построить полный путь до ndk-build вместо того, чтобы полагаться на PATH среды. Файл local.properties может храниться вне контроля источника и настраиваться для каждой проверки.

+0

сделал вы просто установили это? попробуйте выйти/войти в систему или перезагрузить – zapl

+1

Если вы не запускаете Android Studio из командной строки, вряд ли наследуйте что-либо в своем .bashrc –

+0

@ChrisStratton, начиная с Android Studio, из командной строки с помощью ''/Users/gradha/Applications/Android \ Studio.app/Содержание/MacOS/studio'' не изменяет результат, кажется, что среда IDE явно порождает оболочку, игнорирующую все файлы конфигурации пользователя. –

ответ

3

Мы ничего не можем сделать со сломанным PATH для Android Studio, но легко решить проблему 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" … 
} 
+2

Другой вариант на http://stackoverflow.com/questions/26960891/path-variable-not-recognized-in-android-studio -ndk-сборка-команда-это-не-Понимать/26961349 # 26961349. –

+0

Спасибо за эту ссылку и объяснение. На самом деле, в отличие от 14-го, современный Android Studio ожидает, что вы установите ** ** ndk.dir ** в ** local.properties ** и даже получите хороший графический интерфейс для заполнения этого значения. –

Смежные вопросы