Shi*_*eri 11 c++ googletest gradle android-ndk android-studio
我正在尝试在Android Studio上使用GoogleTest.
根据我的理解,最新版本的NDK包含了gtest.
我没有找到明确指南如何做到这一点.
我按照这个文件:
所以,我打开了一个新项目,创建了jni文件夹和以下文件(在我编写的文件里面的文件完全是什么):
但它不承认 #include gtest/gtest.h
此外,
Ale*_*ohn 14
如果你选择cmake来驱动你的externalNativeBuild(这是首选的选项,根据Android开发者NDK指南),那么你可以简单地将以下行添加到你的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)
Run Code Online (Sandbox Code Playgroud)
如果你的构建成功,你会发现 app/.externalNativeBuild/cmake/debug/x86/footest.从这里,您可以按照README.NDK中的说明在模拟器或设备上运行它.
备注:
对于gradle-3.3,并且classpath 'com.android.tools.build:gradle:2.3.3',与当前的Android Studio 2.3.3版一样,您可能需要在build.gradle中明确指定unittest目标:
android { defaultConfig { externalNativeBuild { cmake { targets "foo_unittest" }}}}
Run Code Online (Sandbox Code Playgroud)使用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指令),您需要在CMakeLists.txt脚本中添加更多行:
# build libfoo.so
add_library(foo SHARED src/main/jni/foo.cpp)
target_link_libraries(footest foo)
Run Code Online (Sandbox Code Playgroud)
你会发现libfoo.so手动复制到你的设备下app/build/intermediates/cmake/debug/obj.
为了减少麻烦,您可以使用STATIC而不是SHARED简单地将foo.cpp添加到footest可执行文件:
add_executable(footest src/main/jni/foo_unittest.cc src/main/jni/foo.cpp)
Run Code Online (Sandbox Code Playgroud)
只需添加到Alex的出色答卷,也可以部署和使用运行生成二进制测试adb通过添加以下到你CMakeLists.txt:
find_program(ADB adb)
add_custom_command(TARGET footest POST_BUILD
COMMAND ${ADB} shell mkdir -p /data/local/tmp/${ANDROID_ABI}
COMMAND ${ADB} push $<TARGET_FILE:native-lib> /data/local/tmp/${ANDROID_ABI}/
COMMAND ${ADB} push $<TARGET_FILE:footest> /data/local/tmp/${ANDROID_ABI}/
COMMAND ${ADB} shell \"export LD_LIBRARY_PATH=/data/local/tmp/${ANDROID_ABI}\; /data/local/tmp/${ANDROID_ABI}/footest\")
Run Code Online (Sandbox Code Playgroud)
请注意,在上面的示例footest中,依赖于共享库native-lib,这就是我们推送该共享库的原因。native-lib通过设置LD_LIBRARY_PATH环境变量来指定到的路径。
| 归档时间: |
|
| 查看次数: |
3312 次 |
| 最近记录: |