杨红丽 姜 皓 秦胜潮 张 健 严 俊
1(北京工业大学计算机学院 北京 100124)2(深圳大学计算机与软件学院 广东 深圳 518060)3(中国科学院软件研究所 北京 100190)
Android 应用能耗漏洞分析技术综述
杨红丽1姜皓1秦胜潮2张健3严俊3
1(北京工业大学计算机学院北京 100124)2(深圳大学计算机与软件学院广东 深圳 518060)3(中国科学院软件研究所北京 100190)
随着移动互联网技术的迅速发展,Android手机以其强大的功能为人们的日常生活提供便捷的服务。然而Android手机的电池能源非常有限,应用耗电行为将直接影响其电池的使用寿命,因此Android应用的能耗漏洞问题受到研究者的广泛关注。研究者们已经提出并实现了很多分析技术和相关工具。针对Android应用能耗漏洞分析,对相关研究方法和工具作了综述,概括了现有研究工作中的问题,讨论了未来研究方向。
Android应用能耗漏洞程序分析移动互联网
随着移动互联网技术的迅速发展,诸如智能手机和平板电脑这样的移动设备已经进入人们的生活,帮助人们开展日常活动,如工作和娱乐。目前市场流行的移动设备操作系统分别是Android、iOS以及Windows。然而在Strategy Analytics[1]公布的2014年第二季度智能设备操作系统市场份额报表中,Android操作系统的全球市场份额已达84.6%,占据着市场主导地位。另外,Android应用市场为用户们提供了层出不穷的Android应用。截止到2014年,Google Play已经发布了近1 430 000个应用[2]。为了提高用户体验,Android系统为应用提供了多样化的组件,例如传感器、多媒体服务以及文件读取的IO组件等。因此,Android应用可以为人们带来丰富而又便捷的服务,改变人们的生活方式。Android系统为应用开发提供充分的系统接口支持,吸引了广大的应用开发者。
由于有限的电池容量、CPU使用率和内存空间等众多因素限制,移动设备的资源显得及其重要,尤其是手机。Android应用与用户交互的过程会时刻占用系统硬件资源,如果应用误调用系统接口导致资源管理不当,就会引发能耗问题。这些造成电池寿命下降的现象被称为能耗漏洞[3],这些漏洞会造成系统不必要的能源开销,使得电池电量很快耗尽。为了改善应用能耗问题,越来越多的研究者开始关注Android应用能耗研究,检测能耗问题并提出相应的分析方法。本文以Android平台为背景,针对Android应用中的能耗漏洞概括并总结现有的研究工作,提出进一步的研究展望。
Android系统以其丰富的功能改变了世界,但是随着其功能的逐渐强大,系统能耗的代价也逐渐上升。Android手机存在大量的组件、传感器以及服务, 例如GPS、Camera、WiFi、Screen、Bluetooth等,然而每一个组件或服务的使用都会消耗电池能源。手机的能耗与其组件的使用情况有直接关系。例如,地图应用会通过GPS导航系统进行地理位置追踪;指南针应用会使用方向传感器确定方向;新闻应用会通过WiFi、3G、4G网络数据传输时刻更新当前新闻消息等。Abhijeet等人[4]通过解析Android手机中的power_profile.xml文件获取手机组件在不同状态下的耗电情况,如图1所示,可以看出屏幕、GPS、Wifi等组件都是高耗电组件。不同类别的应用会根据业务需求使用不同的组件,不同使用场景导致了手机不同程度的耗电现象。因此,如何在电池能源有限的情况下提高Android手机的能源使用效率,避免不必要的耗电现象,成为了提高用户体验的重要因素,也是解决应用高耗电问题的有效措施。
图1 LG L3 E400手机组件能耗图
在能源极其有限的Android手机中,系统资源需要被合理使用。系统资源被合理使用时,能耗会呈现平稳趋势,在释放阶段逐渐下降直到系统回到休眠状态,如图2(a)所示。如果应用出现能耗漏洞,那么系统能源将会被严重消耗,手机电量也将会被迅速耗尽。在应用市场中,很多应用因为错误的设计导致能耗漏洞的出现。能耗漏洞问题严重影响了用户体验,并成为开发者们关注的焦点。如果应用在运行过程中使得手机能耗大幅度上涨,那么该应用潜在或存在某种能耗漏洞。在现有的研究工作中,能耗漏洞可以分为能耗热点和能耗泄漏两大类[4-8]。
2.1能耗热点
能耗热点指的是应用运行过程中造成能源热点消耗。在图2(b)中可以明显看出,应用处于资源使用阶段时,能耗出现大幅度增长的趋势。在现有研究工作中,能耗热点主要包括以下几种情况:
(1) 资源申请与释放时机错误:资源在应用使用时申请过早或者在应用退出时释放过晚会消耗更多的能源。
(2) 高能耗的后台服务:为了提高用户体验,应用会尝试使用高能耗的服务,例如提高GPS的位置更新频率。然而不必要的高频率更新会造成能源的异常消耗。
(3) 循环能耗:循环或者迭代的方式代表应用程序中不断重复执行的行为,由循环产生的漏洞可能出现在某些特定场景中。例如作为客户端的Android应用向一个不可达的服务器发送连接请求,周期性请求连接的行为将会产生大量能源的消耗。
(4) 无用代码:表示源码中定义或者声明却未被使用的代码,甚至可以是分支结构中永远不可到达的代码块。虚拟机运行程序机器指令时同样会将这些无用代码加载到内存中执行,造成多余的能源耗费。
(5) 过多的数据操作:过多的数据移动或储存如频繁的I/O读写、SQLite数据库操作将会严重消耗内存使用[9]。
(6) 应用的布局加载:在应用启动时,需要将布局文件与相应的Activity进行绑定,即调用setContentView方法为此Activity显示指定布局。布局在显示的过程中需要系统读取并解析布局文件,在布局文件相当复杂时,系统不得不消耗更多内存以及更长时间展开布局。
2.2能耗泄漏
能耗泄漏指的是应用的某些行为阻碍手机进入空闲状态,导致能源的持续消耗。如图2(c)所示,虽然应用在资源使用阶段处于平稳的状态,但是应用进入后台或者应用进程结束时没有释放相应的资源,使得资源不能及时释放,导致应用在资源释放阶段仍持续耗电。相关的能耗泄漏包括以下几种情况:
(1) 无休眠(No-Sleep)漏洞:指应用获取WakeLock对象使得CPU、屏幕保持在活动状态,而在任务结束之后没有及时释放WakeLock对象占用的资源,导致CPU、LCD无法进入休眠状态而持续消费能源。
(2) 资源泄漏:WiFi、多媒体等资源有可能在应用执行过程中获取,但是未能在应用结束时进行释放,导致硬件资源处于开启状态,造成能耗泄漏。
(3) 自启动漏洞:指应用进程被销毁之后在后台再次创建,使得手机无休止地为该进程消耗能源。该漏洞多数情况下由后台的服务监控,当收到进程销毁的消息后,唤醒系统开启新的进程实例[10]。
(4) 内存泄漏:所有应用程序都可能出现的一种能耗漏洞,指在程序运行时系统不断为程序分配内存空间,或是由于疏忽和错误导致程序关闭时未能释放相应的内存空间。内存泄漏的问题对于资源有限的嵌入式设备来说十分严重[11]。常见的内存泄漏问题,有位图对象内存泄漏、监听器泄漏等。
为了能够检测应用中潜在的能耗漏洞,采用有效的程序分析、测试方法可以尽可能多地帮助应用发现这些错误,提高应用的可靠性和健壮性。
3.1静态分析方法
3.1.1信息流分析
信息流分析分为控制流分析和数据流分析。控制流分析基于应用程序的代码层,将程序划分为一个个基本块(连续的线性代码的语句序列),静态分析基本块之间的控制结构,以控制流图的形式表示应用程序执行路径。Michael等人[12]构建了一般应用程序的控制流图,根据Manifest文件定义每个组件的入口点(如MainActivity的onCreate方法),并加入Android应用的回调机制等特性(如广播的onReceive方法),逐步完善控制流图的构建。Guo[13]等人采用控制流图的方法检测能耗泄漏问题。该方法通过字节码的分析构建函数调用关系图以及每个函数的控制流图,并对函数调用关系图和控制流图等结构进行深度遍历,检测应用中的唤醒锁、传感器等资源是否出现能耗泄漏。Abhinav等人[14]用数据流分析方法检测无休眠漏洞。该方法以控制流图为基础,在控制流图中基本块的入口处以及出口处收集程序的语义信息,利用数据流方程对程序中数据的使用、定义及数据之间的依赖关系等方面的信息进行分析,从而对Wakelock对象以及Camera对象的申请与释放状态进行检测。Panagiotis等人[15]使用控制流与数据流相结合的分析方法对328个Android应用进行No-sleep漏洞的检测,发现其中145个应用存在该漏洞。
3.1.2中间语言转换
由于Dalvik字节码不同于Java字节码,导致Soot[26]、WALA[28]等工具无法支持对Dalvik字节码的分析。因此,一些研究方法通过将Dalvik字节码进行转换,转换为Java字节码或中间表示语言,从而可以采用更加通用的Java程序分析方法以及工具进行分析。Damien[29]等人提出Dare工具将Android应用程序作为输入(输入包括dex、apk以及class文件),生成应用的Java字节码。同样地,Dexpler工具[30]可以将Dalvik字节转换为Jimple语言表示。Jimple语言是Soot工具支持的中间表示语言,因此可以利用Soot工具对Jimple文件进行分析。
3.1.3模型检测
在能耗泄漏问题中,研究方法可以将系统资源的使用情况作为应用的状态,对应用的具体实现进行抽象,用状态迁移系统建立应用资源状态的转换模型,并用相应的模态逻辑公式与时态逻辑公式验证模型是否存在资源泄露问题。Song等人[35]使用模型检测的方法识别用户信息泄漏情况,文章虽然关注安全问题,但是模型检测的方法同样可以借鉴到能耗分析中。
3.1.4符号执行
符号执行的方法通常使用在路径敏感的程序分析中。对于能耗问题的静态分析,利用符号执行的方法可以精确地模拟应用的执行,并在每一条分支结构下,收集目标变量的可能取值。因此,研究方法可以将应用所使用的资源作为目标变量进行跟踪,对每条执行路径中资源变量的取值状态进行分析。现有工作中使用符号执行方法的能耗研究相对较少,Nariman等人[34]通过改造Java Path Finder工具使应用可以运行于JVM虚拟机,并提出符号执行的方法生成测试用例并对应用进行动态测试。
3.2动态分析方法
3.2.1事件流分析
为了能够实时监控应用执行中出现的能耗漏洞,Abhijeet等人[4]提出了基于事件流图的测试框架,动态分析应用程序的行为。该框架可以检测能耗热点以及能耗泄漏。事件流图基于Android UI模型[16],而流图的构建需要通过其他工具完成,分别为Hierarchy Viewer[17]和Dynodroid[18]。前者提供应用布局中UI控件元素信息,而后者可以针对控件能够触发的事件自动化生成事件序列。序列中的每个节点代表一个具体的执行动作(例如点击应用中的播放按钮执行音频文件的播放),而节点之间的边代表事件间的转移。在应用程序运行过程中,框架在记录事件序列的同时,还需要跟踪并记录交互过程中系统资源API的调用情况,并通过Yokogawa WT210[19]测量仪器给出精确的应用能耗信息。框架根据能耗信息可以计算特定组件的能耗情况,该值越高则代表应用耗电越严重。因此,在应用执行过程中出现能耗过高的情况则代表应用出现能耗热点问题。应用退出时,能耗过高则代表能耗泄漏问题。框架对30个应用进行检测,并准确发现潜在的能耗热点与能耗泄漏。
3.2.2污点检测
污点检测[20]将来自于可疑渠道的数据标记为“被污染”,跟踪污点数据在程序中的扩散过程,最后通过一定的检测规则查找软件中的漏洞。TaintDroid[21]是Android平台的扩展工具,用于检测敏感数据在不信任应用中泄漏的安全问题。它自动标记涉及到敏感数据的变量、文件、进程间的消息,当污点数据通过网络传播离开手机时报告给用户以及安全服务商。而Zhang等人[22]基于TaintDroid的方法提出ADEL工具,用来检测能耗热点,例如下载无用网络数据或数据频繁更新。工具在网络端口监听下载数据,将下载的网络数据进行分类并将每类数据对象标记唯一的ID标签作为污点数据,用堆栈结构存储标签信息以及该标签的数据对象。Liu[23]提出的GreenDroid工具利用污点分析的方法分析传感器数据的利用率。该工具构建基于Java Path Finder[24],使Android应用程序可以运行在JVM虚拟机。该工具可以帮助应用定位能源使用效率低下的问题。Flowdroid[25]是一个Android应用静态污点分析工具,工具在Soot[26]和Heros[27]的基础上进行精确的数据流分析,整个分析过程与数据流执行顺序相关。该方法分为向前、向后两种方向的分析,向前的污点分析用于找出污点变量、引用的传播位置;而向后的污点分析用于查找污点数据生成之前所依赖的其他数据,这些数据存在于堆栈中。
3.2.3程序插桩分析
程序插桩技术是将代码片段(如日志信息输出语句)植入目标应用中,然后运行应用,收集应用在动态运行过程中的状态变量变化信息以及执行路径信息(如函数执行顺序、调用关系等)。插桩分析不能直接检测应用的能耗问题,但是该方法可以有效地理解应用的动态行为,从而验证应用是否满足某些性质或规则。Guo[13]等人利用插桩分析方法收集应用动态执行的路径覆盖信息,从而验证静态分析中系统资源泄漏问题的正确性。
3.3现有工作总结
通过以上介绍,Android应用能耗漏洞的分析方法可分为静态、动态分析两类。从表1中可以看到每种方法的特点。
表1 能耗漏洞分析方法总结
3.4相关工具
探究应用性能及能耗的相关工具有很多,分别从应用的调试方面、测试方面和分析方面帮助开发者进行检测。
在应用开发与调试方面,Google在Android2.3中增加的StrictMode接口[36]可以检测代码质量。Android提供的TraceView工具[37]可以图形化显示应用在每个线程中所调用函数的执行时间与执行次数。SDK中提供的Dmtracedump工具[38]可以分析应用执行过程中方法之间的层级调用关系。Apktool[40]是一个应用的逆向工具,该工具可以对APK文件进行逆向工程,生成smali格式的字节码文件。结合dex2jar工具[41]可以将smali字节码转为Java代码,便于分析第三方应用。Androguard工具[39]同样采用逆向工程的方法分析APK文件,可以获取应用中的相关组件、权限等信息并生成相应的方法调用关系图、控制流图。Relda[13]是一个基于Androguard的Android应用的静态分析工具,该工具可以检测应用中存在的资源泄漏,并给出详细的分析报告。 MAT工具[33]是Eclipse平台提供的用于分析Java程序内存问题的工具,同时支持Android应用的内存分析。Hierarchy Viewer工具[17]适用于查看与分析应用布局中各个控件的层次结构,可以进一步分析布局中的性能瓶颈。
在应用测试方面,Android提供的Instrumentation框架[42]基于Junit框架[43],增加Android应用特性。Robotium框架[32]是一个开源的Android自动化测试库,该框架进一步封装了Instrumentation框架,实现了应用的集成测试。Monkey[44]和MonkeyRunner[31]是黑盒测试工具,通常用于测试第三方应用的压力、可靠性、运行错误与异常。
4.1静态分析中的问题
(1) 在静态分析过程中,为了全局分析类之间或者函数之间的交互、依赖关系,经常采用构建函数摘要的方法。函数摘要是对函数信息的抽象,能耗分析中的函数摘要不仅要关注函数的输入变量、输出变量信息,还需要包含函数内部是否调用了资源相关的API。然而函数摘要的定义并没有统一的标准,如果为了提高分析效率而将函数摘要定义得非常简单,那么分析的准确度将会降低。例如某个函数摘要中定义了返回值的类型,在主调函数中该类型根据多态特性发生类型转换,导致无法确定该返回值的实际类型。
(2) Android应用是基于事件驱动的,静态分析需要将事件触发时的回调机制考虑全面。然而Android版本升级频率很高,每一次版本升级必然加入了新的API,分析方法需要定期将新的API回调规则以及错误模式进行升级。
(3) 目前的应用能耗静态分析还存在较多误报情况,这是由于分析的精确程度不同而导致的。例如分析方法未能将Android的回调特性考虑全面,或是无法识别多态类型的转换导致变量的实际类型无法确认。另外,为了提高分析效率而简化循环、递归结构的处理同样会导致分析结果的不准确。
(4) 静态分析往往能够检测出潜在的能耗问题,然而这些问题是否能够给手机能耗带来影响,还需要进行人工确认。一方面通过插桩的方式检测问题是否能够被触发,另一方面需要监控能耗的使用信息来判定问题的真实性。
4.2动态分析中的问题
(1) 动态分析不需要针对应用的代码进行分析,而是在应用运行过程中检测能耗漏洞。因此,动态分析需要生成有效的测试用例并保证测试用例能够覆盖应用运行过程中的所有状态,这样才足以触发并检测到应用的能耗问题,否则将会产生漏报情况。因此,如何保证测试用例的覆盖率是动态分析需要解决并改进的问题。
(2) 应用的运行过程与用户的行为密切相关,用户会根据经验改变应用的各种状态,因此生成测试用例时如果能够将用户的行为习惯作为约束条件,那么动态分析的效率将会更高。
(3) 针对能耗问题进行动态分析需要运行真实应用并监控手机的能耗情况。现有研究中通常利用外部仪器对手机能耗信息进行监控,这就为动态分析的环境构建带来不便因素。
Android应用能耗相关研究自数年前开始得到广泛关注,不论从能耗测量的角度或者能耗漏洞检测的角度,大量的研究方法都证明了能耗研究在理论研究和实践探索中都取得了较为突出的成果。然而随着应用程序实现方法的不断演变,能耗问题将会以不同形式展现,并且应用开发者在开发过程中会将主要精力放在功能实现而忽略能耗优化,因此现阶段研究并不能说明Android应用能耗研究已经达到完备。相反,现有研究并不充分,并且随着系统的发展,仍有更多的研究领域值得广泛关注。
(1) 改进静态分析方法
目前应用的静态分析需要提高分析的精确度。如图3所示,很多研究工作的静态分析都是通过Android应用源码或反编译后的Dalvik字节码,并根据动态回调机制,生成应用的组件间关系调用图、函数调用关系图,以及每个函数的控制流图;通过过程内与过程间的分析获取应用组件的状态,检测组件的状态是否在每条可执行路径结束时都处于释放状态,从而判断应用是否存在能耗漏洞。因此从整个过程来看,分析方法需要在信息流构建、过程内以及过程间进行改进,例如细化函数摘要的定义;并且尽可能全面地考虑Android的动态回调机制,例如AsyncTask对象执行execute()方法后要先后调用onPreExecute()、doInBackground()、onProgressUpdate()和onPostExecute()四个回调函数。因此可以将回调规则建立为相应的键值映射结构,当识别这些含有回调机制的指令时,根据键值映射结构以及对象所属类型可以找到相应的回调函数块进行分析。而静态分析结果的不确定性可以通过动态分析确认,并将不确定的信息交由动态分析精化。如图4所示,可以对应用代码进行插桩或者添加某些日志消息输出的指令,然后使用Monkey工具进行自动化压力测试,收集应用测试过程中的路径覆盖信息。将这些信息和静态分析结果的问题路径信息进行比较,可以有效地验证静态分析的准确性。
图3 Android应用静态分析流程
图4 通过动态分析确定静态分析结果
当Android版本更新,分析方法需要收集新的组件API规则以及定义新的能耗错误模式。现有工作通常是参照Android开发文档进行人工整理,通常会花费大量时间。为了提高效率,研究工作可以利用网络爬虫技术,制定相应的过滤规则,对在线开发文档进行API信息的抓取。如图5所示,在开发文档页面的html页面中,可以针对Android组件所属的包名以及版本号进行分类过滤,然后通过包名所在的页面获取该包中的类型信息,以及每个类中所有方法的信息。例如通过抓取可以收集到WakeLock类在Android5.0中加入了带参数的release方法,而Camera类在Android5.0中已经被Camera2替换。
图5 通过网络爬虫对开发文档API信息进行分类抓取
(2) 构建智能化的动态分析方法
现有能耗研究的方法以及技术已较为完善,然而Android应用的运行和用户的使用行为密切相关,因此在系统和应用方面都需要智能化动态感知能耗漏洞,自适应使用环境的变化,甚至可以根据环境采取相应的措施来堵塞漏洞的发生。例如,当手机处于低电量状态,用户通常希望GPS、WiFi等高耗电组件处于关闭状态。这时如果某个应用在后台启动这些组件,那么组件的启动行为应该被检测并记录。研究方法可以一方面通过Android API获取电量信息以及组件使用情况,如ConnectivityManager类可以判别当前网络连接类型,LocationManager类可以判别GPS是否开启等;另一方面获取Android文件系统中的能耗信息,这些信息保存在/proc目录下,例如/proc/stat文件记录了系统CPU使用信息,/proc/meminfo记录了系统内存使用信息等。根据电量以及组件使用信息,可以构建Android服务,在手机电量低的情况下对组件使用情况进行动态检测,将组件的能耗信息进行统计并反馈给用户,让用户了解手机中的应用是否潜在能耗问题。因此对于用户来说,构建有效的、智能化的能耗分析、解决方案,将是Android应用能耗分析的前景。
(3) 应用本地库代码中的能耗分析
现有工作对应用的本地代码研究相对较少。Android系统通过NDK可以得到C/C++代码支持,目前大部分的开源库是C/C++代码开发,应用需要构建本地方法调用第三方开源库。然而本地方法的错误使用同样会导致能耗漏洞的出现。例如很多应用会使用OpenGL ES进行三维图形的渲染,如果应用在本地方法中没有有效控制渲染帧率,或者没有及时释放无用的帧缓存,那么手机将会加速耗电。现有工作中对NDK中能耗问题的探测相对较少,因此这是一个值得关注的领域。
(4) 应用布局的性能分析
布局在呈现的过程中需要系统读取并解析布局文件。当布局文件相当复杂时,系统会消耗更多内存以及更长时间展开布局,造成布局的加载出现卡顿现象,大大降低了用户体验。图6为Hierarchy View工具对布局的分析示例,左边的FrameLayout控件中布局指示器和绘制指示器均显示为黑色,表示该控件在视图树加载过程中执行缓慢。究其缓慢的原因是该FrameLayout控件所包含的子控件数目很多,层次较为复杂。Android系统绘制应用布局需要经过测量过程和绘制过程,如果视图树中层次复杂,节点数目过多,那么布局加载的过程就会需要更多时间以及更大内存。因此在检测布局性能问题时,研究方法可以关注布局中视图树的复杂程度,可以根据某些规则,减小视图树的层次。例如同一层次的ImageView控件和TextView控件可以合并为一个TextView控件,而利用TextView的drawable属性就可以完成图片的填充。目前应用布局性能分析的研究工作相对较少,因此如何减少布局带来的系统开销需要更广泛的关注和研究。
图6 Hierarchy Viewer工具分析布局加载的性能
(5) 新特性中潜在的能耗问题
目前Android5.0系统为改善能耗提出新的特性,包括系统以及API两个方面。因此开发者应该遵循这些“新规则”构建出更为省电的应用,这就导致现有应用不得不经过旧版本移植的过程。并且伴随新特性,新应用开发过程中出现的新问题也将会存在更多的研究空间。
(6) 应用能耗优化分析
现有的研究工作多是针对能耗的分析与检测。然而为了避免漏洞的出现,研究工作可以从优化方法的角度出发,对存在能耗漏洞的应用给出合理的优化建议和优化方案,这样可以更加有效地帮助开发者改善应用中的能耗问题。例如所有的资源释放操作都可以提前到Activity的onPause方法中进行,也就是当应用处于暂停状态下释放相应的资源,关闭高耗电组件。
本文对Android应用能耗分析技术进行综述。首先介绍Android应用中能耗问题的成因。然后对现有研究中发现的能耗漏洞进行分类,并对每种能耗漏洞的子问题进行描述。接着详细描述了能耗漏洞的现有分析方法以及相关工具,并概括了现有工作中的不足。最后根据现有工作存在的问题以及Android应用能耗研究的发展对未来研究工作进行展望。
[1] Android Captures Record 85% share of Global Smartphone shipments in Q2 2014[OL].[2014-7-30].http://www.strategyanalytics.com/default.aspx?mod=reportabstractviewer&a0=9921.
[2] GooglePlay[OL].[2015-4-2]. http://en.wikipedia.org/wiki/Google_Play.
[3] Jack Z, Ayemi M, Wei L. A Comparison of Energy Bugs for Smartphone Platforms[C]//The International Workshop on Engineering of Mobile-Enabled Systems. San Francisco: IEEE, 2013:25-30.
[4] Abhijeet B, Lee K C, Sudipta C, et al. Detecting energy bugs and hotspots in mobile apps[C]//The 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering(FSE 2014). New York: ACM, 2014:588-598.
[5] Marion G, Mirco J, Jan J, et al. Removing Energy Code Smells with Reengineering Services[J].GI-Jahrestagung,LNI,2012, 208:441-455.
[6] Pathak A,Hu Y C, Zhang M. Bootstrapping Energy Debugging on Smartphones: A First Look at Energy Bugs in Mobile Devices[C]//The 10th ACM Workshop on Hot Topics in Networks Article(Hotnets’11).New York:ACM,2011:1-6.
[7] Étienne P, Fausto S. Static analysis of Android programs[C]//The 23rd international conference on Automated deduction(CADE2011).Berlin:Springer,2011:439-445.
[8] Li D, Halfond W G J. An Investigation into Energy-Saving Programming Practices for Android Smartphone App Development[C]//The 3rd International Workshop on Green and Sustainable Software(GREENS’2014). New York: ACM, 2014:46-53.
[9] Hagen H, Christian B. Towards an energy-consumption based complexity classification for resource substitution strategies[C]//The CEUR Workshop Proceedings,CEUR-WS(GvD Workshop’10). Bad Helmstedt: 2010,581.
[10] Android Service[OL].[2015-3-19].http://developer.android.com/reference/android/app/Service.html.
[11] Jihyun P, Byoungju C. Automated Memory Leakage Detection in Android Based Systems[J].International Journal of Control and Automation, 2012,5(2):35-42.
[12] Grace M, Zhou Y J, Wang Z, et al. Systematic Detection of Capability Leaks in Stock Android Smartphones[C]//The 19th Network and Distributed System Security Symposium(NDSS 2012).San Diego: NDSS, 2012:1-15.
[13] Guo Chaorong,Zhang Jian,Yan Jun, et al. Characterizing and Detecting Resource Leaks in Android Applications[C]//The 28th International Conference on Automated Software Engineering(ASE 2013).Silicon Valley: IEEE, 2013:389-398.
[14] Abhinav P, Abhilash J, Hu Y C, et al. What is keeping my phone awake?: characterizing and detecting no-sleep energy bugs in smartphone apps[C]//The 10th international conference on Mobile systems, applications and services(MobiSys’12).New York: ACM, 2012:267-280.
[15] Panagiotis V, Ranjit J, Sorin L, et al. Towards verifying android apps for the absence of no-sleep energy bugs[C]//The 2012 USENIX conference on Power-Aware Computing and Systems(HotPower’12). Berkeley: USENIX Association, 2012:3.
[16] Atif M, Ishan B, Adithya N. GUI Ripping: Reverse Engineering of Graphical User Interface for Testing[C]//The 10th Working Conference on Reverse Engineering(WCRE’03).IEEE, 2003:260-269.
[17] Hierarchy Viewer[OL]. [2015-4-2].http://developer.android.com/tools/help/hierarchy-viewer.html.
[18] Aravind M, Rohan T, Mayur N. Dynodroid: An Input Generation System for Android Apps[C]//The 9th Joint Meeting on Foundations of Software Engineering(ESEC/FSE 2013).New York: ACM, 2013:224-234.
[19] Yokogawa WT210[OL].[2013-5-12].http://tmi.yokogawa.com/discontinued-products/digital-power-analyzers/digital-power-analyzers/wt210wt230-digital-power-meters/#tm-wt210_01.htm.
[20] Taint Checking[OL].[2014-1-7]. http://en.wikipedia.org/wiki/Taint_checking.
[21] William E, Peter G, Byung C, et al. TaintDroid: An Information-Flow Tracking System for Realtime Privacy Monitoring on Smartphones[C]//The 9th USENIX Symposium on Operating Systems Design and Implementation(OSDI’10),2010:1-15.
[22] Zhang L, Gordon M S,Dick R P, et al. ADEL: an automatic detector of energy leaks for smartphone applications[C]//The 8th ACM international conference on Hardware/software codesign and system synthesis(CODES+ISSS’12). New York: ACM, 2012:363-372.
[23] Liu Yepang, Xu Chang, Cheung S C. Where Has My Battery Gone? Finding Sensor Related Energy Black Holes in Smartphone Applications[C]//The 2013 IEEE International Conference on Pervasive Computing and Communications (PerCom).San Diego: IEEE, 2013:2-10.
[24] Java Path Finder[OL].[2007-10-30]. http://babelfish.arc.nasa.gov/trac/jpf/.
[25] Steven A, Siegfried R, Christian F, et al. FlowDroid: Precise Context, Flow, Field, Object-sensitive and Lifecycle-aware Taint Analysis for Android Apps[C]//The 35th ACM SIGPLAN Conference on Programming Language Design and Implementation(PLDI’14).New York: ACM, 2014:259-269.
[26] SOOT[OL].[2008-9-22]. http://www.bodden.de/2008/09/22/soot-intra.
[27] Heros[OL]. [2015-1-27]. https://github.com/Sable/heros.
[28] WALA[OL].[2013-7-17]. http://wala.sourceforge.net/wiki/index.php/Main_Page.
[29] Damien O, Somesh J, Patrick M. Retargeting Android Applications to Java Bytecode[C]//The ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering(FSE’12). New York: ACM, 2012:1-11.
[30] Alexandre B, Jacques K, Yves L T, et al. Dexpler: converting Android Dalvik bytecode to Jimple for static analysis with Soot[C]//The ACM SIGPLAN International Workshop on State of the Art in Java Program analysis(SOAP’12). New York: ACM, 2012:27-38.
[31] MonkeyRunner[OL].[2015-2-16].http://developer.android.com/tools/help/MonkeyRunner.html.
[32] Robotium[OL].[2015-3-10].https://code.google.com/p/robotium/wiki/RobotiumTutorials.
[33] MAT[OL]. [2014-6-25]. http://www.eclipse.org/mat/.
[34] Nariman M, Sam M, Corina S P, et al. Testing Android Apps Through Symbolic Execution[J].ACM SIGSOFT Software Engineering Notes,2012,37(6):1-5.[35] Song F, Touili T. Model-Checking for Android Malware Detection[J].Programming Languages and Systems, 2014:216-235.
[36] StrictMode[OL].[2015-4-2].http://developer.android.com/reference/android/os/StrictMode.html.
[37] Traceview[OL].[2015-4-2].http://developer.android.com/tools/help/traceview.html.
[38] dmtracedump[OL].[2015-4-2].http://developer.android.com/tools/help/dmtracedump.html.
[39] Androguard[OL].[2015-4-2]. https://code.google.com/p/androguard/.
[40] Apktool[OL].[2015-3-18]. http://ibotpeaches.github.io/Apktool/.
[41] dex2jar[OL]. [2012-10-25]. http://code.google.com/p/dex2jar.
[42] Instrumentation[OL].[2015-4-2].http://developer.android.com/reference/android/app/Instrumentation.html.
[43] Junit[OL]. [2014-12-4]. http://junit.org/.
[44] Monkey[OL].[2015-2-16].http://developer.android.com/tools/help/monkey.html.
SURVEY ON ENERGY BUG ANALYSIS TECHNOLOGY OF ANDROID APPLICATIONS
Yang Hongli1Jiang Hao1Qin Shengchao2Zhang Jian3Yan Jun3
1(College of Computer Science, Beijing University of Technology, Beijing 100124, China)2(CollegeofComputerScienceandSoftwareEngineering,ShenzhenUniversity,Shenzhen518060,Guangdong,China)3(InstituteofSoftware,ChineseAcademyofSciences,Beijing100190,China)
With the rapid development of mobile Internet technology, Android smart phone provides convenient services for people’s daily life with its powerful functions. However, the energy resource of Android applications is very limited. The energy consumption of Android applications will directly affect battery life. Therefore, the energy bugs of Android applications are greatly concerned by the researchers, and quite a few of technologies and correlated tools have been proposed and developed. This paper outlines the correlated research methods and tools for energy bugs analysis of Android applications and summarises the problems in recent studies, as well as discusses the research directions in the future.
Android applicationsEnergy bugProgram analysisMobile internet
2015-06-07。国家自然科学基金项目(61373033)。杨红丽,副教授,主研领域:Android应用能耗分析,程序分析与验证。姜皓,硕士。秦胜潮,教授。张健,研究员。严俊,副研究员。
TP3
A
10.3969/j.issn.1000-386x.2016.09.001