2017-05-30 2 views
1

Ich versuche, neue Instant App-Funktion in meiner Android App zu implementieren. Ich habe 4 Module:Instant Apps: Verwenden Sie Feature-Modul von Basismodul ohne starke Abhängigkeit

  • Base-Funktionsmodul mit allen Aktivitäten und Logik: base
  • Feature-Modul mit Push-Benachrichtigungen Klassen: push
  • installierte App-Modul: installed
  • Instant-App-Modul: instant

Da Instant App Push-Benachrichtigungen nicht unterstützt, möchte ich push Modul nur für i aktivieren nstallierte App. Aber ich habe Klassen in base geteilt, die push Methoden aufrufen. Zum Beispiel initialisiere ich push Modul während App-Start in der Application-Klasse.

Wie organisiere ich Abhängigkeiten, also muss ich nicht push Modul base Modul umfassen, aber push Methoden von base nennen zu können? Ich habe eine Idee, dass ich Schnittstelle PushManagerProvider in base Modul so instant und installed kann ihre eigenen Implementierungen bieten, aber ich bin mir nicht sicher, wie kann ich konkrete Implementierung zu base abhängig von aktuellen Modul injizieren.

Antwort

2

Angenommen, Sie verwenden Dolch und erstellen eine Singleton-Komponente in Ihrer Anwendungsklasse, hier ein Ansatz.

In base definieren Sie eine Injector Schnittstelle, die Ihre @Component Klasse erweitert. Lassen Sie Ihre Anwendung in Ihrem Basismodul eine InjectorProvider Schnittstelle implementieren, die über eine einzige getInjector()-Methode verfügt, die Ihre konstruierte Komponente zurückgibt. Diese Komponente wird mit einem Modul erstellt, das ein No-Op PushManagerProvider bietet.

Dann in Ihrem push Modul, eine alternative Implementierung Ihrer Application Klasse erstellen (Ihre Basis zu erweitern und zu PushAwareApplication umbenennen?) Das schafft eine Komponente mit einem Dolch-Modul, das ein legit PushManagerProvider und verwenden merge rules Nutzung der neuen Kraft liefert PushAwareApplication Name, wenn Push in Ihr Anwendungsmodul eingebaut ist. Auf diese Weise

Sie können

((InjectorProvider)getApplication()).getInjector().inject(this); 

nennen Und eine andere Komponente Implementierung je nachdem, ob Sie die installierbare App oder die Instant-App gebaut.

Es gibt wahrscheinlich mehr richtige Methoden, dies mit Dolch zu tun, aber dies sollte Ihnen den Anfang machen.

Wenn Sie keinen Dolch verwenden, können Sie die oben beschriebene Application Override-Technik verwenden, bei der beide Application-Implementierungen eine Schnittstelle implementieren, die eine Methode 'getPushManagerProvider() `anbietet.

Verwandte Themen