Android_AndFix热修复使用总结

热修复框架有很多   其中AndFix使用很简单   但局限性很高,只能修复方法  不过可以及时修复不需要退出程序

一:使用前的准备

compile 'com.alipay.euler:andfix:0.5.0@aar'
二:初始化的时候用到了版本号   写一个提供版本号的工具类
public class VersionUtils {
    public static String getVersionName(Context context) {
        String versionName = "";
        PackageManager packageManager = context.getPackageManager();
        String packageName = context.getPackageName();
        try {
            PackageInfo packageInfo = packageManager.getPackageInfo(packageName,0);
            versionName = packageInfo.versionName;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return versionName;
    }
}
三:AndFix工具类  用来封装初始化与添加补丁文件
public class AndFixManger {
    private static volatile AndFixManger instance;
    private PatchManager patchManager;

    private AndFixManger() {

    }

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

    //初始化,越早调用越好  推荐Application的oncreat方法中调用
    public void initPatch(Context context) {
        //创建对象
        patchManager = new PatchManager(context);
        //传入了版本号
        patchManager.init(VersionUtils.getVersionName(context));
        patchManager.loadPatch();
    }

    //添加补丁文件  修复时调用
    public void addPatch(String path){
        if(patchManager!=null){
            try {
                patchManager.addPatch(path);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}
四:App中调用初始化方法
public class App extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        AndFixManger.getInstance().initPatch(this);
    }
}
五:主页面代码操作

public class MainActivity extends AppCompatActivity {

    private Button bug;
    private Button fix;
    private String path;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
		//获取id
        bug = (Button)findViewById(R.id.bug);
        fix = (Button)findViewById(R.id.fix);
		//判断sd卡的挂载状态
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
			 //设置补丁包的路径
             path = Environment.getExternalStorageDirectory().getAbsolutePath().concat("/out.apatch");
        }
        Log.i("TAG",path);
		//写了一个bug
        bug.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String str = "this is one a ";
                str.substring(0,1);
            }
        });
		//点击添加补丁文件修复bug
        fix.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                File file = new File(path);
				//判断文件是否存在
                if(!file.exists()){
                    try {
						//不存在创建
                        file.createNewFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
				//调用添加补丁文件的方法
                AndFixManger.getInstance().addPatch(path);
            }
        });
    }
}
问题来了,补丁文件是怎么来的?

一:新建一个文件夹  随便建在哪里都可以


二:文件夹中放入工具解压文件  1:apkpatch.bat  2:apkpatch.sh  3:apkpatch-1.0.3.jar 不用管是干什么的,放进去就可以


三:签名打包  放入一个有bug的包与没有bug的包 , 还需要放入一个签名文件.jks    项目中可以找到   签名之后才可以找到


四:开始生成  
   
   打开黑窗口  windows+r  输入cmd    
   
   进入自己创建的文件夹中  输入命令
   
   例如:
Microsoft Windows [版本 10.0.10586]
(c) 2015 Microsoft Corporation。保留所有权利。


C:\Users\Administrator>D:


D:\>cd D:\AndFix\


D:\AndFix>




  输入命令                       
       apkpatch -f <new> -t <old> -o <output> -k <keystore> -p <***> -a <alias> -e <***>


       new  =  没有bug的文件名
       
       old   =  有bug的文件名


       output  =  生成的补丁文件名


       keystore  =  .jks文件名   


       第一个***   签名密码


       alias  =  key0  这里我是key0   签名的时候写的啥就写啥 


       第二个***   key0密码


       回车  回车  两次


       补丁包就生成了,把补丁包放入手机或者模拟器中   放入的路径和上面的路径需要一样   
       
       运行有问题的app,点击修复添加补丁文件,bug就修复了






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值