[发明专利]一种检测Android应用Service构件泄露的高效方法有效
申请号: | 201710790636.4 | 申请日: | 2017-09-05 |
公开(公告)号: | CN107590013B | 公开(公告)日: | 2020-12-04 |
发明(设计)人: | 马骏;陶先平;吕建 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F11/07 | 分类号: | G06F11/07;G06F11/36 |
代理公司: | 南京知识律师事务所 32207 | 代理人: | 张苏沛 |
地址: | 210046 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 检测 android 应用 service 构件 泄露 高效 方法 | ||
1.一种安卓应用Service构件泄露的高效检测方法,其特征在于:分为主程序Master与客户端检测应用APKchecker两部分;主程序Master运行在PC端,客户端检测应用APKchecker运行在测试安卓设备上,其具体步骤包括:
步骤一、主程序Master借助Android-Debug-Bridge安装待检测应用APKtarget;
步骤二、主程序Master借助Android-Debug-Bridge安装客户端检测应用APKchecker;
步骤三、主程序Master以“Start模式”启动客户端检测应用APKchecker;
步骤四、客户端检测应用APKchecker以“Start模式”尝试检测待测应用所发布的各项服务;
步骤五、主程序Master记录相应应用堆栈内存;
步骤六、主程序Master以“Bind模式”启动客户端检测应用APKchecker尝试检测待测应用所发布的各项服务;
步骤七、客户端检测应用APKchecker以“Bind模式”尝试检测待测应用所发布的各项服务;
步骤八、主程序Master记录相应应用堆栈内存;
步骤九、分析获取得到的应用堆栈内存,检测泄露的应用构件;
步骤九具体包括以下步骤:
步骤9.1、针对一个转储的应用堆栈.hprof文件,首先获取其中所包含的所有Service对象实例,用Ssrv表示;
步骤9.2、针对步骤9.1所获得的每一个Service对象实例s进行逐个鉴别,判定s是否已经被销毁,若s被判定为已销毁,则将其从Ssrv中删除;
所述步骤9.2判定一个Service实例s是否被销毁,则是依据该s是否被某个ActivityThread实例所管理,即判断是否存在如下的引用关系序列:at→mServices→array[]→s,其中at表示一个ActivityThread实例;若存在这样一个引用关系序列,则s被at表示的ActivityThread实例所管理;否则,s则被认为是被销毁的;
步骤9.3、针对步骤9.2处理后得到的Ssrv中的剩余对象实例s,进一步判定其是否是泄露的,若是则将其从Ssrv中删除;
所述步骤9.3判定一个Service实例s是否泄露,具体包括以下步骤:
步骤9.3.1、获取Service实例s到达所有GC root的路径,记为LP;
步骤9.3.2、从LP中去除所有包含java.lang.ref.SoftReference、java.lang.ref.WeakReference、java.lang.ref.PhantomReference、java.lang.ref.FinalizerReference以及java.lang.ref.Finalizer类型对象的路径;从LP中去除所有以java.lang.Daemons$FinalizerDaemon类对象结尾的路径,同时从LP中去除包含FinalizerWatchdogDaemon线程的路径;
步骤9.3.3、若LP为空,则s不是泄露的;否则,s则是泄露的;
步骤9.4、返回Ssrv,即获得所有泄露的Service实例。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710790636.4/1.html,转载请声明来源钻瓜专利网。