2013-09-25 11 views
5

Lese dieses Artikels, dachten das gleiche Problem - One code base, two applications on Androidmehr Anwendungen mit unterschiedlichen Namen für die gleiche Code-Basis

Ich habe eine Anwendung testApp erstellt, die Elemente wie topics hat, splash screens, logos, charts, rules, statuses und/oder events.

Jetzt will ich verschiedene Anwendungen (testApp_USA, testApp_Canada, testApp_Australia) aus dem gleichen Code-Basis und legte sie auf Google Play Store, so dass, wenn der Benutzer lädt die Anwendung, sagen wir, testApp_USA, dann werden nur die spezifischen Elemente zu, dass Region sollte wie Splash Screen von USA, USA Logos, etc ..

angezeigt werden So möchte ich mehrere Anwendungen nach Ländern konfigurieren und dann die Elemente als Standardeinstellungen je nach der Anwendung, die der Benutzer heruntergeladen hat.

Derzeit, habe ich eine einzige Anwendung, die für alle Regionen gilt und ich mehrere Bedingungen auferlegen, um die Elemente nach den Regionen zu unterscheiden oder zu ändern.

Zum Beispiel:

(In vielen Java-Dateien verwendete ich)

if(rule.contains("USA")) 
{ 
//Show splash screen of USA 
} 

(Ähnlich In vielen Java-Dateien, habe ich)

if(rule.contains("Australia")) 
{ 
//Show splash screen of Australia 
} 

Dies ist nur einer von vielen im Code wiederholt. Alles in allem wird es viel mehr sein.

Es sollte eine bessere Möglichkeit geben, mehrere Anwendungen in android mit verschiedenen Namen und Einstellungen zu erstellen.

Ich weiß, iOS ermöglicht es mir, den Anwendungsnamen und das Profil zu ändern, damit mehrere Anwendungen erstellt werden können. Aber ich weiß nicht, oder das ist nicht einfach auf dem Android-Code zu tun.

Meine Frage:

Ist es möglich, verschiedene Anwendungen mit dem gleichen Quellcode in Android mit verschiedenen Einstellungen der Elemente und veröffentlichen Sie sie auf Google Play Store zu schaffen? Wenn JA, Wie man solche Konfiguration einstellt?

UPDATE:

diesen Beitrag lesen - multiple-android-application-package-apk-files-from-single-source-code

Dann kam ich mit der gleichen Idee -

1) eine String-Variable Taking, die Werte über dem Anwendungstyp Sie hält an erstellen.

public static final String app_Name = "testApp_CANADA" ; 

2) Haben mehrere AndroidManifest.xml Dateien für mehrere Anwendungen, die Sie benötigen, erstellen APK.

3) Erstellen Sie entsprechende Startaktivitäten für jedes Manifest.

Aber dann wie mehrere AndroidManifest.xml Dateien in einer einzigen App zu haben?

UPDATE:

Mein erster AndroidManifest.xml ist in Hauptprojekt Ordner (Anwendungsstammordner), wie üblich, dass wir haben. Betrachten Sie dies für testApp_USA.

Mein zweiten AndroidManifest.xml ist in separaten Paket unter Hauptprojekt. Betrachten Sie dies für testApp_CANADA.

Beide AndroidManifest.xml haben verschiedene Launcher-Aktivitäten mit entsprechenden Splash-Screens, Symbole definiert. Die Paketnamen werden in beiden unterschiedlich angegeben, sodass sie je nach Bedarf unterschiedliche .apk-Dateien erstellen.

Nun, wie Code, um zwischen testApp_USA/testApp_CANADA versehen meiner Haupt App hat Einstellung:

public static final String app_Name = "testApp_CANADA" ; 

ODER

Deutlicher,

Wie ein bestimmtes AndroidManifest.xml nach Aufruf zu der Wert app_Name?

Mit dem aktuellen Setup, das ich habe, wird immer nur zuerst AndroidManifest.xml aufgerufen.

+2

http://developer.android.com/guide/topics/resources/localization.html - values ​​/ rules.xml für jede Region/Lokalisierung, und einfach das lesen? – damian

+0

Obwohl der Link hilfreich ist, behebt er jedoch nicht das Problem, unterschiedliche Apps mit unterschiedlichen Konfigurationen zu erstellen. Es ist eine Art Locale-Lookup und definiert Ressourcen mit Gebietsschema entsprechend der Gerätekonfiguration. –

Antwort

9

Ich hatte ähnliches Problem mit Putting-Projekt auf verschiedene Märkte - Google Play, Samsung, Amazon. Alle Codebasis ist gleich, Unterschied nur in Abrechnungscode.

Die beste Lösung, die ich gefunden habe, ist die Erstellung eines separaten Projekts für jeden Markt und die Einführung des gemeinsamen Codes in das Bibliotheksprojekt.

Genauer gesagt, müssen Sie gemeinsamen Code im Hauptprojekt lassen, es Bibliotheksprojekt machen und Manifest-Fusion für Bibliotheks- und untergeordnete Projekte aktivieren. Fügen Sie die folgenden Zeilen zu project.properties von Hauptprojekt:

android.library=true 
manifestmerger.enabled=true 

und dies project.properties jedes Kind Projekt:

