Android 性能优化 之 插桩日志分析

动态插桩技术实战:从Pin到DynamoRIO的C++程序运行时分析 动态插桩(Dynamic Binary Instrumentation, DBI)是一种在程序运行时动态注入分析代码的技术,它基于即时编译(JIT)原理,在不修改源代码的前提下实现对程序行为的深度监控。这项技术的核心价值在于为软件性能剖析、安全漏洞检测和逆向工程提供了强大的运行时洞察能力。通过框架如Intel Pin或DynamoRIO,开发者可以编写工具来跟踪函数调用、分析内存使用或进行指令级污点分析,广泛应用于性能优化、软件调试和安全研究领域。本文聚焦于利用DBI框架对C++程序进行运行时分析,详细对比 阅读详情

为了更加精确的追踪方法调用,优化性能,可以通过 Debug 类生成插桩日志,在 Profiler 面板中导入后进行分析。

一、生成插桩日志

1. 工具类封装


/**
 * 在需要开始跟踪的地方调用如下代码,将生成的文件保存在指定目录中
 * @param context 使用指定的上下文生成跟踪文件目录和名称
 */
fun startTrack(context: Context) {
    val name = context.javaClass.simpleName
    val path: String = context.filesDir.path + "/track-${System.currentTimeMillis()}-$name.trace"
    "path====> $path".logD()
    Debug.startMethodTracing(path)
}

/**
 * 结束跟踪
 */
fun stopTrack() {
    Debug.stopMethodTracing()
}

2. 示例中调用


/** 点击界面上的一个按钮,开始追踪 */
viewBinding.button.setOnClickListener {
    startTrack(this)
    viewModel.sleepOnMainThread()
    stopTrack()
}

3. 模拟耗时


/** 在主线程睡眠2秒,模拟耗时操作 */
fun sleepOnMainThread() {
     kotlin.runCatching {
         Thread.sleep(2000)
     }
}


二. 导出日志,分析数据

1. 在 Device File Explorer 面板中找到自己的应用目录下的 xxx.trace 文件,右键 Save as 保存到自己指定的目录中,比如桌面


// 例如我在示例中生成的文件路径
/data/data/com.william.easykt/files/track-1661176701787-ProfilerActivity.trace

导出操作如下图:
trace文件截图

2. 然后打开 Profiler 面板,点击 “+” 号,选择 “Load from file…”,将上述文件导入,完成后就可以进行日志分析了

导入trace文件示意图


3. 导入成功后图例

  • 左边红框中截选了主线程 main 中的方法调用轨迹图
  • 右边红框对应的是主线程 main 中的方法调用明细数据

trace文件导入成功后的图例


4. 分析数据

  • 从下图中,可以看到方法调用的执行轨迹,从上到下,分发事件,响应按钮点击,最后执行 ProfilerViewModel 的 sleepOnMainThread() 方法,可以看到右边的时间明细为2s。

数据分析

  • 现在我们按照如下修改,将模拟的耗时操作放在子线程中,重新 run 生成日志

fun sleepOnWorkThread() {
    thread {
        kotlin.runCatching {
            Thread.sleep(2000)
        }
    }
}

  • 通过重新生成的日志数据,可以观察到点击操作的耗时缩短到了 2.23ms

新生成的日志截图

以上只是一个简单的示例。在实际复杂场景中,我们可以在需要的地方加入插桩日志,这样就能更方便直观的分析性能,从而改善应用体验。


附 Github 源码

DebugUtil.kt

ProfilerActivity.kt

UE5安卓打包实战:从环境配置到性能优化的完整指南 移动应用开发中,跨平台部署是将高性能应用推向更广用户群体的关键环节。其核心原理在于通过特定的工具链和配置,将桌面级开发环境构建的应用,适配到移动设备的硬件架构与操作系统上。这一过程的技术价值在于能够复用成熟的开发框架和资源,显著提升复杂图形应用(如游戏、实时交互应用)的开发效率。在应用场景上,它广泛应用于游戏、AR/VR、工业仿真等需要高性能图形渲染的领域。以虚幻引擎5(UE5)项目为例,将其打包为安卓APK,就涉及环境配置、项目优化、性能调优等一系列工程实践。本文聚焦于UE5安卓打包流程,详细解析如何通过 阅读详情

相关推荐

Android ANR日志分析与实战优化

