Abstract: |
安卓系统依靠开源的特性吸引着越来越多的用户。到目前为止,在国内外的各种应用市场上,安卓应用程序的数量已经达到了几百万。但是,由于测试不充分等各种各样的原因,安卓应用的质量依然令我们堪忧。其中,资源泄漏就是存在于安卓应用中的问题之一。安卓设备搭载了许多内嵌的资源组件,例如照相机、播放器以及各式各样的传感器。使用这些资源需要开发者显式地去申请和释放它们。开发者忘记释放已经申请的资源就会导致资源泄漏,它会造成严重影响用户体验的问题,比如电池浪费、内存泄漏甚至程序崩溃。目前,已有一些工作对资源泄漏问题进行了研究,例如通过静态分析方法检测安卓应用中可能存在的资源泄漏。本文针对安卓应用中的资源泄漏问题展开了进一步的研究和讨论,具体工作包括以下两个方面。
Dalvik 字节码是安卓应用程序的执行代码。直接在Dalvik 字节码上进行程序插桩对于动态分析安卓应用起着至关重要的作用。但是,目前还没有研究人员提出一个直接在Dalvik 字节码进行程序插桩的方法。因此,本文实现了一个安全和可扩展的安卓应用Dalvik 字节码插桩工具InsDal。该工具操作简单易于使用,并且已经在能耗分析、覆盖率统计、程序执行记录等多个研究场景得到了应用。
另外,本文提出了一个通过程序静态分析和代码插桩技术来自动化修复安卓应用中资源泄漏的方法。该方法保证了加入的补丁代码不会影响原有程序的运行逻辑,也不会引入新的漏洞和问题。同时,本文还实现了相应的原型工具RelFix,并使用构造的针对安卓资源泄漏的基准测试集ResLeakBench 以及真实安卓应用程序对该修复方法的有效性和效率进行了评估。实验结果表明本文提出的修复方法能够有效地修复安卓应用中存在的资源泄漏,并且只会插入很小部分的额外代码,带来可忽略的额外运行时间。 |