一、Tinker官网介绍
官网:https://github.com/Tencent/tinker/wiki
二、Tinker核心原理
- 基于android原生的ClassLoader,开发了自己的ClassLoader
- 基于android原生的aapt,开发了自己的aapt
- 微信团队自己基于Dex文件的格式,研发了DexDiff算法
三、使用Tinker完成bug修复
1、集成阶段
gradle中添加Tinker依赖
app的build.gradle文件中:
//生成application时使用
compileOnly('com.tencent.tinker:tinker-android-anno:1.7.7')
//tinker的核心SDK库
implementation('com.tencent.tinker:tinker-android-lib:1.7.7')
implementation不仅在编译时使用,也会打包到apk中
compileOnly仅在编译时使用,不参与打包,从而减少apk包的体积
在代码中完成对Tinker的初始化
2、准备阶段
- build一个old apk并安装到手机
- 修改一些功能后,build一个new apk
3、patch生成方式
使用命令行的方式完成patch包的生成
java -jar tinker-patch-cli-1.7.7.jar -old old.apk -new new.apk -config tinker_config.xml -out output/
使用以上方式可能会爆出“tinkerId is not set”的错误
解决办法:Manifest文件按照如下方式设置
<application
android:name=".tinker.MyTinkerApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="TINKER_ID"
android:value="1.0" />
</application>
把生成的文件push到手机上:
adb push patch_signed.apk /storage/emulated/0/Android/data/com.gs.tinker/cache/tpatch/imooc.apk
使用gradle插件的方式完成patch包的生成
在gradle中正确配置tinker参数(非常重要)
在android studio中直接生成patch文件
步骤详解:
1、manifest文件中设置的tinkerid删除ÿ