AndFix热修复模版

AndFix热修复文档

AndFix只能用来更改带有Bug的某个方法,还是有很大限制的.

在ManiFest中

首先,配置好热修复环境:

implementation 'com.alipay.euler:andfix:0.5.0@aar'

加完依赖:Sync New       此依赖前缀是Studio3.0的更改

在此就把SD卡权限添加上:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

配置完之后,创建我们的AndFix执行热修复的执行器(管理者):

public class AndFixManager {
    private static volatile AndFixManager andFixManager;
    private PatchManager patchManager;
    public AndFixManager() {
    }

    public static AndFixManager getInstence(){
        if(null==andFixManager){
            synchronized (AndFixManager.class){
                if(andFixManager == null){
                    andFixManager = new AndFixManager();
                }
            }
        }
        return andFixManager;
    }

    public void initFace(Context context){   //执行热修复的方法
        patchManager = new PatchManager(context);
        patchManager.init(VersonUtil.getVerson(context));//获取版本号
        patchManager.loadPatch();

    }

    public void addPath(String path){//点击修复Bug,AndFix执行器存在的话,需要执行修复操作,添加补丁路径,之后会自动修复.
        if(patchManager != null){
            try {
                patchManager.addPatch(path);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

获取版本号的工具类:在AndFix执行器中需要用到.

public class VersonUtil {
    public static String getVerson(Context context){
        String versionName = "1.0";
        PackageManager packageManager = context.getPackageManager();
        try {
            PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(),0);
            versionName = packageInfo.versionName;

        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return versionName;
    }
}

在这里:需要在Manifest中配置Applocation了,就是配置AndFix执行器执行的修复操作,这个initFace()方法必须在App启动之后的第一执行的操作.

public class AppLocations extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        AndFixManager.getInstence().initFace(this);
    }
}

MainActivity中执行最终修复:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private Button btnBug;
    private Button btnNew;

    private String path = "";   //补丁路径
    private String pathName = "out.apatch";   //这是我们补丁文件名

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnBug = findViewById(R.id.btn_bug);
        btnNew = findViewById(R.id.btn_new);
        btnBug.setOnClickListener(this);
        btnNew.setOnClickListener(this);
  //判断SD
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            File file = Environment.getExternalStorageDirectory();
            String absalutePath = file.getAbsolutePath();
            path = absalutePath.concat(File.separator).concat(pathName);

        }

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){

 
 
case R . id . btn_bug : //int k = 2/0;   //Bug
int k = 2/1; break; case R.id.btn_new: fixBug(); break; } } private void fixBug() { File f = new File(path); if(!f.exists()){ try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } AndFixManager.getInstence().addPath(path); //把补丁路径添加到AndFix热修复的执行器中,之后会自动执行修复操作 } }

最后生成APK包,Bug包和HotFix包,jks密钥文件,在黑窗口执行dos命令操作,生成补丁包

命令:

apkpatch.sh   -f   new.apk   -t   old.apk   -o   apatch-k   hotfixjks.jks   -p   123456   -a   key0   -e   123456

工具文件              HotFixAKP      BugApk                            jks密钥                  密码             密钥编号      密钥

apatch是生成的补丁包放入哪个文件夹中,会自动生成到当前目录下.

最后安装BugApk,修复,OK.

工具就不提供了,这些只是思路,看看就行了.







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值