Wie kann ich meine Android-Anwendung für mehrere Android-Stores unterstützen?

9

Ich habe kürzlich damit begonnen, meine Android-Anwendung auf dem Google Android Market zu verkaufen, und ihr Anwendungslizenzierungsschema implementiert, um die unbefugte Nutzung meiner Anwendung zu verhindern. Ich plane nun, es auch für den Amazon App Store für Android zu veröffentlichen und möchte die beste Möglichkeit kennen, zwei Versionen meiner Anwendung zu verwalten: eine, die die Android-Lizenzierung implementiert, und eine andere, die das nicht tut.

Obwohl meine derzeitige Lösung funktioniert, ist sie nicht optimal und ich versuche herauszufinden, wie andere Leute damit umgegangen sind. Im Moment habe ich zwei Startbildschirme für meine Anwendung SplashGoogle.java und SplashAmazon.java implementiert. Ich habe zwei entsprechende Manifest-Dateien, GoogleManifest.xml und AmazonManifest.xml. Jedes Manifest definiert einen anderen Splash als Launcher Intent.

Wenn ich eine Version meiner Anwendung freigeben möchte, benenne ich eine dieser Manifestdateien in AndroidManifest.xml um, exportiere die Anwendung und führe dann dasselbe für das andere Manifest durch. Dies ist meine Lösung, weil es das Beste ist, was ich mir vorstellen kann, und ich kenne keine anderen Möglichkeiten, dies zu tun. Es funktioniert, weil der einzige Unterschied zwischen den Amazon- und den Google-Marktversionen meiner Anwendung die entsprechenden Splash-Klassen sind, eine, die die Lizenzierung überprüft und die andere nicht.

Im Nachhinein möchte ich zusätzliche Änderungen implementieren (oder konsolidieren, um nur einen Begrüßungsbildschirm zu haben) und bin auf der Suche nach einem dauerhafteren Mittel zur Verwaltung subtiler Änderungen innerhalb derselben Anwendung.

Ich stelle mir vor, dass ähnliche Probleme auftauchen, wenn Entwickler lite, free oder ad-unterstützte Versionen von kostenpflichtigen Anwendungen erstellen.

Zusätzliche Anmerkungen:

  1. Für die Version, die die Android-Lizenzierung von Google verwendet, ersuche ich die Berechtigung CHECK_LICENSE in der Datei AndroidManifet.xml, während dies in der Amazon-Version nicht erforderlich ist.

Ich bin mir nicht sicher, ob dies als Community-Wiki betrachtet werden sollte, aber wenn ja, bitte markieren Sie es so, anstatt die Frage zu schließen. Ich glaube, das wäre für viele Entwickler da draussen nützlich.

    
finiteloop 02.06.2011, 22:43
quelle

3 Antworten

3

Ich würde damit beginnen, Ihre vorhandene Codebasis in ein Android-Bibliotheksprojekt umzuwandeln. Das ist ziemlich einfach zu machen. Achten Sie darauf, dies zu lesen. Die Dokumentation ist ziemlich spärlich, aber ich konnte es bekommen damit zu arbeiten. Beachten Sie den Abschnitt "Bibliothekskomponenten in der Manifestdatei deklarieren" genau.

Um also in eine Bibliothek umzuwandeln, markieren Sie das bestehende Projekt grundsätzlich als Bibliotheksprojekt. Sie müssen nur ein Kästchen in den Projekteinstellungen ankreuzen (siehe den Link).

Gehen Sie jetzt zur Bibliothek und wir möchten den Paketnamen in etwas anderes ändern. Wenn zum Beispiel Ihr veröffentlichtes Versionspaket com.mywebsite.myappname.android_market lautet, würde ich dies in com.mywebsite.myappname.common_code

umbenennen

Sie können mit der rechten Maustaste auf das Projekt klicken und Android Tools-> Anwendungspaket umbenennen auswählen. Diese Hälfte hat für mich funktioniert. Ich musste auch alle Referenzen im Code manuell in meine R-Klasse manuell umbenennen. Sie können jedoch nur eine globale Suche ersetzen, um von com.mywebsite.myappname.android_market.R in com.mywebsite.myappname.common_code.R umzubenennen.

Jetzt ist deine Bibliothek fertig

Jetzt ist es an der Zeit, das eigentliche Projekt zu erstellen, das Sie erstellen werden.

