热修复引入包错误修复

问题描述:

之前编译热修复的项目都好好的,今天在编译的时候,发现提示

Error:(3, 37) 错误: 程序包com.tencent.tinker.loader.app不存在

隐约觉得是我所使用的热修复sdk,bugly有更新,而这更新改动了原来的引用路径。所以才找不到包

解决思路

1.本地引入

想把相关的依赖以jar包,或者aar包的形式引入进来,本地引入就不会出现这个问题了。
实际上,我费尽九牛二虎之力好不容易在本地的某个目录下找到了这个依赖文件,引用后程序也不报错了。
但运行的时候,下面的错误

Process: com.oo2oo.buzz, PID: 12010
 java.lang.LinkageError: com.tencent.bugly.beta.tinker.TinkerPatchReflectApplication
     at dalvik.system.DexFile.defineClassNative(Native Method)
     at dalvik.system.DexFile.defineClass(DexFile.java:226)
     at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219)
     at dalvik.system.DexPathList.findClass(DexPathList.java:321)
     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
     at android.app.Instrumentation.newApplication(Instrumentation.java:984)
     at android.app.LoadedApk.makeApplication(LoadedApk.java:569)
     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4748)
     at android.app.ActivityThread.access$1600(ActivityThread.java:169)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1484)
     at android.os.Handler.dispatchMessage(Handler.java:111)
     at android.os.Looper.loop(Looper.java:194)
     at android.app.ActivityThread.main(ActivityThread.java:5562)
     at java.lang.reflect.Method.invoke(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:372)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:968)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:763)

导致程序直接崩溃了。
我推测,大概是bugly的插件或者是jar包,不支持这样使用。因为,我引用的这个包,虽然没报错,但有可能不能这么使用。

2.尝试恢复代码到上一个分支

试着切换了几次分支,问题依旧。

3.怀疑gradle配置问题

4.参考官方demo。

最后还是在官方demo上,找到了原因。原因是不错的,但如何引用到正确的包是个问题,参考着demo,发现demo使用的依赖并不是最新的。我改为和demo一样的版本号的依赖,就可以向往常一样编译通过了。

引发的其他问题:

因怀疑是整个android studio和配置环境有问题,所以安装了最新的android studio版本,并且把所有gradle资源全部删除。
因此出现了这个问题:

Tinker does not support instant run mode, please trigger build by assembleDebug or disable instant run in 'File->Settings...'.

查了资料说是instant run和热修复插件有冲突。并提供了去掉的方式,但我却发现按照图示,找不到项目中instant run 的选项。instant run 和热修复插件冲突解决
后来偶然查到一篇帖子,说,instant run 的位置,不能从标题栏的file菜单进去,必须从 android studio 进去。如下图

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值