20190722海外小米和国内华为的关联唤醒调研

2024-02-09 19:48

本文主要是介绍20190722海外小米和国内华为的关联唤醒调研,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关联/链式启动的拦截机制

Android P机型

进程拦截

组件拦截

预设置自启动名单

海外版-小米MI 8 Pro

国内版-华为P20 Pro

进程拦截:主要在冷启动限制开机启动、后台启动,功能界面一般为自启动管理、后台管理;

原理:ActivityManagerService. startProcessLocked() 条件拦截,即冷启动入口拦截

组件拦截:主要在冷/热启动限制开机启动、后台启动、应用间的唤醒,组件级别拦截,功能界面一般无界面显示、或关联启动界面、或启动记录、拦截记录;

原理:

ActivityManagerService. getContentProviderImpl() 条件拦截

ActiveServices. startServiceLocked() 条件拦截

ActiveServices. bindServiceLocked() 条件拦截

ActivityStarter. startActivity() 条件拦截

BroadcastQueue. processNextBroadcastLocked()条件拦截

区别

两者的效果都是可以限制开机启动和后台启动,组件拦截比进程拦截的区别如下:

  1. 组件拦截的时机更早,因为应用启动是先启动组件,再最后fork进程;
  2. 组件拦截管控的范围更全,热启动类型的行为也可以有效拦截;
  3. 组件拦截精细度更高,例如进程拦截只知道进程被启动了,而组件拦截可以具体到哪个进程通过什么方式启动了目标进程;
  4. 主流的华为、OPPO、VIVO、小米都有组件拦截相关的机制;

综合上述:

  1. 海外版小米 MI 8 Pro 在自启动、后台管理、关联启动都有预置黑名单进行应用管理,故Android P 上我们也可以同海外版小米的配置预置自启动黑名单;

  1. SmartManager完成了进程拦截,组件拦截可以在目前的冷启动场景的基础做查缺补漏的拦截优化,甚至做到个别场景不依赖配置名单,智能识别和拦截关联启动行为;

  1. 热启动场景进行组件级拦截,例如加强Google 原生的规则中后台第三方应用启动后台第三方进程的限制;

  1. 拦截记录的UI界面交互,需要产品工程师进行定义;

  1. 海外版-小米 MI 8 Pro

1.1 小米自启动

    1. 小米关联/链式

小米的没有单独的关联唤醒拦截界面,但是“禁止耗电应用相互调用”属于关联唤醒范畴

2. 国内版-华为P20 Pro

    1. 华为自启动

07-19 14:41:49.771  1000  1681  1705 D Boost   : hostingType=broadcast, hostingName=com.android.cellbroadcastreceiver/.CellBroadcastReceiver, callerPackage=android, isSystem=true, isBoostNeeded=false.

07-19 14:41:52.599  1000  1681  2093 D Boost   : hostingType=service, hostingName=com.miui.analytics/.AnalyticsService, callerPackage=com.miui.msa.global, isSystem=true, isBoostNeeded=false.

07-19 14:41:48.717  1000  1681  2072 D Boost   : hostingType=content provider, hostingName=com.android.settings/.cloud.CloudSettingsProvider, callerPackage=com.android.systemui, isSystem=true, isBoostNeeded=false.

2.2 华为关联/链式

只有组件拦截才可以形成下述拦截记录

3. ROM-SMGR测评

条件

测试结果

1. 安装后,不进行任何操作,桌面待机

1 小时内,23个应用后台启动

2. 安装后,按smgr推荐名单设置,66个自启动黑名单,13个白名单,桌面待机

测试12小时,黑名单应用都被限制自启动,管控Pass

