Как устранить ошибку команды сборки Android ndk?

Я разрабатываю простой пример примера ndk, используя android ndk в студии android. Во время работы моей студии приложений отображаются следующие ошибки.

Build command failed.
Error while executing process D:\Sdk\cmake\3.6.4111459\bin\cmake.exe with 
arguments {--build D:\Android Studio\Workspace\NDKSample\app\.externalNativeBuild\cmake\debug\arm64-v8a --target native-lib}
[1/2] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.oFAILED: D:\Sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe  --target=aarch64-none-linux-android --gcc-toolchain=D:/Sdk/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64 --sysroot=D:/Sdk/ndk-bundle/sysroot  -Dnative_lib_EXPORTS -isystem D:/Sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem D:/Sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include -isystem D:/Sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include/backward -isystem D:/Sdk/ndk-bundle/sysroot/usr/include/aarch64-linux-android -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security  -frtti -fexceptions -O0 -fno-limit-debug-info  -fPIC -MD -MT CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o -MF CMakeFiles\native-lib.dir\src\main\cpp\native-lib.cpp.o.d -o CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o -c "D:\Android Studio\Workspace\NDKSample\app\src\main\cpp\native-lib.cpp"
error: error reading 'D:\Android Studio\Workspace\NDKSample\app\src\main\cpp\native-lib.cpp'
1 error generated.ninja: build stopped: subcommand failed.

У меня много поиска, но я не могу найти правильный ответ, поэтому я спрашиваю здесь. Я также удалил все компоненты и переустановил их в своей студии, но ошибка осталась.

Другое дело, если я изменю расширение файла на .C с .CPP, весь проект будет выполнен и даже будет работать правильно. Я не знаю, почему это не работает для файла .CPP.

Компоненты, которые я использую.

Android Студио — 3.1.3

градиент - 3.1.0

cmake-3.6.4111459

Android ндк — 17.1.4828580

ллдб -3,1

родной-lib.cpp

#include <jni.h>#include <string>extern "C" JNIEXPORT jstringJNICALLJava_com_mastek_ndksample_MainActivity_stringFromJNI(
    JNIEnv *env,
    jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());}

build.gradle

apply plugin: 'com.android.application'android {    compileSdkVersion 27
defaultConfig {
    applicationId "com.example.ndksample"
    minSdkVersion 15
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    externalNativeBuild {
        cmake {
            cppFlags "-frtti -fexceptions"
        }
    }

}

sourceSets {
    main {
        jniLibs.srcDirs = ['src/main/jniLibs']
    }
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
externalNativeBuild {
    cmake {
        path "CMakeLists.txt"
    }
}}dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'}

Кто-нибудь знает, пожалуйста, помогите мне решить эту проблему. Заранее спасибо.


person Nitish Patel    schedule 29.06.2018    source источник
comment
Пожалуйста, исправьте пропущенные символы новой строки в вашем коде (например, один между операторами #include) и в сообщениях об ошибках (например, 1 error generated. должен быть в отдельной строке).   -  person Tsyvarev    schedule 29.06.2018
comment
@Tsyvarev Извините, я не знаю, как это сделать. Если вы знаете, вы можете отредактировать мой вопрос. Спасибо.   -  person Nitish Patel    schedule 02.07.2018
comment
Пропущенные символы новой строки являются результатом неправильного вставки текста в сообщение с вопросом. Я не могу исправить их форматированием. Вам нужно снова скопировать-вставить текст из ваших источников.   -  person Tsyvarev    schedule 02.07.2018


Ответы (2)


Сборка NDK с треском завершается неудачно, если путь к файлам проекта содержит пробелы. Чтобы исправить свою сборку, скопируйте проект в путь без пробелов.

person Alex Cohn    schedule 03.07.2018
comment
Я изменил путь к проекту без пробелов, но все равно выдает ту же ошибку. Даже я пробовал на другом ПК без пробела, та же команда сборки ошибки не удалась. - person Nitish Patel; 04.07.2018
comment
По-прежнему происходит сбой с ошибкой чтения «D:\Android Studio\Workspace\NDKSample\app\src\main\cpp\native-lib.cpp? - person Alex Cohn; 04.07.2018
comment
да. Он по-прежнему терпит неудачу с той же ошибкой. Я думаю, что это произойдет из-за CMAKE, который ndk использует для компиляции файла C++, но я не уверен. Есть ли у вас какие-либо идеи? - person Nitish Patel; 05.07.2018
comment
Если ошибка показывает несуществующий путь, вероятно, это результат того, что какие-то промежуточные файлы не были очищены после перемещения проекта. Удалите каталог .extarnalNativeBuild и снова запустите сборку. - person Alex Cohn; 05.07.2018
comment
Ошибка не говорит, что путь не существует, но я все же удалил .extarnalNativeBuild и каталог сборки, но получил ту же ошибку. Даже я удалил все настройки, включая sdk, ndk, android studio вместе с переменными ENV, и переустановил их, но все равно получаю ту же ошибку. Я не знаю, какая там проблема. - person Nitish Patel; 06.07.2018

После множества испытаний и помощи парня из github google я могу решить. Чтобы решить проблему, я выполнил следующие шаги.

1.перейдите в каталог проекта.

2.удален .gradle, приложение/.externalNativeBuild и приложение/сборка.

3. изменен путь local.properties ndk к внешнему ndk-r16b.

4. Запустить через Android Studio.

5.Наконец apk сгенерирован.

person Nitish Patel    schedule 09.07.2018
comment
У меня есть путь ndk к C\:\\Users\\bhaskar\\AppData\\Local\\Android\\sdk\\ndk-bundle, так что делать на шаге 3, который вы упомянули? Не могли бы вы объяснить? - person bhaskar; 15.05.2019