Android集成自定义Google Setup Wizard

前言:本文基于Android P/Q进行的实验,其余版本并不能保证成功php

Google SetupWizard中文翻译为设置向导, 是GMS应用的一部分, 不过Google提供了文档供OEM厂商或者运营商进行定制, 文档的名称是Configuring the Setup Wizardjava

Android.mk设置

#Android Q library
LOCAL_STATIC_ANDROID_LIBRARIES := \
	setupcompat \
	setupdesign
#Android P library
include frameworks/opt/setupwizard/library/common-gingerbread.mk
复制代码

Android.mk中须要添加SetupWizard库,这个是为了使用Google SetupWizard的主题而添加的,若是使用自定义的主题的话,有可能测不过GMS. Android P使用的是frameworks/opt/setupwizard, 而Android Q必须换成external下的setupcompat和setupdesign.android

添加BroadcastReceiver

按照Google的文档,咱们须要添加一个空的广播用于接收com.android.setupwizard.action.PARTNER_CUSTOMIZATION,这个广播能够不作任何动做git

<!--AndroidManifest.xml-->
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.setupwizard.demo">

    <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true">
        <receiver android:name=".SuwCustomizationReceiver">
            <intent-filter>
                <action android:name="com.android.setupwizard.action.PARTNER_CUSTOMIZATION" />
            </intent-filter>
        </receiver>

    </application>

</manifest>
复制代码
//SuwCustomizationReceiver.java
package com.setupwizard.demo;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class SuwCustomizationReceiver extends BroadcastReceiver {

    public SuwCustomizationReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
    }
}
复制代码

添加raw目录

通常使用的是GmsSampleIntegration这个应用里面的raw目录,这个应用是Google提供的一段集成自定义SetupWizard的demo例子,通常是在vendor/${partener_gms}/apps目录下.
而raw这个目录则包含了Google SetupWizard的流程, Google SetupWizard就会按照这些xml的流程跳转到对应的界面, 包括自定义的界面.因此这个raw目录是自定义Google SetupWizard的核心, 不管是添加仍是修改页面,都极可能会涉及到
移植了这个raw目录以后须要修改包名com.google.android.gmsintegration为本身的包名github

  1. 进入res/raw目录
  2. 执行sed -i "s/com.google.android.gmsintegration/com.setupwizard.demo/g" `grep com.google.android.gmsintegration -rl .`
  3. 执行ag com.setupwizard.demo看是否与AndroidManifest.xml中的包名是否保持一致便可

添加启动时的uri

定制SetupWizard须要指定开机时的启动的流程, 不然会用Google SetupWizard.apk中的xml/目录下的流程shell

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="wizard_script_uri" translatable="false">android.resource://com.setupwizard.demo/raw/wizard_script</string>
</resources>
复制代码

简单的自定义

为了区分与原生Google SetupWizard的不一样, 在strings.xml添加一行字符串用于overlay原生的字符串, 在Google文档中还规定了许多能够定制的资源,详情见文档中的Providing resource assetsbash

<!--strings.xml-->
<!--sim_missing_text出如今设置向导第二页, 前提是设备没有插入sim卡-->
<string name="sim_missing_text">Demo for sim missing</string>
复制代码

总结

以上步骤以后就能够编译自定义的SetupWizard而后push进去启动了, 不插卡的状况下在第二页中就能够看到效果了, 拷贝代码的时候要注意修改包名, 具体的demo放在SetupWizardDemo,提交的commit id(ce16ea3) commit message(<20191120> <android><Add Setup Wizard sim missing>)app

相关文章
相关标签/搜索