Android Studio 2.2.3找不到<vector>

时间:2016-12-30 09:01:04

标签: android android-ndk cmake ndk-build

配置

操作系统:Ubuntu 16.04

Android Studio版本: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中,vector中的#include <vector>为红色。 将鼠标移到它上面会弹出一个显示Cannot find 'vector'的窗口。 std中的std::vector<int32_t>也是红色的。将鼠标移到它上面说Can't resolve container 'std'

此项目没有编译错误。它可以成功编译并安装在我的手机上。问题是它有语法错误。我没有对某些变量执行代码,例如array中的test.h

我找到的一些信息

我导入了包含#include <vector>的项目teapots。 Android工作室确实为此项目解析了vectorstd符号。

我的问题

我做错了什么?为什么项目teapots没有这个问题? 我的项目与teapots之间的关键区别是什么使得后者可以解决vectorstd,但我的不是?

更新

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

3 个答案:

答案 0 :(得分:2)

我明白了。我没有将c ++文件tmp_raw_df包含到test.h中。将其添加到CMakeLists.txt CMakeLists.txt括号和同步项目后,红色语法错误消失了。

答案 1 :(得分:0)

我建议你看一下 - 这是一个很好的解决方案,指导makefile和代码本身:Can't include C++ headers like vector in Android NDK。我过去曾经使用过它,它帮助了我。

答案 2 :(得分:0)

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 --> 我创建了文件