日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 美团Robust热更新 使用入门

發布時間:2025/3/20 Android 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 美团Robust热更新 使用入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android熱更新方案Robust

?


相信很多人都認識了解過 熱修復、熱更新、熱補丁(對于這個技術也沒有特別標準的一種叫法,下面我統一叫熱更新),之后的一年里,各種熱更新方案如雨后春筍般出現,比較耳熟能詳的就有Nuwa、Tinker、Andfix 和 Dexposed 等等,他們之間的區別以及優缺點就不在這里討論了,鑒于它們的實際使用和局限性,美團的開發團隊就腦洞大開了。

就去年 Google 高調發布了 Android Studio 2.0,其中最重要的新特性Instant Run,實現了對代碼修改的實時生效(熱插拔)。美團開發團隊在了解 Instant Run 原理之后,實現了一個兼容性更強的熱更新方案,這就是產品化的hotpatch框架—–Robust

對于 Robust 的原理我們后面的文章再討論,本篇只針對想快速上手的入門講解,想先了解 Robust 的原理以及技術核心的同學請移步到

Android熱更新方案Robust

Android熱更新方案Robust開源,新增自動化補丁工具

美團 Robust 的 github demo 地址


?

使用場景

?

先介紹一下 Robust 的適用場景,與以往大家認識的熱更新一樣,對線上事故很難有即時生效的解決方式,每次發版都如臨深淵如履薄冰,畢竟就算再完善的開發測試流程也無法保證不會將 Bug 帶到線上,特別是新 app 剛上線,一個bug不只是影響到幾個幾十個用戶,一些創業性app的崩潰或者bug可能直接導致用戶卸載和永不使用。對于這種致命的又無可奈何的問題,Robust 就是時候該站出來摸摸你的頭,輕聲而又自信的說“別怕,你還有我”。

?

大概流程

?

1.集成了 Robust 后,生成 apk。保存期間的混淆文件 mapping.txt,以及 Robust 生成記錄文件 methodMap.robust?
2.使用注解 @Modify 或者方法 RobustModify.modify() 標注需要修復的方法?
3.開啟補丁插件,執行生成 apk 命令,獲得補丁包 patch.jar?
4.通過推送或者接口的形式,通知 app 有補丁,需要修復?
5.加載補丁文件不需要重新啟動應用

?

動手

?

首先遠程依賴 Robust 的一些插件,用于輔助生成 patch.jar 的。此時我們不需要深入了解,只需要知道它是用來輔助的就好。在項目最外層的 build.gradle 添加兩處插件

classpath ‘com.meituan.robust:gradle-plugin:0.3.3’?
classpath ‘com.meituan.robust:auto-patch-plugin:0.3.3’

然后在項目的 build.gradle 添加

//apply plugin: ‘auto-patch-plugin’?
apply plugin: ‘robust’

compile ‘com.meituan.robust:robust:0.3.3’

此時,還沒完成第一步呢,別急,需要手動 copy 一份 robust.xml 的配置文件到app的目錄下,該文件各個配置注釋的很清楚,若沒特殊要求,不需要修改?

好了,準備工作完成。有了這些東西,待我們需要修復的時候就可以一鍵生成補丁 patch.jar 了。但別急,你還不知道怎么加載補丁呢…

先解釋一下,如上圖標注所說了,在生成 apk 的時候使用 apply plugin:’robust’,該插件會生成打補丁時需要的方法記錄文件 methodMap.robust,該文件在打補丁的時候用來區別到底哪些方法需要被修復,所以有它才能打補丁。而上文所說的還有 mapping.txt 文件,該文件列出了原始的類,方法和字段名與混淆后代碼間的映射。這個文件很重要,可以用它來翻譯被混淆的代碼。但也不是必須的,如果不需要混淆,可以不保留。這兩個文件在生成apk后,分別在?
build/outputs/robust/methodsMap.robust,build/outputs/mapping/mapping.txt(需要開啟混淆后才會出現),我們需要自己分別拷貝到 app/robust 下,在 app 目錄新建個叫 robust 的文件夾,把這兩個文件放進去就 ok 了。

此時,完成了第二步了。我們得到了 apk ,mapping.txt,methodMap.robust ,有了它們我們再繼續生成補丁 patch.jar。然而我踩到過的坑是,沒有簽名文件一樣可以完成上述步驟,但在安裝apk的時候會被告知該 apk 已損壞,所以按普通簽名那樣加上簽名文件就行了。

?

制作補丁并使用

?

我們新建的工程很簡單,只有2個button,一個用來加載補丁,一個用來跳轉。如圖,首頁和沒加載補丁時跳轉的頁面。剛才我們說,要怎么使用補丁文件,看下面加載補丁的按鈕事件里面,看到了沒,就那么一句話就能實現加載補丁了。

?

new PatchExecutor(上下文我懂,xxx,callback我也懂).start()

中間的xxx是個什么東西啊,還需要自己寫?帶著這個疑問去思考一下,就不難發現,要加載補丁肯定得知道 patch.jar 放在哪啊是吧,打開看一眼(不要害怕只有很少代碼),為了方便展示,就把不太重要的三個方法縮起來了,copy 方法是普通文件拷貝的IO流,verifyPatch 方法本來是驗證補丁有效性的,后來發現對普通使用者沒有那么高要求,就改成了備份補丁的回調了,ensurePatchExist 方法就檢測補丁存在與否,好了大概知道其它的方法就詳細介紹下主要方法 fetchPatchList,回顧一下上面的xxx再聯想到這里吧,既然我們要加載補丁,那么我們得知道補丁在哪啊,這個方法就是把補丁找出來給上面那個誰用的。所以說,補丁的位置你可以根據拉取下來保存的位置來找出來,把路徑給 setLocalPath 就好。再有就 setPatchesInfoImplClassFullName 的包名需要和 robust.xml 配置的一樣

我們所需要做的跳轉后效果是修改一下textview顯示內容而已,那么在被修改的頁面需要怎么標注被修改的方法呢,就像這樣,先科普一下,在 robust 的注意事項里面已經提到過,修改方法和字段會有一些局限性,那是因為 android 本身ProGuard的內聯、優化導致的。所以要繞過這個本身的問題,要必須遵循一些規律了…以后再介紹這個。修改完這些,我們再去 build.gradle 修改一下,開啟打補丁那個,關閉生成apk那個。之后再在終端執行一遍生成apk的命令行。直到終端那里出現 auto patch end successfully(最后 build failed 是正常的,別緊張孩子)。再然后就是要把patch.jar push 到手機目錄路徑下啦。那些自己推送下載的請自行調試更正,確保路徑正確。還有記得給應用讀寫內存卡的權限

既然到了這里,我們好像所有條件都具備了啊,那么就點 LOAD PATCH 按鈕看看發生什么事吧,如果看到 apply result true 那么就大功告成了。

最后來個效果圖

謝謝美團開發團隊的開源和貢獻,還要特別感謝Robust作者之一的張夢同學,為 Robust 挖下的坑(開玩笑哈哈哈),我們努力排坑只希望能讓大家更簡便的使用,以后的路還很長…大家有什么建議或意見,請到 github 上面去留言。

轉載于:https://www.cnblogs.com/chenxibobo/p/9651793.html

總結

以上是生活随笔為你收集整理的Android 美团Robust热更新 使用入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。