2017-12-30 24 views
2

Ich benutze Android NDK r16, um meinen nativen Code für mein Android-Projekt zu erstellen. Ich würde gerne die Codeabdeckung für meine nativen Komponententests erhalten. Ist das möglich?Codeabdeckung für nativen Code mit Android NDK

Aus meinen Nachforschungen scheint, dass dies nicht standardmäßig in Android zur Verfügung gestellt wird und dass wir benutzerdefinierte Compiler/Linker-Flags (-fprofile-arcs -ftest-Coverage) mit Clang verwenden müssen.

Ich fand den folgenden Artikel, der vielversprechend scheint. http://logan.tw/posts/2015/04/28/check-code-coverage-with-clang-and-lcov/

Allerdings ist es nicht wirklich Android verwandt. Ich habe wirklich auf einen Artikel gehofft, der spezifisch für Android ist und nachweislich mit den neuesten NDK/CMake-Tools funktioniert.

Kennt jemand solchen Artikel?

+1

Soweit ich weiß, haben Sie Recht und es gibt keine Werkzeuge für die NDK. Ich habe das nicht ausprobiert, aber Sie können die Coverage wahrscheinlich zur Arbeit bringen, indem Sie einfach "--coverage" erstellen (sowohl in cflags als auch in ldflags, der genaue Name des Flags kann variieren) und 'GCOV_PREFIX' und' GCOV_PREFIX_STRIP' verwenden erwähnt in https://android.googlesource.com/platform/development/+/master/scripts/acov#23. Möglicherweise finden Sie einige Teile dieses Skripts hilfreich, aber es wurde tatsächlich für die AOSP-Entwicklung geschrieben und wird für den NDK nicht genau sein. –

+0

Danke Dan. Dies ist die Lösung, die ich am Ende benutzt habe :) – Jon

Antwort

0

[behandelt dies als Kommentar ich es nach Klärung löschen würde, um vor Ort Richtlinien halten]

Kann ich ein, um die genaue Umsetzung dieses Follow-up? Ich versuche genau denselben Prozess zu machen, aber mit ndk 14b und CMake. Wir verfügen über vorhandene Komponententests für die native Ebene, können jedoch keine Deckungsmetriken aus den ausgeführten Tests abrufen.

Das Setzen der beschriebenen Flags in der cmakeList.txt-Datei führte leider zu undefinierten Referenzfehlern für ein zuvor erstelltes Projekt.

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. 

Haben diese Fahnen an anderer Stelle definiert werden müssen? ODER bin ich irgendwo komplett aus der Basis?

Verwandte Themen