快速开始

本文介绍如何在当前 Android App 的基础上集成 mPaaS 提供的 Hotpatch 热修复功能。

目前,热修复支持原生 AAR 接入和组件化接入两种方式。

  1. 添加 SDK

  2. 初始化热修复(仅原生 AAR 接入需要)

  3. 生成热修复补丁

  4. 发布热修复补丁

  5. 触发热修复补丁

前置条件

添加 SDK

原生 AAR 方式

参考 管理组件依赖,通过 组件管理(AAR)在工程中安装 热修复(HOTFIX)组件。

组件化方式

在 Portal 和 Bundle 工程中通过 组件管理安装 热修复(HOTFIX)组件。更多信息,参考 管理组件依赖

初始化热修复

原生 AAR 接入

如果需要使用热修复功能,您还需要完成以下两步操作。

  1. 需要将 Application对象重新继承为 QuinoxlessApplicationLike,并注意将该类防混淆。此处以 MyApplication 为例。

     @Keep
     public class MyApplication extends QuinoxlessApplicationLike implements Application.ActivityLifecycleCallbacks {
      private static final String TAG = "MyApplication";
      @Override
      protected void attachBaseContext(Context base) {
          super.attachBaseContext(base);
          Log.i(TAG, "attacheBaseContext");
      }
      @Override
      public void onCreate() {
          super.onCreate();
          Log.i(TAG, "onCreate");
          registerActivityLifecycleCallbacks(this);
      }
      @Override
      public void onMPaaSFrameworkInitFinished() {
          MPHotpatch.init(); 
          LoggerFactory.getTraceLogger().info(TAG, getProcessName());
      }
      @Override
      public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
          Log.i(TAG, "onActivityCreated");
      }
      @Override
      public void onActivityStarted(Activity activity) {
      }
      @Override
      public void onActivityResumed(Activity activity) {
      }
      @Override
      public void onActivityPaused(Activity activity) {
      }
      @Override
      public void onActivityStopped(Activity activity) {
      }
      @Override
      public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
      }
      @Override
      public void onActivityDestroyed(Activity activity) {
      }
     }
  2. 在 AndroidManifest.xml 文件中将 Application对象指向 mPaaS 提供的 Application对象。将刚刚生成的 MyApplication 类添加到 key 为 mpaas.quinoxless.extern.application的 meta-data中。示例如下:

     <application
         android:name="com.alipay.mobile.framework.quinoxless.QuinoxlessApplication" >
         <meta-data
              android:name="mpaas.quinoxless.extern.application"
              android:value="com.mpaas.demo.MyApplication" 
              />
     </application>

    其中 com.mpaas.demo.MyApplication是您自定义的 Application 代理类,继承 QuinoxlessApplicationLike

组件化接入

由于已经集成了相关内容,因此该接入方式不需要做任何变更。

生成热修复补丁

参见 生成热修复包

发布热修复补丁

参见 发布热修复包

触发热修复补丁

本节结合 代码示例中的 热修复 示例,对热修复过程进行详细的说明介绍。

该代码示例中的修复内容是弹出的 Toast 中的内容。

  • 修复前单击 模拟需要被热修复的点击事件 按钮,弹出如下图所示的 Toast。  2

  • 进行修复单击 触发热修复部署检测 按钮,触发热修复的下载。在下载完成后,彻底关闭 Demo 应用并重新启动。

  • 修复后单击 模拟需要被热修复的点击事件 按钮,会弹出 “当前点击事件已被热修复”的 Toast。  3

问题排查

  • 不要使用非正规方式引入 apache-httpclient、apache-commons,具体参考 Android 应用开发者平台官方文档

  • 不要使用非正规方式引入 NFC 系统相关的 SDK。

  • 确定没有继承任何 Application 相关的类,确定使用 ApplicationLike 代替。

热修复日志请使用 Tag:DynamicRelease 过滤。

  • 下载阶段:可以同时过滤 RPCException,如果有相关的异常,那么下载不会成功。

    说明

    若出现 RPC 相关异常,可根据错误码进行排查,详细信息参考 RPC 调用

  • 合并补丁阶段:可以过滤 immediately=true,如果发现相关日志,则表示合并补丁成功。合并补丁成功之后,理论上只要重启 App,补丁就会生效。