一款超級簡單易用的Android熱修復框架 WandFix 使用詳解

WandFix是一個基於java ClassLoader實現的熱修復框架。

效果展示:

優點:

  • 類似於黃油刀可以直接對成員變量添加@InjectObject("com.example.motordex.AppParsenterImpl2")註解,來綁定熱修復包中的實現類。
  • 無需關閉應用即可使修復包生效。
  • 與mvp模式搭配使用效果最佳。
  • 可以自己定義需要熱修復的類。
  • 可以自己配置dex加密算法,保護dex文件的安全。
  • 可以通過註解單獨設置某個對象是否禁用雙親委託。

使用

使用方法:

git clone https://github.com/miqt/WandFix.git

添加依賴:

compile project(':wand')
annotationProcessor project(':wand-compiler')

代碼調用:

public class MainActivity extends AppCompatActivity {

    @InjectObject(
        "com.example.motordex.AppParsenterImpl2"//熱修復包中的實現類
            )
    AppParsenter ap;

    @InjectObject(
            value = "com.example.motordex.AppParsenterImpl2",//熱修復包中的實現類
            level = ParentalEntrustmentLevel.PROJECT//啓用雙親委託,優先加載本地類
            )
    AppParsenter ap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        //初始化,可以放在application中調用一次即可
        Wand.init(this);
        //單個參數
        ClassInstall.inject(this);

        //多個參數的構造方法
        //Map<String, Object[]> map = new HashMap<>();
        //map.put("com.example.motordex.AppParsenterImpl2", new Object[]{1, "參數2", "參數3"});
        //ClassInstall.inject(this, map);

        //調用
        String str = ap.getStr();
        Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
        ...
    }
}

創建並啓用熱修復包

創建熱修復包非常簡單。

  1. 在編輯器中對類參數添加註解
class A{
    @InjectObject(
            value = "com.example.motordex.AppParsenterImpl",
            level = ParentalEntrustmentLevel.NEVER)
    AppParsenter ap;
}
  1. 在android studio 中點擊 Build >> Make Project , 就會在項目的根目錄生成 make_fix_pack.bat 批處理腳本。文本編輯器打開之後類似於這樣:
cd ./app/build/intermediates/classes/debug/
jar cvf hotfix_pack.jar ./com/example/motordex/AppParsenterImpl.class
dx --dex --output=../../../../../hotfix_pack.dex hotfix_pack.jar
  1. 運行 make_fix_pack.bat 批處理腳本,可以通過找到這個腳本文件直接雙擊或者在終端中運行,運行之後就可以在項目根目錄找到 hotfix_pack.dex 文件,這個就是熱修復包了。

  2. 通過服務器吧這個 hotfix_pack.dex 文件下發下去,當程序運行到Wand.with(this).init().attachDex(new File("該文件存儲路徑"));的時候,這個熱修復包就被應用到程序中去了。

具體更多用法及其實現原理請移步GitHub·Wiki

歡迎提出問題和寶貴意見。如果您覺得這個項目還不錯,就點個star吧( ̄▽ ̄)~*

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章