今天APP上線之后發現一個問題,提示:本應用使用HBuilderX 3.1.12 或對應的cli版本編譯,而手機端SDK版本是3.1.13,不匹配的版本可能造成應用異常。如圖:
一、問題原因
HBuilderX1.7.0及以上版本uni-app添加了運行環境版本和編譯環境版本的校驗機制,當兩個版本不一致時會彈出如上彈框的提示。
1、“手機端SDK版本”:
是指5+Runtime的版本號。雲打包提交雲端打包時確定的,也就是說生成apk/ipa之后,APP運行環境就不會改變了。離線打包時是你下載的sdk的版本。只有默認真機運行基座、雲打包機的引擎是和HBuilderX升級而自動升級的。如果你使用了自定義基座、sdk離線打包,需要手動升級,或者重新用新版制作自定義基座,或者下載最新版sdk。
2、“HBuilderX版本”:
如果項目是HBuilderX創建的,則是HBuilderX的版本號,更新HBuilderX會改變;如果是cli創建的項目,即根目錄是package.json,那么編譯環境版本號是創建cli時生成的,或者上一次執行npm update生成的。不管HBuilderX如何升級,cli項目的編譯器並不會跟隨HBuilderX升級而升級,需手動升級。
二、什么時候會出現這種問題?
情況1:HBuilderX版本很老,或cli編譯器一直沒升級,而雲打包服務器已經升級,此時編譯環境版本低,而運行環境版本高,就會報錯。
情況2:使用老版HBuilderX打包了App后,后來使用新版HBuilderX或新版cli制作了wgt升級包。此時編譯環境會高於運行環境,也會報錯。
情況3:使用了cli或自定義基座或本地打包,雖然HBuilderX升級了,但這些配套並沒有手動升級,也是報錯。
情況4:如果HBuilderX版本高於SDK版本,有可能是HBuilderX在升級時出現問題,手機端基座沒有升級成功。如果是這種情況,在插件管理里卸載“真機運行插件”,然后重新安裝這個插件。
二、解決辦法
1、比較簡單的就是全部升級,保持HBuilderX、自定義基座、cli項目編譯器都是最新版。
2、wgt升級時遇到這個問題,首先你可以自測,看老的運行引擎和新版編譯器編的wgt是否搭配,如果測試有問題,那不能使用wgt升級,請使用整包升級。
如果測試正常,可以在manifest.json文件的源碼視圖中配置忽略這個提醒,在“app-plus”->"compatible" 節點下添加配置 方式如下:
HBuilderX1.9.0及以上版本新增以下配置避免彈出提示框。
可以在 manifest.json 文件的源碼視圖中配置忽略這個提醒,方式如下:
//...
"app-plus": { "compatible": { "ignoreVersion": true //true表示忽略版本檢查提示框,HBuilderX1.9.0及以上版本支持
}, //....
}, //...
以下方法可針對指定版本避免彈出提示框
//...
"app-plus": { "compatible": { "runtimeVersion": "1.7.0", //根據實際情況填寫
"compilerVersion": "1.7.1" //根據實際情況填寫
}, //....
}, //...
- "runtimeVersion"字段值表示應用兼容的uni-app運行環境版本號,可以配置多個版本號(使用英文字符,分隔)
- "compilerVersion"字段值表示編譯環境版本號,通常配置當前HBuilderX的版本號或cli編譯器版本即可(不可以配置多個)
建議:盡量使用相同的HBuilderX版本制作移動App資源升級包
本地離線打包請及時更新到與HBuilderX版本相對應的App離線打包SDK
cli項目請及時npm update 更新到最新cli,如需指定cli版請參考:修改依賴為指定版本
注意
平台並不知道使用者是正常用戶還是開發者。
但開發者在發布給最終用戶之前,請務必先自行測試好。
目前出這個問題的,大多是因為制作wgt升級包造成的。
請使用wgt升級的開發者的,務必在測試環境上先測試好了再發布wgt。
在HBuilderX 1.9版里,已經在制作wgt時強調提示了這個信息。