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 系统的安全性,另一方面也会消耗很大的系统资源,造成恶性循环,手机越用越慢。

Android Auto-Boot Analysis

时间: 2024-08-10 19:06:00

Android Auto-Boot Analysis的相关文章

谷歌发布Android auto车载系统对当前车载市场的影响

自从2007年,车载导航产品获得了长足的发展,其产品主要是采用WinCE系统,除了导航功能,一般还有收音机,播放碟片,播放SD卡/U盘中的音视频,蓝牙通话,倒车后视等功能.因为WinCE系统被微软抛弃了,Android现在大行其道,各种新的ARM芯片层出不穷,性能强大,而这些芯片都不支持WinCE,所以说WinCE除了自身的缺点外,无芯片可用也是导致产品后劲不足的原因.WinCE被淘汰应是无可避免.但是由谁来淘汰WinCE呢?很容易想到Android,目前做Android车机方案的公司可能有几百

Android Auto开发之一《开始学习Auto 》

共同学习,共同进步, 转载请注明出处.欢迎微信交流:sfssqs,申请注明"Android Car"字样 ================= ========================= https://developer.android.com/traning/auto/start/index.xml 让我们一起来学习Android Auto Android Auto继承自Android平台,服务汽车系统.手持设备需运行在Android5.0或更高的版本,当用户将它连接到兼容的

【Android车载系统 News | Tech 3】News 从手机征战到汽车 Android Auto对比CarPlay 2014-12-29

Google和苹果都试图给用户的汽车带来一个安全和友好的移动体验.Android Auto和CarPlay是这两家公司推出的专为车载而重新设计的移动用户界面,双方目前都在筹备着在明年正式大规模推广. 这两个车载系统,每一个系统都是专为他们两家公司各自的移动平台而设计的,虽然整体看上去类似,但在两者之间也存在着一些差异,这些差异可能会吸引 不同的人群.今天,外媒在车展上使用韩国现代推出的2015款索纳塔详细对比了苹果CarPlay和Google Android Auto.这辆车内置了两个系统,所以

android+spring boot 选择,上传,下载文件

1 概述 前端android,上传与下载文件,使用OkHttp处理请求,后端使用spring boot+MVC,处理android发送来的上传与下载请求.这个其实不难,就是特别多奇奇怪怪的坑,因此,希望看到的,不要像笔者这样踩的那么痛苦了... 2 环境 win10 Spring Boot 2.2.2 RELEASE IDEA 2019.3.1 Android Studio 3.6RC1 Tomcat 9.0.30 3 android 3.1 准备工作 3.1.1 新建工程 这次用一个全新的例子

Android Auto CompleteTexview

代码: MainActivity.java package com.example.happydictionary;import com.example.happydictionary.adapter.DictionaryAdapter;import com.example.happydictionary.db.DBHelper;import android.app.Activity;import android.database.Cursor;import android.database.s

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

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

谷歌Android Auto平台汽车品牌支持已达35家

http://yuedu.baidu.com/album/view/a9e914106c175f0e7cd13760/20150529 http://yuedu.baidu.com/album/view/a9e914106c175f0e7cd13760.html/20150529 http://yuedu.baidu.com/album/view/5fa3ecf4f61fb7360b4c6563/20150529 http://yuedu.baidu.com/album/view/5fa3ecf

【Android车载系统 News | Tech 2】News 谷歌开发新车载系统!安卓Auto不是终点 2014-12-20

Google在今年推出了车载安卓系统Android Auto,旨在为汽车提供娱乐.导航等功能.不过,Android Auto并不是终点,现在有消息报道,Google正在开发一个能够彻底取代汽车底层控制系统的车载安卓系统,可能会在明年公布.目前的Android Auto不负责控制汽车的操控,新的安卓汽车系统将会让汽车完全处于安卓的掌控之下. 用安卓系统操控的汽车,敢不敢开?(更多详情请点击图片查看原文) 根据路透社消息,Google正在开发的这套全新安卓汽车系统将会渗透到汽车底层控制,Google

Android Studio 2.0 正式版发布啦 (首次中文翻译)

Android Studio 2.0 发布了,增加了一些新特性: 1. 更加完善的 Instant Run 2. 更快的 Android Emulator 3.GPU Debugger Preview 4. 包含了 IntelliJ 15 的更新 Android Studio 2.0 原文   (翻译在往下翻) Posted by Jamal Eason, Product Manager, Android Android Studio 2.0 is the fastest way to buil

Android Studio 2.0 正式版公布啦 (首次中文翻译)

Android Studio 2.0 公布了,添加了一些新特性: 1. 更加完好的 Instant Run 2. 更快的 Android Emulator 3.GPU Debugger Preview 4. 包括了 IntelliJ 15 的更新 Android Studio 2.0 原文   (翻译在往下翻) Posted by Jamal Eason, Product Manager, Android Android Studio 2.0 is the fastest way to buil