2017-12-30 42 views
2

Android 프로젝트의 기본 코드를 작성하는 데 Android NDK r16을 사용하고 있습니다. 내 기본 단위 테스트에 대한 코드 적용 범위를 얻을 수 있기를 바랍니다. 이것이 가능한가?Android NDK를 사용하여 원시 코드에 대한 코드 적용

필자의 연구 결과에 따르면 Android에서 기본적으로 제공되는 것은 아니며 Clang과 함께 맞춤 컴파일러/링커 플래그 (-fprofile-arcs -ftest-coverage)를 사용해야하는 것으로 보입니다.

유망 해 보이는 다음 기사를 발견했습니다. http://logan.tw/posts/2015/04/28/check-code-coverage-with-clang-and-lcov/

그러나 실제로는 Android와 관련이 없습니다. 나는 안드로이드에만 국한된 최신 NDK/CMake 도구로 작업 한 것으로 입증 된 기사를 정말로 기대하고있었습니다.

누구나 이러한 기사를 알고 있습니까?

+1

내가 아는 한 당신이 옳다. NDK를 위해이 문제를 해결하는 도구는 없다. 나는 이것을 시도하지는 않았지만'--coverage' (cflags와 ldflags 모두에서 플래그의 정확한 이름이 다를 수 있음)로 간단히 빌드하고'GCOV_PREFIX'와'GCOV_PREFIX_STRIP'를 다음과 같이 사용하여 작업 할 수있는 범위를 얻을 수 있습니다. (https://android.googlesource.com/platform/development/+/master/scripts/acov#23). 이 스크립트의 일부분은 도움이 될 수 있지만 실제로 AOSP 개발을 위해 작성되었으며 NDK에 대해서는 정확하지 않습니다. –

+0

Dan 감사합니다. 이것은 내가 사용 끝난 솔루션입니다 :) – Jon

답변

0

가 나는이의 정확한 구현에 따라 얻을 수 [I 사이트 가이드 라인을 준수 설명 후 삭제됩니다 주석으로이 치료]? 나는 똑같은 과정을하려고 노력하고 있지만 ndk 14b와 CMake를 가지고있다. 네이티브 레이어에 대한 기존 단위 테스트가 있지만 테스트 실행에서 커버리지 메트릭을 가져올 수 없습니다.

다음과 같이 cmakeList.txt 파일에 설명 된 플래그를 설정하면 불행히도 이전에 건축 프로젝트에 대한 정의되지 않은 참조 오류가 발생했습니다.

CMAKE

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage -fprofile-arcs -ftest-coverage") 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage -fprofile-arcs -ftest-coverage") 
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage -fprofile-arcs -ftest-coverage") 

ERROR :

[3/3] Linking CXX shared library ../../../../build/intermediates/cmake/project/debug/obj/armeabi/libscanhwl_camif.so 
    FAILED: : && /home/user/tools/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv5te-none-linux-androideabi --gcc-toolchain=/home/user/tools/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/user/tools/android-ndk-r14b/sysroot -fPIC -isystem /home/user/tools/android-ndk-r14b/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=19 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -fno-integrated-as -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -D__STDC_FORMAT_MACROS -fexceptions -frtti --coverage -fprofile-arcs -ftest-coverage -O0 -fno-limit-debug-info -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a --sysroot /home/user/tools/android-ndk-r14b/platforms/android-19/arch-arm -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libscanhwl_camif.so -o <This was a list of files> -latomic -lm "/home/user/tools/android-ndk-r14b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/libgnustl_static.a" && : 
    out/stage2/soong/ndk/sysroot/usr/include/string.h:348: error: undefined reference to '__strncpy_chk2' 
    clang++: error: linker command failed with exit code 1 (use -v to see invocation) 
    ninja: build stopped: subcommand failed. 

이러한 플래그는 다른 곳에서 정의해야합니까? 아니면 어딘가에서 완전히 벗어나나요?