使用 Android NDK 的本机代码的代码覆盖率

2024-03-27

我正在使用 Android NDK r16 为我的 Android 项目构建本机代码。我希望能够获得本机单元测试的代码覆盖率。这可能吗?

根据我的研究,Android 中似乎没有默认提供此功能,我们需要在 Clang 中使用自定义编译器/链接器标志 (-fprofile-arcs -ftest-coverage)。

我发现以下文章看起来很有希望。http://logan.tw/posts/2015/04/28/check-code-coverage-with-clang-and-lcov/ http://logan.tw/posts/2015/04/28/check-code-coverage-with-clang-and-lcov/

然而,它与 Android 无关。我真的希望有一篇专门针对 Android 的文章,并且被证明可以与最新的 NDK/CMake 工具配合使用。

有人知道这样的文章吗?


[将此视为评论,我将在澄清后将其删除,以遵守网站指南]

我可以跟进具体实施情况吗?我正在尝试执行完全相同的过程,但使用 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.

这些标志需要在其他地方定义吗?或者我在某个地方完全偏离了基地?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Android NDK 的本机代码的代码覆盖率 的相关文章

  • 如何在 Android Studio 中构建“发布”APK?

    我正在尝试构建一个可以上传到 Play 商店的 APK 当我在 Android Studio 版本 0 3 1 中选择 Build Generate Signed APK 时 我会被定向到有关如何在 gradle build 脚本 中正确设
  • Android 索引滚动

    http developer android com design building blocks scrolling html http developer android com design building blocks scrol
  • 如何从菜单项获取视图引用?

    我试图获取菜单项的参考 但我就是不能 整个事情都在一个片段内 Menu boat accept menu xml menu menu
  • 带有工具栏和 TabLayout 的 ViewPager 高度错误

    我在 AppBarLayout 下方有一个 ViewPager 带有工具栏和 TabLayout 我无法理解为什么加载的片段的高度大于可用空间 即使没有如此大的元素 使选项卡可滚动 这是主要的布局 xml
  • Android中每10秒显示一次数据

    我必须每 10 秒后显示一些数据 谁能告诉我该怎么做 您还可以使用另一种方法按特定时间间隔更新 UI 以上两个选项都是正确的 但根据具体情况 您可以使用替代方法在特定时间间隔更新 UI 首先为 Handler 声明一个全局变量 用于从 Th
  • 如何在Android中打开设备管理员设置?

    我想去Security gt Device administrators然而 在我的设置中 我只能弄清楚如何打开Security gt Intent dialogIntent new Intent android provider Sett
  • BackupAgent:“无法恢复包...”

    我已经实现了 BackupAgent 如下所述数据备份 http developer android com guide topics data backup html 注册了一个 API 密钥并在我的 Manifest 中声明了 Back
  • 从源代码定制 Android 彩信/短信应用程序?

    好的 这是交易 我想下载 Android 手机附带的彩信 短信应用程序的完整源代码 我希望能够对其进行修改 并向其添加一些自定义功能 我正在使用 Eclipse 进行开发 并且使用的是 Windows 7 我注意到现在有一 个适用于 Win
  • GCM 条款和条件

    有谁知道在哪里可以找到有关哪些内容可以通过 GCM 通知发送以及哪些内容不可以发送的条款和条件 我似乎在任何地方都找不到任何文档 当您注册开设 Google API 帐户时 您会得到这些条款和条件 https developers goog
  • 以编程方式创建进度绘制

    我有一个场景 我需要有大量的进度条可绘制对象 我无法为所有这些创建 xml 资源 因为我希望用户选择一种颜色 然后用于动态创建可绘制对象 下面是 xml 中的一个这样的可绘制对象 我如何以编程方式创建这个精确的可绘制对象
  • 使用自定义布局时 AlertDialog 按钮不可见

    我想要在弹出窗口中使用自定义布局 所以我使用了警报对话框 由于弹出窗口中的子视图数量是动态决定的 所以我使用了 ScrollView 现在 扭曲来了 当没有剩余空间并且滚动开始运行时 正向和负向按钮将变得不可见 下面是代码 AlertDia
  • 安装我的应用程序时的 android 意图

    安装我的应用程序时我需要执行一项操作 我研究过使用 Intent PACKAGE ADDED 但我没有收到正在安装的应用程序中的意图 我想在第一次安装我的应用程序时运行代码 该用例是注册在线服务 我可以列出 BOOT COMPLETED 如
  • 字符串包含相同的字符但仍然不同[重复]

    这个问题在这里已经有答案了 我正在尝试读取一个 txt 文件并使用每个句子作为团队的名称 同时使用该名称查找另一个 txt 文件以获取其内容 所有 txt 文件都位于我的资产文件夹的根目录中 第一个 txt 文件工作正常 我使用assetm
  • API 27 中 startActivityForResult 后崩溃

    更新到 API 27 和支持库 27 0 2 后 我突然在 Crashlytics 中得到了很多这样的堆栈跟踪 Fatal Exception java lang IllegalArgumentException at android os
  • 当按下 flutter 中编写的按钮时,有没有办法运行 python 脚本?

    本质上 我想做的是 按下我在 Flutter 中编程的按钮 当按下该按钮时 Python 脚本应该开始在我的 Android 设备上运行 我想在 python 中使用 youtube dl 用于下载 Youtube 视频 库 但我想知道是否
  • Android数据库访问设计方法

    我有一个关于数据访问的一般 Android 设计问题 我的应用程序中有许多活动需要访问 SQLite 数据库 为了将所有数据访问逻辑包装在一个地方 我创建了一个 DatbaseHandler 类来处理所有数据访问逻辑 此类负责构建 wher
  • Google Play Services V2 库中的 NoClassDefFoundError

    在按照以下步骤尝试使用 Google Play Services V2 库时 出现以下异常官方教程 https developers google com maps documentation android start java lang
  • SecurityException: getSerial: 用户 10134 不满足访问设备标识符的要求

    我想从 Android 手机获取 Build getSerial 在 Android O 之前 我需要 Manifest permission READ PHONE STATE 权限 但是在 Android 10 中我遇到了上述异常 我所做
  • 安卓应用安全

    我想开发一个用户数据非常敏感的应用程序 我是开发新手 所以不确定以下内容 技术对于安全或高效来说是必要的 请留下您的评论 提前致谢 为了额外的安全性 我们可以避开市场 游戏商店 并将应用程序安装在个人设备上 它会让它更安全吗 我必须在设备上
  • 根据内容对列表视图中的相似行进行分组

    i have a listview that displays a set of rows each row is clickable now i wish to group similar type of rows under one h

