iOS 客戶端
熱修復錯誤碼
以下表格顯示錯誤碼及其含義。
錯誤碼 | 含義 |
300 | 未知錯誤 |
301 | 本地 patch 文件為空。請檢查 patch 文件是否成功下載,或本地測試時文件路徑是否正確。 |
302 |
|
303 | 本地 patch 文件為空。請檢查 patch 文件是否成功下載,或本地測試時文件路徑是否正確。 |
304 | patch 文件解密失敗。請檢查無線保鏢驗簽圖片 |
305 | patch 文件解壓失敗。請重試。 |
306 | patch 文件 MD5 校驗失敗。請確認發布的 patch 文件是否為加密后的 |
本地測試由 OC 轉化后的 .js 文件,為什么修復沒有生效?
查看下圖中調用的方法返回的錯誤信息,若不為 nil,根據上文的錯誤碼進一步排查。
NSString *jsFile = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"js"];
NSError *errorJS = [MPDynamicInterface runWithResultDynamicLocalFile:jsFile];
若上一步無報錯,請檢查 .js
文件語法是否正確,可參考 OC 轉 JS 語法。
本地測試加密后的 .zip 文件,為什么修復沒有生效?
查看工程中 RSA 非對稱加密信息是否正確,可通過下圖中 ret 的值是否為 0 判斷。
確保工程中的無線保鏢圖片是正確的且與工程中的
meta.config
是匹配的。如無法確定,可嘗試重新生成無線保鏢圖片以及更新熱修復.zip
文件。確保測試的是加密之后的
.zip
文件。查看下圖中調用的方法返回的錯誤信息,若不為 nil,根據上文的錯誤碼進一步排查。
NSString *jsZip = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"zip"]; NSError *error = [MPDynamicInterface runWithResultDynamicLocalSecFile:jsZip];
在發布平臺下發加密后的 .js 文件后,為什么客戶端沒有修復生效?
原始
.js
文件加密后,本地驗證.zip
文件是否修復生效。在控制臺上傳新的修復任務時,確保上傳到發布平臺的修復包是加密后的
.js
文件。目標版本需與工程中
info.plist
文件中Product Version
字段保持一致。在 Xcode 控制臺查看
alipay.client.getUnionResource
的網關返回結果是否為 1000,保證網絡請求成功。若網關返回結果不是 1000,請根據 移動網關 > 客戶端編程 > FAQ 進一步排查。網絡請求成功后,在本地沙盒路徑中查看 patch 包是否已下發到本地,若目錄下已生成了
.zip
和.sig
文件,則表示客戶端已獲取到發布平臺下發的腳本,殺進程重啟應用后 patch 即可生效。
Android 客戶端
使用熱修復后,和 RPC 有關的調用發生 apache http 相關的 crash。
請使用 Android 官網上的方式引入 apache http client,禁止使用導入 Jar 包或者 gradle implementation/compile 的方式導入 http client。否則會引起 classloader 加載類混亂。
內部類的白名單熱修復
內部類的引用需要完全限定名。如果一定要修復內部類,最簡單的方式是反編譯成 smali,smali 的文件名就是內部類的類名。
RPC 調用相關
如果通過 RPC 請求進行資源調用的過程中出現異常,請參考 無線保鏢結果碼說明 進行排查。