[GMS] 如何客制化GMS开机向导
最近项目中有个任务,要在gms中的谷歌开机向导中加入客制化页面。这里为大家介绍下定制谷歌开机向导的方法。
没有源码,如何修改apk? 答案是—Runtime Resource Overlay(RRO,运行时资源替换)。这里不做详细介绍,有兴趣的同学可以去网上搜索具体的使用方法。我们只要知道这个机制可以帮助我们在没有源码的情况下修改apk就行了。
网上好多说了怎么实现RRO, 可以参考这位老哥的博客
https://blog.csdn.net/u012824529/article/details/90109914
其实在GMS包中已经有示例代码,就是vendor/google/apps/GmsSampleIntegration,我们直接修改这个apk就好,或者自己新建一个都行
第一步:新建一个activity,可以用adb shell am start -a action启动就好,我是直接用的settings里面的页面,这个activity就和正常的一样,没啥特殊的
第二步:配置wizard_script.xml文件,GmsSampleIntegration里面有现成的,直接修改
<WizardAction id="unified_restore_flow"
wizard:script="android.resource://com.google.android.gmsintegration/raw/wizard_script_unified_restore_flow">
<result wizard:action="hct_suw_nav" />
</WizardAction>
<WizardAction id="hct_suw_nav"
wizard:uri="intent:#Intent;action=android.settings.HctSetupWizardNavigation;end">
<result wizard:action="show_privacy_policy" />
</WizardAction>
搜索wizard:action=“oem_post_setup”,都替换成你自己的id wizard:action=“hct_suw_nav”。
这样就会告诉开机向导页面的前后顺序
第三步:最重要的一步,好多教程到这一步就结束了,我操,但是里面的跳过,和下一步怎么实现的都没有说,甚是坑
其实自定义跳转是有现成的接口的,可以获取wizard_script.xml定义的下一个intent,废话不说,直接上代码
public void onNext(int requestCode) {
int resultCode = Activity.RESULT_OK;
Intent intent = WizardManagerHelper.getNextIntent(getIntent(), resultCode);
try {
startActivityForResult(intent, requestCode);
//finish(); 千万不要finish,不然开机向导页面没法滑回上一页面
} catch (ActivityNotFoundException e) {
Log.e(TAG, e.getMessage());
}
}
然后在"跳过""下一步"的点击事件调用
finish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onNext(Activity.RESULT_OK);
}
});
需要注意的是"跳过"是肯定要调到下一页面的,也就是可以直接调用,"下一步"需要做自己配置的话,就完成后再去调用即可