android.library.reference.1=../testApp //absolute or relative path to your main project 
manifestmerger.enabled=true 

Auch benötigen Sie Hauptprojekt als Bibliothek in ADT-Plugin befestigen (in Eclipse - Projekteigenschaften -> Android) zu allen untergeordneten Projekten. Das Hauptprojektmanifest sollte keine Launcher-Aktivität enthalten, es wird ignoriert, dasselbe gilt für AppWidget XML- und Config-Aktivitäten, falls Sie welche haben.

In untergeordneten Projekten können Sie konfigurieren, was auch immer Sie wollen, und Hauptcode verwenden, indem Sie benötigte Klassen als normale Java-Bibliothek erweitern oder verwenden. Sie können auch Hauptprojektaktivitäten, Dienste, Rundfunkempfänger usw. verwenden, so wie sie in Ihrem Kindprojekt sind, ohne das Manifest von Kindprojekten zu duplizieren. Nachdem Sie alles konfiguriert haben, können Sie einfach das benötigte Projekt für das benötigte Land erstellen, wie immer ein einzelnes Projekt, und Sie würden verschiedene APKs für verschiedene Länder haben, wie Sie wollen.

ist hier detaillierte Beschreibung offenkundiger http://www.platoevolved.com/blog/programming/android/merging-android-manifest-files/

Hinweis verschmelzenden, diese Funktion in ADT Version 20 Vorschau 3.

this helps hinzugefügt wurde.

2

Die Möglichkeit, mehrere Apps aus einer gemeinsamen Codebasis zu erstellen, besteht darin, den gemeinsamen Code als Bibliotheksprojekt zu verwenden und jede App das Bibliotheksprojekt verwenden zu lassen (siehe http://developer.android.com/tools/projects/index.html). Jedes Projekt kann strings.xml überschreiben, und die häufig auftretenden können die Paket-ID überprüfen.

In Ihrem Fall scheint es, dass dies gegen die Google Play-Richtlinie (Cookie-Cutter-Apps) verstößt. Daher ist es möglicherweise besser, eine App zu erstellen und den Nutzer ein Land auswählen zu lassen.

+0

Danke! Können Sie mir (nach Dokumenten, Links usw.) zeigen, dass die oben genannten Zeilen gegen die Google Play-Richtlinie verstoßen. Ich habe die Google Play-Dokumentation unter http://play.google.com/about/developer-content-policy.html, https://developer.android.com/distribute/googleplay/policies/index.html und http gelesen : //play.google.com/about/developer-distribution-agreement.html, aber ich habe nichts gefunden, was gegen das ist, was ich erreichen möchte. –

+0

@VedPrakash Ich bin kein Anwalt. Die Richtlinie finden Sie hier http://play.google.com/about/developer-content-policy.html. Der relevanteste Abschnitt lautet "Veröffentliche keine sich wiederholenden Inhalte". Ich war einmal auf einer Android-Entwicklerkonferenz und ein Typ von Google erwähnte einen ähnlichen Fall wie du und sagte, dass er eine App anstelle von vielen verwenden sollte. Aber ich bin mir nicht sicher, ob dies ein Vorschlag oder eine Politik ist. – yoah

1

Dazu müssen Sie App Lokalisierungskonzept verwenden. Dazu müssen Sie verschiedene Ressourcen anlegen, langlebig. Wenn Sie beispielsweise Ihre Anwendung in Japan ausführen möchten, müssen Sie einen zeichnenden Ordner wie "res/drawable-ja" erstellen. Dies ist das Gleiche, wenn Sie verschiedene Layouts für die Unterstützung von Tablets und kleinen Geräten erstellen. hier Referenz-Link: http://developer.android.com/guide/topics/resources/localization.html http://developer.android.com/distribute/googleplay/publish/localizing.html

+0

Erstellen von Ressourcen basierend auf der Lokalität ist in Ordnung. Das größte Problem ist, wie man die gleiche App mit verschiedenen Namen umbenennen kann (also verschiedene .apk-Dateien aus einem Quellcode hat), basierend auf der Lokalität und auf Google Play Store. –

1

Ich bin nicht sicher, was Sie genau wollen. Aber auf meiner Ebene, können Sie den geo Standort, wo Sie herausfinden können, wo Ihre App gerade ausläuft, oder einfacher den Standort von der Gebietsschema, sobald Sie das Gebietsschema oder Geo-Standort, Sie finden kann die Quelle entsprechend navigieren.

3

Ich hatte dieselbe Frage. Vielleicht haben Sie die Antwort an dieser Stelle gefunden, aber einige Suche führte mich schließlich zu this website, die Gradle erklärt.

Es scheint, alle Grundlagen wirklich gut zu erklären. Für die Antwort auf Ihre spezifische Frage, suchen Sie nach dem Abschnitt Product Flavors unter Build Variants.

Wie die Website erklärt, war ein Teil des Zwecks dieses Designs, es dynamischer zu machen und es leichter zu ermöglichen, mehrere APKs mit im Wesentlichen dem gleichen Code zu erstellen, der genau wie das klingt, was Sie tun.

Ich habe es wahrscheinlich nicht am besten erklärt, aber diese Website macht einen ziemlich guten Job.