Tinker类是整个框架的核心,我们需要构建它的单例。其中intentResult存放是我们加载补丁时的数据,它在install之后才将数据赋值给Tinker与TinkerLoadResult类。

    全部使用默认定义类的构造方法:

    若使用了自定义类,可选择多参数的install方法,具体用法可参考。

    正如之前所说的,所有的补丁升级请求都将会分发到PatchListener去处理。

    发起升级补丁请求,即收到一个新的补丁包,多次补丁也是调用下面这个接口:

    1. public static void onReceiveUpgradePatch(Context context, String patchLocation) {
    2. Tinker.with(context).getPatchListener().onPatchReceived(patchLocation);
    3. }

    不使用Hack的方式

    更新的Library库文件我们帮你保存在tinker下面的子目录下,但是我们并没有为你区分abi(部分手机判断不准确)。所以若想加载最新的库,你有两种方法,第一个是直接尝试去Tinker更新的库文件中加载,第二个参数是库文件相对安装包的路径。

    1. TinkerLoadLibrary.loadArmLibrary(getApplicationContext(), "libstlport_shared");
    2. //load lib/armeabi-v7a library
    3. TinkerLoadLibrary.loadArmV7Library(getApplicationContext(), "libstlport_shared");

    若存在Tinker还没install之前调用加载补丁中的Library库,可使用的接口

    若想对第三方代码的库文件更新,可先使用TinkerLoadLibrary.load*Library对第三方库做提前的加载!更多使用方法可参考MainActivity.java

    使用Hack的方式

    以上使用方式似乎并不能做到开发者透明,这是因为我们想尽量少的去hook系统框架减少兼容性的问题。Tinker也提供了一键反射Library Path的方式供大家选择:

    1. // 将tinker library中的armeabi注册到系统的library path中。

    你可以设置自己的Log输出实现: