终端下完成Tinker Sample的调试
0. 首先确保你电脑配置了gradle环境变量,并且grade的版本大于等于2.14.1
例如2.14.1 3.1 3.2 3.2.1
可以使用这个命令查看gradle版本号
gradle --version
Gradle可以从这个网站下载
https://services.gradle.org/distributions
确保你配置了adb环境变量。如果没有配置,可以参考这篇文章Linux,Unix下环境变量的配置
可以使用adb --version查看是否配置了adb环境变量。
本文所有命令均在Ubuntu上调试的,Mac OS上应该都有,Windows上开发的同学可以自行转换为相应的命令
本文参考Tinker的官方wiki来写的。
https://github.com/Tencent/tinker/wiki
1.从github上下载tinker的源码
git clone git@github.com:Tencent/tinker.git
2.切换到tinker-sample-android目录下
cd tinker/tinker-sample-android
3.下载依赖,第一次运行可能需要很长时间,因为需要下载一些依赖库.
gradle clean
4.编译生成Debug版本的Apk
gradle assembleDebug
5.将编译生成的apk安装到手机或者模拟器中(Genymotion,Bluestacks)
adb uninstall tinker.sample.android && adb install app/build/bakApk/*.apk
6.启动安装的apk
adb shell am start tinker.sample.android/.app.MainActivity
7.修改代码,这里演示修改MainActivity中的TAG,来验证热修复
7.1: 得到MainActivity中TAG变量的行数
grep -n "TAG" app/src/main/java/tinker/sample/android/app/MainActivity.java | head -n 1 | cut -d ":" -f 1
7.2: 将TAG替换为新的值例如:IWantToTestHotFix
注意:下一行中的42为上一条命令中获取的MainActivity中TAG变量的行数,IWantToTestHotFix为我们要替换后的TAG值。
sed -i '42s/.*/private static final String TAG = "IWantToTestHotFix";/' app/src/main/java/tinker/sample/android/app/MainActivity.java
7.3: 确认一下替换是否成功,可以通过查询替换后TAG的值和所在的行数
grep -n "IWantToTestHotFix" app/src/main/java/tinker/sample/android/app/MainActivity.java
8.获取编译生成的Debug版本APK的名字
find app/build/bakApk/ -type f -name *.apk -print | xargs ls -ltr | head -n 1 | awk '{print $9}' | cut -d "/" -f 4
9.获取”tinkerOldApkPath”字符串在tinker-sample-android/app/build.gradle文件中的行数
grep -n "tinkerOldApkPath" app/build.gradle | head -n 1 | cut -d ":" -f 1
10.用第8步获得的APK的名字,替换到app/build.gradle中tinkerOldApkPath的值
例如.
第8步得到的值为: app-debug-1130-12-54-43.apk
第9步得到的值为: 147
那么使用如下的命令直接在app/build.gradle文件中,将第147行将tinkerOldApkPath替换为app-debug-1130-12-54-43.apk.
e.g.
sed -i '147s/.*/tinkerOldApkPath="${bakPath}\/app-debug-1130-12-54-43.apk"/' app/build.gradle
实际使用时,你要做的就是将下面命令中number8替换为第8步得到的值,将number9替换为第9步得到的值。
然后执行这条命令即可完成替换工作。
sed -i 'number8s/.*/tinkerOldApkPath="${bakPath}\/number9"/' app/build.gradle
11.确认是否替换成功
例如.
grep -n "app-debug-1130-12-54-43.apk" app/build.gradle
实际使用时,你要做的就是将下面命令中number8替换为第8步得到的值。
然后执行这条命令即,如果替换成功你将看到替换的字符串的名字和所在的行数。
grep -n "number8" app/build.gradle
12.编译生成补丁包
gradle tinkerPatchDebug
13.将补丁包APK文件推送到手机的sdcard根目录中
adb push app/build/outputs/tinkerPatch/debug/patch_signed_7zip.apk /sdcard/
14.点击LOADPATH Button,加载补丁,需要等上3到4秒,
如果加载成功,你将可以看到一个Toast patch success,please restart process.
15.然后,就可以锁屏或者杀死该应用进程,你可以点击KILL SELF。
可以使用如下的命令完成
adb shell am force-stop tinker.sample.android && adb shell am start tinker.sample.android/.app.MainActivity
16.点击应用上的SHOW INFO按钮确认补丁是否加载成功,如果成功,可以看到.
弹出的Dialog的第一行显示[path is loaded]
同时,你可以查看自己修改的TAG是否生效。使用如下的命令过滤Log的TAG即可。
这里的TAG就是第7步修改的TAG。
adb logcat | grep IWantToTestHotFix
如果执行上个命令看到了TAG为IWantToTestHotFix的Log,祝贺你热修复成功了
Enjoy Reading This Article?
Here are some more articles you might like to read next: