【发布时间】:2017-05-14 14:07:45
【问题描述】:
配置
操作系统: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 中,#include <vector> 中的vector 是红色的。
当我将鼠标移到它上面时,它会弹出一个窗口,上面写着Cannot find 'vector'。
std::vector<int32_t> 中的 std 也是红色的。我将鼠标移到它上面,它显示Can't resolve container 'std'。
这个项目没有编译错误。它可以编译成功并安装在我的手机上。问题是它有语法错误。我没有对某些变量进行代码补全,例如 test.h 中的 array。
我找到的一些信息
我导入了包含#include <vector> 的项目teapots。
Android Studio 确实为此项目解析了vector 和std 符号。
我的问题
我做错了什么?为什么项目teapots 没有这个问题?
我的项目和teapots 之间的主要区别是什么,使后者能够解决vector 和std 而我的不是?
更新
我在 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。
【问题讨论】:
-
vector有文件扩展名吗??
-
无扩展。 @codeMan
标签: android android-ndk cmake ndk-build