Wie kann ich Android Intent Filter Strings über mehrere Projekte hinweg am besten verwalten?

8

In meinem Projekt IntentExamples habe ich diesen Filter, der einem Dienst entspricht.

<intent-filter>
                <action android:name="biz.rpcodes.apps.intentexamples.START_SERVICE" />
</intent-filter>

In einem anderen Projekt, UseExampleService, habe ich so etwas wie:

Intent i = new Intent("biz.rpcodes.apps.intentexamples.START_SERVICE");
                startService(i);

... geleitet von dieser Antwort: https://stackoverflow.com/a/16439551/5181778

Meine Frage lautet: Wie kann ich diese Absichtsfilterzeichenfolgen am besten über mehrere Projekte hinweg verwalten? Die beste Lösung, die ich jetzt habe, besteht darin, eine Klasse zu erstellen, die ich kopiere und aus dem Service-Projekt in die anderen Projekte einfüge, dh:

class ExampleServiceIntents {
public static final String ExampleServiceIntents.START_SERVICE = 
    "biz.rpcodes.apps.intentexamples.START_SERVICE";
...

Während ich die Serviceklassen selbst importieren könnte new Intent(this, ExampleService.class), möchte ich die Serviceklassen in ihrem eigenen Projekt behalten.

Rick Page
quelle
Warum möchten Sie den Service in einem separaten Projekt behalten? Das führt nur die Möglichkeit ein, dass die App mit dem Servicenicht installiert ist. Sie können jederzeit eine Bibliothek erstellen, die diese Konstanten enthält, und diese Bibliothek dann in jedem Projekt verwenden.
Xaver Kapeller
Ich habe derzeit Bibliotheken und finde es in Android Studio umständlich, sie zu importieren. Normalerweise wird Android Studio etwas kaputt machen und ich muss die Dateien nacheinander kopieren und einfügen. (Separate Frage / Problem) Außerdem sind diese Apps intern, ich kann die Anforderungen steuern, dies ist nicht für den Google Play Store usw. Außerdem benötigen nicht alle drei Apps denselben Code, in mancher Hinsicht ist es besser zu setzen Anfragen in der Warteschlange für einen Prozess für unser Design. (Viel zu erklären)
Rick Page
Wie ist es umständlich, sie zu importieren? Sie werden viel mehr brechen, indem Sie Klassen selbst kopieren, als nur voll funktionsfähige Module zu kopieren. Und warum verwenden Sie keinen Maven-Server wie SonarQube oder Artifactory, um Ihre internen Bibliotheken zu hosten? Das Importieren der Bibliothek wäre dann wie das Importieren eines anderen Maven-Projekts - Hinzufügen einer Zeile im build.gradle.
Xaver Kapeller
"viel mehr brechen" Ja, total. Die einzige Möglichkeit, die Module zu verwenden, bestand darin, sie zu importieren. In diesem Fall kopiert Android Studio alle Dateien. "... maven server" Danke für den Vorschlag, ich werde das untersuchen.
Rick Page

Antworten:

1

Gemeinsame Android-Bibliotheken oder betriebssystemabhängige symbolische Links.

Option 1: Gemeinsame Android-Bibliothek

Eine formale Android-Bibliothek, die in jedes Projekt importiert wird.

Vorteile : Typensicherheit. Plattformübergreifend und arbeitet mit Quellcodeverwaltung. Vollständige Syntaxprüfung und Editorunterstützung.

Nachteile : Es ist immer noch etwas ärgerlich, Projekte als Bibliotheken über die aktuellen Editoren (Android Studio oder Eclipse mit ADT) zu importieren, da sie dafür keine sehr guten Schnittstellen bieten. Wenn Sie diese Aufgabe oft, aber nicht so oft ausführen müssen, dass Sie sich jedes Mal an alle Schritte erinnern, ist dies möglicherweise nicht die Mühe wert. Aber wenn es ein oder zwei Mal ist, dann müssen Sie es nicht noch einmal tun, es ist nicht so schlimm.

Option 2 Symbolische Links

Verknüpfen Sie symbolisch eine gemeinsame Quelldatei in jedem Projekt. Dann sehen beide Projekte die Datei und ändern sie, damit sie synchron bleiben können.

Vorteile : Viel einfacher zu implementieren.

Nachteile : Symbolische Links funktionieren mit Tools zur Quellcodeverwaltung nicht so gut. Nicht plattformübergreifend (für die Entwicklung), da sich symbolische Verknüpfungen von Betriebssystem zu Betriebssystem stark unterscheiden. Für einen neuen Entwickler, der in das Projekt eintritt, ist nicht klar, dass Änderungen in einem automatisch mit dem anderen geteilt werden.


Daher würde ich die Lösung für gemeinsam genutzte Bibliotheken für die meisten Projekte empfehlen, da die Option für symbolische Links mehr Nachteile als Vorteile hat. Wenn Ihr spezielles Projekt jedoch nicht die Funktionen aus der Nachteile-Spalte des symbolischen Links benötigt, ist dies wahrscheinlich einfacher. Es hängt davon ab, ob.

PS: Es gibt eine schreckliche dritte Option für eine dritte vollständige Android-Anwendung, die einen Android-Datenprovider bietet, der die Zeichenfolgenwerte bereitstellt. Zu diesem Zeitpunkt müssen Sie jedoch mit dieser App über spezielle Zeichenfolgen kommunizieren, die ebenfalls freigegeben werden müssen. Sie fügen also nur einen Abstraktionsschritt hinzu, haben das Problem jedoch nicht gelöst.

Mufasa
quelle
Interessante Idee zum Anbieter. Aber einen Schritt zurück, ich stimme zu. Vielen Dank für die Erkenntnis, dass die aktuellen Editoren "keine sehr guten Schnittstellen anbieten" und die Vor- und Nachteile.
Rick Page