多个ClassLoader加载同一个so动态库失败

有时候我们需要做热更新,所以如果更新包里面有so库的话。可能需要重新加载。但是更新前的classLoader已经加载过该动态库了,Java VM 为了确保ClassLoader的命名空间独立性。不允许两个ClassLoader加载同一个动态库。那么只要把更新下来的so文件命名成一个新的名字,并且使用两个不同的没有继承关系的CLassLoader加载就行了。

    你以为这样就可以了吗?不是的。这种方法在多数机型里面测试可以使用,但是在华为手机里面就直接卡住了。具体原因不清楚。所以最好的办法是,把so包放在dex文件里面。没更新之前先不加载so包到内存。而是随着dex包一下更新下载下来。然后删除掉旧的so包,使用新的so包。然后再把so包加载到内存里面。这样,整个过程就加载一次so包。

 

 

你可能感兴趣的:(Android,NDK,开发,Android,插件化开发)