Android_Andfix简单使用

介绍

AndFix,全称是Android hot-fix。是阿里开源的一个Android热补丁框架,允许 APP在不重新发布版本的情况下修复线上的bug。支持Android 2.3 到 7.0。

首先添加依赖

compile 'com.alipay.euler:andfix:0.3.1@aar'
//然后写一个有问题的代码 生成一个APK文件

首先编写工具类初始化Andfix并加载补丁文件

public class AndfixManager {
private static volatile AndfixManager instance;
    private PatchManager patchManager;
    private AndfixManager(){

    }
    public static  AndfixManager getInstance(){
        if(instance==null){
            synchronized (AndfixManager.class){
                if (null==instance) {
                    instance = new AndfixManager();

                }
            }
        }
        return instance;
    }

    /**
     * 初始化Andfix并加载补丁文件
     * @param context
     */
    public void initPatch(Context context){
        patchManager = new PatchManager(context);
        patchManager.init(VersionUtis.getVersonName(context));
        patchManager.loadPatch();
    }
    public void addPatch(String path){
        if(patchManager!=null){
            try {
                patchManager.addPatch(path);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
  获取版本号
public class VersionUtis {

    private static String versionName = "1.0";

    public static String getVersonName(Context context){
        PackageManager packageManager = context.getPackageManager();
        try {
            PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(),0);
            versionName = packageInfo.versionName;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        Log.e("-----", "getVersonName: "+versionName );
        return versionName;
    }

}
    一般来说,应该尽可能早地加载补丁,在应用程序的初始化阶段(如 Application.onCreate() )。
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        initPath();
    }

    /**
     * 初始化PatchManager
     */
    private void initPath() {
        AndfixManager.getInstance().initPatch(this);

    }
}
最后 错误的

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn_new;
    private Button btn_old;
    private String patchName = "out.apatch";
    private String path;
    private File file;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_new = (Button)findViewById(R.id.btn_new);
        btn_old = (Button)findViewById(R.id.btn_old);
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            File directory = Environment.getExternalStorageDirectory();
            String absolutePath = directory.getAbsolutePath();
            path = absolutePath.concat(File.separator).concat(patchName);
            Log.e("000", "补丁的路径名是:"+path );


        }
        btn_new.setOnClickListener(this);
        btn_old.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
            switch(view.getId()){
                    case R.id.btn_old:
                        createBug();
                    break;
                    case R.id.btn_new:
                        fixBug();
                    break;

                }
    }

    /**
     * 通过Andfix修复bug
     */
    private void fixBug() {
        file = new File(path);
        if(file.exists()){
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        AndfixManager.getInstance().addPatch(path);

    }

    private void createBug() {
        String str = "";
        str.substring(0,1);
        Log.e("===", "createBug: "+str );

    }
}
改正 string str  = "hello world"

在生成一个签名文件  两个对比 在生成一个patch.jks

AndFix提供了一个称为apkpatch的修补工具。https://github.com/alibaba/AndFix/raw/master/tools/apkpatch-1.0.3.zip

如何使用?

  • 准备两个android包,一个是在线包,另一个是你通过编码修复bug后的包。

  • .apatch通过提供两个包来生成文件,

usage: apkpatch -f <new> -t <old> -o <output> -k <keystore> -p <***> -a <alias> -e <***>
 -a,--alias <alias>     keystore entry alias.
 -e,--epassword <***>   keystore entry password.
 -f,--from <loc>        new Apk file path.
 -k,--keystore <loc>    keystore path.
 -n,--name <name>       patch name.
 -o,--out <dir>         output dir.
 -p,--kpassword <***>   keystore password.
 -t,--to <loc>          old Apk file path.


然后将.apatch文件放入根目录下,在启动旧的APk



最后可以成功打印出Hello World

结束.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值