上述中分析:

  1. 不点开任何应用会有应用被启动的原因 第一个被启动的应用,com.ss.android.article.news(uid:10129) 被 com.android.bluetooth(uid:1002) 通过 bind-service 关联启动. 存在第一个第三方应用被启动后,com.ss.android.article.news(uid:10129)通过 PUSH SDK相关的start-activity\start-service\bind-service\send-broadcast\content provider机制启动了更多的应用,手机出现后台进程数量多、卡顿、发热现象
  2. SmartManager 的自启动管控 早期版本的SmartManager存在漏洞,即content provider\activity 类型启动会不区分黑白名单直接允许后台运行。本次版本优化,主要策略如下:
  • 1.启动类型service\broadcast\content provider的为非前台进程应用,后台启动会根据黑名单进行拦截
  • 2.启动类型为 activity 类型的非前台进程,新增了一条过滤,即ClassName为 com.igexin.sdk.GActivity直接拦截启动,除此之外唐敏提供了更多Activity类型的透明界面异常后台启动com.igexin.sdk.GActivity
    com.tencent.pangu.link.LinkProxyActivity
    com.ifeng.news2.getui.DynamicGetuiActivity
    com.pingan.servicewindow.service.GeTuiActivity
  • 3.灭屏30分钟内,查杀3次,亮屏每5分钟查杀后台进程

    private static final List<String> ANNOYING_NAMES = new ArrayList<String>(){{

        add("com.igexin.sdk.GActivity");

    }

3.1 安装后,不进行任何操作,桌面待机

1. com.ss.android.article.news(uid:10129)  com.android.bluetooth(uid:1002) 关联启动

07-16 15:27:03.781543  1010  6236 D PowerConsumptionService: isAllowAppLaunch : com.ss.android.article.news(uid:10129), callingPackage = com.android.bluetooth(uid:1002), reason = bind-service

07-16 15:27:03.781665  1010  6236 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { act=android.media.browse.MediaBrowserService cmp=com.ss.android.article.news/com.ss.android.detail.feature.detail2.audio.service.AudioService }

2. com.ss.android.essay.joke(uid:10133)  com.ss.android.article.news(uid:10129) 关联启动

07-16 15:37:14.362178  1010  6237 D PowerConsumptionService: isAllowAppLaunch : com.ss.android.essay.joke(uid:10133), callingPackage = com.ss.android.article.news(uid:10129), reason = start-service

07-16 15:37:14.362523  1010  6237 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { act=com.ss.android.message.action.PUSH_SERVICE pkg=com.ss.android.essay.joke cmp=com.ss.android.essay.joke/com.ss.android.message.NotifyService (has extras) }

3. com.ss.android.article.lite(uid:10133)  com.ss.android.article.news(uid:10129) 关联启动

07-16 15:37:14.493859  1010  4771 D PowerConsumptionService: isAllowAppLaunch : com.ss.android.article.lite(uid:10130), callingPackage = com.ss.android.article.news(uid:10129), reason = start-service

07-16 15:37:14.494085  1010  4771 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { act=com.ss.android.message.action.PUSH_SERVICE pkg=com.ss.android.article.lite cmp=com.ss.android.article.lite/com.ss.android.message.NotifyService (has extras) }

4. com.baidu.video(uid:10168)  com.android.bluetooth(uid:1002) 关联启动

07-16 15:47:08.596667  1010  4771 D PowerConsumptionService: isAllowAppLaunch : com.baidu.video(uid:10168), callingPackage = com.android.bluetooth(uid:1002), reason = bind-service

07-16 15:47:08.596851  1010  4771 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { act=android.media.browse.MediaBrowserService cmp=com.baidu.video/.audio.service.AudioService }

5. com.baidu.BaiduMap(uid:10166)  com.baidu.video(uid:10168) 关联启动

07-16 15:47:11.110067  1010  6231 D PowerConsumptionService: isAllowAppLaunch : com.baidu.BaiduMap(uid:10166), callingPackage = com.baidu.video(uid:10168), reason = bind-service

07-16 15:47:11.110231  1010  6231 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { act=baidu.intent.action.account.SHARE_SERVICE flg=0x20 cmp=com.baidu.BaiduMap/com.baidu.sapi2.share.ShareService }

6. com.qiyi.video(uid:10163)  com.baidu.video(uid:10168) 关联启动

07-16 15:47:11.382107  1010  6231 D werConsumptionService: isAllowAppLaunch : com.qiyi.video(uid:10163), callingPackage = com.baidu.video(uid:10168), reason = bind-service

07-16 15:47:11.382245  1010  6231 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { act=baidu.intent.action.account.SHARE_SERVICE flg=0x20 cmp=com.qiyi.video/com.baidu.sapi2.share.ShareService }

7. com.baidu.searchbox(uid:10165)  com.baidu.video(uid:10168) 关联启动

07-16 15:47:13.171434  1010  2007 D PowerConsumptionService: isAllowAppLaunch : com.baidu.searchbox(uid:10165), callingPackage = com.baidu.BaiduMap(uid:10166), reason = bind-service

07-16 15:47:13.171539  1010  2007 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { act=baidu.intent.action.account.SHARE_SERVICE flg=0x20 cmp=com.baidu.searchbox/com.baidu.sapi2.share.ShareService }

8. com.ss.android.ugc.aweme(uid:10150)  com.ss.android.article.news(uid:10129) 关联启动

07-16 15:47:14.479210  1010  6231 D PowerConsumptionService: isAllowAppLaunch : com.ss.android.ugc.aweme(uid:10150), callingPackage = com.ss.android.article.news(uid:10129), reason = start-service

07-16 15:47:14.479379  1010  6231 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { act=com.ss.android.message.action.PUSH_SERVICE pkg=com.ss.android.ugc.aweme cmp=com.ss.android.ugc.aweme/com.ss.android.message.NotifyService (has extras) }

9. com.sina.weibo(uid:10156)  com.baidu.video(uid:10168) 关联启动

07-16 15:47:38.308859  1010  3307 D PowerConsumptionService: isAllowAppLaunch : com.sina.weibo(uid:10156), callingPackage = com.baidu.video(uid:10168), reason = send-broadcast

07-16 15:47:38.309022  1010  3307 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { act=com.huawei.intent.action.PUSH flg=0x30 pkg=com.sina.weibo (has extras) }

10. com.cubic.autohome(uid:10160)  com.baidu.video(uid:10168) 关联启动

07-16 15:47:40.020740  1010  4818 D PowerConsumptionService: isAllowAppLaunch : com.cubic.autohome(uid:10160), callingPackage = com.baidu.video(uid:10168), reason = bind-service

07-16 15:47:40.020844  1010  4818 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { flg=0x20 cmp=com.cubic.autohome/cn.jpush.android.service.DaemonService (has extras) }

11. com.cleanmaster.mguard_cn(uid:10164)  com.baidu.video(uid:10168) 关联启动

07-16 15:47:38.694378  1010  1022 D PowerConsumptionService: isAllowAppLaunch : com.cleanmaster.mguard_cn(uid:10164), callingPackage = com.baidu.video(uid:10168), reason = bind-service

07-16 15:47:38.694760  1010  1022 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { flg=0x20 cmp=com.cleanmaster.mguard_cn/com.cleanmaster.jpush.JpushDaemonService (has extras) }

12. com.hipu.yidian(uid:10125)  com.baidu.video(uid:10168) 关联启动

07-16 15:47:41.921992  1010  6231 D PowerConsumptionService: isAllowAppLaunch : com.hipu.yidian(uid:10125), callingPackage = com.baidu.video(uid:10168), reason = bind-service

07-16 15:47:41.922168  1010  6231 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { flg=0x20 cmp=com.hipu.yidian/com.yidian.wakeup.YdDaemonService (has extras) }

13. com.job.android(uid:10135)  com.baidu.video(uid:10168) 关联启动

07-16 15:47:41.949993  1010  6237 D PowerConsumptionService: isAllowAppLaunch : com.job.android(uid:10135), callingPackage = com.baidu.video(uid:10168), reason = bind-service

07-16 15:47:41.950191  1010  6237 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { flg=0x20 cmp=com.job.android/cn.jpush.android.service.DaemonService (has extras) }

14. com.qq.reader(uid:10121)  com.baidu.video(uid:10168) 关联启动

07-16 15:47:57.251650  1010  2226 D PowerConsumptionService: isAllowAppLaunch : com.qq.reader(uid:10121), callingPackage = com.baidu.video(uid:10168), reason = bind-service

07-16 15:47:57.251862  1010  2226 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { flg=0x20 cmp=com.qq.reader/cn.jpush.android.service.DaemonService (has extras) }

15.com.xingin.xhs(uid:10144)  com.baidu.video(uid:10168) 关联启动

07-16 15:47:57.888941  1010  1312 D PowerConsumptionService: isAllowAppLaunch : com.xingin.xhs(uid:10144), callingPackage = com.baidu.video(uid:10168), reason = bind-service

07-16 15:47:57.889082  1010  1312 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { flg=0x20 cmp=com.xingin.xhs/cn.jpush.android.service.DaemonService (has extras) }

16.sogou.mobile.explorer(uid:10153)  com.ss.android.article.news(uid:10129) 关联启动

07-16 15:47:59.321980  1010  1979 D TctPowerConsumptionService: isAllowAppLaunch : sogou.mobile.explorer(uid:10153), callingPackage = com.ss.android.article.news(uid:10129), reason = bind-service

07-16 15:47:59.322151  1010  1979 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { flg=0x20 cmp=sogou.mobile.explorer/cn.jpush.android.service.DaemonService (has extras) }

17. com.wuba(uid:10117)  com.baidu.video(uid:10168) 关联启动

07-16 15:48:06.202649  1010  1979 D PowerConsumptionService: isAllowAppLaunch : com.wuba(uid:10117), callingPackage = com.baidu.video(uid:10168), reason = start-activity

07-16 15:48:06.202777  1010  1979 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { flg=0x10000000 cmp=com.wuba/com.igexin.sdk.GActivity (has extras) }

18. air.tv.douyu.android(uid:10155)  com.baidu.video(uid:10168) 关联启动

07-16 15:48:06.550748  1010  6237 D PowerConsumptionService: isAllowAppLaunch : air.tv.douyu.android(uid:10155), callingPackage = com.baidu.video(uid:10168), reason = start-activity

07-16 15:48:06.551987  1010  6237 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { flg=0x10000000 cmp=air.tv.douyu.android/com.igexin.sdk.GActivity }

19 com.jingdong.app.mall(uid:10128)  com.baidu.video(uid:10168) 关联启动

07-16 15:48:41.178704  1010  1979 D PowerConsumptionService: isAllowAppLaunch : com.jingdong.app.mall(uid:10128), callingPackage = com.baidu.video(uid:10168), reason = start-activity

07-16 15:48:41.178921  1010  1979 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { flg=0x10000000 cmp=com.jingdong.app.mall/com.igexin.sdk.GActivity }

20 com.android.comicsisland.activity(uid:10162)  com.baidu.video(uid:10168) 关联启动

07-16 15:48:41.241667  1010  1077 D PowerConsumptionService: isAllowAppLaunch : com.android.comicsisland.activity(uid:10162), callingPackage = com.baidu.video(uid:10168), reason = start-activity

07-16 15:48:41.241717  1010  1077 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { flg=0x10000000 cmp=com.android.comicsisland.activity/com.igexin.sdk.GActivity }

21 com.huaqian(uid:10148)  com.baidu.video(uid:10168) 关联启动

07-16 15:48:06.385103  1010  1076 D PowerConsumptionService: isAllowAppLaunch : com.huaqian(uid:10148), callingPackage = com.baidu.video(uid:10168), reason = start-activity

07-16 15:48:06.385213  1010  1076 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { flg=0x10000000 cmp=com.huaqian/com.igexin.sdk.GActivity }

22 com.netease.newsreader.activity(uid:10171)  com.android.bluetooth(uid:1002) 关联启动

07-16 15:49:09.438847  1010  4835 D PowerConsumptionService: isAllowAppLaunch : com.netease.newsreader.activity(uid:10171), callingPackage = com.android.bluetooth(uid:1002), reason = bind-service

07-16 15:49:09.438979  1010  4835 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { act=android.media.browse.MediaBrowserService cmp=com.netease.newsreader.activity/com.netease.awakening.music.MusicService }

23  cn.etouch.ecalendar(uid:10126)  com.huaqian(uid:10148) 关联启动

07-16 15:49:33.559620  1010  2001 D PowerConsumptionService: isAllowAppLaunch : cn.etouch.ecalendar(uid:10126), callingPackage = com.huaqian(uid:10148), reason = start-activity

07-16 15:49:33.559673  1010  2001 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { flg=0x10000000 cmp=cn.etouch.ecalendar/com.igexin.sdk.GActivity }

24  com.tencent.mtt(uid:10119)  com.netease.newsreader.activity(uid:10171) 关联启动

07-16 15:51:45.573292  1010  1984 D PowerConsumptionService: isAllowAppLaunch : com.tencent.mtt(uid:10119), callingPackage = com.netease.newsreader.activity(uid:10171), reason = start-activity

07-16 15:51:45.573364  1010  1984 D PowerConsumptionService: isAllowAppLaunch : intent action:Intent { flg=0x10000000 cmp=com.tencent.mtt/com.igexin.sdk.GActivity }

3.2. 安装后,按smgr推荐名单设置,桌面待机

1. 根据黑名单和非前台进程和com.igexin.sdk.GActivity 拦截 activity

07-17 17:56:29.047735  1039  1549 D PowerConsumptionService: onStartActivity # target=ActivityInfo{40fd0a0 com.igexin.sdk.GActivity}, callingPkg=com.cubic.autohome

07-17 17:56:29.047786  1039  1549 W PowerConsumptionService: onStartActivity # start activity from annoying component.

2. 根据黑名单和非前台进程拦截 service

07-17 20:00:21.728459  1034  1104 D PowerConsumptionService: onStartProcess # processName=com.baidu.video, pkg=com.baidu.video, type=service, name=com.baidu.video/.audio.service.AudioService

3. 根据黑名单和非前台进程拦截 broadcast

07-17 20:00:26.830424  1034  1050 D PowerConsumptionService: onStartProcess # processName=com.sina.news, pkg=com.sina.news, type=broadcast, name=com.sina.news/.module.base.receiver.BootCompletedReceiver

07-17 20:00:26.830782  1034  1050 W PowerConsumptionService: onStartProcess # abort starting process: com.sina.news, pkg=com.sina.news

4. 根据黑名单和非前台进程拦截 content provider

07-17 20:00:42.839045  1034  1573 D PowerConsumptionService: onStartProcess # processName=com.baidu.video, pkg=com.baidu.video, type=content provider, name=com.baidu.video/cn.jpush.android.service.DownloadProvider

07-17 20:00:42.839381  1034  1573 W PowerConsumptionService: onStartProcess # abort starting process: com.baidu.video, pkg=com.baidu.video

这篇关于20190722海外小米和国内华为的关联唤醒调研的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/695137

相关文章

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

Gradle在国内配置镜像加速的实现步骤

《Gradle在国内配置镜像加速的实现步骤》在国内使用Gradle构建项目时,最大的痛点就是依赖下载贼慢,甚至卡死,下面教你如何配置国内镜像加速Gradle下载依赖,主要是通过改写repositori... 目录引言一、修改 build.gradle 或 settings.gradle 的 reposito

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

使用国内镜像源优化pip install下载的方法步骤

《使用国内镜像源优化pipinstall下载的方法步骤》在Python开发中,pip是一个不可或缺的工具,用于安装和管理Python包,然而,由于默认的PyPI服务器位于国外,国内用户在安装依赖时可... 目录引言1. 为什么需要国内镜像源?2. 常用的国内镜像源3. 临时使用国内镜像源4. 永久配置国内镜