Java 在具有共享项目库的共享进程上运行多个应用程序

Java 在具有共享项目库的共享进程上运行多个应用程序,java,android,shared-libraries,shared,Java,Android,Shared Libraries,Shared,我有一组在同一进程中运行的应用程序。这些进程都有一个共享的库,以便在不同版本的Android上拥有相同的UI。我第一次访问ActionBarSherlock库的元素时,一切正常。但是,当我在同一个Android进程上从不同的应用程序访问相同的元素时,会出现如下错误: E/AndroidRuntime( 797): java.lang.RuntimeException: Unable to start activity \ ComponentInfo{xper.tristram/xper

我有一组在同一进程中运行的应用程序。这些进程都有一个共享的库,以便在不同版本的Android上拥有相同的UI。我第一次访问ActionBarSherlock库的元素时,一切正常。但是,当我在同一个Android进程上从不同的应用程序访问相同的元素时,会出现如下错误:

E/AndroidRuntime(  797): java.lang.RuntimeException: Unable to start activity \
    ComponentInfo{xper.tristram/xper.tristram.XperTristramActivity}: \
    java.lang.ClassCastException: xper.common.CommonView cannot be cast to xper.common.CommonView
E/AndroidRuntime(  797):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
E/AndroidRuntime(  797):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
E/AndroidRuntime(  797):    at android.app.ActivityThread.access$600(ActivityThread.java:122)
E/AndroidRuntime(  797):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
E/AndroidRuntime(  797):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  797):    at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(  797):    at android.app.ActivityThread.main(ActivityThread.java:4340)
E/AndroidRuntime(  797):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  797):    at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(  797):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime(  797):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime(  797):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  797): Caused by: java.lang.ClassCastException: \
    xper.common.CommonView cannot be cast to xper.common.CommonView
E/AndroidRuntime(  797):    at xper.tristram.XperTristramActivity.onCreate(XperTristramActivity.java:29)
E/AndroidRuntime(  797):    at android.app.Activity.performCreate(Activity.java:4465)
E/AndroidRuntime(  797):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
E/AndroidRuntime(  797):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
E/AndroidRuntime(  797):    ... 11 more
上面的块代码是从中复制粘贴的。我的一位同事发现了这个网站,它描述了问题的根源,即两个类加载器为共享库加载了两个不同的类实例,每个应用程序一个。该站点的作者提供了一种解决方法,即使用LayoutInflater.setFactory()方法覆盖LayoutInflater创建共享视图的过程。我的问题是,是否有任何其他解决方案不需要覆盖Android库的核心方法,在我看来,这些方法可能容易出错且效率低下


提前感谢:)

其他解决方案是不要“有一组在同一进程中运行的应用程序”。不幸的是,我无法更改项目的逻辑,因为每个不同的应用程序都是主应用程序的“插件”。插件不需要在同一进程中运行。他们可以通过进程间通信(广播、服务命令、服务绑定、
ContentProvider
等)进行通信。首先,感谢您的快速回复!我知道内容提供商可以解决我的问题,但从我开始与同事一起编写应用程序时,我就不知道这是一个重大且耗时的变化,因为该项目现在规模巨大,不幸的是,我们没有时间来做这件事(严格的时间表,我们无法更改)。我也知道这不是Android推荐的,但因为他们给了你这个选项,我认为这是可以使用的。