【问题标题】:How to resolve Android ndk build command faild?如何解决 Android ndk build 命令失败?
【发布时间】:2018-12-08 13:16:14
【问题描述】:

我正在 android studio 中使用 android ndk 开发简单的 ndk 示例示例。运行我的应用工作室时显示以下错误。

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.

我有很多搜索,但无法找到我在这里问的正确答案。我还卸载了所有组件并在我的工作室重新安装仍然存在错误。

另一件事如果我将文件扩展名从 .CPP 更改为 .C,则整个项目都会得到编译,甚至可以正常运行。我不知道为什么它不适用于 .CPP 文件。

我正在使用的组件。

Android 工作室 - 3.1.3

gradle - 3.1.0

cmake - 3.6.4111459

Android ndk - 17.1.4828580

lldb -3.1

native-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'}

任何知道的人请帮我解决这个问题。提前致谢。

【问题讨论】:

  • 请修复代码中遗漏的换行符(例如,#include 语句之间的一个)和错误消息(例如,1 error generated. 应该在单独的行上)。
  • @Tsyvarev 对不起,我不知道该怎么做。如果你知道你可以编辑我的问题。谢谢。
  • 错过的换行是由于错误地将文本粘贴到问题帖子中。我无法通过格式化来修复它们。您需要再次从您的来源复制粘贴文本。

标签: android android-studio cmake android-ndk ndk-build


【解决方案1】:

经过 github google guy 的大量试验和帮助,我能够解决。为了解决问题,我按照以下步骤操作。

1.进入项目目录。

2.删除了.gradle、app/.externalNativeBuild和app/build。

3.将 local.properties ndk 路径更改为外部 ndk-r16b。

4.通过Android studio运行。

5.最后生成apk。

【讨论】:

  • 我有 C\:\\Users\\bhaskar\\AppData\\Local\\Android\\sdk\\ndk-bundle 的 ndk 路径,那么在您提到的第 3 步中该怎么做?你能解释一下吗?
【解决方案2】:

当项目文件的路径包含空格时,NDK 构建会严重失败。要修复您的构建,请将项目复制到没有空格的路径。

【讨论】:

  • 我已将项目路径更改为没有空格,但仍然给出相同的错误。即使我在另一台没有空间路径的 PC 上尝试过同样的错误构建命令失败。
  • 它是否仍然失败并显示 错误读取 'D:\Android Studio\Workspace\NDKSample\app\src\main\cpp\native-lib.cpp"?跨度>
  • 是的。它仍然失败并出现同样的错误。我认为它的到来是因为 ndk 正在使用 CMAKE 来编译 c++ 文件,但我不确定。你有什么想法吗?
  • 如果报错显示路径不存在,这很可能是一些中间文件在移动项目后没有清理的结果。删除 .extarnalNativeBuild 目录,然后再次运行构建。
  • 错误并没有说路径不存在,但我仍然删除了 .extarnalNativeBuild 和构建目录,但我得到了同样的错误。即使我已经删除了所有设置,包括 sdk、ndk、android studio 以及 ENV 变量并重新安装它们,但我仍然遇到同样的错误。不知道有什么问题。
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
相关资源
最近更新 更多