Tinker 的具体使用

Tinker的环境搭好以后,就轮到实现它了,本次主要通过模拟修改textview文本的直观效果.
//模拟效果:就是项目布局的textView为1,通过热修复改为2
public class MainActivity extends AppCompatActivity {
@Override
protected 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() {
@Override
public 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文件里
Tinker 的具体使用_第1张图片
Tinker 的具体使用_第2张图片
3.
编写红色代码后,代表项目进行了修改完成,接下来就是打补丁的操作
Tinker 的具体使用_第3张图片
4.
生成的补丁包,名字+后缀名要进行修改,符合代码中的设置
Tinker 的具体使用_第4张图片
5.
真实开发中要把补丁包放到服务器中,我们这里没有服务器,就直接放到了SD卡中

---------------------------------------------------------------------
注意:客户端APP程序设计之初,就在应用启动的Activity中添加一段业务逻辑,去请求服务器有没有最新的补丁,有就下载到用户的SD卡中,然后执行修复的逻辑

1.把有问题的APK,安装到程序中
2.把补丁放到手机的SD卡中
3.点击文本,会自动加载补丁,完成修复后,自动删除sd卡中的补丁

注意:APK包对应有效补丁,重新打的包和以前的补丁没有办法一起用,新的apk包要打对应的补丁




你可能感兴趣的:(Tinker 的具体使用)