考虑以下情况:我有两个名为P1和P2的Android项目,它们都生成一个apk,使用相同的进程ID并在Android上运行在同一进程中。P1和P2都使用Java库JL1。JL1在运行时加载共享库1 SL1。
我在运行时看到的是,在某些时候,我会得到一个java/lang/UnsatisfiedLinkError,同时输出:Shared lib already opened。
这个问题的原因是什么?我认为在Java中的库代码在每个项目/apk中都被复制了,当apk在一个进程中合并时,它忘记了这些副本。因此,每个副本都会自己加载其共享库,导致已经加载的错误。
如果是这样,这不是我们想要的行为。因为现在你永远不能在同一进程中使用带有共享库的Java库超过一次。
[编辑]我发现每个apk都使用自己的类加载器(即使在同一进程中)。这意味着每个JL将被每个apk加载,并且因此每个共享对象将被加载多次,导致错误。有人有什么想法如何解决这个问题吗?是否可能让apk共享类加载器?
我在运行时看到的是,在某些时候,我会得到一个java/lang/UnsatisfiedLinkError,同时输出:Shared lib already opened。
这个问题的原因是什么?我认为在Java中的库代码在每个项目/apk中都被复制了,当apk在一个进程中合并时,它忘记了这些副本。因此,每个副本都会自己加载其共享库,导致已经加载的错误。
如果是这样,这不是我们想要的行为。因为现在你永远不能在同一进程中使用带有共享库的Java库超过一次。
[编辑]我发现每个apk都使用自己的类加载器(即使在同一进程中)。这意味着每个JL将被每个apk加载,并且因此每个共享对象将被加载多次,导致错误。有人有什么想法如何解决这个问题吗?是否可能让apk共享类加载器?