ANR日志是Android系统在检测到应用无响应时自动生成的诊断文件,通常包含主线程状态、堆栈信息、系统资源使用情况等关键信息。这些信息对于定位问题代码至关重要。ANR日志分析是一项系统性工程,需要开发者具备扎实的Android系统知识和良好的日志阅读能力。通过本章的逐步讲解,开发者应能够掌握以下能力:快速识别ANR发生的时间点与上下文;准确定位主线程堆栈与阻塞位置;理解关键线程状态与锁竞争情况;结合实际案例,深入分析ANR的根本原因。

weixin_34163588的博客 1196

Android 编译插桩操纵字节码

自定义 Gradle 插件、Transform API 的使用、ASM 的使用

j18874964028sss的博客 781

Android蓝牙开发实战:基于日志分析的问题排查与性能优化

当你怀疑是硬件或固件问题时,可以抓取HCI层原始通信数据:# 开启btsnoop日志# 执行操作后拉取日志用Wireshark打开后筛选hci_cmd和hci_event,重点关注:→ 是否发出?→ 是否收到回应?如果没有前者,说明Java层就没下发命令;如果有前者无后者,那就是射频链路问题,可能是天线设计缺陷或干扰严重。经过这一番深入剖析,我们可以提炼出一套应对蓝牙问题的“黄金法则”:永远异步处理:无论是开启、扫描还是配对,都要做好长时间等待的心理准备。

weixin_42437253的博客 1091

android 日志记录工具,通过应用插桩生成跟踪日志

如需生成应用执行的方法跟踪,您可以使用 CPU 性能剖析器查看各个跟踪日志。此外,您还可以在 CPU 性能剖析器中开始和停止跟踪,无需对应用的代码进行插桩。在开始生成跟踪日志之前,请确保您的应用已添加逻辑,以将跟踪日志保存到应用专属目录中。检测您的应用如需创建跟踪日志,请在您希望系统开始记录跟踪数据的位置调用在调用中,您可以指定 .trace 文件的名称,系统会将它保存到一个特定于软件包的目录中。...

weixin_34140828的博客 454

k最近邻算法——电影分类及案例详解

如图3-7所示,若将国际象棋棋盘放在二维直角坐标系中,格子的边长定义为1,坐标的x轴及y轴和棋盘方格平行,原点恰落在某一格的中心点,则王从一个位置走到其他位置需要的步数恰为二个位置的切比雪夫距离,因此切比雪夫距离也称为棋盘距离。关于这里的距离度量,这个电影分类的例子有2个特征,也就是2维的,可以使用我们高中学过的两点距离公式(两点距离公式其实就是欧氏距离在二维空间上的公式,也就是欧氏距离n的值为2的情况,欧氏距离也称为欧几里德距离)来计算距离,如图3-3所示。对数据进行归一化,避免量纲对计算距离的影响。

ZhShy 4555

TWINCAT3保姆级教程:手把手教你给Ecat从站烧录EEPROM(含XML配置避坑指南)

本文提供TWINCAT3环境下Ecat从站EEPROM烧录的完整教程,涵盖XML配置避坑指南。详细讲解环境准备、设备扫描、XML文件配置、EEPROM烧录流程及故障排查,帮助工程师高效解决设备识别问题,提升产线调试效率。

weixin_30693683的博客 516

android.util.Log

多初次接触Android开发的朋友会遇到调试的问题,如何能够根据错误提示迅速的找到“出事地点呢”?在Eclipse+ADT的开发环境中没有好的直接跟踪对象内容的方法,通过使用android.util.Log类可以帮助你自己查找错误和打印系统日志消息。它是一个进行日志输出的API,我们在Android 程序中可以随时为某一个对象插入一个Log,然后在DDMS中观察Logcat的输出是否正常。 

乐吾天 2344

FDTD仿真进阶:液晶偏振调控与双折射效应全解析

本文深入解析了在Lumerical FDTD仿真中如何对液晶材料进行偏振调控与双折射效应建模。通过单轴液晶和螺旋扭曲液晶(TN-LCD)两大实战案例,详细阐述了从各向异性材料参数设置、LC网格属性配置到偏振椭圆分析的全流程,帮助工程师精准模拟液晶的光开关行为,优化如显示器等器件的光学性能。

chair的专栏 745

Android插桩探索

字节码插桩可以通过修改“.class”的 Java 字节码实现,也可以通过修改“.dex”的 Dalvik 字节码实现,这取决于我们使用的插桩方法。相对于 Java 文件方式,字节码操作方式功能更加强大,应用场景也更广,但是它的使用复杂度更高

qq_38490134的博客 1330

OpenEuler内核编译及替换

