全部产品
Search
文档中心

移动开发平台mPaaS:快速开始

更新时间:Aug 29, 2023

小程序新容器仅在 10.2.3 基线版本中提供,且仅支持 mPaaS 原生 AAR 的接入方式。更多信息,请参考 原生 AAR 接入方式简介

前置条件

将小程序新容器接入 Android 之前,请确保您已经开通 mPaaS,并使用原生 AAR 的接入方式完成 mPaaS 接入。

接入步骤

小程序新容器接入步骤概述如下:

  1. 选择基线

    1. 添加 10.2.3 基线。

    2. 添加小程序组件。

  2. 初始化配置

    1. 初始化配置。

    2. 小程序验签配置。

    3. 申请 UC 内核。

  3. 小程序发布

    1. 进入小程序后台。

    2. 配置虚拟域名。

    3. 创建小程序。

    4. 发布小程序。

  4. 启动小程序

下文将对各步骤操作进行详细说明。

选择基线

  1. 添加 10.2.3 基线。

  2. 添加小程序组件。

初始化配置

初始化 mPaaS

通过 mPaaS 框架初始化(推荐使用该方式)

  1. Application中添加初始化代码。

    // 初始化
    public class MyApplication extends Application {
    
        @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
            // mPaaS 初始化回调设置
            QuinoxlessFramework.setup(this, new IInitCallback() {
                @Override
                public void onPostInit() {
                    // 初始化mPaaS其他组件逻辑
                    
                }
            });
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            // mPaaS 初始化
            QuinoxlessFramework.init();
        }
    }
  2. AndroidManifest.xml中添加 meta 配置。

    <meta-data
        android:name="mpaas.init.param"
        android:value="com.xxx.xxx.MriverInitImpl" />
  3. 添加 com.xxx.xxx.MriverInitImpl,实现 MPInitParamManifest。

    public class MriverInitImpl implements com.mpaas.MPInitParamManifest {
        @Override
        public MPInitParam initParam() {
            MriverInitParam mriverInitParam = createInitParams();
            return MPInitParam.obtain().addComponentInitParam(mriverInitParam);
        }
    }

通过 MPInit 初始化 mPaaS

初始化 mPaaS,在 Application中添加以下代码。

MP.init(this, createInitParams());

MPInitParam createInitParams() {
        final MriverInitParam mriverInitParam = MriverInitParam.getDefault();
        mriverInitParam.setMriverInitCallback(new MriverInitParam.MriverInitCallback() {
            @Override
            public void onInit() {
                MPLogger.setUserId("MPTestCase");
                if (com.alibaba.ariver.kernel.common.utils.ProcessUtils.isMainProcess()) {
                    // 小程序相关配置,比如自定义jsapi,titlebar等
                    Log.i("MriverApp", "init1");
                    Mriver.setConfig("mr_use_inner_net", "YES");
                    Mriver.setConfig("mr_request_support_gzip", "true");
                    Mriver.setConfig("mr_showShareMenuItem", "YES");
                    Mriver.setConfig("mriver_openlocation_hidden_default", "0");
                    Mriver.setConfig("mriver_support_chooseFile", "YES");
                    Mriver.setConfig("ta_worker_init_low_version_compat", (Build.VERSION.SDK_INT == 22 || Build.VERSION.SDK_INT == 21) ? "YES" : "NO");
                    MriverEngine.registerBridge(ShareApiBridgeExtension.class);
                    MriverEngine.registerBridge(SnapshotScreenApiBridgeExtension.class);
                    Mriver.enableAPM();

                    List<String> miniAppPoint = new ArrayList<>();
                    miniAppPoint.add(PageResumePoint.class.getName());
                    miniAppPoint.add(PageEnterPoint.class.getName());
                    Mriver.registerPoint(PageLifeCycleExtension.class.getName(), miniAppPoint);

                    RVProxy.set(PrepareNotifyProxy.class, new PrepareNotifyProxy() {

                        @Override
                        public void notify(String s, PrepareStatus prepareStatus) {

                        }

                        @Override
                        public void apmEvent(final String s, final String s1, final String s2, final String s3, final String s4) {
                            mUIHandler.post(new Runnable() {
                                @Override
                                public void run() {
                                    if (APMActivity.logs == null) {
                                        APMActivity.logs = new StringBuilder();
                                    }
                                    APMActivity.logs.append(s).append(" ").append(s1).append(" ").append(s2).append(" ").append(s3).append(" ").append(s4).append("\n");
                                    if (TextUtils.equals(s, "MiniAppStart")
                                    || TextUtils.equals(s, "MiniPage_Load_T2")) {
                                        Toast.makeText(MRiverApp.sApp, "startTime: " + s4, Toast.LENGTH_SHORT).show();
                                    }
                                }
                            });

                        }
                    });
                }

                Log.i(TAG, "registerPlugin");
                MPNebula.registerH5Plugin(
                        PagePlugin.class.getName(),
                        null,
                        "page",
                        new String[]{"myapi2", H5Plugin.CommonEvents.H5_SESSION_EXIT, H5Plugin.CommonEvents.H5_PAGE_CLOSED, H5Plugin.CommonEvents.H5_PAGE_FINISHED, H5Plugin.CommonEvents.H5_PAGE_SHOULD_LOAD_URL}
                );


                MriverEngine.enableDebugConsole();

                Mriver.setConfig("mriver_show_debug_menu_all", "YES");
                Log.i("TTAATT", "hasInited");
            }

            @Override
            public void onError(Exception e) {
                Log.i("MriverApp", "init2");
            }
        });
        mriverInitParam.setUCInitCallback(new MriverInitParam.UCInitCallback() {
            @Override
            public void onInit() {
                sHasUCInit = true;
                Log.i("TTAATT", "hasInitedUC");
            }

            @Override
            public void onError(Exception e) {

            }
        });
        return MPInitParam.obtain().setCallback(this).addComponentInitParam(mriverInitParam);
    }

