Android Studio 2.2.3 找不到 <vector>

Android Studio 2.2.3 cannot find <vector>

配置

操作系统:Ubuntu16.04

Android 工作室版本: 2.2.3

键码

~/project/build.gradle:

buildscript {
      repositories {
          jcenter()
      }
      dependencies {
          classpath 'com.android.tools.build:gradle:2.2.3'
      }
  }
  ...

~/project/library/build.gradle:

apply plugin: 'com.android.library'

android {
    ...

    defaultConfig {
        ...

        externalNativeBuild {
            cmake {
                arguments '-DANDROID_TOOLCHAIN=clang',
                        '-DANDROID_STL=gnustl_static'
                     // I also tried '-DANDROID_STL=gnustl_shared', result is same
            }
        }
    }

    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
        }
    }

    ...
}

~/project/app/build.gradle:

apply plugin: 'com.android.application'

android {
    ...
}

dependencies {
    ...
    compile project(':library')
    ...
}

~/project/settings.gradle

include ':app', ':library'

~/project/library/src/main/cpp/test.h:

#include <vector>   // vector is red, says "cannot find vector"
#include <stdint.h>

class test {

private:
    std::vector<int32_t> array;  // std is red, says "can't resolve container std"
};

问题描述

在文件~/project/library/src/main/cpp/test.h中,#include <vector>中的vector是红色的。 当我将鼠标移到它上面时,它会弹出一个 window,上面写着 Cannot find 'vector'std::vector<int32_t>中的std也是红色的。我将鼠标移到它上面,它显示 Can't resolve container 'std'.

该项目没有编译错误。可以编译成功安装到我的phone上。问题是它有语法错误。我没有对某些变量进行代码补全,例如 test.h.

中的 array

我找到的一些资料

我导入了包含 #include <vector> 的项目 teapots。 Android Studio 确实解决了此项目的 vectorstd 符号。

我的问题

我做错了什么?为什么项目 teapots 没有这个问题? 我的项目和 teapots 之间的主要区别是什么使得后者能够解析 vectorstd 而我的不能?


更新

我在 Android Studio 中创建了一个新项目。在新建项目向导的第 1 步中,我勾选了 include C++ Support。在最后一步中,我为 C++ Standard 选项保留了默认的 Toolchain Default。单击 finish 按钮后,Android Studio 会自动为我创建文件 native-lib.cpp。我在此文件的第 3 行添加了代码 #include <vector>。这次 Android Studio 正确解析了符号 vector。然后我为这个项目创建了一个新的模块库 mylibrary,并在其中添加了一个 cpp 文件夹和 test.h 并且它还解析了符号 vector(mylibrary 模块的 build.gradle 已由我正确添加了 CMake 内容)。但我的问题是我需要将 vector 添加到我现有的项目中,而我现有的项目无法解析符号 vector.

我建议您看这里 - 这是一个很好的解决方案,通过 makefile 和代码本身进行指导:Can't include C++ headers like vector in Android NDK。我过去用过这个,对我很有帮助。

我明白了。我没有在 CMakeLists.txt 中包含 C++ 文件 test.h。一旦我将它包含到 CMakeLists.txt add_library 括号和同步项目中,红色语法错误就消失了。

bu2zhouzhu 回答正确。我只是解释一下。

文件有问题。 每当您添加 .cpp 文件时,您需要像这样 CMakeLists.txt 更新

add_library(libraryName SHARED
file_name1.cpp
file_name2.cpp)

就我而言。

add_library( native-lib SHARED
         native-lib.cpp
         webp_engine.cpp
         webp_link.cpp)

native-lib --> 库名称(默认名称,我不编辑)。

webp_engine.cpp --> 我创建了文件。

webp_link.cpp --> 我创建了文件