配置完热更新后,直接run模式运行,程序会报以下错误:
Tinker does not support instant run mode, please trigger build by assembleDebug or disable instant run in 'File->Settings...'.
解决办法就是在File-Settings-Build,Execution,Deployment-Instant run下取消打钩,如下图。
这样设置,run运行出来的会在手机上重新安装包,删除原安装包,再运行;最重要的是不能进行代码的调试。下面是我为了让两者并存使用的方法。
第一步:在gradle.properties文件里设置标记tinkerEnable
Project中的gradle.properties为gradle的配置文件,里面可以定义一些常量供build.gradle使用。这里我们需要配置一个tinkerEnable=true(true表示需要开启trink功能,false反之)
第二步:在project的build.gradle下使用变量标记
在project的build.gradle文件的使用ext配置变量 tinkerEnabled,用来标记是否使用 TInker。
第三步:通过标记值决定是否初始化Tinker
在Module的build.gradle中配置buildConfigField参数,编译后在..\app\build\generated\source\buildConfig文件夹下会自动生成对应版本对应module的BuildConfig.java。BuildConfig就会包含对应版本的配置信息。程序中可以直接引用这些数据。所以我们通过自定义BuildConfig属性来使用tinkerEnabled变量。
第四步:通过标记值决定是否使用脚本插件
在Module的build.gradle中配置tinker插件,当然了,使用tinkerEnabled变量来判断是否引用tinker-support.gradle 构建项目。
注意:我的tinker-support.gradle文件是在app目录下的,所以这里要看你们的目录文件在哪里,否则会报错,找不到该文件。
第五步:配置SampleApplicationLike文件
根据 BuildConfig.TINKER_ENABLE 判断是否初始化 Tinker 的代码,(BuildConfig.TINKER_ENABLE的值就是gradle.properties中设置tinkerEnable的值)
OK,中间出现大大小小问题,一直困扰了好几天,现在终于实现了热更新与instant run并存的功能,只需要在第一步设置上修改tinkerEnable=false,打开instant run模式就能正常运行了。
最后感谢这边网友的文章: