Android Auto-Boot Analysis

1.1 实现 Android 系统的自启动

1.1.1.实现自己的广播接收器,在 onReceive()方法中实现要处理的逻辑

1.1.2. AndroidManifest.xml 中注册该广播接收器,申明接收广播过滤器为Boot_Completed 广播

1.1.3.申明权限

        实现 Android 的自启动与一般的广播接收没有很大区别,但是有一些要注意的地方:
1.在使用 BOOT_COMPLETED 广播时,必须要 RECEIVE_BOOT_COMPLETED 权限,这是 4.0 后的修改
2.通过指定 priority 属性可以设置 BOOT_COMPLETED 广播的优先级,让该app 早于其他 app 接收到广播
3.在 4.4 下 BOOT_COMPLETED 广播是有序广播,但是不可中断(指定了FLAG_RECEIVER_NO_ABORT 字段),而在 4.4 以前,BOOT_COMPLETED 广播
是无序的

4.由于 4.0 后增加了 Package stopped 标志,因此处于该状态下的 app 无法收到 BOOT_COMPLETED 广播时,该状态由以下情况产生:
a. 通过反射调用隐藏接口 forceStopPackage 接口停止的应用
b.在 settingapplicationdetail 中点 disable 按钮,被停用的应用
c.新安装完成,从未打开和运行过的应用

1.2 BOOT_COMPLETED 广播发送的时机

        要了解 BOOT_COMPLETED 广播的发送时机就必须了解 Android 的启动流程,
简要了解 Android 的启动顺序:

1 系统启动,bootloader
2 SystemServer
3 AMS
4 Send systemReady 信号
5 Launcher start
6 Send finishBooting 信号
7 发送 BOOT_COMPLETED 广播

1.3 禁止自启动的原理

通过了解 BOOT_COMPLETED 广播发送的时机和原理,我们大概可以分析出禁止自启动的几种方法:
1. 阻止应用收到 BOOT_COMPLETED 广播,在 4.0 以后,可以通过设置 app 的Package stopped 标志来实现(反射调用隐藏的 forceStopPackage 方法)
2. 通过停用应用的广播接收器来屏蔽 BOOT_COMPLETED 广播,即设置组件的android:enable 属性来停止该接收器的响应
3. 通过 kill 进程来将自启动的 app 结束掉

1.4 禁止自启动的方法

1.4.1 forceStopPackage

        通过 forceStopPackage 去禁用,不仅会停用 app 的组件,也会停止他的定时器等,同时需要 system 权限和系统签名。

1.4.2 停用组件方法

Android 文档中对 Android 的组件有如下描述:
The<application> element has its own enabled attribute that applies to allapplication components, including broadcast receivers.
即我们可以设置一个组件是否启用。
PackageManager 中提供以下两个方法:

setApplicationEnabledSetting 可以停用应用中所有的组件。
setComponentEnabledSetting 可以停用指定的组件。
该方法有以下几个需要注意的地方:
a.与 forceStopPackage 接口相比,该接口不会清空定时器等,只会启用、停用组件,因此在定时器中发送自定义广播,并且在广播中指定FLAG_EXCLUDE_STOPPED_PACKAGES 是可以唤醒组件。
b.使用 setComponentEnabledSetting 接口必须是 system 程序并具有system 签名
c.需要申明 CHANGE_COMPONENT_ENABLED_STATE 权限
使用方法:

        很遗憾,该方法只能对自己的 app 修改,而操作第三方 app 需要 system权限,即使 root 也无法使用,因此,我们需要利用 packagemanager 的cmd 实现,即 PM 命令。
        命令需要 root 权限:pm enable/disable package/package.class

1.4.3 Kill 进程方法

        最常用的方法是通过 ActivityManager 类中的killBackgroundProcesses 接口来杀死进程,通用代码如下:

        但是该方法清理的进程等级不是太高,killProcess(pid)是一种能 kill更高优先级的方法,但是该方法并不能保证进程被 kill,因为该方法只是发出 kill process 的信号,具体是否要 kill 是由系统决定的,一般来说,可以被杀死的进程如下:
a. 同包下进程
b. 同 uid 进程
c. 由本 app 在运行时生成的进程

1.5 查找开机启动权限的 apk

        查找权限的方法有很多,这里只提供一种,即通过 packagemnager 来实现:

1.6 总结

        综上,市场上一般的自启动管理 app,大多是通过获取 root 权限后使用 pm命令来禁用包含 Boot_Completed 的接收器来实现的,还有一些则是通过监控后台进程,轮询查找黑名单中的进程来 kill 掉相应的自启动程序,不仅包括开机自启动,还可以监控后台自启动,不过该方法的最大问题就是增加了系统消耗,包括内存消耗和电量消耗。另外还有一些第三方的 ROM 也带有权限管理工具,例如小米的权限管理系统,是在解析接收器的权限的时候,会将所有接收器的优先级减 1,这样其他应用的优先级将永远低于其系统 app 的优先级。
        通过调查发现,用户清理进程,控制开机启动的习惯是从 windows 开始的,进程清理或者说是控制开机启动项对于 Android 系统来说并没有很大意义,如果一个 Android 系统不 root,那么第三方 app 对系统方面的控制权限基本没有,使用这些软件,一方面降低了 Android 系统的安全性,另一方面也会消耗很大的系统资源,造成恶性循环,手机越用越慢。

时间: 2024-10-04 01:54:46

Android Auto-Boot Analysis的相关文章

车内智能平台哪家强?苹果CarPlay对比谷歌Android Auto

