第6.2节 Android Agent制作<三>

news/2025/9/23 20:32:53/文章来源:https://www.cnblogs.com/ljbguanli/p/19108004

第6.2节 Android Agent制作<三>

6.2.2 覆盖率文件解析jacoco-parser

由于移动端的特殊性,jacoco插件无法直接在java项目中直接引用,然后解析覆盖率文件。于是就开发了一下android端的工具 ,打包成jar包来解析覆盖率文件。

1,项目整体情况

早期这个工具只有EC文件解析功能,后来做覆盖率合并的时候,我又添加上了覆盖率数据的去除和添加功能,形成jacoco-parser2.0.jar,针对这个工具的功能,会有另外的文章介绍,此处只介绍覆盖率EC文件的解析。

2,覆盖率文件解析类

通过在项目中添加jacoco插件,然后引用插件的类处理EC文件,根据探针解析出对应的覆盖率数据在文件中的行,再反查对应的函数,输出为json文件。
i
import com.google.gson.Gson
import org.jacoco.core.analysis.Analyzer
import org.jacoco.core.analysis.CoverageBuilder
import org.jacoco.core.analysis.ICounter
import org.jacoco.core.tools.ExecFileLoader
import java.io.File
/*******************************************************************************
*  Read jacoco exec file, java class file, and source file to produce coverage lines.
* @author songxianfeng@kuaishou.com
*/
data class CoverageInfo(
val filename: String,
var covered: Set,
var nocovered: Set
)
class JacocoParserOperation {
val Covered = setOf(ICounter.FULLY_COVERED, ICounter.PARTLY_COVERED)
val NoCovered = setOf(ICounter.NOT_COVERED)
fun readJacocoECFileContent(ecFileNames:Array,classesDir:File,sourceDir: Array,output: File){
val ecFileLoader = ExecFileLoader()
for (file in ecFileNames) {
ecFileLoader.load(file)
}
val coverageBuild = CoverageBuilder()
val analyzer = Analyzer(ecFileLoader.executionDataStore, coverageBuild)
analyzer.analyzeAll(classesDir)
val sourceFileGroup = sourceDir.map {
it.walk().filter { file -> file.isFile }.toSet()
}.fold(setOf()) { s, e -> s + e}.groupBy { it.name }
val bundle = coverageBuild.getBundle("")
val coverageMap = mutableMapOf()
bundle.packages.map { pkg ->
//println("${pkg.name} - ${pkg.sourceFiles} - ${pkg.lineCounter}")
for (c in pkg.classes) {
val sourceFile =
sourceFileGroup[c.sourceFileName]?.findLast { f -> f.path.indexOf(c.packageName) > 0 } ?: continue
var coverageInfo = coverageMap[sourceFile.toString()]
if (coverageInfo == null) {
coverageInfo = CoverageInfo(sourceFile.toString(), setOf(), setOf())
}
//                println("class: ${c.name}, source: ${c.sourceFileName}")
for (i in c.firstLine..c.lastLine) {
if (c.getLine(i).status in Covered) {
coverageInfo.covered += i
} else if (c.getLine(i).status in NoCovered) {
coverageInfo.nocovered += i
}
}
coverageMap[sourceFile.toString()] = coverageInfo
}
}
//        coverageMap.forEach { (k, v) -> println("$k -> $v") }
val gson = Gson()
val content = gson.toJson(coverageMap)
output.writeText(content)
}
}

3,工具使用方法

(1)先对项目进行打包
在项目根目录下执行以下命令:
./grwdlew jar

(2)调用工具解析文件
java -jar ./build/libs/jacoco-parser-2.0-SNAPSHOT.jar
-e /Users/***/first_merged.ec
-c /Users/****/build_classes_8900
-s /Users/****/packages
-o /*****/ecparse.json
  • -e 指定EC文件路径
  • -c 项目源码文件对应的类文件
  • -s 项目的源码文件路径
  • -o 解析后的输出结果,格式为{"文件路径":[函数列表],"文件路径1":[函数列表1]}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专业外贸网站制作价格网络商城需要什么资质

Jenkins如何创建管理员用户? 接上一篇:企业实战04_Jenkins安装推荐插件https://blog.csdn.net/weixin_40816738/article/details/90383700 文章目录1. 创建管理员用户2. 请求地址Windows和Linux2.1. Windows的浏览器访问地址:2.2. Linux的浏览…

...温岭做网站企业宣传ppt案例欣赏

非原创,来源网络。感谢原作者奉献如此精彩文章。原文地址:http://www.jianbitou.com/post/20_websites-learn-master-css.html1. A List Apart CSS Topics A List Apart是一个CSS优秀文章的收集网站,从1999年开始收集文章,关注最佳…

中国建材工程建设协会网站网站建设课程设计心得

support-v4.jar是support library。路径为<sdk>/extras/android/support/v4/android-support-v4.jar.转载于:https://www.cnblogs.com/Magina-learning/p/7899788.html

建设厅网站初始数据入库html5 门户网站模版

选择编程语言需要考虑多个方面&#xff0c;包括语言的特性、社区支持、工作机会、学习曲线等。下面是关于Python Go和Rust的一些介绍。 1.基本语法 1. Python: Python 是一种脚本语言&#xff0c;以简洁、易读的语法著称。以下是 Python 的基本语法示例&#xff1a; # Hello…

做网站的大小wordpress如何去除分类

箭头函数是 es6 提出的this 指针指向 定义箭头函数的全局上下文或函数上下文&#xff0c;是固定的call\apply\bind无法改变箭头函数的this没有 arguments 对象&#xff0c;但是可以访问外部作用域中的 arguments 对象没有 prototype 属性不能用作 generator 函数&#xff0c;不…