小程序验签配置

小程序容器提供包签名验证功能,默认 debug 包关闭,release 包开启,可以通过 API 控制。

// 关闭签名
MriverResource.disableVerify();

// 开启签名,其中xx为后台配置的私钥对应的公钥
MriverResource.enableVerify(MriverResource.VERIFY_TYPE_YES,"xx");
说明

在上线前,建议开启验签。有关小程序包验签配置的具体操作可参考 配置小程序包

配置小程序包请求时间间隔

mPaaS 支持配置小程序包的请求时间间隔,可以通过 API 控制。

Mriver.setConfig("h5_nbmngconfig", "{\"config\":{\"al\":\"3\",\"pr\":{\"4\":\"86400\","
    + "\"common\":\"864000\"},\"ur\":\"1800\",\"fpr\":{\"common\":\"3888000\"}},"
    + "\"switch\":\"yes\"}");

其中 \"ur\":\"1800\"为设置全局更新间隔的值,1800为默认值,代表间隔时长,单位为秒,您可修改此值来设置您的全局小程序包请求间隔,范围为 0 ~ 86400 秒(即 0 ~ 24 小时,0 代表无请求间隔限制)。

重要

其他参数请勿随意修改。

申请 UC 内核

使用小程序前,需要先申请并配置 UC 内核,没有 UC 内核将无法使用 Android 小程序部分能力,具体操作参考 申请 UC 内核 说明文档。

说明

由于产品策略变更,从 2022.12.01 起不支持公开申请 UC Key。

使用 UC 内核,可以使小程序拥有同层能力,如嵌入 webview、嵌入地图等,并且拥有更好的渲染体验。

发布小程序

启动小程序之前,您需要先通过 mPaaS 控制台发布该小程序,步骤如下。

  1. 进入小程序后台。登录 mPaaS 控制台,进入目标应用后,从左侧导航栏进入 小程序> 小程序发布页面。

  2. 配置虚拟域名。如果是第一次配置虚拟域名,请先在 小程序> 小程序发布> 配置管理中配置虚拟域名。虚拟域名可以为任意域名,建议使用您的企业域名,如 example.com

  3. 创建小程序。进入 mPaaS 控制台,完成以下操作:

    1. 单击左侧导航栏的 小程序> 小程序发布

    2. 在打开的小程序包列表页,单击 新建

    3. 新建小程序 窗口,填写小程序的 ID 和小程序名称,单击 确定。其中,小程序 ID 为任意 16 位数字,例如 2018080616290001。

    4. 在小程序 App 列表下,找到新增的小程序,单击 添加

    5. 在基本信息栏,完成以下配置:

      • 版本:填写小程序包的版本号,例如 1.0.0.0

      • 客户端范围:选择小程序 App 对应的 Android 客户端最低版本和最高版本。在这个范围内的客户端 App 可以启动对应的小程序,否则无法启动。这里最低版本可以填写 0.0.0,最高版本可以不填,代表客户端所有版本都可以启动这个小程序。

        说明

        此处务必填写 Android 的客户端版本,而非小程序版本。

      • 图标:单击 选择文件上传小程序包的图标。第一次创建小程序时必须上传图标。示例图标如下:6

      • 文件:上传小程序包资源文件,文件格式为 .zip。我们准备了一个 mPaaS 示例小程序(点此下载),可以直接上传。

        说明

        在上传前,需将此示例小程序的 .zip文件名以及压缩包内的文件夹名均修改为小程序的 16 位数字 ID。

    6. 在配置信息栏,完成以下配置:

      • 主入口 URL:必填,小程序的首页。主入口 URL 格式为:/index.html#xxx/xxx/xxx/xxx,其中 #后方的 xxx/xxx/xxx/xxx是小程序的 app.json中的 pages中的第一个值。如下图所示,mPaaS 示例小程序的主入口为:/index.html#page/tabBar/component/index7

      • 其他配置保持默认即可。

    7. 勾选 已确认以上信息准确,提交后不再修改

    8. 单击 提交

  4. 发布小程序。进入 mPaaS 控制台,完成以下步骤:

    1. 单击左侧导航栏的 小程序> 小程序发布> 小程序正式包管理

    2. 在打开的小程序包列表页中,选择您要发布的小程序包与版本,单击 创建发布

    3. 在创建发布任务栏,完成以下配置:

      • 发布类型:选择 正式 发布类型。

      • 发布描述:选填。

      单击 确定 完成发布创建。

启动小程序

完成上述步骤之后,在 Android 工程中,通过如下代码,启动示例小程序:

Mriver.startApp("2018080616290001");
说明

上方代码中的 2018080616290001为小程序 ID,此处仅为本文示例,操作中请填写您的小程序 ID。