老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

介紹自己的一個Android插樁熱修復框架項目QuickPatch

QuickPatch項目地址:

創新互聯公司專注于平川網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供平川營銷型網站建設,平川網站制作、平川網頁設計、平川網站官網定制、成都小程序開發服務,打造平川網絡公司原創品牌,更為您提供平川網站排名全網營銷落地服務。

https://gitee.com/egg90/QuickPatch 和 https://github.com/eggfly/QuickPatch 同步更新

類似于美團的Robust插樁熱修復,但是代碼可讀性比較強,還在繼續完善,todo list在項目README里

QuickPatch項目介紹

年輕人的第一個Android插樁熱修復框架

基于函數插樁,兼容性好(Android版本升級不需要做修改),支持熱更新無需重啟app,參考了美團的Robust插樁熱修復框架,精簡了很多實現細節,代碼可讀性高

一句話原理

簡單地講,就是通過編譯時在每個函數的頭部插入一個if判斷和一個proxy代理,就可以在運行時動態替換實現,無需重啟。代碼如下:

protected void onCreate(Bundle savedInstanceState) {
    if (_QPatchStub != null) {
        // _QPatchStub.proxy() will check method existance and call it
        MethodProxyResult proxyResult = _QPatchStub.proxy(this, "onCreate", "(Landroid/os/Bundle;)V", new Object[]{savedInstanceState});
        if (proxyResult.isPatched) {
            return;
        }
    }
    // origin implementation below
    super.onCreate(savedInstanceState);
    // ...
}
設計思路
  • QuickPatch和美團Robust的區別是,Robust的編譯和dex階段分別使用ASM和Smali做了處理,QuickPatch僅在gradle編譯java到class階段使用Javassist處理,邏輯簡單
  • 不支持自動生成dex補丁(復雜度高,代碼可讀性差),所以需要手動生成補丁,但是提供了補丁類模版,寫起來很方便
  • 對于super的處理使用native調用CallNonVirtual##TYPE##Method()系列方法實現
  • 計劃支持構造函數和增加成員函數的熱修復
  • 可能計劃支持非Android的純Java代碼的熱修復
DEMO

介紹自己的一個Android插樁熱修復框架項目QuickPatch

使用說明
  • 打開app/build.gradle中的一行apply plugin: 'quickpatch.gradleplugin'
  • 然后使用AndroidStudio或者./gradlew執行下面任務:
./gradlew gradleplugin:uploadArchives # 編譯插樁插件
./gradlew app:installDebug # 使用插件編譯app代碼并插樁
  • 為了方便點擊app內的Enable Patch按鈕可以模擬補丁加載效果,實際上是使用原本的ClassLoader加載了apk內打包好的的QPatch類
  • 同包名下后綴是_QPatch的類是補丁類,如MainActivity類的補丁類對應名字是MainActivity_QPatch
  • 接下來框架代碼會使用一個新的ClassLoader加載dex,然后反射識別并查找相應的函數是否存在,如果存在則新的函數里面的邏輯會被調用
  • 補丁文件名一般是patch.dex, 生成dex需要手動使用命令,比如dx --dex --output=patch.dex MainActivity_QPatch.class
  • 補丁文件需要手動放置到sd卡下,比如adb push patch.dex /sdcard/
  • 然后點擊app內的Enable Patch按鈕即可實時加載補丁,看到pid不會有變化
性能優化思路
  1. 減少沒有patch的時候所有函數調用損耗
  2. 減少有patch時,但沒有走到patch涉及到的類時的損耗
  3. 減少有patch時,走到patch類,但是沒走到patch函數時的損耗
  4. 減少有patch時,走到patch類,并走到patch函數時的損耗
  5. 優化patch函數內不包含反射,和包含native反射或java反射的這三種情況

分享名稱:介紹自己的一個Android插樁熱修復框架項目QuickPatch
標題網址:http://www.xueling.net.cn/article/pdipco.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 香港成人A级毛片免费看 | 亚洲一区二区自拍 | 亚洲一区二区三区香蕉 | 国外国内精品国产成人国产三级 | 欧洲性XXXX免费视频在线观看 | 蜜臀性色AV免费 | 777米奇色8888狠狠俺去啦 | 性做爰片免费视频毛片中文 | 精品国产一区二区三区在线 | xxxxxx在线| 一区二区三国产 | 国产乱淫av免费 | 视频麻豆 | 国产激情视频一区二区 | 在线免费观看国产 | 亚洲精品国产一区二区三区四区在线 | 日色网站| 91精品啪在线观看国产动漫 | 日本精品久久久久中文 | 亚洲综合一区自偷自拍 | 国产91久久久久蜜臀青青天草二 | 国产99久久一区二区三区 | 亚洲成在线观看 | 永久免费av片在线观看全网站 | 九九久久久久久久久激情 | 国产一级特黄真人毛片 | 成人无码av免费网站 | 亚洲国产精品视频观看 | 亚洲精品中| 国产午夜免费福利 | 精品一区二区三区成人精品 | 国产亲妺妺乱的性视频播放 | 久久久久国产精品熟女影院浪 | 午夜国产一区二区三区四区 | 91色老久久精品偷偷蜜臀 | 日本aaa大片 | 亚洲精品中文字幕在线 | 少妇被两个黑人3p喷水在线观看 | 日本三级黄色录像 | 少妇人妻好深太紧了A片VR | 欧美熟videos肥婆 |