Erstellen Sie ein neues Android-Projekt und benennen Sie es mit dem Paketnamen für Android-Markt wie com.mywebsite.myappname.android_market. Folgen Sie den Anweisungen auf dem Link, um Ihre neue Commons-Bibliothek als eine Bibliothek hinzuzufügen, die dieses Paket verwendet.

Eine Einschränkung bei Android-Bibliotheksprojekten besteht darin, dass das Manifest der Bibliothek NICHT mit dem Manifest Ihres Top-Level-Projekts zusammengeführt wird. Sie müssen es dort von Hand einfügen. Außerdem (siehe Link) müssen Sie sicherstellen, dass alles in Ihrem Manifest vollständig qualifizierte Paketnamen verwendet. Wenn Sie also Aktivitätsnamen wie android: name=". SplashScreenActivity" haben, ändern Sie diese in android: name="com.mywebsite.myappname.common_code.SplashScreenActivity"

Also müssen Sie wieder alles von Hand zusammenführen, einschließlich Berechtigungen, Absichten, Aktivitäten usw.

Jetzt baue einfach das Top-Projekt und du bist gut. Erstellen Sie einen Wrapper für jede Variante, die Sie erstellen möchten.

Sie könnten auch diese neuen Top-Level-Projekte implementieren, die zwischen Ihren verschiedenen Versionen unterschiedlich sind. Ihr Android Market-Wrapper könnte also einen Begrüßungsbildschirm und Ihre Amazon-Version einen anderen Begrüßungsbildschirm enthalten. Oder Sie können einfach ein Enum in Ihrem gemeinsamen Projekt verwenden, um es zu steuern und beide Begrüßungsbildschirme dort zu lassen.

Ein weiteres nettes Feature ist, dass Ressourcen im obersten Projekt die Ressourcen in der Bibliothek überschreiben, wenn sie bereitgestellt werden. Wenn Sie also beispielsweise auf Ihrem Splash ein Amazon-Logo und ein Android-Market-Logo haben möchten, das sich je nach Version ändert, verwenden Sie einfach denselben Image-Namen wie in Commons und fügen Sie eine andere Kopie in die beiden Versionen ein.

    
w.donahue 03.06.2011, 00:35
quelle
1

Obwohl Sie nicht direkt mit Ihrer Frage in Verbindung standen, stieß ich bei der Erstellung von kostenlosen und kostenpflichtigen Versionen meiner Anwendung auf einen ähnlichen Problemblock. Mit Android können Sie jede Anwendung als Bibliothek exportieren. Sie finden diese Option in den Projekteigenschaften in Eclipse. Wenn Sie also Ihre gesamte Anwendung als Bibliothek exportieren, können Sie sie in andere Anwendungen integrieren. Sobald Ihre Bibliothek exportiert wurde, können Sie eine Amazon- und Google App erstellen, indem Sie die Bibliothek als Basis verwenden. Dies verhindert, dass Sie die XML-Dateien umbenennen müssen, um jede Anwendung in einen verwendbaren Zustand zu versetzen.

Bibliotheken sind nett, weil Sie auch Ressourcen mit ihnen verpacken können. Sie können in den Client-Anwendungen sogar Ressourcen mit demselben Namen hinzufügen, die die Version der Bibliothek überschreiben. Sie könnten also verschiedene Splash-Screens haben, die auf dem Markt basieren, auf dem sich Ihre Anwendung befindet. Der einzige Ort, an dem mir die Bibliotheken fehlten, waren Assets. Leider werden rohe, nicht verarbeitete Assets von einer Bibliothek nicht in eine Client-Anwendung aufgenommen.

    
Sam 02.06.2011 22:57
quelle
1

Ich würde prüfen, ob ich Versionskontrolle wie git verwende und drei Zweige habe. Ein Zweig würde kein Manifest haben, dieser Kernzweig würde allen gemeinsamen Code haben, den Sie einmal aktualisieren könnten. Die anderen beiden Zweige wären Amazon, Google und was auch immer sonst noch auftaucht. Diese Zweige würden app-spezifischen Code, das Manifest, Splash-Screens usw. haben. Wenn Sie fertig in der Kern-Zweigstelle arbeiten und Updates pushen möchten, können Sie eine temporäre Verzweigung aus Kern namens googleRelease (oder etwas) machen und Ihren Google-Zweig zusammenführen.

Dies ist ein relativ allgemeines Beispiel, Git ist mächtig und Sie könnten es auf verschiedene Arten angehen.

    
sgarman 02.06.2011 23:30
quelle