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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【Android 热修复】热修复原理 ( 热修复框架简介 | 将 Java 字节码文件打包到 Dex 文件 )

發布時間:2025/6/17 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 热修复】热修复原理 ( 热修复框架简介 | 将 Java 字节码文件打包到 Dex 文件 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、 熱修復框架簡介
    • 1、類替換
    • 2、so 替換
    • 3、資源替換
    • 4、全平臺支持
    • 5、生效時間
    • 6、性能損耗
    • 7、總結
  • 二、 將 Java 字節碼文件打包到 Dex 文件





一、 熱修復框架簡介



熱修復框架 : 熱修復框架有很多 , 只選擇幾個典型的進行對比研究 ;

  • Tinker : 微信 ;
  • QZone : Q 空間 ;
  • AndFix : 阿里 ;
  • Robust : 美團 ;

下面從幾個方面的功能及性能分析上述四個熱修復框架 ;



1、類替換


類替換 :

Java 類源碼文件編譯成 class 字節碼文件 , 然后轉為 dex 文件 , 打包到 apk 中 , 然后在 Android 平臺的 Dalvik虛擬機 或 Art 虛擬機中執行 ;

類替換就是將 Java 類編譯后的字節碼 , 進行完整的替換 ;


Tinker , QZone 熱修復框架支持類替換 ;

Tinker , QZone 是以 Java 層作為修復的對象 ;


AndFix , Robust 熱修復框架不支持類替換 , 使用的是定點替換修復的機制 ;

AndFix , Robust 是以 ndk 層作為修復的對象 ;

ndk 層自然無法進行 Java 層的類替換 ;



2、so 替換


so 替換 : 替換 ndk 的 so 庫 ;

Tinker 可以替換 so 庫 ;

QZone , AndFix , Robust 不能替換 so 庫 ;



3、資源替換


Tinker , QZone 框架可以替換資源 ;

AndFix , Robust 不能替換資源 ;



4、全平臺支持


Tinker , QZone , AndFix , Robust 都可以全平臺支持 ;



5、生效時間


Tinker , QZone 不支持即時生效 ;

AndFix , Robust 只要熱修復完畢 , 即時生效 ;



6、性能損耗


Tinker , AndFix , Robust 性能損耗較小 ;

QZone 性能損耗較大 ;



7、總結


開源的熱修復框架中 , 綜合所有的要素 , 推薦使用 Tinker 熱修復框架 , 除了即時生效的時效性之外 , 其它性能參數都可以接受 ;





二、 將 Java 字節碼文件打包到 Dex 文件



程序出現 BUG , 修復好之后 , 發布修復包到服務器中 , 應用通過網絡將修復包下載到手機中 ;

修復包的格式問題 : 修復好的 Java 代碼編譯后是 Class 字節碼文件 , 需要轉為 Dex 格式 , 才能在 Android 虛擬機中執行 ;

獲取字節碼文件 : 字節碼文件在 Module 目錄下的 " build\intermediates\javac\debug\classes " 目錄中 , 如下圖所示 ;

將需要修復的 Class 字節碼文件保留 , 刪除不需要修復的字節碼文件 ;

這里只需要修改 MainActivity.Java 源碼 , 只保留該文件的字節碼文件 MainActivity.class , 其它文件刪除 ;

將需要修復的 Class 字節碼文件打包成 dex 文件 :

將上述整個 " build\intermediates\javac\debug\classes " 整個目錄拷貝到一個容易操作的目錄 ;

操作指定目錄 : 進入包名目錄的上一級目錄 , 包名是 kim.hsl.keep_progress_alive , MainActivity 的完整包名類名是 kim.hsl.keep_progress_alive.MainActivity , 其所在的目錄是 " D:\dex\classes\kim\hsl\keep_progress_alive\MainActivity.class " , 進入 " D:\dex\classes\ " 目錄進行操作 ;


執行命令 :

D:\001_Programs\001_Android\002_Sdk\Sdk\build-tools\30.0.2\dx.bat

–dex --output

D:\dex\classes\update.dex

D:\dex\classes

D:\001_Programs\001_Android\002_Sdk\Sdk\build-tools\30.0.2\dx.bat --dex --output D:\dex\classes\update.dex D:\dex\classes

指令命令后 , 在 " D:\dex\classes " 目錄下生成了需要更新的 " update.dex " 文件 ;

( 可以參考 【Android 安全】DEX 加密 ( Java 工具開發 | 生成 dex 文件 | Java 命令行執行 ) 博客內容)


將編譯好的 update.dex 放置到 SD 卡中 , 就可以在應用中加載該 dex 文件進行應用熱修復 ;

總結

以上是生活随笔為你收集整理的【Android 热修复】热修复原理 ( 热修复框架简介 | 将 Java 字节码文件打包到 Dex 文件 )的全部內容,希望文章能夠幫你解決所遇到的問題。

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