发布tinker碰到如下问题,并且只在8.0系统上发生
Shared library "/data/app/*******-Z5ZCyS3XSWi-YuHiG2CFGQ==/lib/arm/libbridge.so" already opened by ClassLoader 0x2b7; can't open in ClassLoader 0xff912a74 ****.jni.JNIUtils.<clinit>(JNIUtils.java:15)
打开补丁包一看里面包含了一些so文件,而这些so并没有修改,这是为什么呢....
对比base包和新打出来的包发现一些so大小不一样.....
初步猜想是AS的配置有关系,base的包是同事的机器上面打的,在他上面打出来的patch就不包含未修改的so
因为我电脑上打出来的有些so和他电脑上面打出来的大小不一样。
所以以后打好patch包一定要检查有没有把一些未修改的so打入,如果一直莫名其妙被打入,可以在tinker中把so的变动忽略掉。
到底是AS哪里的配置导致的现在还没查出来,后面会继续追究。
8.0上面的这个so被重复加载的bug,猜想仅刚刚修复完成的时候tinker把当前的进程kill掉引起的,后面不会再出现了
总结:发热修复需要检查有没有多余的so被打入patch,如果打入了在8.0上回引起同个so被多个classloader打开的异常。
待确认问题:
1. 8.0机型上面如何复现
2. 为什么不同的机器上打出来包有些so大小不一样