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 确实解决了此项目的 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
.
我建议您看这里 - 这是一个很好的解决方案,通过 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 --> 我创建了文件
配置
操作系统: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 确实解决了此项目的 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
.
我建议您看这里 - 这是一个很好的解决方案,通过 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 --> 我创建了文件