微信tinker热更新

阿里巴巴的ANDfix比较简单但是属于bug的修复不能更新res文件夹中的文件

而使用微信tinker可以更新res的文件夹中的东西。

第一步:相关aar包的配置:

module gradle中

 compile('com.tencent.tinker:tinker-android-anno:1.6.2')
    compile('com.tencent.tinker:tinker-android-lib:1.6.2')
apply plugin: 'com.tencent.tinker.patch'
project gradle中
classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.6.2')

配置好后

第二步配置相关的属性:

tinkerPatch {
    oldApk = "C:\\Users\\Administrator\\Desktop\\Tinker\\app\\old.apk"
    ignoreWarning = false
    useSign = true
    buildConfig{
        tinkerId = "1.0"
    }
    packageConfig{
        //写这个为了修复一个bug,详见github issue #22
        configField("TINKER_ID", "1.0")
    }
    dex{
        dexMode = "jar"
        pattern = ["classes*.dex", "assets/secondary-dex-?.jar"]
        loader = ["com.tencent.tinker.loader.*", "com.example.administrator.tinker.MApplication"]
    }
    lib{
        pattern = ["lib/armeabi/*.so","lib/arm64-v8a/*.so","lib/armeabi-v7a/*.so","lib/mips/*.so","lib/mips64/*.so","lib/x86/*.so","lib/x86_64/*.so"]
    }
    res{
        pattern = ["res/*", "assets/*", "resources.arsc", "AndroidManifest.xml"]
        largeModSize = 100
    }
    sevenZip{
        zipArtifact = "com.tencent.mm:SevenZip:1.1.10"
    }
}
复制粘贴就可以:

1.需要更改old.apk的路径
2.修改loader的application路径

    signingConfigs {
        release {
            keyAlias 'tinker'
            keyPassword 'hfc123'
            storeFile file('C:\\Users\\Administrator\\tinker.jks')//这里请自行准备签名文件并填好路径
            storePassword 'hfc123'
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
这个signingconfig需要写在buildtype前面

signingConfig signingConfigs.release
这句话不写会报taskname not found的错误(这里入坑许久)

第三步配置代码:

建立application

/**
 * Created by Administrator on 2017/6/10 0010.
 */
@DefaultLifeCycle(
        application = ".MApplication",
        flags = ShareConstants.TINKER_ENABLE_ALL
)
public class Tapplocation extends DefaultApplicationLike {
    public Tapplocation(Application application, int tinkerFlags, boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime, long applicationStartMillisTime, Intent tinkerResultIntent, Resources[] resources, ClassLoader[] classLoader, AssetManager[] assetManager) {
        super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent, resources, classLoader, assetManager);

    }
    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public void onBaseContextAttached(Context base) {
        super.onBaseContextAttached(base);
        TinkerInstaller.install(this);
    }

}

MApplication这个是我们需要写在mainfest文件中的
gradle中的loader也需要写成这个

然后是更新的方法:

  TinkerInstaller.onReceiveUpgradePatch(getApplication(), "/sdcard"+"/patch.apk");

这里我把路径写死了有的机型获取的不是/sdcard

最好写成getabsolute.....这种方法获取

然后就完成了在更新代码之后将生成的补丁包放入指定文件夹,执行方法就会更新。

注:在更新完成后app会自动kill程序

第四部:生成补丁包。

如果你以上的配置配置成功只需要在

命令行terminal中输入>gradlew tinkerPatchRelease
就可以在as的控制台的成功后指定的路径找到以.apk结尾的补丁包了。

如果失败了说明你上面的配置出错了

第五步:

我按照大神hongyang的那种类似andfix 的方法生成补丁的方法一直出错

如果有人会的话请也教教我。(不知道是不是mapping.txt必须要配置的原因)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值