Android OOBE开发

news/2025/1/31 4:02:52/

什么是OOBE

就是开机向导,在 Android 设备首次开机的时候,会先进行一系列的初始化,然后再进入主页。
初始化的操作一般有 登录或注册厂商账号、选择时区、选择语言等,TV的话还可能包括搜台等。
初始化的操作只在首次开机和安卓复位后才会出现,普通开关机不会出现。

源码的开机向导

8.0 源码 packages/apps/Provision
查看注册文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.android.provision"><original-package android:name="com.android.provision" /><!-- For miscellaneous settings --><uses-permission android:name="android.permission.WRITE_SETTINGS" /><uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /><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" /><category android:name="android.intent.category.SETUP_WIZARD" /></intent-filter></activity></application>
</manifest>

设置了 android:priority="1" ,值越大优先级越高,取值 -1000 ~~ 1000 。
这个应用也有 android.intent.category.HOME 属性,表明它也是主页应用,且优先级比主页高。为什么比主页高,因为主页没有设置 android:priority 属性,默认0 。

提一下, 6.0 的 Provision 源码并没有
<category android:name="android.intent.category.SETUP_WIZARD" />
在 8.0 上不加 <category android:name="android.intent.category.SETUP_WIZARD" /> 也没问题。
查看源码的 Launcher2 、Launcher3 ,确实没有配置 android:priority 属性。

<applicationandroid:name="com.android.launcher2.LauncherApplication"android:label="@string/application_name"android:icon="@mipmap/ic_launcher_home"android:hardwareAccelerated="true"android:largeHeap="@bool/config_largeHeap"android:supportsRtl="true"><activityandroid:name="com.android.launcher2.Launcher"android:launchMode="singleTask"android:clearTaskOnLaunch="true"android:stateNotNeeded="true"android:resumeWhilePausing="true"android:theme="@style/Theme"android:windowSoftInputMode="adjustPan"android:screenOrientation="nosensor"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.HOME" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.MONKEY"/></intent-filter></activity>//其他的省略

源码开机向导只有一个 DefaultActivity, 看看都干了啥。

public class DefaultActivity extends Activity {@Overrideprotected void onCreate(Bundle icicle) {super.onCreate(icicle);// Add a persistent setting to allow other apps to know the device has been provisioned.Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 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();}
}

首先, 把 DEVICE_PROVISIONEDUSER_SETUP_COMPLETE 置为 1 ,告诉其他应用初始化完毕。
然后用 PackageManager 把自己 disable 掉,这样此应用就不可用,不会再出现了。
如果要使 Provision 可用,pm.setComponentEnabledSetting 传入 COMPONENT_ENABLED_STATE_ENABLED 即可。
安卓复位后 Provision 会重新可用,为什么,后续分析。

然后,并没有用

按照如上操作开发了 OOBE 后,并没有达到理想效果,出现了选择主页的弹窗,why ?
参考这篇博客 https://juejin.im/post/5cc165946fb9a031ec6d2ab8 ,找到了思路。

我原先把 OOBE 放到 system/app/ 目录, 尝试把 OOBE 放到 system/priv-app/ 目录,两个目录的差别是 system/priv-app/ 目录权限更高,这样 android:priority=“1” 就有效了。

如何把 OOBE 放到 system/priv-app/ 目录

我用的是源码编译,修改 OOBE 的 Android.mk 文件,添加

LOCAL_PRIVILEGED_MODULE := true

这个表示把这个 app 放到 system/priv-app/ 目录;
如果不设置 或者 设为 false ,则是放到 system/app/ .
烧录测试,OK。


http://www.ppmy.cn/news/685327.html

相关文章

系统准备工具 (Sysprep.exe) 实现OOBE用法

MSDN&#xff1a; sysprep 一.系统准备工具介绍 系统准备工具 (Sysprep.exe)用于准备供映像或交付给客户的 Windows 安装。 二.OOBE流程 Sysprep.exe->审核模式Audit->重启->删除用户->OOBE->关机 三.操作步骤 测试完成后&#xff0c;整机设置出货状态&…

android OOBE创建方法

OOBE就是ANDROID第一次开机时候的系统设置&#xff0c;只在机器第一次开机的时候运行一次&#xff0c;之后都不会再运行&#xff0c;除非erase userdata和erase cache。 创建OOBE很简单&#xff0c;只需要把Google的APK应用套件拷贝到自己的系统里就可以了&#xff0c;其中有一…

Windows 11 首次开机OOBE阶段跳过连接网络及登录微软账户,使用本地账号登录的方法

2022/11/25更新&#xff1a; 以下方法最新版本的Win11 22H1上已失效&#xff0c;最新的方法是在第二步呼出cmd窗口&#xff0c;输入oobe\bypassnro&#xff0c;电脑会重启&#xff0c;再次来到连接网络的页面时选择“我没有Internet连接”的选项&#xff0c;就可以跳过联网了。…

IMU 互补滤波

IMU学名惯性测量单元&#xff0c;所有的运动都可以分解为一个直线运动和一个旋转运动&#xff0c;故这个惯性测量单元就是测量这两种运动&#xff0c;直线运动通过加速度计可以测量&#xff0c;旋转运动则通过陀螺。 void IMUupdate(float gx, float gy, float gz, float ax,fl…

html当连接失败自动,DNF爆满频道服务器自动连接失败怎么办

DNF从3月24日更新后登陆游戏会自动选择上次最后登陆游戏的频道进入&#xff0c;不会再出现频道选择界面&#xff0c;当上次的频道爆满后&#xff0c;玩家就无法登陆进入游戏了&#xff0c;小编也遇到过这种情况&#xff0c;后来经过多方查找终于找到了解决的办法&#xff0c;下…

dnf服务器炸团门票怎么找回,DNF:打团掉线被献祭点这里免费补门票,再也不怕被献祭没牌了...

原标题&#xff1a;DNF&#xff1a;打团掉线被献祭点这里免费补门票&#xff0c;再也不怕被献祭没牌了 Hello大家好 我是帅帅&#xff0c;欢迎来到阿拉德密室&#xff0c;今天给大家带来一期超级福利 就是当我们在打团超时空的时候&#xff0c;有很多玩家会因为掉线&#xff0c…

卢克服务器连接不稳定,DNF:跨五服务器崩了,打卢克的玩家都掉线了,坐等策划补偿?...

原标题&#xff1a;DNF&#xff1a;跨五服务器崩了&#xff0c;打卢克的玩家都掉线了&#xff0c;坐等策划补偿&#xff1f; DNF服务器一般而言是没有什么问题&#xff0c;稳定性还是不错的&#xff0c;但是偶尔也会出现问题&#xff0c;而每一次出现问题策划都是很敷衍的盖过去…