GreenDroid:安卓应用能源效率诊断利器
立即解锁
发布时间: 2025-08-25 01:52:02 阅读量: 2 订阅数: 10 

# GreenDroid:安卓应用能源效率诊断利器
## 1. 能源效率诊断概述
在安卓应用开发中,能源效率是一个关键问题。能源效率诊断能够帮助开发者找出应用中不必要的能源消耗原因。通过分析像 GreenDroid 生成的能源问题报告,开发者可以理解为何应用会消耗比必要量更多的能源。这些报告能指出由于无效使用感官数据而导致能源不必要消耗的应用状态。开发者可以据此采取行动,例如调低传感速率或暂时禁用传感功能。
对于检测到的缺失传感器或唤醒锁停用问题,GreenDroid 也会报告相关信息用于能源问题诊断,具体包括:
- 那些在应用退出前被遗忘正确注销或释放的传感器监听器或唤醒锁。
- 导致这些有问题应用状态的事件处理程序调用跟踪。
## 2. GreenDroid 工具实现
GreenDroid 是基于 JPF 实现的能源诊断原型工具,由 18367 行 Java 代码组成,其中 7251 行用于能源诊断,11116 行用于建模 Android API。
### 2.1 Android API 建模
由于 Android 应用依赖于专有库类,而这些库类在真实设备或模拟器之外不可用,因此对其进行建模是诊断的必要步骤。Android 向开发者暴露了超过 8000 个公共 API,完全建模它们对于个人研究者来说几乎不可能。所以,当前实现中采用了实用方法,手动建模了 Android 应用中常用的一部分 API。具体来说,使用 JPF 的本地对等和监听器机制仔细建模了 76 个 API,这些 API 要么在实验应用中频繁被调用,要么不建模会导致 JPF 崩溃。建模这些 API 花费了近三个月时间。对于其余 API,提供了具有简单逻辑的存根,基本忽略其副作用,并在必要时使其返回合理范围内的值。
### 2.2 跟踪信息
除了跟踪标准的 JPF 程序状态信息(如每个线程的调用栈、堆和调度信息),GreenDroid 还跟踪以下四种类型的信息用于分析:
- 活动活动的堆栈、其生命周期状态以及包含的 GUI 元素的可见性。
- 正在运行的服务列表及其生命周期状态。
- 已注册的广播接收器列表。
- 已注册的传感器监听器和唤醒锁列表。
## 3. 实验评估
### 3.1 实验设置
选择了 14 个开源 Android 应用作为实验对象,这些应用涵盖了 11 个不同类别,总下载量超过 500 万次。前 12 个应用已被确认存在两种已识别模式的能源问题,用于验证方法的有效性。另外选择了 Omnidroid 和 GPSLogger,虽然它们没有确认的能源问题报告,但从项目网站和用户评论判断,它们大量使用 GPS 传感器,容易出现能源效率问题。将这些应用的源代码在 Android 2.3.3 上编译,并在配备 Intel Core i5 CPU @2.60GHz 和 8GB RAM 的双核机器上运行 Windows 7 Professional SP1 进行实验。
实验旨在回答以下五个研究问题:
- RQ4(有效性和效率):GreenDroid 能否有效诊断和检测现实世界 Android 应用中的能源问题?其诊断开销是多少?
- RQ5(AEM 模型的必要性和有用性):GreenDroid 能否使用 AEM 模型正确调度 Android 应用的事件处理程序?如果随机调度事件处理程序(即禁用 AEM 模型),GreenDroid 是否仍能进行有效诊断?
- RQ6(事件序列长度限制的影响):生成的用户交互事件序列的长度限制如何影响能源诊断的彻底性(从代码覆盖率角度)?
- RQ7(与资源泄漏检测工作的比较):在发现真正的缺失传感器或唤醒锁停用问题方面,GreenDroid 与现有资源泄漏检测工作相比如何?
- RQ8(节能):如果修复检测到的能源问题,潜在可以节省多少能源?
### 3.2 实验对象信息
| 应用名称 | 版本 | LOC | 源代码仓库 | 应用类别 | 下载量 | 检测到的能源问题(严重程度) |
| --- | --- | --- | --- | --- | --- | --- |
| DroidAR | R - 204a | 18106 | Google Code | Tools | 5 - 10 K | 缺失传感器停用(Medium) |
| Recycle Locator | R - 68 | 3241 | Google Code | Travel & Local | 1 - 5 K | 缺失传感器停用(Medium) |
| Ushahidi | R - 9d0aa75 | 10186 | GitHub | Communication | 10 - 50 K | 缺失传感器停用(N/A) |
| AndTweet | V - 0.2.4b | 8908 | Google Code | Social | 10 - 50 K | 缺失唤醒锁停用(Medium) |
| Ebookdroid | R - 137 | 14351 | Google Code | Productivity | 1 - 5 M | 缺失唤醒锁停用(Medium) |
| BableSink | R - 12879a3 | 1718 | GitHub | Library & Demo | 1 - 5 K | 缺失唤醒锁停用(N/A) |
| CWAC - Wakeful | R - d984b89 | 896 | GitHub | Education | 1 - 5 K | 缺失唤醒锁停用(N/A) |
| Sofia Public Transport Nav.(R - 114) | R - 114 | 1443 | Google Code | Transportation | 10 - 50 K | 感官数据利用不足(Critical) |
| Sofia Public Transport Nav.(R - 115
0
0
复制全文
相关推荐










