Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 熱修復-Nuwa學習篇,熱修復-nuwa

熱修復-Nuwa學習篇,熱修復-nuwa

編輯:關於android開發

熱修復-Nuwa學習篇,熱修復-nuwa


nuwa熱修復是基於qq空間團隊的思路,最近的熱度話題了,很多種方案,自己先研究幾種方案,基本上都各有優勢,學習肯定得先挑個軟柿子捏了,自己對比了一下,發現nuwa代碼量少點,所以就決定了,先研究nuwa。

 

首先肯定得gradle

例子github上也都有,也可以下載別人的項目借鑒

然後進入application看看具體情況

跟著流程看下去

下面的方法才是重點

/**
* 筆記
* “類加載器”(ClassLoader),其作用是動態裝載Class文件,每個ClassLoader對象在初始化時必須指定Class文件的路徑
* 一般情況下,需要某個類時,只需使用import關鍵字包含該類就可以了,但是import有兩個前提:
* 1.必須存在於本地,當程序運行時需要該類時,內部類裝載器會自動裝載該類,這對程序員來講是透明的,
* 即程序員感知不到這一過程,
* 2.編譯時必須在現場,否則編譯不過,會因為找不到引用文件而無法編譯,插件化class文件不滿足此前提的。
*
* 在一般情況下,應用程序不需要創建一個全新的ClassLoader對象,而是使用當前環境已經存在的ClassLoader。
* 因為Javad的Runtime環境在初始化時,其內部會創建一個ClassLoader對象用於加載Runtime所需的各種Java類。
* 每個ClassLoader必須有一個父ClassLoader,在裝載Class文件時,子ClassLoader會先請求父ClassLoader加載該Class
* 文件,只有當其父ClassLoader找不到該Class文件時,子ClassLoader才會繼續裝載該類,這是一種安全機制。
*
* dex文件是將所需的所有Class文件重新打包,打包的規則不是簡單的壓縮,而是完全對Class文件內部的各種函數表、
* 變量表等進行優化,並產生一個新的文件,這就是dex文件。
* 由於dex文件是一種經過優化的Class文件,因此要加載這樣特殊的Class文件就需要特殊的類裝載器,這就是
* DexClassLoader,Android SDK中提供的DexClassLoader類就是出於這個目的。
*/

/**
* classloader 分三個級別,最上級 : bootstrap classLoader 中間級:extension classLoader
* 最低級 app classLoader. 當需要加載某個類的時候,會看看這個類是否已經被加載了,如果沒有,會請求app級來加載,
* app 請求 extension 級 extension 請求 bootstrap級, 由最高級來負責加載
* (這個就是雙親委派,委托 上兩級的loader來做加載),如果高級的無法加載 則會將人物返回給 下一級 以此類推
* 最後如果雙親都不行 就由自己來加載.
* 為什麼要用這個機制? 比如 java.lang.String 這個類,這個是jdk提供的類, 如果我們自定義個 包名:
* java.lang 然後在裡面創建一個String 類, 當我在用String類的時候,根據前面所說,是由bootstrap級的loader
* 來進行加載的,這個時候它發現其實已經加載過了jdk的String了,那麼就不會去加載自定義的String了,防止了重復
* 加載 也加大了安全性
*/

接下來就是使用了,知道了大致是個什麼情況了就按照文檔說明准備了

首先運行nuwa項目,跑起來,然後outputs下會生成一個nuwa的文件夾,把它復制到D盤下,這個隨你喜歡(你的項目\app\build\outputs\nuwa)

然後就修改裡面的一點內容,比如把裡面某個輸出改掉,然後用命令生成jar包(gradlew clean nuwaQihooDebugPatch -P NuwaDir=D:/nuwa)

執行效果如下:

 

接下來你會在你的項目文件夾下的 app\build\outputs\nuwa\qihoo\debug 中發現生成的jar文件,復制這個文件到你手機的根目錄

 

 

接下來重新啟動程序,發現代碼已經更新

這就是開源的力量啊,要是純屬自己搗鼓得搗鼓到什麼時候啊,其實才剛空下來研究,很多細節深處也還沒搞懂,不過起碼得把流程搞通,跑通是基礎

前人栽樹後人乘涼,我感覺渾身都很涼快,記錄自己的學習之路,也供需要學習的參考學習

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved