我想让一些Android应用程序在同一个进程中运行,因此我为这些应用程序AndroidManifest
提供了相同的sharedUserId:
< manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
android:sharedUserId="aaa.bbb" >
并为每个应用程序的应用程序分配相同的过程:
< application
...
android:process="com.mytest" >
它适用于android 4.4.4
,所有应用程序都在同一个进程中运行。
但android 6.0.1
发生了崩溃。
当我运行第二个应用程序时,由于以下原因导致崩溃:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.myapplication/com.example.myapplication.MainActivity}:
java.lang.ClassNotFoundException: Didn't find class "com.example.myapplication.MainActivity" on path:
DexPathList[[zip file "/data/app/com.example.myapplication-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.myapplication-1/lib/arm, /vendor/lib, /system/lib]]
系统终止进程后,如果我运行第一个应用程序,第二个应用程序可以运行并崩溃。
似乎应用程序无法在同一时间内在同一进程中运行,我不知道为什么。
答案 0 :(得分:0)
每个APK都有自己的ClassLoader
。 article正在谈论这个问题。
通常情况下,您无法访问其他APK类。 似乎Kitkat和Marshmallow之间存在安全漏洞。
为什么需要这个系统?
如果要在应用程序之间共享数据,您可以使用ContentProvider
如果要启动Activity
或Service
,您可以将Intent与行动结合使用。
答案 1 :(得分:0)