andfix的主要功能是完成热更新,可以在不用下载新的apk的情况下完成对应用程序的更新。
Andfix的基本流程图如下所示
使用原理说明
在使用中,可以将整个使用过程分成两部分
- 原始apk和修复之后的apk的编写
- patch文件的生成
原始apk和修复之后的apk的编写
- apk的编写
如果计划在后续的apk更新中使用andfix完成,那么在编写原始apk时,需要添加andfix相关的内容。
首先需要导入PatchManager
在使用时,主要可以分成三个步骤
1.1 初始化
1.2 loadPatch
1.3 addPatch
具体代码如下图
初始化时init的参数是版本号,这里直接赋值为1.0,也可以通过
PackageManager
对象中的方法获取版本号,方法如下
mPatchManager.init(getPackageManager().getPackageInfo().versionName)
在通过这种方法获取版本号时,如果版本号有变化,则会导致所有的补丁被删除;如果版本号没有变化,那么会加载所有的补丁。
patch文件的生成
阿里本身提供了用来生成patch文件的工具apkpatch,apkpatch是一个压缩包,解压之后可以得到如下所示内容
windows下运行
apkpatch.bat
文件,linux下运行apkpatch.sh
文件生成patch文件。
-
参数说明
- 注意事项
在编写完原始apk和修复之后的apk之后,在生成patch文件时,需要提供apk生成时使用的签名证书,这一点在阿里的官方文档上没有说明,这里说明记录一下。
如果开发者是使用的自己的keystore对apk进行签名,那么这里直接对应参数信息即可
如果开发者是使用了AOSP提供的密钥对apk进行签名,那么可能用户不知道自己所使用的keystore的位置,所以这里记录下位置。
linux上keystore文件的位置是~/.android
路径下,.android
文件夹是一个隐藏文件加,在终端使用la
命令可以看到该文件,进入该文件之后就能找到AOSP提供的默认的keystore文件。如下图
在使用apkpatch时,还需要输入keystore的密码以及所使用证书的别名,AOSP提供的debug.keystore的默认密码是android
,然后可以使用keytool命令来查看keystore
文件,从中得到别名信息。如下图
打开
apkpatch.bat
文件,可以看到其实apkpatch.bat文件是通过java -jar
来调用apkpatch-1.0.3.jar包完成patch文件的生成
使用流程
-
从github上获取阿里提供的一个demo程序,demo程序的文件目录如下所示
-
在build.gradle中添加依赖
- 编译运行demo程序,生成第一个apk
-
修改demo程序代码,替换函数调用,这里我是修改了函数中的一个变量的值。如下图所示
- 运行修改之后的代码,生成新的apk
- 使用apkpatch工具生成patch文件,将文件移动到手机sd卡上。(apkpatch的使用上边有描述)
-
重新运行第一个apk,查看日志可以发现完成修改
patch文件不一定非要放在sd卡的根目录上,只要存放路径与代码中查找路径一致即可