随机推荐

  • 如何在 Spring.Net 中配置 NULL 对象

    在我正在工作的特定项目中 有一个空日志服务对象是合适的 由于这是在 Spring Net 中配置的 因此如何将 spring net 对象配置为 null 这就是我想做的 是否可以
  • 如何使用 axios 下载包含多种类型文件的 zip

    在我的 vueJs 应用程序中 我有以下 axios POST api 调用 该调用应该返回我希望保存在 zip 文件夹中的多个文件 但是 当我使用以下 axios 方法时 我无法打开我的 zip 并且出现错误 提示 myfolder zi
  • 重写整个 git 历史记录

    很久以前 我在 github 上分叉了一个 repo 并对几个不相关的功能做了相当多的更改 当时我对 git 基本上一无所知 所以我的提交基本上只是 自上次以来我碰巧做过的事情 我记得提交的时间是 我想向上游贡献一些更改 但在我的存储库当前
  • Javascript 相当于 Rails try 方法

    在 Rails 中我可以这样做 x user try name 这个方法返回nil if user is nil else user name Here name是一个定义在user object 我知道可以使用if then else在
  • 强制 selenium 暂停并等待字段可用

    下面是我的 python 脚本中的一段代码 它读取一个 Excel 文件并将行中的单元格分配给一个变量 然后将该变量输入到浏览器中的字段中 它工作得很好 在大多数情况下 我想做的是在浏览器加载页面后设置某种循环以执行以下操作 通过某个 ID
  • 使用 Node.js 处理 SAML 的身份提供商端

    我需要实现一个应该能够实现的身份提供者服务 使用node js 获取 验证和解析 使用私钥和证书 来自 SP 的身份验证请求example https www samltool com generic sso req php 如果一切有效
  • 隐藏 C 结构体中的成员

    我一直在阅读有关 C 语言中的 OOP 的内容 但我从来不喜欢你不能像 C 中那样拥有私有数据成员 但后来我想到你可以创建 2 个结构 一种是在头文件中定义 另一种是在源文件中定义 in somestruct h typedef struc
  • PHP 语法高亮[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个PHP 语法高亮引擎可以定制 即我可以提供我的自己的分词器对于新语言 并且可以处理多种语
  • Python - 读取电子表格

    我需要知道的是 我可以让Python读取电子表格 最好是Microsoft Excel 然后解析信息并将其输入到方程中吗 它适用于赛马程序 其中多匹马的信息将位于一个 Excel 电子表格中的不同行或列中 我需要知道是否可以分别对每匹马进行
  • WooCommerce:向购物车中的每个项目添加输入字段

    我一直在尝试向购物车中的每个项目添加一个文本输入字段 并将用户输入提交到产品的元信息 已经2天了 我还没有成功 我的目标是 获取用户对添加到购物车中的每件商品的输入 在订单的元信息中显示该输入 在发送给客户的确认电子邮件中显示该输入 到目前
  • 密码保护数据库

    我使用 Entity Framework Core 1 0 在 C 桌面应用程序中管理 SQLite 数据库 如何使用密码保护数据库 我知道如何使用 NET 类 System Data SQLite 但是如何使用 Entity Framew
  • numpy 的复数问题

    我试图再次翻译一些 matlab 代码 但我遇到了另一个问题 代码本身非常简单 只是 4 节点旋转因子的演示 这是我的尝试 from numpy import from matplotlib import pyplot as plt x z
  • 如何使重定向视图跳转到django中的某个部分

    所以我的模板中有一个部分 div Comments go here div 现在我希望我的 django 重定向功能重定向到此页面并跳转到此 div id return redirect post detail post slug 我该放在
  • “event.layerX 和 event.layerY 在 WebKit 中已损坏并已弃用。”错误

    我刚刚将 Chrome 更新到版本 16 0 912 63 现在使用 jQuery 1 7 1 时出现数百个错误 似乎只要移动鼠标就会触发 event layerX and event layerY are broken and depre
  • 避免与策略模式耦合

    我试图将策略模式应用于特定情况 但遇到了如何避免将每个具体策略耦合到为其提供数据的上下文对象的问题 以下是模式的简化情况 该模式以几种不同的方式发生 但应以类似的方式处理 我们有一个对象Acquisition它提供与特定时间框架相关的数据
  • Visual Studio 2008 HTML 格式 - 它是否有效?

    这是另一个 Visual Studio 2008 HTML 格式问题 我想我要么在臭名昭著的糟糕 VS HTML 格式中发现了一个错误 要么我做错了什么 这就是我正在做的 我通过以下方式删除所有客户端标签 工具 gt 选项 gt 文本编辑器
  • CIImage 范围以像素或点为单位?

    我正在使用 CIImage 虽然我知道它不是线性图像 但它确实保存了一些数据 我的问题是 CIImage 的范围属性是否返回像素或点 根据文档 https developer apple com reference coreimage ci
  • 在包含中使用 $_SERVER['DOCUMENT_ROOT'] 是个好主意吗?

    例如 这是一个好主意吗 require once SERVER DOCUMENT ROOT include php 如果您在同一台服务器上有两个虚拟主机 一个用于实时 一个用于开发 并且具有不同的 Apache DocumentRoots
  • 用于生成和查看 Azure 块 Blob 和 Azure 文件共享的 SAS(共享访问签名)的工具或使用示例

    我正在寻找一个工具或使用示例来生成和查看 Azure Block Blob 和 Azure 文件共享的 SAS 共享访问签名 有很多块 Blob 和容器的示例 但 Azure 文件共享 SAS 示例或工具呢 创造能力Shared Acces
  • 使用 Android NDK 的本机代码的代码覆盖率

    我正在使用 Android NDK r16 为我的 Android 项目构建本机代码 我希望能够获得本机单元测试的代码覆盖率 这可能吗 根据我的研究 Android 中似乎没有默认提供此功能 我们需要在 Clang 中使用自定义编译器 链接