本文介绍如何在当前 Android App 的基础上集成 mPaaS 提供的 Hotpatch 热修复功能。
目前,热修复支持原生 AAR 接入和组件化接入两种方式。
前置条件
若采用原生 AAR 方式接入,需要先 将mPaaS 添加到您的项目中。
若采用组件化方式接入,需要先完成 组件化接入流程。
添加 SDK
原生 AAR 方式
参考 管理组件依赖,通过 组件管理(AAR)在工程中安装 热修复(HOTFIX)组件。
组件化方式
在 Portal 和 Bundle 工程中通过 组件管理安装 热修复(HOTFIX)组件。更多信息,参考 管理组件依赖。
初始化热修复
原生 AAR 接入
如果需要使用热修复功能,您还需要完成以下两步操作。
需要将
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) { } }
在
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。
进行修复单击 触发热修复部署检测 按钮,触发热修复的下载。在下载完成后,彻底关闭 Demo 应用并重新启动。
修复后单击 模拟需要被热修复的点击事件 按钮,会弹出 “当前点击事件已被热修复”的 Toast。
问题排查
不要使用非正规方式引入 apache-httpclient、apache-commons,具体参考 Android 应用开发者平台官方文档。
不要使用非正规方式引入 NFC 系统相关的 SDK。
确定没有继承任何 Application 相关的类,确定使用 ApplicationLike 代替。
热修复日志请使用 Tag:DynamicRelease 过滤。
下载阶段:可以同时过滤 RPCException,如果有相关的异常,那么下载不会成功。
说明若出现 RPC 相关异常,可根据错误码进行排查,详细信息参考 RPC 调用。
合并补丁阶段:可以过滤
immediately=true
,如果发现相关日志,则表示合并补丁成功。合并补丁成功之后,理论上只要重启 App,补丁就会生效。