系统属性调用评估报告

1.目的和意义

目的一:我们预备在系统中内置自己开发的性能评测APK工具,并通过一个SDM系统属性值来进行控制其编译的开关。因此,想先评估一下通过系统属性值控制,会不会对系统的使用造成太大影响。

目的二:系统内获取和设置属性是一个常见的方法,在Settings、Wifi等等模块中有大量使用。但是我们目前并未有属性调用对系统性能影响的评估。通过此次测试评估,能够使我们对这方面的知识有一个精确的认识和把握,有利于今后的性能问题分析。

总之,对于我们把控影响系统的因素,排除这一方面对性能问题带来的影响产生有益帮助。

2.评测环境

手机:项目XX proto
软件版本:v4B1Q-3
系统版本:Android 4.4.2

3.评测方法

3.1第三方应用调用系统公开属性

我们首先编写了一个PropertiesHelper.apk,用来模拟第三方应用对系统公开属性的调用。在这里,我们通过调用系统屏幕亮度的属性值来进行测试。

获取属性的代码:

int mGetPropResult = Settings.System.getInt(cr, Settings.System.SCREEN_BRIGHTNESS);

设置属性的代码:

WindowManager.LayoutParams params = getWindow().getAttributes();
params.screenBrightness = 5f;
……
getWindow().setAttributes(params);

我们获得以下测试数据(10000次均值,单位:ms):
这里写图片描述
我们得出结论:

  1. 第三方应用Get属性值的速度调幅较大,性能不稳定;
  2. 第三方应用Get属性值一次的平均时间为0.187ms;
  3. 第三方应用Set属性值一次的平均时间为0.093ms。

3.2系统应用调用系统内部属性

因为系统内部属性并不对外开放,而且获取属性的方法为@hide隐藏型,因此,要测试这部分内容,必须在系统源码环境下进行。

我们首先分析获取系统内部属性的方法,主要为:

SystemProperties.get();
SystemProperties.getInt();
SystemProperties.getBoolean();
SystemProperties.getLong();

设置系统属性的方法,主要为:

SystemProperties.set();

这些方法,全都是由SystemProperties.java (frameworks\base\core\java\android\os)进行定义的。

我们可以在这些种类的属性时加入我们自己的统计代码,打印log,进而得到相关评测数据。为了评测的准确和方便,我在Settings中集成了PropertiesCalculatorSettings的功能,具体实现不详细讲了,核心方法如下。

获取属性的代码:

// get:
mSvn = SystemProperties.get("ro.def.software.svn");
// getInt:
mGuestMode = SystemProperties.getInt("persist.security.guestmode", 0);
// getBoolean:
mResult = SystemProperties.getBoolean("ro.settings.seprate", true);
// getLong:
mEcmTimeOut = SystemProperties.getLong("ro.cdma.ecmexittimer", 300000);

设置属性的代码:

// set:
SystemProperties.set("persist.sys.headset_mode", "2");

我们获得以下数据(10000次均值,单位:ms):
这里写图片描述
我们得出结论:

  • Set一次平均耗时1.796ms;
  • Get(String)耗时要高于其他类型(int/boolean/long);
  • Get(String)一次平均耗时0.013ms;
  • Get(int/boolean/long)一次平均耗时0.007ms;
  • Set耗时要高于Get。

4.结论

  • 我们可以通过SDM系统定制属性来控制性能评测工具的集成。

  • 在系统级内置应用中,应该尽量避免频繁设置系统属性值。这个操作我们平时并不经常进行,因此,只要留意和知悉即可。

5.延伸讨论

除了获取系统属性,我们在源码中还经常进行的一项操作是对系统资源的获取和设置,常用的方法如下:

getResources().getBoolean();
getResources().getString();
getResources().getStringArray();
getResources().getInteger();
getResources().getDrawable();
getResources().getText();

对于这部分内容,未来纳入评估之中也将具有很大意义,可以抽时间来进一步研究。

报告详细数据,请见单独文章:
《系统属性调用评估表》

  • eyelike@2015-01-28
一、风险评估项目概述 1 1.1 工程项目概况 1 1.1.1 建设项目基本信息 1 1.1.2 建设单位基本信息 1 1.1.3承建单位基本信息 2 1.2 风险评估实施单位基本情况 2 二、风险评估活动概述 2 2.1 风险评估工作组织管理 2 2.2 风险评估工作过程 2 2.3 依据的技术标准及相关法规文件 2 2.4 保障与限制条件 3 三、评估对象 3 3.1 评估对象构成与定级 3 3.1.1 网络结构 3 3.1.2 业务应用 3 3.1.3 子系统构成及定级 3 3.2 评估对象等级保护措施 3 3.2.1 XX子系统的等级保护措施 3 3.2.2 子系统N的等级保护措施 3 四、资产识别与分析 4 4.1 资产类型与赋值 4 4.1.1资产类型 4 4.1.2资产赋值 4 4.2 关键资产说明 4 五、威胁识别与分析 4 5.1 威胁数据采集 5 5.2 威胁描述与分析 5 5.2.1 威胁源分析 5 5.2.2 威胁行为分析 5 5.2.3 威胁能量分析 5 5.3 威胁赋值 5 六、脆弱性识别与分析 5 6.1 常规脆弱性描述 5 6.1.1 管理脆弱性 5 6.1.2 网络脆弱性 5 6.1.3系统脆弱性 5 6.1.4应用脆弱性 5 6.1.5数据处理和存储脆弱性 6 6.1.6运行维护脆弱性 6 6.1.7灾备与应急响应脆弱性 6 6.1.8物理脆弱性 6 6.2脆弱性专项检测 6 6.2.1木马病毒专项检查 6 6.2.2渗透与攻击性专项测试 6 6.2.3关键设备安全性专项测试 6 6.2.4设备采购和维保服务专项检测 6 6.2.5其他专项检测 6 6.2.6安全保护效果综合验证 6 6.3 脆弱性综合列表 6 七、风险分析 6 7.1 关键资产的风险计算结果 6 7.2 关键资产的风险等级 7 7.2.1 风险等级列表 7 7.2.2 风险等级统计 7 7.2.3 基于脆弱性的风险排名 7 7.2.4 风险结果分析 7 八、综合分析与评价 7 九、整改意见 7 附件1:管理措施表 8 附件2:技术措施表 9 附件3:资产类型与赋值表 11 附件4:威胁赋值表 11 附件5:脆弱性分析赋值表 12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值