本文介紹如何在當前 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,補丁就會生效。