2017-12-30 36 views
2

私はAndroid NDK r16を使用してAndroidプロジェクトのネイティブコードを作成しています。私は私のネイティブユニットテストのコードカバレッジを取得できるようにしたいと思います。これは可能ですか?Android NDKを使用したネイティブコードのコードカバレッジ

私の研究から、これはAndroidではデフォルトでは提供されておらず、カスタムのコンパイラ/リンカーフラグ(-fprofile-arcs -ftest-coverage)をClangで使用する必要があるようです。

私は有望そうな次の記事を見つけました。 http://logan.tw/posts/2015/04/28/check-code-coverage-with-clang-and-lcov/

ただし、Android関連のものではありません。私は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

[コメントとしてこれを扱い、私はサイトのガイドラインを遵守するために明確化した後、それを削除します]

私はこのの正確な実装にフォローアップを取得できますか?私は全く同じプロセスをやろうとしていますが、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. 

これらのフラグは、他の場所で定義する必要がありますか?または、私はどこかの基地を完全に離れていますか?

関連する問題