android provision
今天说说Provision这个APK,可能很多朋友都不知道有这个APK存在。Provision的作用很简单,就是一个系统初始化引导程序,原生的Android里面Provision只做了一件事,就是写入一个DEVICE_PROVISIONED标记。不过这个标记作用很大,这个标记只会在系统全新升级(双清)的时候写入一次,代表了Android系统升级准备完成,可以正常工作。
之所以会关注DEVICE_PROVISIONED这个标记,是因为我在升级系统的时候遇到一个问题。系统在不格式化/data/分区的情况下(不进行双清操作)有可能会导致一个问题,机器的Home键按了没反应。
1、Provision程序
首先说说一下Provision,Provision在系统源码packages/apps下面,我们先看看Provision的配置:
<application> <activity android:name="DefaultActivity" android:excludeFromRecents="true"> <intent-filter android:priority="1"> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application>
从上面代码可以看到两个比较有意思的地方,第一:Provision配置了category.HOME属性,做系统开发的朋友应该都了解,category.HOME是桌面程序的标记,简单点说就是Launcher程序才会配置的标记。
第二:priority=1,配置了优先级,也就是说它的优先级比我们原生的Launcher优先级还要高,它会在Launcher启动前就运行起来。
//Edited by mythou //http://www.cnblogs.com/mythou/
public class DefaultActivity extends Activity { @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); // Add a persistent setting to allow other apps to know the device has been provisioned. Settings.Secure.putInt(getContentResolver(), Settings.Secure.DEVICE_PROVISIONED, 1); // remove this activity from the package manager. PackageManager pm = getPackageManager(); ComponentName name = new ComponentName(this, DefaultActivity.class); pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); // terminate the activity. finish(); }}
上面就是Provision的全部源码,Provision只有一个Activity,而且做的事情不多。主要做了两件事:
- 设置DEVICE_PROVISIONED标记
- 禁止Provision自己的Activity组件
整个Provision程序只做了这两件事,DEVICE_PROVISIONED就是我们上面说的系统升级完标记。这个标记是保存在:
保存在settings.db里面,准确来说是settings.db的secure表里面。
2、禁止组件
上面说了Provision其中一个功能,写入一个标记。除了写入标记,还有一个禁止本身Activity组件的功能。先简单介绍一下禁止组件的API。
void setComponentEnabledSetting (ComponentName componentName, int newState, int flags)
- componentName:组件名称
- newState:组件新的状态,可以设置三个值,分别是如下:
- 不可用状态:COMPONENT_ENABLED_STATE_DISABLED
- 可用状态:COMPONENT_ENABLED_STATE_ENABLED
- 默认状态:COMPONENT_ENABLED_STATE_DEFAULT
- flags:行为标签,值可以是DONT_KILL_APP或者0。 0说明杀死包含该组件的app
禁止组件功能后,系统的package信息会记录下来,有关系统的package信息都是保存在/data/system/
//Edited by mythou //http://www.cnblogs.com/mythou/
<package name="com.android.provision" codePath="/system/app/Provision.apk" nativeLibraryPath="/data/data/com.android.provision/lib" flags="1" ft="11b7e237e00" it="11b7e237e00" ut="11b7e237e00" version="15" userId="10005"><sigs count="1"><cert index="1" /></sigs><disabled-components><item name="com.android.provision.DefaultActivity" /></disabled-components></package>
上面就是记录了package里面被禁止的组件信息。当然,package.xml里面还包含了应用包所有信息,这个可以自己看一下。
这个组件只会运行一次,所以我们如果没有格式化/data目录,这个组件就会被禁止。所以会导致一个问题,就是我们的DEVICE_PROVISIONED标记不会再次写入。
如果你遇到了机器Home键没有作用,可以检查一下DEVICE_PROVISIONED标记是否正常。
3、结语
今天主要是说说原生的Provision作用,其实我们可以在Provision里面做一些升级后需要完成的事情,比如我们在电阻屏上需要进行坐标校准。就可以在Provision里面首先运行坐标校准,因为它会在Launcher之前运行。
这问题也查了很久,除了Provision外,还分析了Home键的详细处理机制。后面有空再分析一下Home键的处理机制。
android provision相关推荐
- Android Provision (OOBE)
Android Provision (OOBE) 源码路径:android/packages/apps/Provision 在Android的原生代码中,Priovision只是一个第一次启动的设置向 ...
- Android 系统(123)---MTK android 常用修改点
MTK android 常用修改点 1. *#06#等关键码判断文件 SpecialCharSequenceMgr.java 2.音效 ControlPanelEffect.java 3.版本号修改 ...
- Android 设置向导启动分析
一.Android 系统启动流程 Bootloader 系统引导 启动 Linux 内核 启动 init 进程 启动 Zygote 进程 启动 SystemServer 进程 启动 Binder 线程 ...
- Android开机向导setupwizard,设置系统语言,WiFi向导
Android的框架设计有考虑到开机向导这一场景,因此我们实现开机向导参考Android的Provision.apk Provision: MSM8976/repo/packages/apps/Pro ...
- Android 5.1 AppOps总结
什么是AppOps 涉及的类 常用名词 权限管理是如何触发的 系统默认应用权限 AppOps Policy 文件 AppOpsService准备工作 详细分析权限管理的触发 应用层对权限的设置 什么是 ...
- 关于Provision.apk
今天遇到一个应用无法打开的问题,跟踪代码发现app在onCreate的时候会检查 inKeyguardRestrictedInputMode() 这是KeyguardManager的方法 解释为: / ...
- poco for android,POCO桌面(com.mi.android.globallauncher) - 2.6.8.25 - 应用 - 酷安
权限信息 · com.android.launcher.permission.INSTALL_SHORTCUT · com.miui.home.launcher.permission.UNINSTAL ...
- android ROM设置默认Launcher(主屏幕应用)
Launcher Launcher是android系统的桌面.是android系统的主要组件.android系统允许存在多个Launcher并设置默认主界面. 应用程序作为Home(主界面)需在Act ...
- ActivityManagerService解读之Activity启动时间闲聊--Android Framework层时间计算介绍
从ActivityManagerService解读之Activity启动初探,到ActivityManagerService解读之Activity启动再探,到ActivityManagerServic ...
- MTK android 常用修改点
1. *#06#等关键码判断文件 SpecialCharSequenceMgr.java 2.音效 ControlPanelEffect.java 3.版本号修改 bulid/core/build_i ...
最新文章
- 日10亿级处理,基于云的微服务架构
- 一个包从服务器到达客户端
- 密码学:RSA加密算法详解
- Content-Type一览
- 可以输入值的下拉框(select和input的组合使用)
- 越来越受欢迎的Vue想学么,90后小姐姐今儿来教你
- 6、宏定义与预处理、函数与函数库
- C++_类和对象_C++多态_虚析构和纯虚析构函数---C++语言工作笔记074
- android分享到新浪微博,认证+发送微博
- lomboz eclipse怎么连接oracle10,lomboz eclipse 3.3的安装和连接oracle 11g(图解详细教程)...
- 局域网文件管理系统_企业能耗管理系统「斯必得智慧物联」
- 2021年最佳Selenium替代品
- OpenBmc开发13:添加传感器(fan)
- 总结 27 类深度学习主要神经网络:结构图及应用
- safenet 超级狗 java调用 小计
- 在 WPS Word中成功使用zetero
- 【已解决】ThinkdPad X1 麦克风没声音
- CocosCreator微信小游戏排行榜及开放数据域的理解与使用
- 起点小说免费看 Scrapy爬取起点小说网数据导入MongoDB数据
- 电脑爱好者2012年5-12期
热门文章
- 渗透测试详解及爱加密加固使用及优势
- matlab 传函将s换为jw,2010MATLAB及控制系统仿真_总复习.ppt
- bak 安全牛 kali link
- 【XJTUSE计算机图形学】第三章 几何造型技术(3)——B样条曲线与曲面
- ubuntu服务器lxde桌面,LXDE桌面环境简介
- 人工神经网络心得体会_图神经网络打卡心得体会
- 关于在数据库中如何存储时间这件事
- 大厂纷纷押宝“元宇宙”“鸡肋”智能眼镜难成密钥
- openGL之API学习(七十)windows的opengl扩展wgl
- 听说昨天朋友圈炸开了锅???