- 热修复框架有很多 其中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();
- }
- }
- }
- }
- //添加补丁文件时需要传入一个path路径 这个路径就是 .apatch补丁文件
- public class MainActivity extends AppCompatActivity {
- private Button fix;
- private String path;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- //获取id
- fix = (Button)findViewById(R.id.fix);
- //判断sd卡的挂载状态
- if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
- path = Environment.getExternalStorageDirectory().getAbsolutePath().concat("/out.apatch");
- }
- //打印path路径
- Log.i("TAG",path);
- //点击添加补丁
- 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();
- }
- }
- //调用AndFix工具类中的添加补丁方法
- 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就修复了
Android之 AndFix总结
最新推荐文章于 2024-05-06 11:30:59 发布