android 电量控制,提高 Android 云真机稳定性的方法

提高 Android 云真机稳定性的方法

在日常测试过程中我们时常会使用大量的 Android 真机执行任务,这些设备在批量执行任务过程中经常会出现电量耗尽而导致关机的问题,关机设备的处理大大增加了运维成本,本文主要通过减少设备耗电量和避免断电关机两个方面进行说明

根据设备电量控制任务,避免断电关机

避免真机断电关机的处理比较简单,我们根据设备耗电情况设置低位电量和正常电量。可指定低位电量为 20%,正常电量 60%,空闲设备低于高位电量时不接受任务,执行任务的设备电量低于低位电量时中断任务的运行。当电量高于正常电量时解除限制

通过 Shell 命令dumpsys battery获取设备的当前电量值,其中 level 对应的值就是电量值。我们在设备内定时检查电量,并做上述控制。这样就避免低电量的设备一直执行任务导致关机的情况。

~$adb shell dumpsys battery

Current Battery Service state:

AC powered: falseUSB powered: trueWireless powered: falseMax charging current: 0

Max charging voltage: 0

Charge counter: 37000

status: 5

health: 2

present: truelevel: 100

scale: 100

voltage: 4358

temperature: 300

technology: Li-poly 字段

含义

取值

备注

AC powered

是否处理直充状态

true/false

USB powered

是否处理 USB 充电状态

true/false

Wireless powered

是否处于无线充电状态

true/false

Max charging current

最大电流

未定,和具体设备有关

Max charging voltage

Max charging voltage

未定,和具体设备有关

status

电池状态

1:unknown, 2:charging, 3:discharging, 4:not_charging, 5:full

参考 BatteryManager

health

电池健康状态

1:unknown, 2:good, 3:overheat, 4:dead, 5:over_voltage, 6:unspecified_failure, 7: cold

参考 BatteryManager

level

电池电量百分比

0-scale

scale

电池电量最大值

默认都是 100

voltage

当前电压

0-max voltage

temperature

当前温度

当前温度

除以 10 得到摄氏温度

technology

电池类型

未定

减少设备耗电量,提高设备利用率

我们还可以通过控制设备状态让手机的耗电量减少。我们主要是控制手机屏幕的耗电量和减少后台应用的运行。

降低执行任务过程中屏幕亮度

随着手机的屏幕尺寸和分辨率的提升,屏幕的耗电量也与日俱增,我们如果能自动控制手机的屏幕亮度就可以减少很多不必要的电量消耗;

1、调节屏幕亮度时一定保证手机的亮度调节模式为手动,否则系统会根据环境自动调节屏幕亮度。我 们通过以下命令设置屏幕亮度调节模式为手动调节

#设置当前亮度调节模式:手动调节[0];自动调节[1]

settings put system screen_brightness_mode 0

#获取当前亮度调节模式

settings get system screen_brightness_mode

2、通过 shell 命令调节屏幕亮度

#获取当前屏幕亮度设置(0—255)

settings get system screen_brightness

#修改屏幕亮度设置[0—255]

settings put system screen_brightness 150

任务结束后关闭所有第三方程序并锁屏

现在的 App 有太多后台服务,这也是 Android 耗电量较大的一个原因,所以在设备闲置的情况下要避免后台应用的运行,这样也可以达到减少耗电的目的。

1、获取系统安装的第三方应用,执行 pm 命令查询系统安装的第三方应用,package:后面的信息为应用包名。

pm list packages -3

$adb shell pm list packages -3

package:com.sankuai.meituan

package:com.tencent.mm

package:com.liuzh.deviceinfo

package:com.ct.client

2、遍历所有应用,并通过am命令杀死应用

am force-stop [packagename]

adb shell am force-stop com.ct.client

设置手机状态,减少任务故障

自动设置息屏时间

在脚本执行过程中有可能会几分钟都不操作设备,如果这期间手机锁屏了,那么就有可能导致脚本异常。所以下面通过命令动态设置屏幕息屏时间

