多个Android应用程序可以共享一个进程和应用程序上下文吗

sta*_*ext 8 android

我想知道我是否可以跨多个应用程序共享应用程序上下文中的单例?每个应用程序都将在自己的APK中,但这可能听起来像糟糕的架构,但首先听我说.

我想这样做的原因是因为我有一个现有的库,通过蓝牙控制外部设备.这个库是java,但是有一些本机(c/c ++)全部由java包装.我已经把这一切都放在了服务中,但IPC(我使用的是aidl)变得非常麻烦.尝试将对象简化为原语几乎是不可能的(私有字段,jni指针等),并尝试用AIDL包装所有内容非常混乱.

如果每个应用程序都可以在同一个进程中运行,并且具有相同的应用程序上下文,那么允许我在那里保留单个对象,这将使事情变得更容易.我的googl-fu让我失败了.也许它不可能?

Mic*_*ski 9

是的他们可以.您只需要为两个应用程序分配相同的值,android:sharedUserIdandroid:process使用相同的证书对其进行签名.

相关链接:


Kai*_*Kai 8

它应该是可能的,但是你会遇到这样一个问题:你还在运行两个不同的APK,每个都有自己的ClassLoader.由于不同ClassLoader加载的相同类被认为彼此完全不同,因此您无法从APK A创建类并期望APK B能够访问同一个类.但是,一个漏洞是同一进程中的Android 系统类总是由同一个ClassLoader加载,因此解决方案是通过Android 系统类(例如System.set/getProperty)存储您的数据.你可以在这里阅读关于这种技术的优秀文章.

由于您希望存储比Java原语更复杂的数据,并且考虑到上述方法会严重限制您可以存储的数据结构,但最终可能仍然认为AIDL是您最好的选择.但是,如果您将两个APK放在同一个进程中,那么至少您的数据不需要跨越进程边界,因此它应该相当有效.