珠海市手机网站建设公司WordPress众筹模板

文章目录 程序安全退出执行代码的基本:信号拦截执行代码的改进:信号拦截包装器实践捕获键盘输入示例代码go-svc介绍程序及服务的控制是指在计算机系统中对程序和服务进行管理、监控和调控的过程。这个过程可以涉及到多个方面,包括资源管理、运行状态监测、安全性控制等。本质…

怎么做网站能够增加人气网站开发分层

最近在做那个测试框架的时候发现 Python 的另一个获得系统执行命令的返回值和输出的类。 最开始的时候用 Python 学会了 os.system() 这个方法是很多比如 C&#xff0c;Perl 相似的。 os.system(cat /proc/cpuinfo) 但是这样是无法获得到输出和返回值的&#xff0c;继续 Goog…

权威的顺德网站建设济南软件公司排名

1.分为三类 健康的桃子叶片 &#xff0c;251张 桃疮痂病一般&#xff0c;857张 桃疮痂病严重&#xff0c;770 张 2. GUI界面识别效果和predict.py识别效果如视频所示桃子叶片病害识别&#xff08;Python代码&#xff0c;pyTorch框架&#xff0c;深度卷积网络模型&#xff0…

个人网站备案电话访谈有哪些好的网站模版

这些人的赚钱思路是真灵活&#xff01; 这几天刷到艾维奇采访之昊的视频&#xff0c;做口语教育真赚钱&#xff0c;lv的包包随便买&#xff0c;住大房子&#xff0c;三辆车&#xff0c;有评论晒图一个九百的课&#xff0c;卖了1.3万份&#xff0c;直接千万到账。 然后我又想到…

seo是什么?东莞网站seo方法

分享嘉宾&#xff1a;卞东海 百度 高级研发工程师编辑整理&#xff1a;蒋郭鑫 河海大学出品平台&#xff1a;DataFunTalk导读&#xff1a;由于大数据时代的发展&#xff0c;知识呈指数级增长&#xff0c;而知识图谱技术又在近年来逐步火热&#xff0c;因此诞生了利用知识图谱技…

淘宝网站开发类目没法上架商品平台网站建设所需资质

1.3 List(列表)列表由一系列按特定顺序排列的元素组成。在Python中&#xff0c;用方括号[ ]来表示列表&#xff0c;并用逗号来分隔其中的元素。1.3.1 访问列表元素在Python中&#xff0c;第一个列表元素的索引为0&#xff0c;而不是1。>>> bicycles [trek, cannondal…

LVS 服务器 知识

LVS 服务器 集群 集群分类按分发器类型分 – LVS集群 – Nginx集群 – haproxy集群 – F5集群按业务类型分 – web集群 – 数据库集群 – 缓存集群 – …按功能分类:负载均衡集群 – LBC: 分担服务的总体压力 高可用…

万网站长上海网站推广营销设计

sys.default_constraints 是 SQL Server 的系统视图&#xff0c;它包含了数据库中所有默认约束的信息。默认约束是数据库对象&#xff08;如表中的列&#xff09;的约束&#xff0c;它为列定义了一个默认值&#xff0c;当在插入新行时没有为该列提供值时&#xff0c;将使用这个…

服装行业做推广网站wordpress 图片集

本文详解的讲解了使用IDEA创建Maven项目&#xff0c;及Maven的基础入门。 1、打开IDEA&#xff0c;右上角选择File->New->Project 2、如图中所示选择Maven&#xff08;可按自己所需添加&#xff0c;否则加载时速度很慢&#xff09; 3、添加项目所需Groupld,ArtifactId,Ve…

企业网站模板psd如何制作有关西安的网站

Safari浏览器&#xff1a; 1.safari执行history.go(-1);需要添加return false; Chrome浏览器 1.Chrome浏览器要预读图片&#xff0c;需要通过对图片的预加载。注&#xff1a;预加载前一定要将<img>加入<body> 1 /* 预加载图片 node-<img> func-回调函数 *…

市场调研数据网站深圳手机网站模板

官方链接&#xff1a;空间锚点 | PICO 开发者平台 注意&#xff1a;该功能只能打包成APK在PICO 4 Ultra上真机运行&#xff0c;无法通过串流或PICO developer center在PC上运行。使用之前要开启视频透视。 在 Inspector 窗口中的 PXR_Manager (Script) 面板上&#xff0c;勾选…

江门网站建设费用关于网站开发中网站上传

在 React 中&#xff0c;props&#xff08;属性&#xff09;用于在组件之间传递数据。它是父组件向子组件传递信息的一种方式&#xff0c;通过 props&#xff0c;父组件可以向子组件传递数据、回调函数、配置项等。 注意&#xff1a; props 是只读的&#xff0c;它的值由父组件…

电商平台网站建设功能介绍网站建设有什么需求

一般的深度学习项目&#xff0c;训练时为了加快速度&#xff0c;会使用多GPU分布式训练。但在部署推理时&#xff0c;为了降低成本&#xff0c;往往使用单个GPU机器甚至嵌入式平台&#xff08;比如 NVIDIA Jetson&#xff09;进行部署&#xff0c;部署端也要有与训练时相同的深…

wordpress登录入口链接长春seo网站建设费用

JavaScript的基本数据类型 以下都是JS内置的几种类型 数据类型描述number数字&#xff0c;不区分整数和小数string字符串类型booleantrue 真, false 假undefined表示未定义的值null只有唯一的值 null&#xff0c;表示空值 number 数字类型 JavaScript 中不区分整数和浮点数&…

【有源码】基于LTM模型+大素材的电信客户流失数据分析系统-基于机器学习的电信客户流失预测与分析框架-基于客户画像的电信流失用户识别与分析平台

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …