CN118260121A - 应用修复的方法、装置和电子设备 - Google Patents

应用修复的方法、装置和电子设备 Download PDF

Info

Publication number
CN118260121A
CN118260121A CN202211676659.XA CN202211676659A CN118260121A CN 118260121 A CN118260121 A CN 118260121A CN 202211676659 A CN202211676659 A CN 202211676659A CN 118260121 A CN118260121 A CN 118260121A
Authority
CN
China
Prior art keywords
application
binary
change
structured information
update
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202211676659.XA
Other languages
English (en)
Inventor
任文杰
尹永宏
金波
李英伟
王超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN118260121A publication Critical patent/CN118260121A/zh
Pending legal-status Critical Current

Links

Abstract

本申请实施例提供了一种应用修复的方法,当识别到由于第一变更导致的应用崩溃时,在电子设备的屏幕上显示第一弹窗,该第一弹窗用于提醒用户所述应用发生崩溃,还用于用户确认是否进行应用修复,该应用的变更包括N个变更,该N个变更包括该第一变更,其中,N为大于或等于1的正整数;响应于用户确认进行应用修复的操作,撤销该第一变更。该方法能够精准识别导致应用崩溃的崩溃点,再进一步基于该崩溃点进行应用修复,例如:当确定是补丁更新导致的应用发生崩溃时,能够撤销该补丁更新,能够避免过度修复,也即:当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。

Description

