一步一步教你接入tinker 热修复
Posted pszh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一步一步教你接入tinker 热修复相关的知识,希望对你有一定的参考价值。
官方文档: https://github.com/Tencent/tinker 下面我们按照官方文档和这个里面的tinker-sample-android来进行集成Tinker。 注意 说明,官方demo的使用 https://github.com/Tencent/tinker/wiki/Tinker-接入指南里面的使用步骤详解, 注意: 官方demo导入的时候会报错Error:Execution failed for task ':app:tinkerProcessDebugManifest'. > tinkerId。。。,你可以把app build.gradle 的 def gitSha() 里面的gitRev 手动赋值下,随便给一个,至于作用可以看上面的接入指南 gradle参数配置一如何测试效果(debug版):
1: 首先,把项目到as里面 。这个时候AndroidManifest文件的application的SampleApplication报错不要管,直接下一步
2: 打一个debug包
gradle assembleDebug 这个时候你能看到 (这个目录因为在gradle里面做了配置)然后把这个名字复制到工程下的 (注意,第二个箭头处.text前面少了个R)
3.修改一个地方(也就是我们要做的bug修复),然后使用生产差异的包: 命令行 gradle tinkerPatchDebug 成功之后我们可以看到我们要的这个包了
4.把导入手机中,手机路径的话要注意下,项目mainactivity中用的是sd卡根目录下,所以, a.直接copy到手机对应目录下, b. 通过命令(这个是官网的)
adb push ./app/build/outputs/tinkerPatch/debug/patch_signed_7zip.apk /storage/sdcard0/
5,ok了,准备效果测试
点击LOAD PATCH
按钮, 如果看到patch success, please restart process
的toast,即可锁屏或者点击KILL SELF
按钮就能看到效果了,
二 如何集成:
1.首先在项目的main build.gradle
下
buildscript dependencies classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.7')demo里面高大上了下,是这么写的 classpath "com.tencent.tinker:tinker-patch-gradle-plugin:$TINKER_VERSION" 然后是在 gradle.properties(Project Properties) 里面 加上 TINKER_VERSION=1.7.7 ,
2.在你的app/build.gradle配置,这个可以查看官方demo的build.gradle文件
dependencies //optional, help to generate the final application provided('com.tencent.tinker:tinker-android-anno:1.7.7') //tinker's main Android lib compile('com.tencent.tinker:tinker-android-lib:1.7.7') ... ...//这里省略了很多 apply plugin: 'com.tencent.tinker.patch'具体的可以和官方相同了,一些签名什么的细节的话就的和你的项目来修改
3.拷贝demo里面的非app下的MainActivity所有代码
4.修改application
上面的定义相当于新建一个SampleApplication.java文件,也就是你的MyApplication,至于其他的一些初始化可以在这个class的oncreate()里面初始化
5.修改AndroidManifest..xml
a. 添加权限了 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
b.然后是application,(以项目中的例子)
也就是
<application
android:name=".app.SampleApplication"
c.
注册一个处理加载补丁结果的的service
<service
android:name=".service.SampleResultService"
android:exported="false"/>
6.相关主要api引用
//加载修复的差异包loadPatchButton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(),
Environment.getExternalStorageDirectory().getAbsolutePath()
+ "/patch_signed_7zip.apk");
);
//清除包
cleanPatchButton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Tinker.with(getApplicationContext()).cleanPatch();
);
这个只是个小demo,真实的话修复包是通过后台下载的,然后用户锁屏的时候开始合并,
tinker 后台的搭建 http://mp.weixin.qq.com/s/eGt4Fc5yJjZB6rKaFz0NCQ
以上是关于一步一步教你接入tinker 热修复的主要内容,如果未能解决你的问题,请参考以下文章