操作系统: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工作室确实为此项目解析了vector
和std
符号。
我做错了什么?为什么项目teapots没有这个问题?
我的项目与teapots
之间的关键区别是什么使得后者可以解决vector
和std
,但我的不是?
我在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
,它还解析了符号vector
(mylibrary
模块&# 39; s build.gradle
已被我正确添加了cmake内容。但我的问题是我需要将vector
添加到我现有的项目中,而我现有的项目无法解析符号vector
。
答案 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 --> 我创建了文件