2016-07-13 18 views
1

ich im gleichen Prozess einige Android-Anwendungen machen wollen laufen, so gebe ich diejenigen AndroidManifest apps die gleiche sharedUserId:Android-Anwendung unterzeichnet mit dem gleichen Schlüsselspeicher mit demselben sharedUserId Abstürze aufgrund java.lang.RuntimeException: Kann nicht instanziiert Aktivität

< manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    ... 
    android:sharedUserId="aaa.bbb" > 

und jede Anwendung Anwendungen zuweisen den gleichen Prozess:

< application 
    ... 
    android:process="com.mytest" > 

Es in android 4.4.4 funktioniert, werden alle Anwendungen in demselben Prozess ausgeführt werden.

Aber Absturz geschah in android 6.0.1. Wenn ich die zweite Anwendung ausführen, stürzt durch:

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]] 

, nachdem das System den Prozess beenden, kann die zweite Anwendung ausführen und abstürzt, wenn ich die erste Anwendung.

Es scheint, dass Anwendungen nicht im selben Prozess in der gleichen Zeit ausgeführt werden können und ich weiß nicht warum.

Antwort

0

Jede APK hat ihre eigenen ClassLoader. Eine article darüber reden.

So ist es normal, dass Sie nicht auf eine Klasse eines anderen APK zugreifen können. Es scheint, dass ein Sicherheitsfehler zwischen Kitkat und Marshmallow behoben wurde.

Warum brauchen Sie dieses System? Wenn Daten zwischen Anwendungen ausgetauscht werden sollen, können Sie ContentProvider verwenden. Wenn Sie Activity oder Service starten möchten, können Sie Intent mit Aktion verwenden.

+0

Vielen Dank! Ich habe den Artikel gelesen. Jede Anwendung hat eine WebView, ich möchte die Cookies von CookieManager teilen, weil es Singleton ist. Vielleicht gibt es einen anderen Weg, es zu lösen, aber ich möchte nur wissen, wie ich den Prozess in Marshmallow teilen kann. –

0

Ich habe es repariert! deaktivieren Sie die Optionen in Android Studio und es funktioniert! enter image description here