Tinker的环境搭好以后,就轮到实现它了,本次主要通过模拟修改textview文本的直观效果.//模拟效果:就是项目布局的textView为1,通过热修复改为2public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在布局里写一个错误,模拟有一个bug,然后通过热修复进行修改为ok
setContentView(R.layout.activity_main);// 通过TextView的点击完成修复工作(官方demo是在Service进行更新的操作,为了不复杂就)
findViewById(R.id.tv).setOnClickListener(new View.OnClickListener() {
@Overridepublic void onClick(View v) {
// 加载补丁包:指定补丁包的位置,读取补丁包信息。// 注意:要加读取SD卡的权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
TinkerInstaller.onReceiveUpgradePatch(// test:补丁包名称(可以自定义)
getApplicationContext(), Environment.getExternalStorageDirectory().getAbsolutePath()+"/test");
}});
//在写这段代码前,先运行项目,或者打一个有问题apk,这样下面修复问题打的apk,就有了差异包//这段代码就模拟问题已经修复了,然后通过到这个demo下,运行命令行,执行gradle tinkerPatchDebug,生成热修复的文件//注意:'gradle' 不是内部或外部命令,也不是可运行的程序,那么还要在电脑上配置一下((TextView)findViewById(R.id.tv)).setText("OK");
}
}2.编写红色代码前,运行项目,会报一个错误,clean一下,在运行就没有问题了,此时会生成一个APK包,其APK包名字要配置到build文件里
3.
编写红色代码后,代表项目进行了修改完成,接下来就是打补丁的操作
4.生成的补丁包,名字+后缀名要进行修改,符合代码中的设置
5.真实开发中要把补丁包放到服务器中,我们这里没有服务器,就直接放到了SD卡中
---------------------------------------------------------------------
注意:客户端APP程序设计之初,就在应用启动的Activity中添加一段业务逻辑,去请求服务器有没有最新的补丁,有就下载到用户的SD卡中,然后执行修复的逻辑
1.把有问题的APK,安装到程序中2.把补丁放到手机的SD卡中3.点击文本,会自动加载补丁,完成修复后,自动删除sd卡中的补丁
注意:APK包对应有效补丁,重新打的包和以前的补丁没有办法一起用,新的apk包要打对应的补丁