全部产品
云市场
云游戏

快速开始

更新时间:2020-06-22 18:29:35

本文介绍如何在当前 App 的基础上集成 mPaaS 提供的 Hotpatch 热修复功能。目前,热修复支持 原生 AAR 接入mPaaS Inside 接入组件化接入 三种接入方式。

整个过程分为以下五步:

  1. 添加 SDK
  2. 初始化热修复(仅原生 AAR 接入或 mPaaS Inside 接入需要)
  3. 生成热修复补丁
  4. 发布热修复补丁
  5. 触发热修复补丁

前置条件

添加 SDK

原生 AAR 方式

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

mPaaS Inside 方式

在工程中通过 组件管理 安装 热修复(HOTPATH)组件。更多信息,参考 管理组件依赖 > 增删组件依赖

组件化方式

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

初始化热修复

原生 AAR 接入/mPaaS Inside 接入

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

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

    1. @Keep
    2. public class MyApplication extends QuinoxlessApplicationLike implements Application.ActivityLifecycleCallbacks {
    3. private static final String TAG = "MyApplication";
    4. @Override
    5. protected void attachBaseContext(Context base) {
    6. super.attachBaseContext(base);
    7. Log.i(TAG, "attacheBaseContext");
    8. }
    9. @Override
    10. public void onCreate() {
    11. super.onCreate();
    12. Log.i(TAG, "onCreate");
    13. registerActivityLifecycleCallbacks(this);
    14. }
    15. @Override
    16. public void onMPaaSFrameworkInitFinished() {
    17. LoggerFactory.getTraceLogger().info(TAG, getProcessName());
    18. }
    19. @Override
    20. public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
    21. Log.i(TAG, "onActivityCreated");
    22. }
    23. @Override
    24. public void onActivityStarted(Activity activity) {
    25. }
    26. @Override
    27. public void onActivityResumed(Activity activity) {
    28. }
    29. @Override
    30. public void onActivityPaused(Activity activity) {
    31. }
    32. @Override
    33. public void onActivityStopped(Activity activity) {
    34. }
    35. @Override
    36. public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
    37. }
    38. @Override
    39. public void onActivityDestroyed(Activity activity) {
    40. }
    41. }
  2. 在 AndroidManifest.xml 文件中将 Application 对象指向 mPaaS 提供的 Application 对象。将刚刚生成的 “MyApplication” 类添加到 key 为 mpaas.quinoxless.extern.applicationmeta-data 中。示例如下:

    1. <application
    2. android:name="com.alipay.mobile.framework.quinoxless.QuinoxlessApplication" >
    3. <meta-data
    4. android:name="mpaas.quinoxless.extern.application"
    5. android:value="com.mpaas.demo.MyApplication"
    6. />
    7. </application>

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

组件化接入

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

生成热修复补丁

参见 生成热修复包

发布热修复补丁

参见 发布热修复包

触发热修复补丁

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

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

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

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

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

问题排查

注意:
  • 不要使用非正规方式引入 apache-httpclient,具体参考 Android 应用开发者平台官方文档
  • 不要使用非正规方式引入 NFC 系统相关的 SDK。
  • 确定没有继承任何 Application 相关的类,确定使用 ApplicationLike 代替。

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

  • 下载阶段:可以同时过滤 RPCException,如果有相关的异常,那么下载不会成功。
  • 合并补丁阶段:可以过滤 immediately=true,如果发现相关日志,则表示合并补丁成功。合并补丁成功之后,理论上只要重启 App,补丁就会生效。