Können mehrere Android-Anwendungen einen einzigen Prozess und Anwendungskontext gemeinsam nutzen?

8

Ich frage mich, ob ich einen Singleton für den Anwendungskontext über mehrere Anwendungen hinweg teilen könnte. Jede Anwendung wäre in einer eigenen APK, aber das klingt vielleicht nach schlechter Architektur, aber hören Sie mich zuerst.

Der Grund, warum ich das möchte, ist, weil ich eine existierende Bibliothek habe, die ein externes Gerät über Bluetooth steuert. Die Bibliothek ist Java, aber unter den Abdeckungen gibt es allot von nativem (c / c ++) alles von Java umhüllt. Ich habe mir angeschaut, alles in einen Dienst zu stellen, aber der IPC (ich benutzte aidl) wird sehr umständlich schnell. Der Versuch, Objekte auf Primitive zu reduzieren, ist nahezu unmöglich (private Felder, jni-Zeiger usw.) und der Versuch, alles mit AIDL zu umhüllen, ist sehr unordentlich.

Wenn jede App im selben Prozess laufen könnte und auch den gleichen Anwendungskontext hätte, würde ich ein Singleton-Objekt dort behalten, das die Dinge viel einfacher machen würde. Mein Googl-Fu versagt mir dabei. Vielleicht ist es nicht möglich?

    
startoftext 15.07.2013, 21:15
quelle

2 Antworten

8

Ja, sie können. Sie müssen den beiden android:sharedUserId und android:process in beiden Anwendungen dieselben Werte zuweisen und sie mit demselben Zertifikat signieren.

Verwandte Links:

Michał Zieliński 15.07.2013, 21:32
quelle
5

Es sollte möglich sein, aber Sie werden ein Problem mit der Tatsache haben, dass Sie immer noch zwei verschiedene APKs ausführen, jede hat ihren eigenen ClassLoader. Da dieselbe Klasse, die von einem anderen ClassLoader geladen wird, als völlig unterschiedlich betrachtet wird, können Sie keine Klasse aus APK A erstellen und erwarten, dass APK B auf dieselbe Klasse zugreifen kann. Allerdings ist eine Schwachstelle, dass Android System -Klassen im selben Prozess immer vom selben ClassLoader geladen werden. Daher besteht die Lösung darin, Ihre Daten über Android system Klassen (zB System.set / getProperty). Sie können einen ausgezeichneten Artikel zu dieser Technik hier lesen.

Da Sie Daten komplexer als Java-Primitive speichern möchten und die obige Vorgehensweise die Datenstruktur, die Sie speichern können, stark einschränkt, kann es dennoch passieren, dass AIDL Ihre beste Wahl ist. Aber zumindest müssen Ihre Daten keine Prozessgrenzen überschreiten, wenn Sie beide APKs in den gleichen Prozess stellen, also sollte es einigermaßen effizient sein.

    
Kai 16.07.2013 03:31
quelle

Tags und Links