问题描述:
之前编译热修复的项目都好好的,今天在编译的时候,发现提示
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 进去。如下图