我正在尝试在 Android Studio 上使用 GoogleTest。
据我了解,最新版的NDK已经包含了gtest。
我没有找到明确的指南如何去做。
我关注了this文档:
因此,我打开了一个新项目,创建了 jni 文件夹和以下文件(文件里面我写的正是文件内容):
但它不识别#include gtest/gtest.h
此外,
- 最后如何运行adb?
- 我创建了一个 android.mk 文件,但我应该在哪里调用它?
最佳答案
如果您选择 cmake 来驱动您的 externalNativeBuild(根据 Android 开发人员的说法,这是首选选项 NDK guide),那么您只需添加以下行到您的 CMakeLists.txt:
set(GOOGLETEST_ROOT ${ANDROID_NDK}/sources/third_party/googletest/googletest)
add_library(gtest STATIC ${GOOGLETEST_ROOT}/src/gtest_main.cc ${GOOGLETEST_ROOT}/src/gtest-all.cc)
target_include_directories(gtest PRIVATE ${GOOGLETEST_ROOT})
target_include_directories(gtest PUBLIC ${GOOGLETEST_ROOT}/include)
add_executable(footest src/main/jni/foo_unittest.cc)
target_link_libraries(footest gtest)
如果构建成功,您会发现 app/.externalNativeBuild/cmake/debug/x86/footest
.从这里,您可以按照 README.NDK 中的说明进行操作。在模拟器或设备上运行它。
注释:
- 确保 ABI 与您使用的目标匹配(指南对此不是很清楚)。
- 构建的 ABI 列表由 build.gradle 中的 abiFilters 控制。在 Android Studio 中,甚至 ndk-build 也会忽略 Application.mk 中设置的 APP_ABI。
- 当您使用 cmake 时,文件 Android.mk 和 Application.mk 将被忽略。
gradle-3.3 , 和
classpath 'com.android.tools.build:gradle:2.3.3'
,在当前的 Android Studio 版本 2.3.3 中,您可能需要在 build.gradle 中明确指定单元测试目标:android { defaultConfig { externalNativeBuild { cmake { targets "foo_unittest" }}}}
使用 Android Studio 3.0,gradle-4.1 , 和
classpath 'com.android.tools.build:gradle:3.0.0-beta6'
在app/build/intermediates/cmake/debug/obj
下更容易找到可执行文件.
在共享库中测试 foo.cpp 中的 foo(int x, int y) 函数(尽可能接近 NDK instructions ),您的 CMakeLists.txt 脚本中需要更多行:
# build libfoo.so
add_library(foo SHARED src/main/jni/foo.cpp)
target_link_libraries(footest foo)
您会在app/build/intermediates/cmake/debug/obj
下找到libfoo.so 手动复制到您的设备上.
为了减少麻烦,您可以使用STATIC
而不是 SHARED
,或者简单地将 foo.cpp 添加到 footest 可执行文件中:
add_executable(footest src/main/jni/foo_unittest.cc src/main/jni/foo.cpp)
关于c++ - Android NDK 与谷歌测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46429958/