苹果和谷歌如今都已经公布了各自的车内智能平台,搭载这两个平台的量产车型预计也会在明年大规模问世.到那时,这两位竞争对手又将在一个全新的领域里迎来另一场厮杀. 苹果CarPlay和谷歌Android Auto都是在各自原生的移动平台上所开发的,因此 它们各自的特点和受众都存在不同.如果你想要了解这两个智能平台的各自特色和缺点,不妨看看科技网站9to5Mac日前在2015款现代索纳塔(该车型对两个平台都具备兼容性)上对它们进行的对比测试.苹果的CarPlay提供的体验非常简洁.当连接iPhone之后

跑步进入车载智能!Android Auto只是过渡?

前日,Google I/O大会在万众瞩目中召开.Android One计划针对移动互联,Android TV代表智能家居,Android Wear将可穿戴式设备的 重点从Google Glass转移到了智能手表上,Chrome OS,Google Docs进一步推进了互联网智能办公.至此,移动,办公,家居生活都被Google所覆盖.人们的生活除了睡觉的8小时,就只有车内驾驶的时间还没有互联网化了. Android Wear Android Home   Google为了打通人类生活互联网化的最后

Google 终于在 I/O 2014 大会上发布了自家车载系统 Android Auto

摘要: 上周,Google 终于在 I/O 2014 大会上发布了自家车载系统 Android Auto,自此通过屏幕投射进驻车厢的除了苹果 CarPlay 与微软的 Windows in the car,再添一员. 汽车品牌,成了这几家科技公司争 上周,Google 终于在 I/O 2014 大会上发布了自家车载系统 Android Auto,自此通过屏幕投射进驻车厢的除了苹果 CarPlay 与微软的 Windows in the car,再添一员.汽车品牌,成了这几家科技公司争夺的重要资源

Facebook Messenger正式登陆Android Auto车载信息娱乐平台

Facebook于今日宣布,该公司旗下的Facebook Messenger服务,已经可以正式集成到Android Auto车载信息娱乐平台.开车的时候,用户将能够在汽车屏幕上听取或回复好友消息.但在这之前,你得现在自己的Android智能手机上安装Facebook Messenger应用,然后就可以自由选择在手机app或汽车中控台上操作了. 在Facebook宣布Messenger登陆Android Auto之前,Google已于本月早些时候将该车载信息娱乐平台转变成了一款app,从而让所有A

开发者请注意:Android Auto 桌面模拟器来了

想要为Android Auto平台开发车载应用的开发者们请注意,该团队刚刚为你们推出了一个桌面版的模拟器,它的名字叫做Desktop Head Unit(DHU).DHU的样式看起来与车子上的别无二致,当开发者将Android设备接入计算机之后,就可以即时清晰地查看到应用的实际表现了.它的使用体验也与在实车上一样,手机在连接后会"暂停活动",然后由DHU接管一切. 想要下载DHU,请先前去部署Android SDK管理器,然后在附加功能(Extras)那里找到它,安装路径为"

Android Auto 支持国家翻倍增长,其他国家还要继续等待

在车载系统的市场争夺中,Android Auto 正在努力缩小与 CarPlay 覆盖国家上的差距. 今日 Google 通过一个很 Cool 的方式,用国旗代替冗长的文字,在 Twitter 上宣布了又有 18 个国家以及波多黎各地区获得 Android Auto 支持. 在此之前 Android Auto 已经登陆澳大利亚.加拿大.法国.德国.爱尔兰.意大利.新西兰.西班牙.英国.美国这些欧美主流国家. 这一次的扩张,使得 Android Auto 在原有的基础上,进一步将支持国家和地区达到

谷歌推车载系统 Android Auto 正式版即将上市

北京时间6月25日晚24时,谷歌I/O大会正式拉开大幕,谷歌宣布不久就将提供给开发者Android Auto的SDK开发工具,帮助开发者更好的开发汽车相关应用,并开放音频以及信息的API接口. 谷歌车载系统Android Auto,支持导航.交互以及音乐,而在中控显示的方式就像Google Now的卡片.车载系统的所有内容都来自手机,与汽车方向盘按钮兼容. 用户可以直接使用谷歌地图,并通过语音进行搜索及导航,与手机使用体验一致.当有新消息送达时,会自动语音播报,而用户也可以直接通过语音回复. A

Android Auto开发者文档显示UI和第三方应用更多细节

Android Auto开发者文档显示UI和第三方应用更多细节近日谷歌在Android开发者网站公开了关于Android Auto的一系列开发文档,展示谷歌车载平台的诸多细节并赋予了开发者改善系统的特权.Android Auto的"应用"并非真的应用程序,就是在现有Android应用的基础上增加额外Android Auto特定代码,使其能够在车上正常运行,所以开发者完全不需要独立开发手机.手表或是车载应用,在开发阶段完全采用常规方式开发,但通过不同的接口属 性来应对不同平台.开发者并不

谷歌公布Android,Auto智能汽车平台图片及细节

谷歌公布Android,Auto更多细节北京时间9月29日早间消息,谷歌本周通过developer.android.com网站发布了一系列Android,Auto开发者文档.这些文档进一步展示了谷歌智能汽车平台的更多细节,使开发者可以更好地了解整个系统的性能.实际上,Android,Auto中的"应用"并非真正的应用, 而是现有Android应用针对Android,Auto的额外特殊内容,这一模式与Android,Wear类似.开发者不需要开发单独的手机应用.车载应用和手表应用,只需将

Android Framework Boot Up Overview(Android系统框架启动流程概述)

目录章节: 1.Framework运行环境 2.zygote的启动 3.SystemServer进程的启动4.启动第一个Activity 概述图: 由于将PPT格式转换为博客内容相当花费时间,请对详细介绍内容感兴趣的同学直接下载文档: AndroidFrameworkBootUpOverview 参考: Android内核剖析-柯元旦(推荐)