文章目录
需求-场景
开机向导定制
备注:开机向导是一个单独的apk 无源码,在单独apk 基础上,修改apk 实现开机向导定制。
参考资料:
博客资料
如果您有开机向导的需求,建议看一下相关开机向导定制例子,介绍,这一块内容本身对外资料很少,需要自己理解一下,然后针对需求更改。
Android 运行时资源替换----Runtime Resource Overlay:
Android开机向导setupwizard,设置系统语言,WiFi向导:
Android Q新增Google Setup Wizard页面
Android集成自定义Google Setup Wizard
官网参考资料:
官网资料相关开机向导部分本身不对外开放的,需要谷歌账号有一定的开发权限。
自定义向导脚本
配置可选步骤:
自定义SUW:
参考资料注意点
开机向导内容属于Framework层内容模块,单独apk,没有源码,需要知晓修改原理。
开机向导修改,针对不同的主控芯片平台不一样,RK、全志、mtk、展锐、谷歌… 不同的Android版本 参考资料只是思路,针对自身平台找到自身的DEMO或者对应的修改点,不可照抄照搬。
本文针对自己在MTK Android12 上面实现需求的一个思路、编译位置、涉及到知识业务点一个总结。
存在不同平台开机引导包、不同版本开机引导包apk 名称都不一样的情况。
附件资料文件说明:
SetupWizard.apk MTK的开机向导app
SetupWizardOverlay-master.zip 第三方自定义开机向导源码
GmsSampleIntegration MTK Android12 开机向导叠加DEMO
附件资料-MTKAndroid12 开机向导相关资料
推荐工具:
2024最新版Android逆向教程——第2天:dex反编译工具的安装和使用
推荐工具目的,查看附件中的SetupWizard.apk 源码,找到 wizard_script.xml 里面的配置,这样不管需求是什么,好对应上对应的action和resultCode,
不然造成找不到加载资源crash掉、按钮点击按钮无反应不跳转;同时自己需要添加界面或者删除界面时候,好修改wizard_script.xml 文件 及 关联的xml 文件。
其源码如下:
<?xml version="1.0" encoding="utf-8"?>
<WizardScript xmlns:wizard="http://schemas.android.com/apk/res/com.google.android.setupwizard" wizard:version="2">
<WizardAction
wizard:uri="intent:#Intent;action=com.android.setupwizard.OEM_PRE_SETUP;end"
id="oem_pre_setup"/>
<WizardAction
wizard:uri="intent:#Intent;action=com.android.setupwizard.WELCOME;end"
id="welcome">
<result
wizard:action="check_user_unlock_qr"
wizard:name="start_qr_provision"
wizard:resultCode="101"/>
<result
wizard:action="check_user_unlock_dpm_user_complete"
wizard:name="dpm_user_complete"
wizard:resultCode="111"/>
<result
wizard:action="check_user_unlock_dpm_user_complete"
wizard:name="dpm_profile_complete"
wizard:resultCode="112"/>
<result
wizard:action="check_user_unlock_work_setup_interrupted_qr_scan"
wizard:name="check_user_unlock_work_setup_interrupted_qr_scan"
wizard:resultCode="114"/>
<result
wizard:action="check_user_unlock_work_setup_interrupted_consumer_flow"
wizard:name="check_user_unlock_work_setup_interrupted_consumer_flow"
wizard:resultCode="115"/>
<result
wizard:action="check_user_unlock_nfc"
wizard:name="check_user_unlock_nfc"
wizard:resultCode="124"/>
<result
wizard:action="check_user_unlock_work_setup_interrupted_nfc_tap"
wizard:name="check_user_unlock_work_setup_interrupted_nfc_tap"
wizard:resultCode="125"/>
<result
wizard:action="check_user_unlock_fail_provisioning"
wizard:name="provisioning_extras_not_saved"
wizard:resultCode="128"/>
<result wizard:action="check_user_unlock"/>
</WizardAction>
<WizardAction
wizard:uri="intent:#Intent;action=com.android.setupwizard.CHECK_USER_UNLOCK;end"
id="check_user_unlock_fail_provisioning">
<result wizard:action="fail_provisioning"/>
</WizardAction>
<WizardAction
wizard:uri="intent:#Intent;action=com.android.setupwizard.SHOW_PROVISIONING_ERROR;end"
id="fail_provisioning"/>
<WizardAction
wizard:uri="intent:#Intent;action=com.android.setupwizard.CHECK_USER_UNLOCK;end"
id="check_user_unlock_work_setup_interrupted_nfc_tap">
<result wizard:action="work_setup_interrupted_nfc_tap"/>
</WizardAction>
<WizardAction
wizard:uri="intent:#Intent;action=com.google.android.setupwizard.WORK_SETUP_INTERRUPTED;end"
id="work_setup_interrupted_nfc_tap">
<result
wizard:action="nfc_provision_flow"
wizard:name="continue_start_nfc_provisioning"
wizard:resultCode="1"/>
<result wizard:action="factory_reset"/>
</WizardAction>
<WizardAction
wizard:uri="intent:#Intent;action=com.android.setupwizard.CHECK_USER_UNLOCK;end"
id="check_user_unlock_nfc">
<result wizard:action="nfc_provision_flow"/>
</WizardAction>
<WizardAction
wizard:script="android.resource://com.google.android.setupwizard/xml/wizard_script_nfc_provision_flow"
id="nfc_provision_flow">
<result wizard:action="oem_post_setup"/>
</WizardAction>
<WizardAction
wizard:uri="intent:#Intent;action=com.android.setupwizard.CHECK_USER_UNLOCK;end"
id="check_user_unlock_work_setup_interrupted_qr_scan"/>
<WizardAction
wizard:uri="intent:#Intent;action=com.google.android.setupwizard.WORK_SETUP_INTERRUPTED;end"
id="work_setup_interrupted_qr_scan">
<result
wizard:action="check_user_unlock_qr"
wizard:name