熱修複-Tinker

来源:http://www.cnblogs.com/LiuZhen/archive/2017/01/03/6245317.html
-Advertisement-
Play Games

微信開源,真是喜出望外,必須要去看看啊,比起nuwa來微信好很多,而且github上也有專門的官方文檔說明,還有很多資料查詢 參考地址:https://github.com/Tencent/tinker/wiki https://github.com/Tencent/tinker/wiki/Tink ...


 

微信開源,真是喜出望外,必須要去看看啊,比起nuwa來微信好很多,而且github上也有專門的官方文檔說明,還有很多資料查詢

參考地址:https://github.com/Tencent/tinker/wiki

     https://github.com/Tencent/tinker/wiki/Tinker-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97

想著以前研究的時候還要分包塊什麼一些複雜想法,現在發展到這種程度,真是三天不打就上房揭瓦了,很好比喻互聯網,學習不能斷,可能在不知不覺的時候就已經發展幾個階段了

看對比圖也知道了,微信的方式,和qq空間的方式的區別是不用插樁,無補丁的時候幾乎沒有性能損失,打補丁時需要刪除核心載入類

文檔還是挺詳細的,照著文檔來,基本跑通就沒問題了

首先肯定是下載demo了,然後文檔上介紹了幾種方案,也是推薦gradle生成配置(見下圖),demo里也是那樣做的,那我們肯定也是走這個方案了

 

集成的時候demo里的gradle配置上用的 TINKER_ID 是獲取的git的版本號,這個搞起來麻煩,文檔上有結束,可以換成versionName等,我就換的versionName,這個 TINKER_ID 要註意保持一致,不然會失敗

然後直接運行程式,或者build apk,成功後在你的項目路徑app\build\bakApk里應該會有apk生成

然後可以修改你的bug了,修改好之後在As的terminal終端使用命令行 gradlew tinkerPatchDebug,可不能直接用你自己的apk改個名字就丟上去了,那樣就over了

 

 

 

 然後看到successful,這個時候在你項目的目錄里就會有生成apk了,app\build\outputs\tinkerPatch\debug\

這個就是你的補丁了,把這個apk放到手機根目錄就行了

 

點開你的app,點擊load patch,你會看到一個列印出 patch success, please restart process的toast,然後點擊SHOW INFO可以查看到詳細的信息顯示補丁包已經載入成功了,github本身就很多介紹的資料,可以結合別人寫的好的博客看看學習,讓自己更快的掌握

 

/**

*個人理解

*微信針對QQ空間超級補丁技術的不足提出了一個提供DEX差量包,整體替換DEX的方案。主要的原理是與QQ空間超級補丁技術基本相同,整體替換掉舊的DEX,達到修複的目的

**/

SampleApplication是gradle自動生成的,繼承自 TinkerApplication ,然後設置捕捉代碼異常,onBaseContextAttached就是我們要找的關鍵代碼了

 

 

這代碼大致是反射調用TinkerLoader的tryLoad()方法拿到載入補丁結果,載入補丁包,反射調用同步周期,重置安全模式次數,大於等於三次會進入安全模式不再載入,一點點理解
深入研究很是複雜的,正如微信張紹文所說,這真是一條跪著走完的路,而且我們可以不用跪了,先乘個涼

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作者:Antonio Leiva 時間:Dec 27, 2016 原文鏈接:https://antonioleiva.com/custom-views-android-kotlin/ 在我們閱讀有關class文章時,你可能記得通常情況下僅用一個構造函數。這對於要創建定製視圖就是一個問題。 Andro ...
  • 一、到 百度地圖開發平臺下載SDK http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download 1、點擊自定義下載 2、下載自己想要的功能包我這裡選了三個 3、獲取密鑰 獲取密鑰之前我們要新建一個應用 填寫好相關的信息 二 ...
  • iOS微信第三方登錄實現 一、接入微信第三方登錄準備工作。移動應用微信登錄是基於OAuth2.0協議標準構建的微信OAuth2.0授權登錄系統。在進行微信OAuth2.0授權登錄接入之前,在微信開放平臺註冊開發者帳號,並擁有一個已審核通過的移動應用,並獲得相應的AppID和AppSecret,申請微 ...
  • 由[OpenDigg](http://www.opendigg.com/) 出品的安卓開源項目周報第四期來啦。我們的安卓開源周報集合了OpenDigg一周來新收錄的優質的安卓開發方面的開源項目,方便安卓開發人員便捷的找到自己需要的項目工具等。 ...
  • 崩潰提示:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <CALayerArray: 0x14df0bd0> was mutated while being enumer ...
  • 參考文章網址: http://www.jianshu.com/p/7a2f49c654df 1.申請APPKey 2.在AppDelegate.m文件中的代碼示例 3.具體的方法實現 ...
  • SignalR 是一個開發實時 Web 應用的 .NET 類庫,使用 SignalR 可以很容易的構建基於 ASP.NET 的實時 Web 應用。SignalR 支持多種伺服器和客戶端,可以 Host 在 7.0 以上的 IIS 伺服器,或者通過 Owin Host 在桌面應用和 Windows 服 ...
  • 以前的Android(4.1之前的版本)中,SDcard路徑通過“/sdcard”或者“/mnt/sdcard”來表示,而在JellyBean(安卓4.1)系統中修改為了" /storage/sdcard0",還會有多個SDcard的情況。目前為了保持和之前代碼的相容,SDcard路徑做了Link映 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...