应用修复的方法、装置和电子设备
技术领域
本申请实施例涉及应用修复领域,并且更具体地,涉及一种应用修复的方法、装置和电子设备。
背景技术
随着电子技术的发展以及人们对应用的功能需求不断增多,电子设备所安装的应用的更新速度也越来越快,这也使得这些应用在使用过程中很容易出现应用崩溃,极大影响用户的使用体验。
发明内容
本申请提供一种应用修复的方法和电子设备,该方法能够精准识别导致应用崩溃的崩溃点,再进一步基于该崩溃点进行应用修复,例如:当确定是补丁更新导致的应用发生崩溃时,能够撤销该补丁更新,能够避免过度修复,也即:当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。
第一方面,提供一种应用修复的方法,该方法包括:当识别到由于第一变更导致的应用崩溃时,在电子设备的屏幕上显示第一弹窗,该第一弹窗用于提醒用户该应用发生崩溃,还用于用户确认是否进行应用修复,该应用的变更包括N个变更,该N个变更包括该第一变更,其中,N为大于或等于1的正整数;响应于用户确认进行应用修复的操作,撤销该第一变更。
可选地,该应用发生的N个变更可以包括补丁更新、插件更新和应用更新中的一种或多种。
可选地,该第一弹窗关联第一控件,该第一控件用于用户确认进行应用修复,例如:当用户点击该第一控件时,开始进行应用修复。
可选地,该第一弹窗关联第二控件,该第二控件用于用户取消进行应用修复,例如:当用户点击该第二控件时,取消进行应用修复。
本申请实施例中,当应用发生崩溃时,能够精确识别出导致应用发生崩溃的崩溃点(具体到应用的某一次变更),再进一步基于该崩溃点进行应用修复,例如:当确定是补丁更新导致的应用发生崩溃时,能够撤销该补丁更新,进而实现对应用的修复。该方法能够精准识别导致应用崩溃的崩溃点,能够避免过度修复,也即:当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。
结合第一方面,在一种可能的实现方式中,该第一变更包括补丁的第P更新、插件的第Q更新和应用更新中的任意一项或多项,其中,P、Q均为大于或等于1的正整数。
可选地,应用更新可以具体为应用的某一次版本更新(应用的第T更新,T为大于或等于1的正整数)。
可以理解:补丁的不同更新可以视为补丁的不同版本更新,例如:补丁的第一更新可以视为将补丁的01版本更新为02版本,补丁的第二更新可以视为将补丁的02版本更新为03版本;类似地,插件的不同更新和应用的不同更新也可以引用类似的解释。
本申请实施例中,当应用发生崩溃时,能够进一步精确识别出导致应用发生崩溃的崩溃点,该崩溃点能够具体到补丁(或插件或应用)的某一次版本更新,再进一步基于该崩溃点进行应用修复,例如:当确定是补丁的第一更新(01版本更新为02版本)导致的应用发生崩溃时,能够撤销该补丁更新,也就是卸载该补丁的02版本,将该补丁的版本恢复为01版本,进而实现对应用的修复。该方法能够精准识别导致应用崩溃的崩溃点,能够避免过度修复,也即:当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。
结合第一方面,在一种可能的实现方式中,该方法还包括:当识别到由于系统不稳定导致的应用崩溃时,在该电子设备的屏幕上显示第二弹窗,该第二弹窗用于提醒用户该应用发生崩溃,还用于用户确认是否重启该应用;响应于用户确认重启该应用的操作,重启该应用。
可选地,该第二弹窗关联第三控件,该第三控件用于用户确认重启该应用,例如:当用户点击该第三控件时,开始进行应用重启。
可选地,该第二弹窗关联第四控件,该第四控件用于用户取消重启该应用,例如:当用户点击该第四控件时,取消应用重启。
本申请实施例中,当出现由于系统不稳定导致应用发生崩溃的情况时,能够精确识别出导致应用发生崩溃的原因为系统不稳定,并进一步对该应用进行重启,以使得应用回到正常运行状态。这样,相比较于现有方案中的直接卸载应用的修复方案,该方法能够准确找到崩溃原因并进行精准修复,能够避免对应用的误修复,进而能够提升用户的使用体验。
结合第一方面,在一种可能的实现方式中,方法还包括:若重启该应用后,该应用连续崩溃,则在崩溃次数大于或等于第一阈值时,在电子设备的屏幕上显示第三弹窗,该第三弹窗用于提醒用户该应用发生连续崩溃,还用于用户确认是否卸载该应用;响应于用户确认卸载该应用的操作,卸载该应用。
可选地,第一阈值可以是根据用户输入确定的数值,也可以是系统自动确定的数值,例如可以是3、4、5中的任意一个数值。
可选地,该第三弹窗关联第五控件,该第五控件用于用户确认卸载该应用,例如:当用户点击该第五控件时,开始卸载该应用。
可选地,该第三弹窗关联第六控件,该第六控件用于用户取消卸载该应用,例如:当用户点击该第六控件时,取消应用卸载。
本申请实施例中,当出现由于系统不稳定导致应用发生崩溃的情况时,能够精确识别出导致应用发生崩溃的原因为系统不稳定,并进一步对该应用进行重启,以使得应用回到正常运行状态,若重启后应用仍然崩溃时,才会对该应用进行卸载。这样,相比较于现有方案中的直接卸载应用的修复方案,该方法能够准确找到崩溃原因并进行精准修复,能够避免对应用的误修复,进而能够提升用户的使用体验。
结合第一方面,在一种可能的实现方式中,方法还包括:向系统发送第一反馈信息,该第一反馈信息用于通知该系统是由于系统不稳定导致的应用崩溃。
本申请实施例中,当出现由于系统不稳定导致应用发生崩溃的情况时,可以及时通知系统,以使得系统做出进一步反应,例如:继续查找崩溃原因并进行修复。
第二方面,提供一种应用修复的方法,该方法包括:当发生应用变更时,获取结构化信息查询表,该结构化信息查询表中包括M个第二方法,还包括该M个第二方法中的每个第二方法所对应的变更单元,该变更单元包括补丁的第P更新、插件的第Q更新和应用更新中的任意一项,其中,M、P、Q均为大于或等于1的正整数;当识别到第一应用发生崩溃时,获取崩溃栈对应的第一结构化信息,该第一结构化信息包括第一方法、该第一方法的标识信息和该第一方法的版本信息中的一项或者多项;根据该结构化信息查询表和该结构化信息确定第一崩溃点;在电子设备的显示屏上显示第一弹窗,该第一弹窗用于用户确认是否进行应用修复;响应于用户确认进行应用修复的操作,基于该第一崩溃点,对该第一应用进行修复。
可选地,获取结构化信息查询表可以是:接收第一数据包,该第一数据包中包括该结构化信息查询表;然后根据该第一数据包获取结构化信息查询表(例如可以是通过解析该第一数据包,获取该结构化信息查询表)。
其中,第二方法是指变更的方法信息,包括第一关联方法、第一变更方法和第二关联方法中的一项或者多项,其中,第一关联方法是指与资源有依赖关系的二进制的常量索引到的方法;第一变更方法是指代码二进制的常量索引到的方法;第二关联方法是指依赖链接库的二进制的常量索引到的方法。
其中,第一方法是指崩溃栈对应的方法信息。
也可以描述为:
结构化信息查询表中包括补丁对应的结构化信息查询表、插件对应的结构化信息查询表和应用对应的结构化信息查询表中的一项或者多项。
可选地,补丁对应的结构化信息查询表中包括补丁的第一更新对应的结构化信息、补丁的第二更新对应的结构化信息、……、补丁的第N更新对应的结构化信息中的一项或者多项;插件对应的结构化信息查询表中包括插件的第一更新对应的结构化信息、插件的第二更新对应的结构化信息、……、插件的第N更新对应的结构化信息中的一项或者多项;应用对应的结构化信息查询表中包括应用的第一更新对应的结构化信息、应用的第二更新对应的结构化信息、……、应用的第N更新对应的结构化信息中的一项或者多项,其中,N为大于或等于1的正整数。
可选地,补丁的第N更新对应的结构化信息可以包括多个补丁的结构化信息;插件的第N更新对应的结构化信息可以包括多个插件的结构化信息。
其中,当变更的二进制为二进制资源时(即:与资源有依赖关系),变更的二进制对应的结构化信息包括该变更的二进制对应的第一关联方法(该第一关联方法为由该变更的二进制的常量索引到的方法);当变更的二进制为二进制代码时(即:与代码有依赖关系),变更的二进制对应的结构化信息包括该变更的二进制对应的第一变更方法(该第一变更方法为由该变更的二进制的常量索引到的方法);当变更的二进制为二进制依赖时(即:与链接库有依赖关系),变更的二进制对应的结构化信息包括该变更的二进制对应的第二关联方法(该第二关联方法为由该变更的二进制的常量索引到的方法)。
本申请实施例中,在应用发生变更时,会获取变更对应的结构化信息查询表,这样,当应用发生崩溃时,就可以将崩溃栈对应的结构化信息和该变更对应的结构化信息查询表进行对比,从而精确找出导致应用发生崩溃的崩溃点,再进一步基于该崩溃点进行应用修复,例如:当确定是补丁更新导致应用发生崩溃时,用户能够通过撤销该补丁更新,以实现对该应用的修复。该方法能够精准识别导致应用崩溃的崩溃点,能够避免过度修复,也即:当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。
结合第二方面,在一种可能的实现方式中,根据该结构化信息查询表和该结构化信息确定第一崩溃点,包括:根据该第一方法的标识信息和/或该第一方法的版本信息,在该结构化信息查询表中查询与该第一方法相匹配的第二方法;若在该结构化信息查询表中查询到与该第一方法相匹配的第二方法,则将该与第一方法相匹配的第二方法对应的变更单元确定为第一崩溃点。
可选地,根据该第一方法的标识信息,在该结构化信息查询表中查询与该第一方法相匹配的第二方法,若在该结构化信息查询表中查询到两个或两个以上与该第一方法相匹配的第二方法(此时精确到的变更单元,例如可以是:补丁的更新),则进一步根据该第一方法的版本信息,在该两个或两个以上与该第一方法相匹配的第二方法中查询与该第一方法的版本信息相匹配的第二方法,并将该与第一方法的版本信息相匹配的第二方法对应的变更单元确定为第一崩溃点(此时精确到的变更单元,例如可以是:补丁的第P更新)。
本申请实施例中,基于应用变更对应的方法信息和崩溃栈对应的方法信息,当应用发生崩溃时,可以将崩溃栈对应的方法信息与应用变更对应的方法信息进行匹配,只要能够在应用变更对应的方法信息中找到与崩溃栈对应的方法信息相匹配的方法信息,就能够精确找出导致应用发生崩溃的崩溃点(能够具体到版本更新),再进一步基于该崩溃点进行应用修复,例如:当确定是补丁更新导致应用发生崩溃时,用户能够通过撤销该补丁更新,以实现对该应用的修复。该方法能够精准识别导致应用崩溃的崩溃点,能够避免过度修复,也即:当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。
结合第二方面,在一种可能的实现方式中,基于该第一崩溃点,对该第一应用进行修复,包括:当确定该第一崩溃点为补丁的第P更新时,撤销该补丁的第P更新;当确定该第一崩溃点为插件的第Q更新时,撤销该插件的第Q更新;或,当确定该第一崩溃点为所述应用更新时,撤销该应用更新。
本申请实施例中,当应用发生崩溃时,能够进一步精确识别出导致应用发生崩溃的崩溃点,该崩溃点能够具体到补丁(或插件或应用)的某一次版本更新,再进一步基于该崩溃点进行应用修复,例如:当确定是补丁的第一更新(01版本更新为02版本)导致的应用发生崩溃时,能够撤销该补丁更新,也就是卸载该补丁的02版本,将该补丁的版本恢复为01版本,进而实现对应用的修复。该方法能够精准识别导致应用崩溃的崩溃点,能够避免过度修复,也即:当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。
结合第二方面,在一种可能的实现方式中,根据该结构化信息查询表和该结构化信息确定第一崩溃点,包括:根据该第一方法的标识信息和/或该第一方法的版本信息,在该结构化信息查询表中查询与该第一方法相匹配的第二方法;若在该结构化信息查询表中未查询到与该第一方法相匹配的第二方法,则确定该第一崩溃点为系统不稳定。
本申请实施例中,当出现由于系统不稳定导致应用发生崩溃的情况时,能够精确识别出导致应用发生崩溃的原因为系统不稳定,并进一步针对性对该应用进行修复,以使得应用回到正常运行状态。这样,相比较于现有方案中的直接卸载应用的修复方案,该方法能够准确找到崩溃原因并进行精准修复,能够避免对应用的误修复,进而能够提升用户的使用体验。
结合第二方面,在一种可能的实现方式中,基于该第一崩溃点,对该第一应用进行修复,包括:响应于用户确认重启该第一应用的操作,重启该第一应用;若重启该第一应用后,该第一应用连续崩溃,则在当崩溃次数大于或等于第一阈值时,响应于用户确认卸载该第一应用的操作,卸载该第一应用。
可选地,第一阈值可以是根据用户输入确定的数值,也可以是系统自动确定的数值,例如可以是3、4、5中的任意一个数值。
本申请实施例中,当出现由于系统不稳定导致应用发生崩溃的情况时,能够精确识别出导致应用发生崩溃的原因为系统不稳定,并进一步对该应用进行重启,以使得应用回到正常运行状态,若重启后应用仍然崩溃时,才会对该应用进行卸载。这样,相比较于现有方案中的直接卸载应用的修复方案,该方法能够准确找到崩溃原因并进行精准修复,能够避免对应用的误修复,进而能够提升用户的使用体验。
结合第二方面,在一种可能的实现方式中,方法还包括:向系统发送第一反馈信息,该第一反馈信息用于通知该系统第一崩溃点为系统不稳定。
本申请实施例中,当出现由于系统不稳定导致应用发生崩溃的情况时,可以及时通知系统,以使得系统做出进一步反应,例如:继续查找崩溃原因并进行修复。
结合第二方面,在一种可能的实现方式中,当识别到第一应用发生崩溃时,获取崩溃栈对应的第一结构化信息,包括:当识别到该第一应用发生崩溃时,获取系统的崩溃栈;获取该崩溃栈对应的所述第一结构化信息。
第三方面,提供一种应用修复的方法,该方法包括:生成第一数据包,该第一数据包包括结构化信息查询表,该结构化信息查询表包括M个第二方法,还包括该M个第二方法中的每个第二方法所对应的变更单元,该变更单元包括补丁的第P更新、插件的第Q更新和应用更新中的任意一项,其中,M、P、Q均为大于或等于1的正整数;发送该第一数据包,该第一数据包用于应用修复。
本申请实施例中,在应用发生变更时,会获取变更对应的结构化信息查询表,这样,当应用发生崩溃时,就可以将崩溃栈对应的结构化信息和该变更对应的结构化信息查询表进行对比,从而精确找出导致应用发生崩溃的崩溃点,再进一步基于该崩溃点进行应用修复,例如:当确定是补丁更新导致应用发生崩溃时,用户能够通过撤销该补丁更新,以实现对该应用的修复。该方法能够精准识别导致应用崩溃的崩溃点,能够避免过度修复,也即:当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。
结合第三方面,在一种可能的实现方式中,方法还包括:当发生应用变更时,通过聚类变更的二进制对应的结构化信息,获得该结构化信息查询表。
结合第三方面,在一种可能的实现方式中,通过聚类变更的二进制对应的结构化信息,获得结构化信息查询表,包括:当发生应用变更时,获取该变更的二进制;获取该变更的二进制对应的结构化信息;通过聚类该变更的二进制对应的结构化信息,获得该结构化信息查询表。
结合第三方面,在一种可能的实现方式中,获取所述变更的二进制,包括:根据该应用在变更前对应的二进制集合和该应用在变更后对应的二进制集合,确定该应用变更的最小单元;通过扫描该最小单元在变更前的对应的二进制集合和该最小单元在变更后对应的二进制集合,获取该变更的二进制。
结合第三方面,在一种可能的实现方式中,获取该变更的二进制对应的结构化信息,包括:获取该变更的二进制对应的第一形式的结构化信息,该第一形式的结构化信息是指静态的不同形态的结构化信息;将该第一形式的结构化信息转换为该结构化信息,该结构化信息是指同态、动态、可运行的代码形式的结构化信息。
本申请实施例中,在应用发生变更时,会获取变更的二进制对应的结构化信息,并且,将该结构化信息转换为后续步骤可识别的格式,能够为后续应用发生崩溃时,通过将崩溃栈对应的结构化信息和该变更的二进制对应的结构化信息进行对比,从而精确找出导致应用发生崩溃的崩溃点提供基础。
结合第三方面,在一种可能的实现方式中,获取所述变更的二进制对应的结构化信息,包括:通过对该应用在变更前对应的二进制进行结构化反解,得到变更前的二进制对应的结构化信息;通过对该应用在变更后对应的二进制进行结构后反解,得到变更后的二进制对应的结构化信息;通过将该变更前的二进制对应的结构化信息和该变更后的二进制对应的结构化信息进行对比,得到该变更的二进制对应的结构化信息。
结合第三方面,在一种可能的实现方式中,方法还包括:当该变更的二进制对应资源变更时,获取该变更的二进制对应的资源依赖关系;根据该资源依赖关系确定该变更的二进制对应的第二方法;当该变更的二进制对应代码变更时,获取该变更的二进制对应的代码依赖关系;根据该代码依赖关系确定该变更的二进制对应的第二方法;或,当该变更的二进制对应依赖变更时,获取该变更的二进制对应的依赖关系;根据该依赖关系确定所述变更的二进制对应的第二方法。
本申请实施例中,当应用发生变更时,获取该应用对应的变更的二进制,并将该变更的二进制与对应的方法(该变更的二进制的常量索引到的方法)联系起来,这样,就能够根据某一个具体的方法索引到与其对应的变更的二进制所对应的变更单元(补丁、插件或应用),从而能够精准识别到导致应用发生崩溃的崩溃点。
第四方面,提供一种应用修复的装置,该装置包括:获取模块,用于当发生应用变更时,获取结构化信息查询表,该结构化信息查询表中包括M个第二方法,还包括该M个第二方法中的每个第二方法所对应的变更单元,该变更单元包括补丁的第P更新、插件的第Q更新和应用更新中的任意一项,其中,M、P、Q均为大于或等于1的正整数;该获取模块,还用于当识别到第一应用发生崩溃时,获取崩溃栈对应的第一结构化信息,该第一结构化信息包括第一方法、该第一方法的标识信息和该第一方法的版本信息中的一项或者多项;确定模块,用于根据该结构化信息查询表和该结构化信息确定第一崩溃点;显示模块,用于在电子设备的显示屏上显示第一弹窗,该第一弹窗用于用户确认是否进行应用修复;修复模块,用于响应于用户确认进行应用修复的操作,基于该第一崩溃点,对该第一应用进行修复。
可选地,获取模块具体用于:接收第一数据包,该第一数据包中包括该结构化信息查询表,还可以具体用于根据该第一数据包(例如:解析该第一数据包),获取该结构化信息查询表。
其中,第二方法是指变更的方法信息,包括第一关联方法、第一变更方法和第二关联方法中的一项或者多项,其中,第一关联方法是指与资源有依赖关系的二进制的常量索引到的方法;第一变更方法是指代码二进制的常量索引到的方法;第二关联方法是指依赖链接库的二进制的常量索引到的方法。
其中,第一方法是指崩溃栈对应的方法信息。
也可以描述为:
结构化信息查询表中包括补丁对应的结构化信息查询表、插件对应的结构化信息查询表和应用对应的结构化信息查询表中的一项或者多项。
可选地,补丁对应的结构化信息查询表中包括补丁的第一更新对应的结构化信息、补丁的第二更新对应的结构化信息、……、补丁的第N更新对应的结构化信息中的一项或者多项;插件对应的结构化信息查询表中包括插件的第一更新对应的结构化信息、插件的第二更新对应的结构化信息、……、插件的第N更新对应的结构化信息中的一项或者多项;应用对应的结构化信息查询表中包括应用的第一更新对应的结构化信息、应用的第二更新对应的结构化信息、……、应用的第N更新对应的结构化信息中的一项或者多项,其中,N为大于或等于1的正整数。
可选地,补丁的第N更新对应的结构化信息可以包括多个补丁的结构化信息;插件的第N更新对应的结构化信息可以包括多个插件的结构化信息。
其中,当变更的二进制为二进制资源时(即:与资源有依赖关系),变更的二进制对应的结构化信息包括该变更的二进制对应的第一关联方法(该第一关联方法为由该变更的二进制的常量索引到的方法);当变更的二进制为二进制代码时(即:与代码有依赖关系),变更的二进制对应的结构化信息包括该变更的二进制对应的第一变更方法(该第一变更方法为由该变更的二进制的常量索引到的方法);当变更的二进制为二进制依赖时(即:与链接库有依赖关系),变更的二进制对应的结构化信息包括该变更的二进制对应的第二关联方法(该第二关联方法为由该变更的二进制的常量索引到的方法)。
本申请实施例中,在应用发生变更时,会获取变更对应的结构化信息查询表,这样,当应用发生崩溃时,就可以将崩溃栈对应的结构化信息和该变更对应的结构化信息查询表进行对比,从而精确找出导致应用发生崩溃的崩溃点,再进一步基于该崩溃点进行应用修复,例如:当确定是补丁更新导致应用发生崩溃时,用户能够通过撤销该补丁更新,以实现对该应用的修复。通过该装置,能够精准识别导致应用崩溃的崩溃点,能够避免过度修复,也即:当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。
结合第四方面,在一种可能的实现方式中,该确定模块具体用于:根据该第一方法的标识信息和/或该第一方法的版本信息,在该结构化信息查询表中查询与该第一方法相匹配的第二方法;若在该结构化信息查询表中查询到与该第一方法相匹配的第二方法,则将该与第一方法相匹配的第二方法对应的变更单元确定为第一崩溃点。
可选地,该确定模块根据该第一方法的标识信息,在该结构化信息查询表中查询与该第一方法相匹配的第二方法,若在该结构化信息查询表中查询到两个或两个以上与该第一方法相匹配的第二方法(此时精确到的变更单元,例如可以是:补丁的更新),则该确定模块进一步根据该第一方法的版本信息,在该两个或两个以上与该第一方法相匹配的第二方法中查询与该第一方法的版本信息相匹配的第二方法,并将该与第一方法的版本信息相匹配的第二方法对应的变更单元确定为第一崩溃点(此时精确到的变更单元,例如可以是:补丁的第P更新)。
本申请实施例中,基于应用变更对应的方法信息和崩溃栈对应的方法信息,当应用发生崩溃时,可以将崩溃栈对应的方法信息与应用变更对应的方法信息进行匹配,只要能够在应用变更对应的方法信息中找到与崩溃栈对应的方法信息相匹配的方法信息,就能够精确找出导致应用发生崩溃的崩溃点(能够具体到版本更新),再进一步基于该崩溃点进行应用修复,例如:当确定是补丁更新导致应用发生崩溃时,用户能够通过撤销该补丁更新,以实现对该应用的修复。该装置能够精准识别导致应用崩溃的崩溃点,能够避免过度修复,也即:当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。
结合第四方面,在一种可能的实现方式中,该修复模块具体用于:当确定该第一崩溃点为补丁的第P更新时,撤销该补丁的第P更新;当确定该第一崩溃点为插件的第Q更新时,撤销该插件的第Q更新;或,当确定该第一崩溃点为所述应用更新时,撤销该应用更新。
本申请实施例中,当应用发生崩溃时,能够进一步精确识别出导致应用发生崩溃的崩溃点,该崩溃点能够具体到补丁(或插件或应用)的某一次版本更新,再进一步基于该崩溃点进行应用修复,例如:当确定是补丁的第一更新(01版本更新为02版本)导致的应用发生崩溃时,能够撤销该补丁更新,也就是卸载该补丁的02版本,将该补丁的版本恢复为01版本,进而实现对应用的修复。该装置能够精准识别导致应用崩溃的崩溃点,能够避免过度修复,也即:当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。
结合第四方面,在一种可能的实现方式中,该确定模块还具体用于:根据该第一方法的标识信息和/或该第一方法的版本信息,在该结构化信息查询表中查询与该第一方法相匹配的第二方法;若在该结构化信息查询表中未查询到与该第一方法相匹配的第二方法,则确定该第一崩溃点为系统不稳定。
本申请实施例中,当出现由于系统不稳定导致应用发生崩溃的情况时,能够精确识别出导致应用发生崩溃的原因为系统不稳定,并进一步针对性对该应用进行修复,以使得应用回到正常运行状态。这样,相比较于现有方案中的直接卸载应用的修复方案,该装置能够准确找到崩溃原因并进行精准修复,能够避免对应用的误修复,进而能够提升用户的使用体验。
结合第四方面,在一种可能的实现方式中,该修复模块还具体用于:响应于用户确认重启该第一应用的操作,重启该第一应用;若重启该第一应用后,该第一应用连续崩溃,则在当崩溃次数大于或等于第一阈值时,响应于用户确认卸载该第一应用的操作,卸载该第一应用。
可选地,第一阈值可以是根据用户输入确定的数值,也可以是系统自动确定的数值,例如可以是3、4、5中的任意一个数值。
本申请实施例中,当出现由于系统不稳定导致应用发生崩溃的情况时,能够精确识别出导致应用发生崩溃的原因为系统不稳定,并进一步对该应用进行重启,以使得应用回到正常运行状态,若重启后应用仍然崩溃时,才会对该应用进行卸载。这样,相比较于现有的直接卸载应用的修复装置,该装置能够准确找到崩溃原因并进行精准修复,能够避免对应用的误修复,进而能够提升用户的使用体验。
结合第四方面,在一种可能的实现方式中,所述装置还包括:收发模块,用于向系统发送第一反馈信息,该第一反馈信息用于通知该系统第一崩溃点为系统不稳定。
本申请实施例中,当出现由于系统不稳定导致应用发生崩溃的情况时,可以及时通知系统,以使得系统做出进一步反应,例如:继续查找崩溃原因并进行修复。
结合第四方面,在一种可能的实现方式中,该获取模块还具体用于:当识别到该第一应用发生崩溃时,获取系统的崩溃栈;获取该崩溃栈对应的所述第一结构化信息。
第五方面,提供一种电子设备,该电子设备包括:生成模块,用于生成第一数据包,该第一数据包包括结构化信息查询表,该结构化信息查询表包括M个第二方法,还包括该M个第二方法中的每个第二方法所对应的变更单元,该变更单元包括补丁的第P更新、插件的第Q更新和应用更新中的任意一项,其中,M、P、Q均为大于或等于1的正整数;第一收发模块,用于发送该第一数据包,该第一数据包用于应用修复。
可选地,该电子设备可以是服务器,还可以是终端设备。
本申请实施例中,在应用发生变更时,会获取变更对应的结构化信息查询表,这样,当应用发生崩溃时,就可以将崩溃栈对应的结构化信息和该变更对应的结构化信息查询表进行对比,从而精确找出导致应用发生崩溃的崩溃点,再进一步基于该崩溃点进行应用修复,例如:当确定是补丁更新导致应用发生崩溃时,用户能够通过撤销该补丁更新,以实现对该应用的修复。该电子设备能够精准识别导致应用崩溃的崩溃点,能够避免过度修复,也即:当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。
结合第五方面,在一种可能的实现方式中,电子设备还包括:第一获取模块,用于当发生应用变更时,通过聚类变更的二进制对应的结构化信息,获得该结构化信息查询表。
结合第五方面,在一种可能的实现方式中,第一获取模块具体用于:当发生应用变更时,获取该变更的二进制;获取该变更的二进制对应的结构化信息;通过聚类该变更的二进制对应的结构化信息,获得该结构化信息查询表。
结合第五方面,在一种可能的实现方式中,第一获取模块还具体用于:根据该应用在变更前对应的二进制集合和该应用在变更后对应的二进制集合,确定该应用变更的最小单元;通过扫描该最小单元在变更前的对应的二进制集合和该最小单元在变更后对应的二进制集合,获取该变更的二进制。
结合第五方面,在一种可能的实现方式中,第一获取模块还具体用于:获取该变更的二进制对应的第一形式的结构化信息,该第一形式的结构化信息是指静态的不同形态的结构化信息;将该第一形式的结构化信息转换为该结构化信息,该结构化信息是指同态、动态、可运行的代码形式的结构化信息。
本申请实施例中,在应用发生变更时,会获取变更的二进制对应的结构化信息,并且,将该结构化信息转换为后续步骤可识别的格式,能够为后续应用发生崩溃时,通过将崩溃栈对应的结构化信息和该变更的二进制对应的结构化信息进行对比,从而精确找出导致应用发生崩溃的崩溃点提供基础。
结合第五方面,在一种可能的实现方式中,第一获取模块还具体用于:通过对该应用在变更前对应的二进制进行结构化反解,得到变更前的二进制对应的结构化信息;通过对该应用在变更后对应的二进制进行结构后反解,得到变更后的二进制对应的结构化信息;通过将该变更前的二进制对应的结构化信息和该变更后的二进制对应的结构化信息进行对比,得到该变更的二进制对应的结构化信息。
结合第五方面,在一种可能的实现方式中,第一获取模块还用于:当该变更的二进制对应资源变更时,获取该变更的二进制对应的资源依赖关系;根据该资源依赖关系确定该变更的二进制对应的第二方法;当该变更的二进制对应代码变更时,获取该变更的二进制对应的代码依赖关系;根据该代码依赖关系确定该变更的二进制对应的第二方法;或,当该变更的二进制对应依赖变更时,获取该变更的二进制对应的依赖关系;根据该依赖关系确定所述变更的二进制对应的第二方法。
本申请实施例中,当应用发生变更时,获取该应用对应的变更的二进制,并将该变更的二进制与对应的方法(该变更的二进制的常量索引到的方法)联系起来,这样,就能够根据某一个具体的方法索引到与其对应的变更的二进制所对应的变更单元(补丁、插件或应用),从而能够精准识别到导致应用发生崩溃的崩溃点。
第六方面,提供一种电子设备,该电子设备包括存储器和处理器,其中,存储器用于存储计算机程序代码,处理器用于执行存储于存储器中的计算机程序代码,以实现上述第一方面或第一方面中任一种可能实现方式中的方法,或,实现上述第二方面或第二方面中任一种可能实现方式中的方法。
第七方面,提供一种电子设备,该电子设备包括存储器和处理器,其中,存储器用于存储计算机程序代码,处理器用于执行存储于存储器中的计算机程序代码,以实现上述第三方面或第三方面中任一种可能实现方式中的方法。
结合第七方面,在一种可能的实现方式中,该电子设备为服务器或终端设备。
第八方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序或指令,当该计算机程序或指令被执行时,实现上述第一方面或第一方面中任一种可能实现方式中的方法,或,实现上述第二方面或第二方面中任一种可能实现方式中的方法,或,实现上述第三方面或第三方面中任一种可能实现方式中的方法。
第九方面,提供了一种芯片,其中存储有指令,当其在设备上运行时,使得所述芯片执行上述第一方面或第一方面中任一种可能实现方式中的方法,或,执行上述第二方面或第二方面中任一种可能实现方式中的方法,或,执行上述第三方面或第三方面中任一种可能实现方式中的方法。
附图说明
图1是本申请实施例提供的电子设备100的结构示意图;
图2是本申请实施例提供的电子设备100的软件结构框图;
图3是一种解决应用崩溃的方法的示意性流程图;
图4是又一种解决应用崩溃的方法的示意性流程图;
图5是本申请实施例提供的一种应用修复方法的应用场景图;
图6示出了本申请实施例提供的一种应用修复的方法的示意性流程图;
图7是本申请实施例提供的又一种应用修复的方法的示意性流程图;
图8是本申请实施例提供的一种获得结构化信息查询表的示意性流程图;
图9是本申请实施例提供的又一种获得结构化信息查询表的示意性流程图;
图10是本申请实施例提供的又一种获得结构化信息查询表的示意性流程图;
图11是本申请实施例提供的又一种获得结构化信息查询表的示意性流程图;
图12是本申请实施例提供的一种建立修复代码段内的映射表的流程示意图;
图13是本申请实施例提供的又一种获得结构化信息查询表的方法的示意性流程图;
图14是本申请实施例提供的一种建立二进制资源变更的映射表(映射至第一关联方法)的流程进行介绍;
图15是本申请实施例提供的又一种获得结构化信息查询表的方法的示意性流程图;
图16是本申请实施例提供的一种建立链接库变更(依赖变更)的映射表(映射至第二关联方法)的流程进行介绍;
图17是本申请实施例提供的又一种应用修复的方法的示意性流程图;
图18是本申请实施例提供的又一种应用修复的方法的示意性流程图;
图19是本申请实施例提供的第一结构化信息命中结构化信息查询表中的变更的二进制代码对应的第一变更方法的示意图;
图20是本申请实施例提供的一种第一结构化信息命中结构化信息查询表中的变更的二进制资源对应的第一关联方法的示意图;
图21是本申请实施例提供的一种第一结构化信息命中结构化信息查询表中的变更的链接库的示意图;
图22是本申请实施例提供的一种第一结构化信息命中结构化信息查询表中的变更的链接库对应的第二关联方法的示意图;
图23是本申请实施例提供的一种应用修复的装置的功能模块示意图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。显然,所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,在本申请实施例的描述中,“复数个”或者“多个”是指两个或多于两个。
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
本申请实施例提供的方法可以应用于手机、平板电脑、可穿戴设备、车载设备、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personal digital assistant,PDA)等电子设备上,本申请实施例对电子设备的具体类型不作任何限制。
示例性的,图1示出了电子设备100的结构示意图。电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户身份识别(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
其中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户身份识别(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
I2C接口是一种双向同步串行总线,包括一根串行数据线(serial data line,SDA)和一根串行时钟线(derail clock line,SCL)。在一些实施例中,处理器110可以包含多组I2C总线。处理器110可以通过不同的I2C总线接口分别耦合触摸传感器180K,充电器,闪光灯,摄像头193等。例如:处理器110可以通过I2C接口耦合触摸传感器180K,使处理器110与触摸传感器180K通过I2C总线接口通信,实现电子设备100的触摸功能。
I2S接口可以用于音频通信。在一些实施例中,处理器110可以包含多组I2S总线。处理器110可以通过I2S总线与音频模块170耦合,实现处理器110与音频模块170之间的通信。在一些实施例中,音频模块170可以通过I2S接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功能。
PCM接口也可以用于音频通信,将模拟信号抽样,量化和编码。在一些实施例中,音频模块170与无线通信模块160可以通过PCM总线接口耦合。在一些实施例中,音频模块170也可以通过PCM接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功能。所述I2S接口和所述PCM接口都可以用于音频通信。
UART接口是一种通用串行数据总线,用于异步通信。该总线可以为双向通信总线。它将要传输的数据在串行通信与并行通信之间转换。在一些实施例中,UART接口通常被用于连接处理器110与无线通信模块160。例如:处理器110通过UART接口与无线通信模块160中的蓝牙模块通信,实现蓝牙功能。在一些实施例中,音频模块170可以通过UART接口向无线通信模块160传递音频信号,实现通过蓝牙耳机播放音乐的功能。
MIPI接口可以被用于连接处理器110与显示屏194,摄像头193等外围器件。MIPI接口包括摄像头串行接口(camera serial interface,CSI),显示屏串行接口(displayserial interface,DSI)等。在一些实施例中,处理器110和摄像头193通过CSI接口通信,实现电子设备100的拍摄功能。处理器110和显示屏194通过DSI接口通信,实现电子设备100的显示功能。
GPIO接口可以通过软件配置。GPIO接口可以被配置为控制信号,也可被配置为数据信号。在一些实施例中,GPIO接口可以用于连接处理器110与摄像头193,显示屏194,无线通信模块160,音频模块170,传感器模块180等。GPIO接口还可以被配置为I2C接口,I2S接口,UART接口,MIPI接口等。
USB接口130是符合USB标准规范的接口,具体可以是Mini USB接口,Micro USB接口,USB Type C接口等。USB接口130可以用于连接充电器为电子设备100充电,也可以用于电子设备100与外围设备之间传输数据。也可以用于连接耳机,通过耳机播放音频。该接口还可以用于连接其他电子设备,例如AR设备等。
可以理解的是,本申请实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在本申请另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块140可以通过USB接口130接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块140可以通过电子设备100的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,外部存储器,显示屏194,摄像头193,和无线通信模块160等供电。电源管理模块141还可以用于监测电池容量,电池循环次数,电池健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块141也可以设置于处理器110中。在另一些实施例中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
天线1和天线2用于发射和接收电磁波信号。电子设备100中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
移动通信模块150可以提供应用在电子设备100上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实施例中,移动通信模块150的至少部分功能模块可以被设置于处理器110中。在一些实施例中,移动通信模块150的至少部分功能模块可以与处理器110的至少部分模块被设置在同一个器件中。
调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(不限于扬声器170A,受话器170B等)输出声音信号,或通过显示屏194显示图像或视频。在一些实施例中,调制解调处理器可以是独立的器件。在另一些实施例中,调制解调处理器可以独立于处理器110,与移动通信模块150或其他功能模块设置在同一个器件中。
无线通信模块160可以提供应用在电子设备100上的包括无线局域网(wirelesslocal area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器110。无线通信模块160还可以从处理器110接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
在一些实施例中,电子设备100的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得电子设备100可以通过无线通信技术与网络以及其他设备通信。所述无线通信技术可以包括全球移动通讯系统(global system for mobile communications,GSM),通用分组无线服务(general packet radio service,GPRS),码分多址接入(codedivision multiple access,CDMA),宽带码分多址(wideband code division multipleaccess,WCDMA),时分码分多址(time-division code division multiple access,TD-SCDMA),长期演进(long term evolution,LTE),BT,GNSS,WLAN,NFC,FM,和/或IR技术等。所述GNSS可以包括全球卫星定位系统(global positioning system,GPS),全球导航卫星系统(global navigation satellite system,GLONASS),北斗卫星导航系统(beidounavigation satellite system,BDS),准天顶卫星系统(quasi-zenith satellitesystem,QZSS)和/或星基增强系统(satellite based augmentation systems,SBAS)。
电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light-emittingdiode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrixorganic light emitting diode的,AMOLED),柔性发光二极管(flex light-emittingdiode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot lightemitting diodes,QLED)等。在一些实施例中,电子设备100可以包括1个或N个显示屏194,N为大于1的正整数。
电子设备100可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
ISP用于处理摄像头193反馈的数据。例如,拍照时,打开快门,光线通过镜头被传递到摄像头感光元件上,光信号转换为电信号,摄像头感光元件将所述电信号传递给ISP处理,转化为肉眼可见的图像。ISP还可以对图像的噪点,亮度,肤色进行算法优化。ISP还可以对拍摄场景的曝光,色温等参数优化。在一些实施例中,ISP可以设置在摄像头193中。
摄像头193用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。感光元件可以是电荷耦合器件(charge coupled device,CCD)或互补金属氧化物半导体(complementary metal-oxide-semiconductor,CMOS)光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给ISP转换成数字图像信号。ISP将数字图像信号输出到DSP加工处理。DSP将数字图像信号转换成标准的RGB,YUV等格式的图像信号。在一些实施例中,电子设备100可以包括1个或N个摄像头193,N为大于1的正整数。
数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当电子设备100在频点选择时,数字信号处理器用于对频点能量进行傅里叶变换等。
视频编解码器用于对数字视频压缩或解压缩。电子设备100可以支持一种或多种视频编解码器。这样,电子设备100可以播放或录制多种编码格式的视频,例如:动态图像专家组(moving picture experts group,MPEG)1,MPEG2,MPEG3,MPEG4等。
NPU为神经网络(neural-network,NN)计算处理器,通过借鉴生物神经网络结构,例如借鉴人脑神经元之间传递模式,对输入信息快速处理,还可以不断的自学习。通过NPU可以实现电子设备100的智能认知等应用,例如:图像识别,人脸识别,语音识别,文本理解等。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的App(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。
电子设备100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块170还可以用于对音频信号编码和解码。在一些实施例中,音频模块170可以设置于处理器110中,或将音频模块170的部分功能模块设置于处理器110中。
扬声器170A,也称“喇叭”,用于将音频电信号转换为声音信号。电子设备100可以通过扬声器170A收听音乐,或收听免提通话。
受话器170B,也称“听筒”,用于将音频电信号转换成声音信号。当电子设备100接听电话或语音信息时,可以通过将受话器170B靠近人耳接听语音。
麦克风170C,也称“话筒”,“传声器”,用于将声音信号转换为电信号。当拨打电话或发送语音信息时,用户可以通过人嘴靠近麦克风170C发声,将声音信号输入到麦克风170C。电子设备100可以设置至少一个麦克风170C。在另一些实施例中,电子设备100可以设置两个麦克风170C,除了采集声音信号,还可以实现降噪功能。在另一些实施例中,电子设备100还可以设置三个,四个或更多麦克风170C,实现采集声音信号,降噪,还可以识别声音来源,实现定向录音功能等。
耳机接口170D用于连接有线耳机。耳机接口170D可以是USB接口130,也可以是3.5mm的开放移动电子设备平台(open mobile terminal platform,OMTP)标准接口,美国蜂窝电信工业协会(cellular telecommunications industry association of the USA,CTIA)标准接口。
压力传感器180A用于感受压力信号,可以将压力信号转换成电信号。在一些实施例中,压力传感器180A可以设置于显示屏194。压力传感器180A的种类很多,如电阻式压力传感器,电感式压力传感器,电容式压力传感器等。电容式压力传感器可以是包括至少两个具有导电材料的平行板。当有力作用于压力传感器180A,电极之间的电容改变。电子设备100根据电容的变化确定压力的强度。当有触摸操作作用于显示屏194,电子设备100根据压力传感器180A检测所述触摸操作强度。电子设备100也可以根据压力传感器180A的检测信号计算触摸的位置。在一些实施例中,作用于相同触摸位置,但不同触摸操作强度的触摸操作,可以对应不同的操作指令。例如:当有触摸操作强度小于第一压力阈值的触摸操作作用于短消息应用图标时,执行查看短消息的指令。当有触摸操作强度大于或等于第一压力阈值的触摸操作作用于短消息应用图标时,执行新建短消息的指令。
陀螺仪传感器180B可以用于确定电子设备100的运动姿态。在一些实施例中,可以通过陀螺仪传感器180B确定电子设备100围绕三个轴(即,x,y和z轴)的角速度。陀螺仪传感器180B可以用于拍摄防抖。示例性的,当按下快门,陀螺仪传感器180B检测电子设备100抖动的角度,根据角度计算出镜头模组需要补偿的距离,让镜头通过反向运动抵消电子设备100的抖动,实现防抖。陀螺仪传感器180B还可以用于导航,体感游戏场景。
气压传感器180C用于测量气压。在一些实施例中,电子设备100通过气压传感器180C测得的气压值计算海拔高度,辅助定位和导航。
磁传感器180D包括霍尔传感器。电子设备100可以利用磁传感器180D检测翻盖皮套的开合。在一些实施例中,当电子设备100是翻盖机时,电子设备100可以根据磁传感器180D检测翻盖的开合。进而根据检测到的皮套的开合状态或翻盖的开合状态,设置翻盖自动解锁等特性。
加速度传感器180E可检测电子设备100在各个方向上(一般为三轴)加速度的大小。当电子设备100静止时可检测出重力的大小及方向。还可以用于识别电子设备姿态,应用于横竖屏切换,计步器等应用。
距离传感器180F,用于测量距离。电子设备100可以通过红外或激光测量距离。在一些实施例中,拍摄场景,电子设备100可以利用距离传感器180F测距以实现快速对焦。
接近光传感器180G可以包括例如发光二极管(LED)和光检测器,例如光电二极管。发光二极管可以是红外发光二极管。电子设备100通过发光二极管向外发射红外光。电子设备100使用光电二极管检测来自附近物体的红外反射光。当检测到充分的反射光时,可以确定电子设备100附近有物体。当检测到不充分的反射光时,电子设备100可以确定电子设备100附近没有物体。电子设备100可以利用接近光传感器180G检测用户手持电子设备100贴近耳朵通话,以便自动熄灭屏幕达到省电的目的。接近光传感器180G也可用于皮套模式,口袋模式自动解锁与锁屏。
环境光传感器180L用于感知环境光亮度。电子设备100可以根据感知的环境光亮度自适应调节显示屏194亮度。环境光传感器180L也可用于拍照时自动调节白平衡。环境光传感器180L还可以与接近光传感器180G配合,检测电子设备100是否在口袋里,以防误触。
指纹传感器180H用于采集指纹。电子设备100可以利用采集的指纹特性实现指纹解锁,访问应用锁,指纹拍照,指纹接听来电等。
温度传感器180J用于检测温度。在一些实施例中,电子设备100利用温度传感器180J检测的温度,执行温度处理策略。例如,当温度传感器180J上报的温度超过阈值,电子设备100执行降低位于温度传感器180J附近的处理器的性能,以便降低功耗实施热保护。在另一些实施例中,当温度低于另一阈值时,电子设备100对电池142加热,以避免低温导致电子设备100异常关机。在其他一些实施例中,当温度低于又一阈值时,电子设备100对电池142的输出电压执行升压,以避免低温导致的异常关机。
触摸传感器180K,也称“触控面板”。触摸传感器180K可以设置于显示屏194,由触摸传感器180K与显示屏194组成触摸屏,也称“触控屏”。触摸传感器180K用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。可以通过显示屏194提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器180K也可以设置于电子设备100的表面,与显示屏194所处的位置不同。
骨传导传感器180M可以获取振动信号。在一些实施例中,骨传导传感器180M可以获取人体声部振动骨块的振动信号。骨传导传感器180M也可以接触人体脉搏,接收血压跳动信号。在一些实施例中,骨传导传感器180M也可以设置于耳机中,结合成骨传导耳机。音频模块170可以基于所述骨传导传感器180M获取的声部振动骨块的振动信号,解析出语音信号,实现语音功能。应用处理器可以基于所述骨传导传感器180M获取的血压跳动信号解析心率信息,实现心率检测功能。
按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信号输入。
马达191可以产生振动提示。马达191可以用于来电振动提示,也可以用于触摸振动反馈。例如,作用于不同应用(例如拍照,音频播放等)的触摸操作,可以对应不同的振动反馈效果。作用于显示屏194不同区域的触摸操作,马达191也可对应不同的振动反馈效果。不同的应用场景(例如:时间提醒,接收信息,闹钟,游戏等)也可以对应不同的振动反馈效果。触摸振动反馈效果还可以支持自定义。
指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。
SIM卡接口195用于连接SIM卡。SIM卡可以通过插入SIM卡接口195,或从SIM卡接口195拔出,实现和电子设备100的接触和分离。电子设备100可以支持1个或N个SIM卡接口,N为大于1的正整数。SIM卡接口195可以支持Nano SIM卡,Micro SIM卡,SIM卡等。同一个SIM卡接口195可以同时插入多张卡。所述多张卡的类型可以相同,也可以不同。SIM卡接口195也可以兼容不同类型的SIM卡。SIM卡接口195也可以兼容外部存储卡。电子设备100通过SIM卡和网络交互,实现通话以及数据通信等功能。在一些实施例中,电子设备100采用嵌入式SIM(embedded-SIM,eSIM)卡,即:嵌入式SIM卡。eSIM卡可以嵌在电子设备100中,不能和电子设备100分离。
应理解,本申请实施例中的电话卡包括但不限于SIM卡、eSIM卡、全球用户识别卡(universal subscriber identity module,USIM)、通用集成电话卡(universalintegrated circuit card,UICC)等等。
电子设备100的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本申请实施例以分层架构的Android系统为例,示例性说明电子设备100的软件结构。
图2是本申请实施例的电子设备100的软件结构框图。分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为四层,从上至下分别为应用程序层,应用程序框架层,安卓运行时(Android runtime)和系统库,以及内核层。应用程序层可以包括一系列应用程序包。
如图2所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,WLAN,蓝牙,音乐,视频,短信息等应用程序。
应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。
如图2所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器等。
窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。
内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。
视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
电话管理器用于提供电子设备100的通信功能。例如通话状态的管理(包括接通,挂断等)。
资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。
通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。
Android Runtime包括核心库和虚拟机。Android runtime负责安卓系统的调度和管理。
核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
系统库可以包括多个功能模块。例如:表面管理器(surface manager),媒体库(media libraries),三维图形处理库(例如:OpenGL ES),2D图形引擎(例如:SGL)等。
表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。
媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。
三维图形处理库用于实现三维图形绘图,图像渲染,合成,和图层处理等。
2D图形引擎是2D绘图的绘图引擎。
内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。
应理解,本申请实施例中的技术方案可以用于Android、IOS、鸿蒙等系统中。
本申请实施例的技术方案可以应用于电子设备的应用发生崩溃的场景。
本申请实施例中的电子设备可以是电视机、台式电脑、笔记本电脑,还可以是便携式电子设备,诸如手机、平板电脑、照相机、摄影机、录像机,还可以是智能车、可穿戴设备等,还可以是其他具有存储功能的电子设备、5G网络中的电子设备或者未来演进的公用陆地移动通信网络(public land mobile network,PLMN)中的电子设备等,本申请对此不做限定。
以下,先对本申请实施例中涉及到的一些术语进行详细介绍。
1.插件
插件(Plug-in,又称addin、add-in、addon或add-on,又译外挂)是一种遵循一定规范的应用程序接口编写出来的程序。其只能运行在程序规定的系统平台下(可能同时支持多个平台),而不能脱离指定的平台单独运行。因为插件需要调用原纯净系统提供的函数库或者数据。很多软件都有插件,插件有无数种。例如在IE中,安装相关的插件后,WEB浏览器能够直接调用插件程序,用于处理特定类型的文件。
2.补丁
软件补丁,是针对于一些大型软件系统,在使用过程中暴露的问题而发布的修补漏洞的小程序。就像衣服烂了就要打补丁一样,软件也需要,软件是人写的,人编写程序不可能十全十美的。一般在软件的开发过程中,开始的时候总会有很多因素没有考虑到,但是随着时间的推移,软件所存在的漏洞会慢慢的被发现。这时候,为了提高系统的安全,软件开发商会编制并发布一个小程序(即所谓的补丁),专门用于修复这些漏洞。
3.崩溃栈
崩溃栈是指应用发生崩溃后,该崩溃所对应的崩溃的函数的执行路径。
4.结构化信息
结构化信息是指信息经过分析后可分解成多个互相关联的组成部分,各组成部分间有明确的层次结构,其使用和维护通过数据库进行管理,并有一定的操作规范。我们通常接触的,包括生产、业务、交易、客户信息等方面的记录都属于结构化信息。无法完全数字化的信息称为非结构化信息,如文档文件、图片、图纸资料、缩微胶片等。这些资源中拥有大量的有价值的信息。这类非结构化信息正以成倍的速度增长。互联网上出现的海量信息,大概分为结构化、半结构化和非结构化三种。
结构化数据(Structured data)-可以组织成行列结构,可识别的数据。这类数据通常是一条记录,或者一个文件,或者是被正确标记过的数据中的某一个字段,并且可以被精确地定位到。
5.聚类
将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。“物以类聚,人以群分”,在自然科学和社会科学中,存在着大量的分类问题。聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法。聚类分析起源于分类学,但是聚类不等于分类。聚类与分类的不同在于,聚类所要求划分的类是未知的。聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。
目前主要由两种解决应用出现崩溃(crash)问题的方法,以下,结合图3和图4,对这两种方法进行详细介绍。
图3示出了一种解决应用崩溃的方法300的示意性流程图。如图3所示,该方法300包括:
S301:在识别到第一应用崩溃时,发布新版本的第一应用,以解决该第一应用的崩溃问题。
在一种示例中,华为冷热补丁(patch01)中有个应用补丁(apk热补丁)在端侧复杂生产环境下导致应用crash,那么可以通过发布包含新版本apk热补丁的patch02解决该应用crash。
该方法中,通过发布新的应用补丁来撤销老的应用补丁,用户如果不下载新的补丁,那么老的补丁crash问题无法解决。
图4示出了又一种解决应用崩溃的方法400的示意性流程图。如图4所示,该方法400包括:
S401:在识别到第一应用崩溃时,卸载该第一应用,或者,撤销该第一应用对应的所有补丁。
在一个示例中,三方热补丁加载后应用出现crash,那么直接将应用卸载掉,不判定是否是补丁导致的崩溃。
在又一个示例中,在应用变更后,需要连续出现数次应用崩溃的情况,系统才会提醒用户卸载崩溃的应用。
在又一个示例中,鸿蒙应用分为多个特征(Feature)包,如果应用更新了插件后,出现应用的崩溃,会将整体应用卸载,不能精准卸载发生崩溃的插件。
该方法中,在判断出应用崩溃时,会将所有补丁撤销掉,并且,当有多个插件应用更新后,如果有某个插件崩溃,用户无法确定是哪个插件崩溃,会将整个应用的更新(多个插件应用的更新)都撤销掉。这使得由于系统本身的不稳定性而导致补丁修复的问题重新暴露出来。
还有一种解决应用崩溃的方法为:在判断出应用崩溃时,监测应用崩溃的次数,到达一定次数后,提醒用户卸载该崩溃的应用。
该方法中,需要当应用崩溃到一定次数后才会进行补丁的撤销,并且没有针对崩溃做精准处理,容易导致误撤销补丁。
可见,现有的应用修复的方法(解决应用崩溃的方法),当应用发生崩溃时,无法根据崩溃日志索引到该崩溃事件对应的具体变更单元(例如补丁的某一次更新、插件的某一次更次年或应用的某一次更新),而是直接将所有的补丁版本、插件版本或者应用全部卸载,因此,现有的应用修复的方法无法精确识别到应用的崩溃点,进而无法对崩溃的应用进行精确地修复,这样容易导致应用的无效修复或过度修复,从而影响用户的使用体验。
基于此,本申请提供了一种应用修复的方法、装置和电子设备,该方法能够精准识别应用发生崩溃的崩溃点(例如能够精确到补丁的某一次更新、插件的某一次更次年或应用的某一次更新),进而对应用进行精准修复。
以下实施例中所使用的术语只是为了描述特定实施例的目的,而并非旨在作为对本申请的限制。如在本申请的说明书和所附权利要求书中所使用的那样,单数表达形式“一个”、“一种”、“所述”、“上述”、“该”和“这一”旨在也包括例如“一个或多个”这种表达形式,除非其上下文中明确地有相反指示。还应当理解,在本申请以下各实施例中,“至少一个”、“一个或多个”是指一个、两个或两个以上。术语“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系;例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A、B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。
在本说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“一个实施例”、“一些实施例”、“另一个实施例”、“另外一些实施例”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
示例性地,图5示出了本申请实施例提供的一种应用修复方法的应用场景图。如图5所示,应用发生了多次变更,这些变更具体为:该应用的第一插件对应的第一更新、该应用的第一插件对应的第二更新、该应用的第一参数对应的第一更新、该应用的第一参数对应的第一更新、该应用的第一补丁对应的第一更新以及该应用的第一补丁对应的第一更新。该应用在第一插件进行完第二更新后发生了崩溃,而导致该应用崩溃的崩溃点在第一插件的第一更新,本申请实施例提供的应用修复方法能够精准识别到崩溃点“第一插件的第一更新”,并进一步撤销第一插件的第一更新,从而使得应用被高效修复。示例性地,图6示出了本申请实施例提供的一种应用修复的方法600的示意性流程图。如图6所示,该方法包括:
S601:当应用发生变更时,获取结构化信息查询表。
可选地,获取结构化信息查询表可以是:接收网络端生成并发送的第一数据包,该第一数据包中包括该结构化信息查询表;然后根据该第一数据包获取结构化信息查询表(例如可以是通过解析该第一数据包,获取该结构化信息查询表)。
可选地,通过聚类变更的二进制对应的结构化信息,获取结构化信息查询表。
其中,变更的二进制是指应用发生变更后,所对应的二进制中发生变更的部分。
结构化信息查询表中包括补丁对应的结构化信息查询表、插件对应的结构化信息查询表和应用对应的结构化信息查询表中的一项或者多项。
可选地,补丁对应的结构化信息查询表中包括补丁的第一更新对应的结构化信息、补丁的第二更新对应的结构化信息、……、补丁的第N更新对应的结构化信息中的一项或者多项;插件对应的结构化信息查询表中包括插件的第一更新对应的结构化信息、插件的第二更新对应的结构化信息、……、插件的第N更新对应的结构化信息中的一项或者多项;应用对应的结构化信息查询表中包括应用的第一更新对应的结构化信息、应用的第二更新对应的结构化信息、……、应用的第N更新对应的结构化信息中的一项或者多项,其中,N为大于或等于1的正整数。
可选地,补丁的第N更新对应的结构化信息可以包括多个补丁的结构化信息;插件的第N更新对应的结构化信息可以包括多个插件的结构化信息。
其中,当变更的二进制为二进制资源时,变更的二进制对应的结构化信息包括该变更的二进制对应的第一关联方法;当变更的二进制为二进制代码时,变更的二进制对应的结构化信息包括该变更的二进制对应的第一变更方法;当变更的二进制为二进制依赖时,变更的二进制对应的结构化信息包括该变更的二进制对应的第二关联方法。
其中,第一关联方法是指与资源有依赖关系的二进制的常量索引到的方法;第一变更方法是指代码二进制的常量索引到的方法;第二关联方法是指依赖链接库的二进制的常量索引到的方法。
也可以理解为:结构化信息查询表中包括一个或多个变更的二进制对应的一个或多个方法,其中,该一个或多个方法与该一个或多个变更的二进制一一对应,该一个或多个变更的二进制被聚类为与补丁对应的变更的二进制、与插件对应的变更的二进制或与应用对应的变更的二进制。可选地,与补丁对应的变更的二进制进一步被聚类为与补丁的第N更新对应的变更的二进制;与插件对应的变更的二进制进一步被聚类为与插件的第N更新对应的变更的二进制。这样,就建立起了变更的二进制对应的方法与补丁、插件或应用之间的联系。
在一个示例中,应用的第一插件由01版本更新为02版本(记为第一更新),那么系统将该更新过程中变更的二进制的常量索引到的方法添加至结构化信息查询表中,且将该方法与插件对应,可选地,可以进一步将该方法与插件的第一更新对应。
S602:当识别到第一应用崩溃时,获取崩溃栈对应的第一结构化信息。
其中,崩溃栈可以是调用链条关系(先进先出,可以是字符串),通过对该调用链条关系进行解析,从而得到该崩溃栈对应的第一结构化信息。
可选地,第一结构化信息包括第一方法、第一方法的标识信息或第一方法的版本信息中的一项或者多项。
S603:根据第一结构化信息和结构化信息查询表,确定第一崩溃点。
可选地,将第一结构化信息和结构化信息查询表中的结构化信息进行对比,在结构化信息查询表中找到与第一结构化信息相同的结构化信息,再根据该相同的结构化信息确定第一崩溃点。
在一种示例中,根据第一方法的标识信息在结构化信息查询表中的补丁类和插件类查找与第一方法相匹配的方法(第一关联方法、第一变更方法或第二关联方法),若在补丁类的第N更新下查找到与第一方法相匹配的方法,则确定第一崩溃点为补丁的第N更新;若在插件类的第N更新下查找到与第一方法相匹配的方法,则确定第一崩溃点为插件的第N更新;若在补丁类和插件类均未查找到与第一方法相匹配的方法,则进一步在应用类查找与第一方法相匹配的方法,若在应用类查找到与该第一方法相匹配的方法,则确定第一崩溃点为应用更新;若在应用类也未查找到与该第一方法相匹配的方法,则初步确定可能是系统不稳定导致的应用崩溃,进一步向系统发出反馈信息,用于通知系统不是由于补丁更新、插件更新和应用更新导致的应用崩溃,以便于系统执行进一步操作。
在又一种示例中,根据第一方法的标识信息和第一方法的版本信息(02)在结构化信息查询表中的补丁类和插件类查找与第一方法相匹配的方法(第一关联方法、第一变更方法或第二关联方法),若在补丁类的第N更新下查找到与第一方法相匹配的方法(对应的版本信息为01),并且在插件类的第N更新下也查找到与第一方法相匹配的方法(对应的版本信息为02),则确定第一崩溃点为插件的第N更新。
S604:响应于用户的第一操作,基于第一崩溃点,对第一应用进行修复。
可选地,用户的第一操作为确认进行应用修复的操作。
可选地,在电子设备的显示屏上显示第一弹窗,该第一弹窗用于用户确认是否进行应用修复。
可选地,该第一弹窗关联第一控件,该第一控件用于用户确认进行应用修复,例如:当用户点击该第一控件时,开始进行应用修复。
可选地,该第一弹窗关联第二控件,该第二控件用于用户取消进行应用修复,例如:当用户点击该第二控件时,取消进行应用修复。
本申请实施例中,在应用发生变更时,会获取变更的二进制对应的结构化信息,这样,当应用发生崩溃时,就可以将崩溃栈对应的结构化信息和该变更的二进制对应的结构化信息进行对比,从而精确找出导致应用发生崩溃的崩溃点,再进一步基于该崩溃点进行应用修复,例如:当确定是补丁更新导致应用发生崩溃时,用户能够卸载当前导致崩溃的补丁版本,恢复上一次运行正常的补丁版本。该方法能够精准识别导致应用崩溃的崩溃点,当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。
示例性地,图7示出了本申请实施例提供的又一种应用修复的方法700的示意性流程图。如图7所示,该方法700包括:
S701:当应用发生变更时,获取变更的二进制。
其中,变更的二进制是指应用发生变更后,所对应的二进制中发生变更的部分。
具体地,可以是将应用变更前对应的二进制集合与应用变更后的二进制集合进行对比,得到变更的二进制。
S702:获取变更的二进制对应的结构化信息。
可选地,多个变更的二进制与多个结构化信息一一对应。
可选地,对变更的二进制进行结构化反解,再基于该结构化反解后的信息获得该变更的二进制对应的结构化信息。
S703:聚类变更的二进制对应的结构化信息,得到结构化信息查询表。
关于该步骤的解释与对S601的解释相同,为了简洁,在此不再赘述。
可选地,步骤S701至步骤S703可以是由服务器执行,也可以是由终端设备执行。
S704:当识别到第一应用崩溃时,获取系统的崩溃栈。
其中,崩溃栈可以是调用链条关系(先进先出,可以是字符串)。
S705:获取崩溃栈对应的第一结构信息。
可选地,通过对该调用链条关系进行解析,从而得到该崩溃栈对应的第一结构化信息。
可选地,第一结构化信息包括第一方法、第一方法的标识信息或第一方法的版本信息中的一项或者多项。
S706:根据第一结构信息和结构化信息查询表,确定第一崩溃点。当第一崩溃点为补丁的第一更新时,执行步骤S707;当第一崩溃点为插件的第一更新时,执行步骤S708;当第一崩溃点为第一应用更新时,执行步骤S709。
可选地,将第一结构化信息和结构化信息查询表中的结构化信息进行对比,在结构化信息查询表中找到与第一结构化信息相同的结构化信息,再根据该与第一结构化信息相同的结构化信息对应的二进制确定第一崩溃点。
在一种示例中,根据第一方法的标识信息在结构化信息查询表中的补丁类和插件类查找与第一方法相匹配的方法(第一关联方法、第一变更方法或第二关联方法),若在补丁类的第一更新下查找到与第一方法相匹配的方法,则确定第一崩溃点为补丁的第一更新;若在插件类的第一更新下查找到与第一方法相匹配的方法,则确定第一崩溃点为插件的第一更新;若在补丁类和插件类均未查找到与第一方法相匹配的方法,则进一步在应用类查找与第一方法相匹配的方法,若在应用类的第一应用下查找到与该第一方法相匹配的方法,则确定第一崩溃点为第一应用更新;若在应用类也未查找到与该第一方法相匹配的方法,则初步确定可能是系统不稳定导致的应用崩溃,进一步向系统发出反馈信息,用于通知系统不是由于补丁更新、插件更新和应用更新导致的应用崩溃,以便于系统执行进一步操作。
在又一种示例中,根据第一方法的标识信息和第一方法的版本信息(02)在结构化信息查询表中的补丁类和插件类查找与第一方法相匹配的方法(第一关联方法、第一变更方法或第二关联方法),若在补丁类的第一更新下查找到与第一方法相匹配的方法(对应的版本信息为01),并且在插件类的第一更新下也查找到与第一方法相匹配的方法(对应的版本信息为02),则确定第一崩溃点为插件的第一更新。
S707:撤销补丁的第一更新。
可以理解:撤销补丁的第一更新,也就是卸载该补丁的当前版本,使其恢复至上一个版本。
S708:撤销插件的第一更新。
可以理解:撤销插件的第一更新,也就是卸载该插件的当前版本,使其恢复至上一个版本。
S709:撤销第一应用更新。
可以理解:撤销第一应用更新,也就是将该第一应用的版本恢复至上一个版本(该更新之前的版本)。
可选地,当确定第一崩溃点不是由补丁、插件和应用更新导致的以后,可以统计崩溃次数,当崩溃次数达到第一阈值后,卸载该第一应用或通知系统。
本申请实施例中,在应用发生更新时,会获取变更的二进制对应的结构化信息,这样,当应用发生崩溃时,就可以将崩溃栈对应的结构化信息和该变更的二进制对应的结构化信息进行对比,从而精确找出导致应用发生崩溃的崩溃点,再进一步基于该崩溃点进行应用修复,例如:当确定是补丁更新导致应用发生崩溃时,用户能够卸载当前导致崩溃的补丁版本,恢复上一次运行正常的补丁版本。该方法能够精准识别导致应用的崩溃点,当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。
示例性地,图8示出了本申请实施例提供的一种获得结构化信息查询表的示意性流程图。如图8所示,该方法800包括:
S801:当应用发生变更时,获取一个或多个变更的二进制。
其中,变更的二进制是指应用发生变更后,所对应的二进制中发生变更的部分。
S802:获取该一个或多个变更的二进制对应的第一形式的结构化信息,该第一形式的结构化信息是指静态的不同形态的结构化信息。
可选地,针对一个或多个变更的二进制,结构化解析差异点,进而获取该一个或多个变更的二进制对应的第一形式的结构化信息。
S803:将该第一形式的结构化信息转换为第二形式的结构化信息,该第二形式的结构化信息是指同态、动态、可运行的代码形式的结构化信息,进而获得一个或多个变更的二进制对应的结构化信息。
可以理解:S803是对一个或多个变更的二进制对应的结构化信息的格式转化,将其格式转化为后续步骤中可识别的格式。
S804:聚类一个或多个变更的二进制对应的结构化信息,得到结构化信息查询表。
其中,对该步骤的解释与图6所示实施例中对S601的解释相同,为了简洁,在此不再赘述。
本申请实施例中,在应用发生变更时,会获取变更的二进制对应的结构化信息,并且,将该结构化信息转换为后续步骤可识别的格式,能够为后续应用发生崩溃时,通过将崩溃栈对应的结构化信息和该变更的二进制对应的结构化信息进行对比,从而精确找出导致应用发生崩溃的崩溃点提供基础。
在图8所示实施例的基础上,示例性地,基于鸿蒙的元服务(feature ability,FA)插件,图9示出了本申请实施例提供的又一种获得结构化信息查询表的示意性流程图。如图9所示,该方法900包括:
S901:当应用发生更新时,获取变更的二进制。
S902:获取该变更的二进制对应的第一形式的结构化信息,该第一形式的结构化信息是指静态的不同形态的结构化信息。
可选地,针对该变更的二进制,结构化解析差异点,进而获取该变更的二进制对应的第一形式的结构化信息。
S903:将该第一形式的结构化信息转换为第二形式的结构化信息,该第二形式的结构化信息是指同态、动态、可运行的代码形式的结构化信息,进而获得变更的二进制对应的结构化信息。
可以理解:S903是对变更的二进制对应的结构化信息的格式转化,将其格式转化为后续步骤中可识别的格式。
S904:聚类变更的二进制对应的结构化信息,得到结构化信息查询表。
可选地,结构化信息查询表中包括一个或多个变更的二进制资源对应的结构化信息、一个或多个变更的二进制代码对应的结构化信息和一个或多个变更的二进制依赖对应的结构化信息中的一项或者多项。
其中,
FeatureA.hap中的abilities变更表示为:Changesrc[FeatureA][0]={anonymous,onInit};
FeatureA.hap中的abilities涉及到的资源变更表示为:changeresource[FeatureA][0]={imageComplete,imageError};
FeatureA.hap中的libs变更表示为:sochangelist[FeatureA][0]=libaod_jni.so和sochangelist[FeatureA][1]=libdoa_jni.so;
FeatureB.hap中的libs新增表示为:soaddlist[FeatureB][0]=libddd_jni.so;
FeatureB.hap中的abilities资源新增表示为:addresource[FeatureC][0]={imageSend}。
示例性地,图10示出了本申请实施例提供的又一种获得结构化信息查询表的示意性流程图。如图10所示,该方法1000包括:
S1001:根据应用在变更前对应的二进制集合和该应用在变更后对应的二进制集合,确定该应用变更的最小单元。
其中,可选地,应用变更的最小单元可以是插件、补丁和应用中的一项或者多项。
S1002:扫描变更前的最小单元对应的二进制集合和变更后的最小单元对应的二进制集合,获取变更的二进制。
其中,变更的二进制是指应用发生变更后,所对应的二进制中发生变更的部分。
S1003:当变更的二进制为二进制资源(资源变更)时,获取该变更的二进制对应的资源依赖关系,进一步执行步骤S1004。
可选地,该变更的二进制对应的资源依赖关系可以是该变更的二进制对应的资源无向图。
S1004:根据该资源依赖关系确定该变更的二进制对应的第一关联方法。
其中,关于对第一关联方法的解释在图6所示实施例中已经做出了详细说明,为了简洁,在此不再赘述。
S1005:当变更的二进制为二进制代码(代码变更)时,获取该变更的二进制对应的代码依赖关系,进一步执行步骤S1006。
可选地,该变更的二进制对应的代码依赖关系可以是该变更的二进制对应的代码无向图。
S1006:根据该代码依赖关系确定该变更的二进制对应的第一变更方法。
其中,关于对第一变更方法的解释在图6所示实施例中已经做出了详细说明,为了简洁,在此不再赘述。
S1007:当变更的二进制为二进制依赖(依赖变更)时,获取该变更的二进制对应的依赖关系,进一步执行步骤S1008。
可选地,该变更的二进制对应的依赖关系还可以描述为该变更的二进制对应的链接库依赖关系,该变更的二进制对应的依赖关系可以是该变更的二进制对应的依赖无向图。
S1008:根据该依赖关系确定该变更的二进制对应的第二关联方法。
其中,关于对第二关联方法的解释在图6所示实施例中已经做出了详细说明,为了简洁,在此不再赘述。
S1009:聚类变更的二进制对应的结构信息,得到结构化信息查询表。
其中,关于对该步骤的解释与图6所示实施例中对S601的解释相同,为了简洁,在此不再赘述。
本申请实施例中,当应用发生变更时,获取该应用对应的变更的二进制,并将该变更的二进制与对应的方法联系起来,这样,就能够根据某一个具体的方法索引到与其对应的变更的二进制所对应的变更单元(补丁、插件或应用),从而能够精准识别到导致应用发生崩溃的崩溃点。
示例性地,图11示出了本申请实施例提供的又一种获得结构化信息查询表的方法1100的示意性流程图。如图11所示,该方法1100包括:
S1101:对变更前的二进制进行结构化反解,得到变更前的二进制对应的结构化信息。
可以理解:结构化反解的过程为将二进制解析为结构化信息的过程。
S1102:对变更后的二进制进行结构后反解,得到变更后的二进制对应的结构化信息。
可以理解:结构化反解的过程为将二进制解析为结构化信息的过程。
S1103:将变更前的二进制对应的结构化信息和变更后的二进制对应的结构化信息进行对比,得到变更的二进制对应的结构化信息。
S1104:对变更的二进制对应的结构化信息进行分类。
可选地,变更的二进制对应的结构化信息的类别可以包括变更的二进制的类、变更的二进制的方法、变更的二进制的常量、变更的二进制的变量中的一项或者多项。
S1105:聚类变更的二进制对应的结构化信息,得到结构化信息查询表。
其中,关于对该步骤的解释与图6所示实施例中对S601的解释相同,为了简洁,在此不再赘述。
为了更加清楚地理解图11所示实施例中的步骤S1104,示例性地,结合图12,对本申请实施例提供的一种建立修复代码段内的映射表的流程进行介绍。
如图12所示,该流程包括步骤:
S1201:获取到的旧补丁文件old.hap和新补丁文件new.hap,提取到两个补丁文件中的二进制代码差异。
S1202:解析二进制填充的数据结构,并比较填充的数据结构中有差异的字段。
S1203:建立映射表。
可选地,可以用changecode[][]表示结构化代码的所有差异的数据结构,一维的索引表示修改类型,该修改类型可以包括代码、方法、常量、类、变量等编程语言中可区分的类型(例如:class、method、field、resource等);二维的索引表示具体差异:className、methodName、fieldname、resourceName、codeName(可以建立到语句级别的差异)。
示例性地,在图11所示实施例的基础上,图13示出了本申请实施例提供的又一种获得结构化信息查询表的方法1200的示意性流程图。如图13所示,该方法1300包括:
S1301:对变更前的二进制资源文件对应的二进制进行结构化反解,得到变更前的二进制资源对应的结构化信息。
S1302:对变更后的二进制资源文件对应的二进制进行结构化反解,得到变更后的二进制资源对应的结构化信息。
S1303:将变更前的二进制资源对应的结构化信息和变更后的二进制资源对应的结构化信息进行对比,得到变更的二进制资源对应的结构化信息。
S1304:将资源变更转化为代码映射信息。
其中,对该步骤的解释与图10所示实施例中的S1003和S1004的解释相同,为了简洁,在此不再赘述。
S1305:聚类变更的二进制对应的结构化信息,得到结构化信息查询表。
其中,关于对该步骤的解释与图6所示实施例中对S601的解释相同,为了简洁,在此不再赘述。
为了更加清楚地理解图13所示实施例中的步骤S1304,示例性地,结合图14,对本申请实施例提供的一种建立二进制资源变更的映射表(映射至第一关联方法)的流程进行介绍。
如图14所示,该流程包括步骤:
(1)扫描本次变更的二进制资源。
(2)解析该变更的二进制资源对应的方法(第一关联方法)。
(3)建立本次二进制资源变更到第一关联方法的映射表。
示例性地,在图11所示实施例的基础上,图15示出了本申请实施例提供的又一种获得结构化信息查询表的方法1500的示意性流程图。如图15所示,该方法1500包括:
S1501:对变更前的动态链接库文件对应的二进制进行结构化反解,得到变更前的二进制资源对应的结构化信息。
S1502:对变更后的动态链接库文件对应的二进制进行结构化反解,得到变更后的二进制资源对应的结构化信息。
S1503:将变更前的二进制资源对应的结构化信息和变更后的二进制资源对应的结构化信息进行对比,得到变更的二进制资源对应的结构化信息。
S1504:将链接库的变更转化为代码映射信息。
其中,对该步骤的解释与图10所示实施例中的S1007和S1008的解释相同,为了简洁,在此不再赘述。
S1505:聚类变更的二进制对应的结构化信息,得到结构化信息查询表。
其中,关于对该步骤的解释与图6所示实施例中对S601的解释相同,为了简洁,在此不再赘述。
为了更加清楚地理解图15所示实施例中的步骤S1504,示例性地,结合图16,对本申请实施例提供的一种建立链接库变更(依赖变更)的映射表(映射至第二关联方法)的流程进行介绍。
如图16所示,该流程包括步骤:
(1)扫描本次变更的链接库。
例如:该变更的链接库为libaod_jni.so。
(2)建立本次链接库新增的映射表。
例如:本次链接库新增的映射表为:Solist[0]=libaod_jni.so;Solist[1]=libdoa_jni.so;Solist[2]=libddd_jni.so。
(2)扫描本次变更的链接库涉及到的修改,对对其进行反解析,提取出变更的方法(第二关联方法)、变量等信息。
(3)建立本次链接库变更到第二关联方法的映射表:
该映射表例如可以是:sochange[0]={“oh_fixsettings_ui”,”oh_fixsettings_ui_ext”}。
示例性地,图17示出了本申请实施例提供的又一种应用修复的方法1400的示意性流程图。如图17所示,该方法1700包括:
S1701:对变更前的二进制进行结构化反解,得到变更前的二进制对应的结构化信息。
S1702:对变更后的二进制进行结构后反解,得到变更后的二进制对应的结构化信息。
S1703:将变更前的二进制对应的结构化信息和变更后的二进制对应的结构化信息进行对比,得到变更的二进制对应的结构化信息。
S1704:对变更的二进制对应的结构化信息进行分类。
可选地,变更的二进制对应的结构化信息的类别可以包括变更的二进制的类、变更的二进制的方法、变更的二进制的常量、变更的二进制的变量中的一项或者多项。
S1705:聚类变更的二进制对应的结构化信息,得到结构化信息查询表。
其中,关于对该步骤的解释与图6所示实施例中对S601的解释相同,为了简洁,在此不再赘述。
S1706:在应用市场发布了第一应用对应的大版本应用更更新、补丁的第一更新和补丁的第二更新的情况下,若识别到该第一应用崩溃,则获取系统的崩溃栈。
S1707:获取该崩溃栈对应的第一结构化信息。
其中,关于对该步骤的解释与图6所示实施例中已经做了详细说明,为了简洁,在此不再赘述。
其中,该第一结构化信息是系统引擎可分析的结构化信息,也就是说,该第一结构化信息的格式为可识别格式。
S1708:根据第一结构化信息和结构化信息查询表,确定第一崩溃点。当第一崩溃点为补丁的第一更新(或补丁的第二更新)时,执行步骤S1709;当第一崩溃点为第一应用更新时,执行步骤S1710;当未匹配成功(即结构化信息查询表中没有与第一结构化信息匹配的结构化信息)时,执行步骤S1711。
其中,关于对确定第一崩溃点的解释与图6所示实施例中已经做了详细说明,为了简洁,在此不再赘述。
S1709:响应于用户的第一操作,撤销补丁的第一更新(或撤销补丁的第二更新)。
其中,用户的第一操作为确认修复第一应用的操作。S1710:响应于用户的第一操作,撤销第一应用更新。
S1711:统计崩溃次数,当崩溃次数达到第一阈值后,响应于用户的第二操作,卸载该第一应用,或者,通知系统。
其中,用户的第二操作为确认卸载第一应用的操作。
示例性的,在图17所示实施例的基础上,图18示出了本申请实施例提供的又一种应用修复的方法1800的示意性流程图。如图18所示,该方法1800包括:
S1801:获取结构化信息查询表。
其中,关于对该步骤的解释与图6所示实施例中已经做了详细说明,为了简洁,在此不再赘述。
S1802:在应用市场发布了第一应用对应的大版本应用更更新、第一补丁的第一更新和第一补丁的第二更新的情况下,若识别到该第一应用崩溃,则获取系统的崩溃栈。
S1803:获取该崩溃栈对应的第一结构化信息。
其中,该第一结构化信息是系统引擎可分析的结构化信息,也就是说,该第一结构化信息的格式为可识别格式。
S1804:根据第一结构化信息和结构化信息查询表,确定第一崩溃点。当第一崩溃点为补丁的第一更新(或补丁的第二更新)时,执行步骤S1805;当第一崩溃点为第一应用更新时,执行步骤S1806;当未匹配成功(即结构化信息查询表中没有与第一结构化信息匹配的结构化信息)时,执行步骤S1807。
S1805:响应于用户确认进行应用修复的操作,撤销补丁的第一更新(或撤销补丁的第二更新)。
S1806:响应于用户确认进行应用修复的操作,撤销第一应用更新。
S1807:确定为系统不稳定导致的第一应用崩溃,响应于用于确认重启第一应用的操作,重启应用。若重启后第一应用仍然连续崩溃,则执行步骤S1808;若重启后第一应用运行正常,则执行步骤S1809。
S1808:统计崩溃次数,当崩溃次数达到第一阈值后,响应于用户确认卸载该第一应用的操作,卸载该第一应用。
S1809:清理应用补丁崩溃次数,应用正常运行。
为了更加清楚地理解图18所示实施例中的步骤S1804至步骤S1807,示例性地,以下,结合图19至图22,对本申请实施例提供的确定崩溃点(即:确定第一结构化信息是否命中结构化信息查询表)的流程进行介绍。
图19示出了本申请实施例提供的第一结构化信息命中结构化信息查询表中的变更的二进制代码对应的第一变更方法的示意图。由图19可知,本次变更对应的映射表为:changesrc[0]={anonymous,onlnit};本次崩溃命中补丁更新anoymous(即崩溃点为补丁更新anoymous)。
图20示出了本申请实施例提供的第一结构化信息命中结构化信息查询表中的变更的二进制资源对应的第一关联方法的示意图。由图20可知,本次变更对应的映射表为:changesource[0]={imageComplete,imageError};本次崩溃命中补丁更新imageComplete(即崩溃点为补丁更新imageComplete)。
图21示出了本申请实施例提供的第一结构化信息命中结构化信息查询表中的变更的链接库的示意图。由图21可知,本次变更对应的映射表为:changesolist[]={libc.so,liblog.so,libaod_jni.so,libnativehelper.so};
其中,修复(变更)的so为:
sochangelist[0]=libaod_jni.so;sochangelist[1]=libdoa_jni.so;sochangelist[2]=libddd_jni.so崩溃栈上的so为:
libc.so;liblog.so;libaod_jni.so;libnativehelpe.so
本次崩溃命中更新libaod_jni.so(即崩溃点为补丁更新libaod_jni.so)。
图22示出了本申请实施例提供的第一结构化信息命中结构化信息查询表中的变更的链接库对应的第二关联方法的示意图。由图22可知,本次变更对应的映射表为:sochange[0]={“oh_fixsettings_ui”,”oh_fixsettings_ui_ext”};
其中,修复(变更)的so为:
oh_fixsettings_ui,oh_fixsettings_ui_ext
崩溃栈上的方法为:
oh_fixsettings_ui,_cxa_throwstd::terminate
本次崩溃命中第二关联方法oh_fixsettings_ui。
示例性地,图23示出了本申请实施例提供的一种应用修复的装置2300的功能模块示意图。如图16所示,该装置2300包括:
获取模块2310:用于当应用发生变更时,获取结构化信息查询表。
可选地,获取模块2310具体用于:接收网络端生成并发送的第一数据包,该第一数据包中包括该结构化信息查询表;然后根据该第一数据包获取结构化信息查询表(例如可以是通过解析该第一数据包,获取该结构化信息查询表)。
可选地,获取模块2310通过聚类变更的二进制对应的结构化信息,获取结构化信息查询表。
其中,变更的二进制是指应用发生变更后,所对应的二进制中发生变更的部分。
结构化信息查询表中包括补丁对应的结构化信息查询表、插件对应的结构化信息查询表和应用对应的结构化信息查询表中的一项或者多项。
可选地,补丁对应的结构化信息查询表中包括补丁的第一更新对应的结构化信息、补丁的第二更新对应的结构化信息、……、补丁的第N更新对应的结构化信息中的一项或者多项;插件对应的结构化信息查询表中包括插件的第一更新对应的结构化信息、插件的第二更新对应的结构化信息、……、插件的第N更新对应的结构化信息中的一项或者多项;应用对应的结构化信息查询表中包括应用的第一更新对应的结构化信息、应用的第二更新对应的结构化信息、……、应用的第N更新对应的结构化信息中的一项或者多项,其中,N为大于或等于1的正整数。
可选地,补丁的第N更新对应的结构化信息可以包括多个补丁的结构化信息;插件的第N更新对应的结构化信息可以包括多个插件的结构化信息。
其中,当变更的二进制为二进制资源时,变更的二进制对应的结构化信息包括该变更的二进制对应的第一关联方法;当变更的二进制为二进制代码时,变更的二进制对应的结构化信息包括该变更的二进制对应的第一变更方法;当变更的二进制为二进制依赖时,变更的二进制对应的结构化信息包括该变更的二进制对应的第二关联方法。
其中,第一关联方法是指与资源有依赖关系的二进制的常量索引到的方法;第一变更方法是指代码二进制的常量索引到的方法;第二关联方法是指依赖链接库的二进制的常量索引到的方法。
也可以理解为:结构化信息查询表中包括一个或多个变更的二进制对应的一个或多个方法,其中,该一个或多个方法与该一个或多个变更的二进制一一对应,该一个或多个变更的二进制被聚类为与补丁对应的变更的二进制、与插件对应的变更的二进制或与应用对应的变更的二进制。可选地,与补丁对应的变更的二进制进一步被聚类为与补丁的第N更新对应的变更的二进制;与插件对应的变更的二进制进一步被聚类为与插件的第N更新对应的变更的二进制。这样,就建立起了变更的二进制对应的方法与补丁、插件或应用之间的联系。
在一个示例中,应用的第一插件由01版本更新为02版本(记为第一更新),那么系统将该更新过程中变更的二进制的常量索引到的方法添加至结构化信息查询表中,且将该方法与插件对应,可选地,可以进一步将该方法与插件的第一更新对应。
获取模块2310,还用于当识别到第一应用崩溃时,获取崩溃栈对应的第一结构化信息。
其中,崩溃栈可以是调用链条关系(先进先出,可以是字符串),通过对该调用链条关系进行解析,从而得到该崩溃栈对应的第一结构化信息。
可选地,第一结构化信息包括第一方法、第一方法的标识信息或第一方法的版本信息中的一项或者多项。
确定模块2320:用于根据第一结构化信息和结构化信息查询表,确定第一崩溃点。
可选地,确定模块2320将第一结构化信息和结构化信息查询表中的结构化信息进行对比,在结构化信息查询表中找到与第一结构化信息相同的结构化信息,再根据该相同的结构化信息确定第一崩溃点。
在一种示例中,确定模块2320根据第一方法的标识信息在结构化信息查询表中的补丁类和插件类查找与第一方法相匹配的方法(第一关联方法、第一变更方法或第二关联方法),若在补丁类的第N更新下查找到与第一方法相匹配的方法,则确定第一崩溃点为补丁的第N更新;若在插件类的第N更新下查找到与第一方法相匹配的方法,则确定第一崩溃点为插件的第N更新;若在补丁类和插件类均未查找到与第一方法相匹配的方法,则进一步在应用类查找与第一方法相匹配的方法,若在应用类查找到与该第一方法相匹配的方法,则确定第一崩溃点为应用更新;若在应用类也未查找到与该第一方法相匹配的方法,则初步确定可能是系统不稳定导致的应用崩溃,进一步向系统发出反馈信息,用于通知系统不是由于补丁更新、插件更新和应用更新导致的应用崩溃,以便于系统执行进一步操作。
在又一种示例中,确定模块2320根据第一方法的标识信息和第一方法的版本信息(02)在结构化信息查询表中的补丁类和插件类查找与第一方法相匹配的方法(第一关联方法、第一变更方法或第二关联方法),若在补丁类的第N更新下查找到与第一方法相匹配的方法(对应的版本信息为01),并且在插件类的第N更新下也查找到与第一方法相匹配的方法(对应的版本信息为02),则确定第一崩溃点为插件的第N更新。
修复模块2330:用于响应于用户的第一操作,基于第一崩溃点,对第一应用进行修复。
可选地,用户的第一操作为确认进行应用修复的操作。
可选地,该修复装置还包括显示模块,用于在电子设备的显示屏上显示第一弹窗,该第一弹窗用于用户确认是否进行应用修复。
可选地,该第一弹窗关联第一控件,该第一控件用于用户确认进行应用修复,例如:修复模块2330具体用于:当用户点击该第一控件时,开始进行应用修复。
可选地,该第一弹窗关联第二控件,该第二控件用于用户取消进行应用修复,例如:当用户点击该第二控件时,取消进行应用修复。
本申请实施例中,在应用发生变更时,会获取变更的二进制对应的结构化信息,这样,当应用发生崩溃时,就可以将崩溃栈对应的结构化信息和该变更的二进制对应的结构化信息进行对比,从而精确找出导致应用发生崩溃的崩溃点,再进一步基于该崩溃点进行应用修复,例如:当确定是补丁更新导致应用发生崩溃时,用户能够卸载当前导致崩溃的补丁版本,恢复上一次运行正常的补丁版本。该装置能够精准识别导致应用崩溃的崩溃点,当应用发生崩溃时,用户不用卸载整个应用或者重新下载新的应用,能够提升用户的使用体验。
以上各个实施例可以单独使用,也可以相互结合使用,以实现不同的技术效果。
本文中所描述的模块或单元的一个或多个可以软件、硬件或二者结合来实现。当以上任一模块或单元以软件实现的时候,所述软件以计算机程序指令的方式存在,并被存储在存储器中,处理器可以用于执行所述程序指令并实现以上方法流程。所述处理器可以包括但不限于以下至少一种:中央处理单元(central processing unit,CPU)、微处理器、数字信号处理器(DSP)、微控制器(microcontroller unit,MCU)、或人工智能处理器等各类运行软件的计算设备,每种计算设备可包括一个或多个用于执行软件指令以进行运算或处理的核。该处理器可以内置于SoC(片上系统)或专用集成电路(applicationspecificintegrated circuit,ASIC),也可是一个独立的半导体芯片。该处理器内处理用于执行软件指令以进行运算或处理的核外,还可进一步包括必要的硬件加速器,如现场可编程门阵列(field programmable gate array,FPGA)、PLD(可编程逻辑器件)、或者实现专用逻辑运算的逻辑电路。
当本文中所描述的模块或单元以硬件实现的时候,该硬件可以是CPU、微处理器、DSP、MCU、人工智能处理器、ASIC、SoC、FPGA、PLD、专用数字电路、硬件加速器或非集成的分立器件中的任一个或任一组合,其可以运行必要的软件或不依赖于软件以执行以上方法流程。
当本文中所描述的模块或单元使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solid statedisk,SSD))等。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (25)

1.一种应用修复的方法,其特征在于,所述方法包括:
当识别到由于第一变更导致的应用崩溃时,在电子设备的屏幕上显示第一弹窗,所述第一弹窗用于提醒用户所述应用发生崩溃,还用于用户确认是否进行应用修复,所述应用的变更包括N个变更,所述N个变更包括所述第一变更,所述N为大于或等于1的正整数;
响应于用户确认进行应用修复的操作,撤销所述第一变更。
2.根据权利要求1所述的方法,其特征在于,所述第一变更包括补丁的第P更新、插件的第Q更新和应用更新中的任意一项或多项,所述P、Q均为大于或等于1的正整数。
3.根据权利要求1或2所述的方法,其特征在于,所述第一弹窗关联第一控件,所述第一控件用于用户确认进行应用修复。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述方法还包括:
当识别到由于系统不稳定导致的应用崩溃时,在所述电子设备的屏幕上显示第二弹窗,所述第二弹窗用于提醒用户所述应用发生崩溃,还用于用户确认是否重启所述应用;
响应于用户确认重启所述应用的操作,重启所述应用。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
若重启所述应用后,所述应用连续崩溃,则在崩溃次数大于或等于第一阈值时,在所述电子设备的屏幕上显示第三弹窗,所述第三弹窗用于提醒用户所述应用发生连续崩溃,还用于用户确认是否卸载所述应用;
响应于用户确认卸载所述应用的操作,卸载所述应用。
6.根据权利要求4或5所述的方法,其特征在于,所述方法还包括:
向系统发送第一反馈信息,所述第一反馈信息用于通知所述系统是由于系统不稳定导致的应用崩溃。
7.一种应用修复的方法,其特征在于,所述方法包括:
当发生应用变更时,获取结构化信息查询表,所述结构化信息查询表中包括M个第二方法,还包括所述M个第二方法中的每个第二方法所对应的变更单元,所述变更单元包括补丁的第P更新、插件的第Q更新和应用更新中的任意一项,所述M、P、Q均为大于或等于1的正整数;
当识别到第一应用发生崩溃时,获取崩溃栈对应的第一结构化信息,所述第一结构化信息包括第一方法、所述第一方法的标识信息和所述第一方法的版本信息中的一项或者多项;
根据所述结构化信息查询表和所述结构化信息确定第一崩溃点;在电子设备的显示屏上显示第一弹窗,所述第一弹窗用于用户确认是否进行应用修复;
响应于用户确认进行应用修复的操作,基于所述第一崩溃点,对所述第一应用进行修复。
8.根据权利要求7所述的方法,其特征在于,所述根据所述结构化信息查询表和所述结构化信息确定第一崩溃点,包括:
根据所述第一方法的标识信息和/或所述第一方法的版本信息,在所述结构化信息查询表中查询与所述第一方法相匹配的第二方法;
若在所述结构化信息查询表中查询到与所述第一方法相匹配的第二方法,则将所述与第一方法相匹配的第二方法对应的变更单元确定为所述第一崩溃点。
9.根据权利要求7或8中所述的方法,其特征在于,所述基于所述第一崩溃点,对所述第一应用进行修复,包括:
当确定所述第一崩溃点为所述补丁的第P更新时,撤销所述补丁的第P更新;
当确定所述第一崩溃点为所述插件的第Q更新时,撤销所述插件的第Q更新;或,
当确定所述第一崩溃点为所述应用更新时,撤销所述应用更新。
10.根据权利要求7所述的方法,其特征在于,所述根据所述结构化信息查询表和所述结构化信息确定第一崩溃点,包括:
根据所述第一方法的标识信息和/或所述第一方法的版本信息,在所述结构化信息查询表中查询与所述第一方法相匹配的第二方法;
若在所述结构化信息查询表中未查询到与所述第一方法相匹配的第二方法,则确定所述第一崩溃点为系统不稳定。
11.根据权利要求10所述的方法,其特征在于,所述基于所述第一崩溃点,对所述第一应用进行修复,包括:
响应于用户确认重启所述第一应用的操作,重启所述第一应用;
若重启所述第一应用后,所述第一应用连续崩溃,则在当崩溃次数大于或等于第一阈值时,响应于用户确认卸载所述第一应用的操作,卸载所述第一应用。
12.根据权利要求10或11所述的方法,其特征在于,所述方法还包括:
向系统发送第一反馈信息,所述第一反馈信息用于通知所述系统所述第一崩溃点为系统不稳定。
13.根据权利要求7至12中任一项所述的方法,其特征在于,所述当识别到第一应用发生崩溃时,获取崩溃栈对应的第一结构化信息,包括:
当识别到所述第一应用发生崩溃时,获取系统的崩溃栈;
获取所述崩溃栈对应的所述第一结构化信息。
14.一种应用修复的方法,其特征在于,所述方法包括:
生成第一数据包,所述第一数据包包括结构化信息查询表,所述结构化信息查询表包括M个第二方法,还包括所述M个第二方法中的每个第二方法所对应的变更单元,所述变更单元包括补丁的第P更新、插件的第Q更新和应用更新中的任意一项,所述M、P、Q均为大于或等于1的正整数;
发送所述第一数据包,所述第一数据包用于应用修复。
15.根据权利要求14所述的方法,其特征在于,所述方法还包括:
当发生应用变更时,通过聚类变更的二进制对应的结构化信息,获得所述结构化信息查询表。
16.根据权利要求15所述的方法,其特征在于,所述通过聚类变更的二进制对应的结构化信息,获得结构化信息查询表,包括:
当发生应用变更时,获取所述变更的二进制;
获取所述变更的二进制对应的结构化信息;
通过聚类所述变更的二进制对应的结构化信息,获得所述结构化信息查询表。
17.根据权利要求16所述的方法,其特征在于,所述获取所述变更的二进制,包括:
根据所述应用在变更前对应的二进制集合和所述应用在变更后对应的二进制集合,确定所述应用变更的最小单元;
通过扫描所述最小单元在变更前的对应的二进制集合和所述最小单元在变更后对应的二进制集合,获取所述变更的二进制。
18.根据权利要求16或17所述的方法,其特征在于,所述获取所述变更的二进制对应的结构化信息,包括:
获取所述变更的二进制对应的第一形式的结构化信息,所述第一形式的结构化信息是指静态的不同形态的结构化信息;
将所述第一形式的结构化信息转换为所述结构化信息,所述结构化信息是指同态、动态、可运行的代码形式的结构化信息。
19.根据权利要求16至18中任一项所述的方法,其特征在于,所述获取所述变更的二进制对应的结构化信息,包括:
通过对所述应用在变更前对应的二进制进行结构化反解,得到变更前的二进制对应的结构化信息;
通过对所述应用在变更后对应的二进制进行结构后反解,得到变更后的二进制对应的结构化信息;
通过将所述变更前的二进制对应的结构化信息和所述变更后的二进制对应的结构化信息进行对比,得到所述变更的二进制对应的结构化信息。
20.根据权利要求14至19中任一项所述的方法,其特征在于,所述方法还包括:
当所述变更的二进制对应资源变更时,获取所述变更的二进制对应的资源依赖关系;
根据所述资源依赖关系确定所述变更的二进制对应的所述第二方法;
当所述变更的二进制对应代码变更时,获取所述变更的二进制对应的代码依赖关系;
根据所述代码依赖关系确定所述变更的二进制对应的所述第二方法;或,
当所述变更的二进制对应依赖变更时,获取所述变更的二进制对应的依赖关系;
根据所述依赖关系确定所述变更的二进制对应的第二方法。
21.一种电子设备,其特征在于,包括:
一个或多个处理器;
一个或多个存储器;
以及一个或多个计算机程序,其中所述一个或多个计算机程序被存储在所述一个或多个存储器中,所述一个或多个计算机程序包括指令,当所述指令被所述一个或多个处理器执行时,使得所述电子设备执行如权利要求1至6中任一项所述的方法,或,执行如权利要求7至13中任一项所述的方法。
22.一种电子设备,其特征在于,包括:
一个或多个处理器;
一个或多个存储器;
以及一个或多个计算机程序,其中所述一个或多个计算机程序被存储在所述一个或多个存储器中,所述一个或多个计算机程序包括指令,当所述指令被所述一个或多个处理器执行时,使得所述电子设备执行如权利要求14至20中任一项所述的方法。
23.根据权利要求22所述的电子设备,其特征在于,所述电子设备为服务器或终端设备。
24.一种计算机可读存储介质,其特征在于,所述存储介质中存储有程序或指令,当所述程序或指令被运行时,实现如权利要求1至6中任一项所述的方法,或,实现如权利要求7至13中任一项所述的方法,或,实现如权利要求14至20中任一项所述的方法。
25.一种芯片,其特征在于,包括:
一个或多个处理器;
一个或多个存储器,所述一个或多个处理器与所述一个或多个存储器耦合,用于读取并执行所述一个或多个存储器中的指令,以执行如权利要求1至12中任一项所述的方法,或,执行如权利要求7至13中任一项所述的方法,或,执行如权利要求14至20中任一项所述的方法。
CN202211676659.XA 2022-12-26 应用修复的方法、装置和电子设备 Pending CN118260121A (zh)

Publications (1)

Publication Number Publication Date
CN118260121A true CN118260121A (zh) 2024-06-28

Family

ID=

Similar Documents

Publication Publication Date Title
CN110910872B (zh) 语音交互方法及装置
WO2021258797A1 (zh) 图像信息输入方法、电子设备及计算机可读存储介质
CN110866254B (zh) 一种检测漏洞方法与电子设备
CN113568634B (zh) 应用优化的处理方法及处理装置
WO2021104117A1 (zh) 一种构建应用程序资源包的方法、构建装置及终端设备
CN116070035B (zh) 数据处理方法和电子设备
CN115333941B (zh) 获取应用运行情况的方法及相关设备
WO2022253158A1 (zh) 一种用户隐私保护方法及装置
CN116483734B (zh) 一种基于编译器的插桩方法、系统及相关电子设备
CN112416984B (zh) 一种数据处理方法及其装置
WO2021238376A1 (zh) 功能包的加载方法、装置、服务器和电子设备
WO2024140234A1 (zh) 应用修复的方法、装置和电子设备
CN118260121A (zh) 应用修复的方法、装置和电子设备
CN112527541A (zh) 一种确定多核处理器中故障计算核的方法及电子设备
CN116048594B (zh) 软件升级方法及相关装置
CN116048617B (zh) 信息获取方法、装置、芯片、电子设备及介质
CN115437601B (zh) 图像排序方法、电子设备、程序产品及介质
CN117009023B (zh) 显示通知信息的方法及相关装置
CN116795476B (zh) 一种删除壁纸的方法及电子设备
CN114168115B (zh) 通信系统、应用下载方法及设备
CN116301905A (zh) 数据处理方法以及相关设备
CN117910528A (zh) 模型处理方法、设备、存储介质和程序产品
CN116700811A (zh) 应用的运行方法及相关装置
CN117784990A (zh) 在任务栏显示应用程序的图标的方法及相关装置
CN118276861A (zh) 一种编译方法、电子设备及系统

Legal Events

Date Code Title Description
PB01 Publication