Tinker类是整个框架的核心,我们需要构建它的单例。其中intentResult存放是我们加载补丁时的数据,它在install之后才将数据赋值给Tinker与TinkerLoadResult类。
全部使用默认定义类的构造方法:
若使用了自定义类,可选择多参数的install方法,具体用法可参考。
正如之前所说的,所有的补丁升级请求都将会分发到PatchListener去处理。
发起升级补丁请求,即收到一个新的补丁包,多次补丁也是调用下面这个接口:
- public static void onReceiveUpgradePatch(Context context, String patchLocation) {
- Tinker.with(context).getPatchListener().onPatchReceived(patchLocation);
- }
不使用Hack的方式
更新的Library库文件我们帮你保存在tinker下面的子目录下,但是我们并没有为你区分abi(部分手机判断不准确)。所以若想加载最新的库,你有两种方法,第一个是直接尝试去Tinker更新的库文件中加载,第二个参数是库文件相对安装包的路径。
- TinkerLoadLibrary.loadArmLibrary(getApplicationContext(), "libstlport_shared");
- //load lib/armeabi-v7a library
- TinkerLoadLibrary.loadArmV7Library(getApplicationContext(), "libstlport_shared");
若存在Tinker还没install之前调用加载补丁中的Library库,可使用的接口
若想对第三方代码的库文件更新,可先使用TinkerLoadLibrary.load*Library对第三方库做提前的加载!更多使用方法可参考MainActivity.java。
使用Hack的方式
以上使用方式似乎并不能做到开发者透明,这是因为我们想尽量少的去hook系统框架减少兼容性的问题。Tinker也提供了一键反射Library Path的方式供大家选择:
- // 将tinker library中的armeabi注册到系统的library path中。
你可以设置自己的Log输出实现: