Ich habe 2 Geschmacksrichtungen, z. B. Flavour1 und Flavour2 .
Ich möchte, dass meine Anwendung beispielsweise " AppFlavor1 " heißt, wenn ich für Flavour1 erstelle, und " AppFlavor2 ", wenn ich für Flavour 2 erstelle.
Es ist nicht der Titel von Aktivitäten, die ich ändern möchte. Ich möchte den App-Namen so ändern, wie er im Telefonmenü und anderswo angezeigt wird.
Ab build.gradle
kann ich verschiedene Parameter für meine Geschmacksrichtungen einstellen, aber anscheinend nicht das App-Label. Und ich kann das App-Label auch nicht programmgesteuert basierend auf einer Variablen ändern.
Wie gehen die Leute damit um?
sourceSets
Block hinzufügen ? Ist es unter demandroid{...}
Block?android
Tat im Block.Entfernen
app_name
vonstrings.xml
(sonst beschwert sich gradle über doppelte Ressourcen). Ändern Sie dann die Build-Datei wie folgt:Stellen Sie außerdem sicher, dass
@string/app_name
demandroid:label
Attribut im Manifest ein Wert zugewiesen ist .Dies ist weniger störend als das Erstellen neuer
strings.xml
unter verschiedenen erstellten Sets oder das Schreiben von benutzerdefinierten Skripten.quelle
@string/app_name
für Ihr Launcher-activity
Label? Beachten Sie, dass derlabel
vom Hauptstarteractivity
verwendeteapplication
label
für den App-Anzeigenamen bevorzugt verwendet wird .Wenn Sie die Lokalisierung für den App-Namen in verschiedenen Varianten beibehalten möchten, können Sie dies wie folgt erreichen:
1) Angabe
android:label
in<application>
erhältlich ,AndroidManifest.xml
wie folgt:2) Geben Sie den Standardwert für
appLabel
in der App-Ebene anbuild.gradle
:manifestPlaceholders = [appLabel:"@string/defaultName"]
3) Überschreiben Sie den Wert für Produktaromen wie folgt:
4) Fügen Sie Zeichenfolgenressourcen für jede Zeichenfolge (Standardname, Flavour1, Flavour2) in Ihrem hinzu
strings.xml
. Auf diese Weise können Sie sie lokalisieren.quelle
Sie können jeder Variante eine String-Ressourcendatei hinzufügen und diese Ressourcendateien dann verwenden, um Ihren App-Namen zu ändern. Zum Beispiel habe ich in einer meiner Apps eine kostenlose und kostenpflichtige Version. Um sie in "Lite" und "Pro" umzubenennen, habe ich eine
meta_data.xml
Datei erstellt,app_name
diesem XML meinen Wert hinzugefügt und sie entferntstrings.xml
. Als nächstesapp/src
erstellen Sie einen Ordner für jede Geschmacksrichtung (siehe unten für die Beispielstruktur). Fügen Sie in diesen Verzeichnissen hinzures/values/<string resource file name>
. Wenn Sie jetzt erstellen, wird diese Datei in Ihren Build kopiert und Ihre App wird umbenannt.Dateistruktur:
quelle
Eine andere Option, die ich tatsächlich verwende, ist das Ändern des Manifests für jede Anwendung. Anstatt den Ressourcenordner zu kopieren, können Sie für jede Variante ein Manifest erstellen.
Sie müssen ein Haupt-AndroidManifest in Ihrem src-Hauptfach haben, das das Hauptprinzip sein wird. Anschließend können Sie ein Manifest mit nur einigen Optionen für jede Variante definieren, z. B. (src / release / AndroidManifest.xml):
Zum Debuggen AndroidManifest (src / debug / AndroidManifest.xml):
Der Compiler führt eine Zusammenführung des Manifests durch und Sie können für jede Variante ein Symbol festlegen.
quelle
Dies kann leicht unter buildTypes erreicht werden
Stellen Sie einfach sicher, dass Sie app_name aus strings.xml entfernen
quelle
Beantworten Sie zunächst diese Frage: "Kann der Benutzer beide Varianten Ihrer Anwendung auf demselben Gerät installieren?"
Ich verwende ein Python-Skript, das die Quelle patcht. Es enthält einige wiederverwendbare Funktionen und natürlich das Wissen, was in diesem speziellen Projekt gepatcht werden muss. Das Skript ist also anwendungsspezifisch.
Es gibt viele Patches, die Daten für das Patchen werden in einem Python-Wörterbuch gespeichert (einschließlich der Namen der Anwendungspakete, sie unterscheiden sich übrigens vom Namen des Java-Pakets), ein Wörterbuch pro Version.
In Bezug auf l10n können Zeichenfolgen auf andere Zeichenfolgen verweisen, z. B. in meinem Code:
quelle
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" >
. Nachdem Sie alles gereinigt und neu erstellt haben (zweimal, einmal pro Geschmacksrichtung), sollten Sie zwei apk-s mit unterschiedlichen Android-Paketnamen und unterschiedlichen Launcher-Labels erhalten. Übrigens erkennt Eclipse häufig keine Änderungen an Ressourcen, daher müssen Sie sie zur Bereinigung auffordern.Wie kann ich string / app_name je nach Geschmack unterscheiden?
Ich wollte ein Update schreiben, stellte jedoch fest, dass es größer ist als die ursprüngliche Antwort, dass ich ein Python-Skript verwende, das die Quelle patcht.
Das Python-Skript hat einen Parameter, einen Verzeichnisnamen. Dieses Verzeichnis enthält Assets nach Geschmack, Ressourcen wie Startsymbole und die Datei properties.txt mit einem Python-Wörterbuch.
Das Python-Skript lädt das Wörterbuch aus dieser Datei und ersetzt den Wert zwischen
<string name="app_name">
und</string>
durch den Wert vonproperties['appTitle']
.Der folgende Code wird wie besehen / wie besehen usw. bereitgestellt.
So lesen Sie Eigenschaften aus einer oder mehreren solchen Dateien:
und die fileReplace-Funktion lautet:
Die ersten Zeilen des Skripts sind:
quelle
In der AndroidManifest-Datei haben Sie im Anwendungs-Tag folgende Zeile:
Dort können Sie festlegen, wie das Anwendungsetikett im Anwendungsmenü des Geräts angezeigt wird
quelle