一、内核源码下载 在gitee上下载OpenEuler内核源码 下载地址 选择需要的内核版本源码压缩包进行下载 二、内核编译 1.解压缩 将下载好的源码进行解压 tar xvf openeuler-kernel-4.19.90-2107.1.0.tar.gz 2.清理源代码树 解压后得到一个名为kernel的内核源码文件夹,进入后执行命令 make mrproper 清理过去内核编译产生的config,第一次编译时可不执行此命令 3.生成内核配置文件.config 先将将系统原配置文件拷贝过来,原

m0_56602092的博客 2万+

解决用加速器以后,电脑无法连接网络的问题

相信很多朋友也遇到过,用加速器以后,电脑网络直接断了,或者访问外网时打不开的情况解决办法是。

qq_46368050的博客 1万+

终极逆向插桩日志框架,让浏览器崩溃成为历史!

首先问小伙伴一个问题,你们在插桩逆向日志工程中,有没有遇到过以下问题?1、日志过多时,搜索关键词卡顿,甚至浏览器崩溃2、碰到window等循环引用对象,导致分析困难3、每次需要手动处理数据类型,如objectfunctionwindow等3、如果一次日志分析不成功,下次还需要重新插桩,重新运行打印日志,耗时耗力4、如果需要多次日志对比分析,浏览器日志更难做到1、日志过多时,比如50万条日志数据,支持自动日志文件下载存储,避免浏览器崩溃3、支持对objectfunctionwindow。

小鱼神1024的博客 3415

贴片二极管SOD封装详解:SOD-123/323/523尺寸焊盘设计要点

表面贴装技术中,二极管封装尺寸直接决定PCB布局与焊接可靠性。SOD封装作为小外形二极管的主流形态,其SOD-123、SOD-323、SOD-523三种规格分别对应不同的功耗与占板面积权衡。理解封装尺寸、焊盘设计计算逻辑和钢网开窗原理,是避免立碑、虚焊等工艺缺陷的关键。在可穿戴设备、电源保护等空间受限场景中,合理选择封装不仅能优化散热路径,还能提升量产良率。本文从焊盘计算、工艺要点到选型策略,全面解析SOD封装的工程实践。

weixin_42520780的博客 300

【性能优化】安卓性能优化之CPU优化

ANR(Application Not Responding)的监测原理本质上是消息机制,设定一个delay消息,超时未被移除则触发ANR。具体逻辑处理都在system server端,包括发送超时消息,移除超时消息,处理超时消息以及ANR弹框展示等;Service ANR:前台20s,后台200s;/sys/devices/system/cpu 目录下的文件夹。ContentProvider ANR:10s,少见。Broadcast ANR:前台10s,后台60s。通过排查布局,减少过度绘制。

weixin_41802023的博客 1782

05GATK流程和找变异

05GATK流程和找变异 GATK 集合了一套功能全面的高通量测序数据基因组分析工具包,算是业界的权威,更新的速度非常快。需要注意的是,不同版本的 GATK 在工具应用上会有些许不同。这里我们使用是最新版本 GATK 4.1.4.1(截止2019年12月31日)。 数据准备 前面我们提到了,走GATK流程需要到官网下载很多数据库文件,比如下面这些: dbsnp_146.hg38.vcf.gz dbsnp_146.hg38.vcf.gz.tbi Mills_and_1000G_gold_standard.

qq_23435961的博客 1660

VMP与JSVMP原理剖析:从代码虚拟化到插桩调试实战

代码虚拟化是软件保护领域的重要技术,通过将原始指令转换为自定义字节码,由虚拟机解释执行,从而提升逆向分析难度。VMP(VMProtect)应用于原生程序,而JSVMP则延伸至JavaScript场景,给前端加密和小程序加固带来新的防护思路。理解虚拟机的核心结构——字节码、虚拟机核心、指令处理器与分派器,是掌握该技术的前提。插桩调试作为关键分析手段,能够记录解释器执行过程中的指令流与栈快照,帮助开发者排查兼容性问题、验证加固效果。本文从一个可运行的简化JSVMP示例出发,演示代码虚拟化执行流程与插桩方法,并结

weixin_33957648的博客 362

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

2025安卓调试效率革命:LogcatReader让日志分析提速10倍的实战指南

在安卓开发的世界里,日志分析是每个开发者都绕不开的重要环节。无论是排查应用崩溃、优化性能,还是调试网络请求,高效的日志查看工具都能让我们的工作效率倍增。今天要介绍的LogcatReader,就是一款能够彻底改变你调试体验的终极工具! ## 🔍 为什么你需要LogcatReader? 传统安卓日志查看方式往往需要连接电脑、开启开发者模式,操作繁琐且效率低下。LogcatReader直接在设备上

