概述
某一时刻某个场景下
我们有时候需要在某一特定场景下查看某个sensor被什么apk调用。
比如在sim卡热插拔时,发现acc被唤醒(软件排查发现:依次去掉每个sensor器件的编译),这会导致在sim卡热插拔后功耗过高。
再比如在停止计步时,发现acc上报数据的频率变快,这会导致停止计步后待机底电流过高。
某个sensor
就像上边的例子,我们首先得确认是哪个sensor导致的功耗过高。
一个最直接且有效的方法就是,在编译sensor驱动的地方去掉该sensor的编译,依次进行排查。
(有时候注释掉这个sensor可能会导致所有的sensor挂载不上的情况,所以建议最好直接删除后出固件再push到机器中)
寻找对应的上层apk
这时候我们需要场景复现。在特定场景下,进行如下操作。
adb shell dumpsys sensorservice
adb shell dumpsys sensorservice
显示所有注册的传感器,如果注册了wake up sensor
,可以在这里看到它
需要知道的一点是,如果注册了accel wake up sensor, 设备几乎不会进入休眠状态.
此外,如果注册了某个wakeup sensor(比如motion detect sensor), 在对应时间点的 sensor-hal log 里会报告该sensor的event
在Mode : NORMAL
部分找到对应的sensor被什么package调用,比如:
Connection Number: 9
Operating Mode: NORMAL
fm333 | WakeLockRefCount 0 | uid 1000 | cache size 0 | max cache size 0
pedometer_wrist Non-wakeup 0x00000005 | status: active | pending flush events 0
可以看到是包 fm333 调用了计步(计步是调用acc的)。
在Previous Registrations
部分找到对应的pid,比如:
02:26:17 + 0x00000014 pid= 1653 uid= 1000 package=fm333 samplingPeriod=-1474836us batchingPeriod=0us
02:26:17 + 0x00000005 pid= 1653 uid= 1000 package=fm333 samplingPeriod=1000000us batchingPeriod=0us
可以看到pid= 1653。
这时候,我们再执行
adb shell ps -A | grep 1653
可以看到:
system 1653 445 844944 44096 SyS_epoll_wait 0 S com.xxxxxx.wearable.sport
可以看到是com.xxxxxx.wearable.sport在调用计步。
查找对应的apk:
pm list package -f | grep "sport"
可以看到:
package:/system/priv-app/Sport/Sport.apk=com.xxxxxx.wearable.sport
这样我们就找到了调用该sensor的上层apk以及其对应的路径。
最后
以上就是长情柚子为你收集整理的[Android][sensor]确认sensor唤醒源:查看某一时刻\某个场景下,某个sensor被哪个上层apk调用某一时刻\某个场景下某个sensor寻找对应的上层apk的全部内容,希望文章能够帮你解决[Android][sensor]确认sensor唤醒源:查看某一时刻\某个场景下,某个sensor被哪个上层apk调用某一时刻\某个场景下某个sensor寻找对应的上层apk所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复