c++android-studiogradleandroid-ndkgoogletest

Android NDK with Google Test


I'm trying to use GoogleTest on Android Studio.

According to what I understood, the latest version of NDK has the gtest included.

I did not find a clear guide how to do it.

I followed this document:

So, I opened a new project, created jni folder and the following files (inside the files I wrote exactly what the document):

enter image description here

But it does not recognize the #include gtest/gtest.h

In addition,


Solution

  • If you choose cmake to drive your externalNativeBuild (and this is the preferred option, according to Android Developers NDK guide), then you can simply add the following lines to your 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)
    

    If your build succeeds, you will find app/.externalNativeBuild/cmake/debug/x86/footest. From here, you can follow the instructions in README.NDK to run it on emulator or device.


    Notes:


    To test the foo(int x, int y) function from foo.cpp in a shared library (to make is as close as possible to the NDK instructions), you need some more lines in your CMakeLists.txt script:

    # build libfoo.so
    add_library(foo SHARED src/main/jni/foo.cpp)
    target_link_libraries(footest foo) 
    

    You will find libfoo.so to copy manually to your device under app/build/intermediates/cmake/debug/obj.

    To reduce the hassle, you can use STATIC instead of SHARED, or simply add foo.cpp to footest executable:

    add_executable(footest src/main/jni/foo_unittest.cc src/main/jni/foo.cpp)