使用Andfix
AS创建kotlin项目
AndroidManifest增加权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
activity_main.xml放一个TextView
<TextView
android:id="@+id/tv_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
MainActivity.kt
class MainActivity : AppCompatActivity() {
//懒加载初始化view
val mTvResult by lazy {
//findviewbyid
tv_result
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tv_result.text = "有bug的版本"
}
}
引入Andfix
app下的build.gradle
implementation 'com.alipay.euler:andfix:0.5.0@aar'
初始化要放到Application中,新建MyApplication.kt
class MyApplication:Application(){
override fun onCreate() {
super.onCreate()
val patchManager = PatchManager(this);
patchManager.init("1.0");//current version
patchManager.loadPatch();
//设置文件路径
val filePath = File(Environment.getExternalStorageDirectory(),"fixbug.apatch")
//合并补丁文件
if(filePath.exists()){
patchManager.addPatch(filePath.absolutePath);
}
}
}
AndroidManifest中注册
<application
android:name=".MyApplication">
......
</application>
运行程序把生成的apk改名为bug
修改MainActivity.kt
tv_result.text = "修复bug的版本"
tv_result.setTextColor(Color.RED)
tv_result.textSize = 50F
再次运行程序,把生成的apk改为fix-bug
获取差分包
在Andfix的github地址提供了一个获取差分包的工具,apkpatch
如果下载慢可以去我的网盘下载
提取码:te2k
把刚才两个apk和默认的签名文件debug.keystore放到解压好的文件夹中,在当前路径打开cmd
输入apkpatch.bat
可以查看使用说明
apkpatch -f fix-bug.apk -t bug.apk -o out -k debug.keystore -p android -a androiddebugkey -e android
-f 新apk
-t 旧apk
-o 输出路径
-k keystore
-p keystore密码
-a keystore别名
-e keystore密码
运行之后,生成的out中有.patch文件,我们改成代码中的名字fixbug.aptch
安装有bug版本apk
adb install -r -t bug.apk
把fixbug.apatch保存到sd卡
adb push fixbug.apatch sdcard/
杀死进程,打开权限。再次打开即可得到修复bug的apk
(经测试。在mumu模拟机上成功了。锤子手机也成功了。但是小米6并没有成功,大牛请评论告诉我原因…)
不足
热修复不能保证完全修复
下面为不同热修复性能对比图
资源下载
https://download.csdn.net/download/u010356768/12103313