下面命令指定系统息屏时间为 30S

adb shell settings put system screen_off_timeout 30

设置时间自动获取

当手机的时间与网络时间不同步时会导致很多异常信息,所以在任务执行前要首先设置系统自动设置时间

adb shell settings put global auto_time 1

设置手机音量

设置手机音量这部分是通过反射实现的,通过反射获取系统 IAudioService 服务,然后通过其接口设置音量

1、获取 IAudioService 对象

Method getServiceMethod=Class.forName("android.os.ServiceManager").getDeclaredMethod("getService", String.class);

IBinder binder = (IBinder) getServiceMethod.invoke(null, "audio");

Method asInterfaceMethod = Class.forName("android.media.IAudioService$Stub").getMethod("asInterface", IBinder.class);

IAudioService iAudioService= (IAudioService) (IInterface) asInterfaceMethod.invoke(null, binder);

2、获取当前情景模式

获取的情景模式值有

AudioManager.RINGER_MODE_SILENT 静音或免打扰模式

AudioManager.RINGER_MODE_VIBRATE 震动模式

AudioManager.RINGER_MODE_NORMAL 响铃模式

int mode=iAudioService.getRingerModeExternal()

3、设置系统模式

当系统模式为静音或免打扰时,只能设置多媒体音量和闹钟音量,设置其他音量时会抛异常。

调用方法设置为响铃模式

iAudioService.setRingerModeExternal(AudioManager.RINGER_MODE_NORMAL,"com.android.settings");

iAudioService.setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL,"com.android.settings"); #华为部分系统报错 9.1.0.226报错

java.lang.SecurityException: request policy access status foranother package: uid 2000 does not have android.permission.STATUS_BAR_SERVICE.

at android.os.Parcel.createException(Parcel.java:1953)

at android.os.Parcel.readException(Parcel.java:1921)

at android.os.Parcel.readException(Parcel.java:1871)

at android.media.IAudioService$Stub$Proxy.setRingerModeExternal(IAudioService.java:1309)

at com.android.manager.AudioServiceImpl.setVolume(AudioServiceImpl.java:84)

at com.android.test.DeviceMotion.setVolume(DeviceMotion.java:1599)

at com.qihoo.qa.opentest.OpenTestApplication.initDeviceState(OpenTestApplication.java:474)

at com.qihoo.qa.opentest.OpenTestApplication.init(OpenTestApplication.java:510)

at com.qihoo.qa.opentest.OpenTestApplication.main(OpenTestApplication.java:143)

at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)

at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:371)

Caused by: android.os.RemoteException: Remote stack trace:

at android.app.ContextImpl.enforce(ContextImpl.java:2046)

at android.app.ContextImpl.enforceCallingPermission(ContextImpl.java:2064)

at com.android.server.notification.NotificationManagerService$11.enforceSystemOrSystemUIOrSamePackage(NotificationManagerService.java:3501)

at com.android.server.notification.NotificationManagerService$11.isNotificationPolicyAccessGrantedForPackage(NotificationManagerService.java:3666)

at android.app.NotificationManager.isNotificationPolicyAccessGrantedForPackage(NotificationManager.java:918)

4、设置系统音量

通过setStreamVolume方法设置音量

多媒体与闹钟音量可以直接设置,调整其他类型音量时不能为免打扰和静音

// [streamType] 音量类型

// AudioManager.STREAM_RING;

// AudioManager.STREAM_SYSTEM;

// AudioManager.STREAM_VOICE_CALL;

// AudioManager.STREAM_NOTIFICATION;

// AudioManager.STREAM_DTMF;

// AudioManager.STREAM_MUSIC;多媒体音量

// AudioManager.STREAM_ALARM;闹钟音量

//

// [volume] 音量值,取值范围一般为[0,7]

// [flags] 固定传0

// [callingPackage] 传null即可

iAudioService.setStreamVolume(streamType,volume,flags,callingPackage);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值