gitblog_00416的博客 403

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android权限请求日志分析:EasyPermissions调试技巧

你是否曾遇到过这些权限相关的调试难题?应用在部分设备上频繁崩溃却找不到原因,权限对话框弹出时机总是不符合预期,或者用户明明授予了权限却依然提示"权限被拒绝"?Android权限系统(尤其是6.0 Marshmallow引入的运行时权限)的复杂性常常让开发者陷入困境。本文将通过12个实战案例,系统讲解如何利用EasyPermissions库的日志机制和调试技巧,将权限相关问题的排查时间从平均4小时缩...

gitblog_00001的博客 872

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android日志分析工具:提升效率与性能优化实践

日志分析是软件开发与测试中的基础环节,尤其在Android系统开发中,高效的日志处理能显著提升问题定位速度。通过自动化工具处理分散、混杂的日志文件,结合正则表达式和多模式串匹配技术(如Aho-Corasick算法),可以快速提取关键事件并计算时间间隔。这类工具在性能优化场景(如LCD亮屏耗时分析)中尤为实用,不仅能减少人工操作错误,还能通过并行处理和内存映射文件等技术提升处理效率。工程实践中,合理设计工具架构(如分层处理流水线)和选用高效库(如Apache Commons Compress)是确保工具稳定性

weixin_27869497的博客 335

【Android日志分析】EventLog

Android源码中有大量的EventLog日志,通过这个日志可以很简洁的呈现出系统的事件处理流程,包括时间,状态,便于我们分析定位问题。 命令 查看Event所有的tags adb shell cat /system/etc/event-log-tags 输出events日志信息 adb logcat -b events 该命令会输出带有时间点、进程号等信息的events log adb...

wuhuiyi10的专栏 2881

告别电脑束缚!手机端Android日志分析神器LogcatReader深度体验

# 告别电脑束缚!手机端Android日志分析神器LogcatReader深度体验 还在为调试Android应用必须连接电脑而烦恼吗?🎯 今天要介绍的LogcatReader将彻底改变你的调试方式——这是一款直接在手机上查看和分析日志的强大工具,让你随时随地都能进行高效调试! ## 🔥 为什么需要手机端日志工具? 传统Android开发中,查看日志需要: - 连接USB数据线 - 打开电

gitblog_00208的博客 1389

Android性能优化方法

性能优化

LuHsiang的博客 2888

Android开发进阶:性能优化与调试

本文从布局优化、内存优化、调试技巧和实践案例等方面,详细阐述了Android开发进阶中的性能优化与调试。性能优化与调试是提升Android应用性能、提升用户体验的关键环节。开发者应掌握这些技能,提高应用质量。深入研究Android性能优化技术,探索更多高效的方法和策略。分析不同类型应用的性能瓶颈,提出针对性的优化方案。研究新的调试工具和技术,提高性能优化的效率。通过不断学习和实践,相信开发者们能够在Android开发领域取得更高的成就。

2501_92487295的博客 378

安卓开发技术栈

安卓开发技术栈 主要从安卓开发基础和进阶两方面论述 基础 Java基础 符号集、数据类型、常量、变量、表达式语句 继承、多态,序列化 Android基础 四大组件及其生命周期 Activity Service Broadcast Receiver Content Provider 基本View的属性和使用,MD设计 事件体系:触摸、滑动、传递 绘制流程:MeasureSpec、Measure、layout、draw 动画机制:逐帧动画、补间动画、属性动画 资源访问,不同语言、屏幕、API适配原理 Handl

weixin_43625376的博客 4084

Android性能优化

性能优化1.性能优化方法1.布局优化2.绘制优化3.内存泄露优化4.响应速度优化5.ListView 优化6.Bitmap 优化7.线程优化8.性能优化建议2.ANR日志的分析方法3.内存泄漏分析工具MAT4.设计原则 1.性能优化方法 过多地使用内存会导致程序内存溢出,即OOM 过多地使用CPU资源,一般是指做大量的耗时任务,会导致手机变得卡顿甚至出现程序无法响应的情况,即ANR 1.布局优化 ...

梵高话葵 177
上一篇: 【iOS 开发】搜索栏控件 UISearchBar
下一篇: Android ImageView 设置圆角及外边框样式
Lucky_William
博客等级 码龄11年 161粉丝 57原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值