2012-07-02 3 views
8

Ich komme immer wieder auf dieses Problem zurück, da es scheint nicht eine saubere Lösung zu sein. Hat jemand eine gute Strategie, um Ressourcen von einem Kindprojekt in Android auszuschließen?Bedingte Ressourcen Aufnahme/Ausschluss für Android apk build

Ich habe zwei Szenarien:

1 - Base-Library-Projekt hat Lokalisierungsdateien für en, es usw.

--Child Projekt 1 alle Lokalisierungen verwendet, und alles ist gut

- -Child Projekt 2 ist nur auf Englisch lokalisiert, aber die endgültige .apk würde aufgrund der Elternressourcen eine teilweise Lokalisierung haben (obwohl ADT19 oder so Lint Regeln hinzugefügt haben, um Sie davor zu warnen/zu hindern).

Die einzige Lösung, die ich jetzt habe, ist, eine separate Elternbibliothek für die Lokalisierung zu haben und sie nur in Kindprojekt 1 aufzunehmen. Das ist ein großer Schmerz, wenn Sie viele Bibliotheksprojekte haben.

2 - Ausschluss von Build-spezifischen Ressourcen. Ich habe ein paar Bilder, die nur für meine Nook-spezifischen Builds meiner Apps benötigt werden, die durch eine Flagge ausgelöst werden. Bedingter Code funktioniert gut, aber die Ressourcen sind immer enthalten.

Ich würde es vorziehen, nicht noch ein Kind-Projekt für jede meiner Apps zu erstellen. Gibt es eine Möglichkeit, ein Build/Compile-Flag zu setzen, um bestimmte Bildressourcen auszublenden, damit sie nicht in die endgültige .apk gelangen?

Das zweite Problem mag spezifisch für mich sein, aber ich bin überrascht, dass ich keine gute Diskussion über den ersten Punkt finden kann. Gibt es keine anderen Entwickler, die nur einige Apps lokalisieren? Oder ignorieren die meisten Leute das Problem?

+0

Ich habe gesehen, über das Hinzufügen von Dateien zu einem sprechen.apk, aber ich bin auf der Suche nach etwas mehr wie ProGuard - automatisch und in die Tools eingebaut, anstatt die endgültige .apk zu hacken. – ProjectJourneyman

+0

Ihre Szenarien sind mit externen Build-Tools wie Ant oder Maven möglich. Beide bieten die Möglichkeit, jeden einzelnen Schritt während des Erstellungsprozesses (Kompilieren, Dex, Packen usw.) genau zu kontrollieren. Wenn Sie Maven verwenden, ist das Ausschließen von Ressourcen über [maven-resource-plugin] (http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html) ziemlich einfach. – yorkw

+0

Ich muss vielleicht so gehen. Ich habe auf eine sauberere (und idealerweise einfachere) Lösung gehofft. – ProjectJourneyman

Antwort

3

1 - Base-Library-Projekt hat Lokalisierungsdateien für en, es usw.

Sie haben zwei Projekte diese Bibliothek nutzen, und nur einer von ihnen muss alle Übersetzungen. Daher könnten diese Übersetzungen in dem Projekt sein, das die Bibliothek verwendet und die Übersetzungen benötigt, nicht in der Bibliothek selbst. Dies unterscheidet sich nicht von anderen Projekten, die Ressourcen einer Bibliothek anpassen (z. B. Symbole ersetzen, Layouts ersetzen).

Nun, wenn Sie anfangen, in kompliziertere Mischungen (z. B. zwei Projekte brauchen die Übersetzungen und eine dritte nicht), dann beginnen Sie in Probleme zu laufen.

Ausschluss von Build-spezifischen Ressourcen. Ich habe ein paar Bilder, die nur für meine Nook-spezifischen Builds meiner Apps benötigt werden, die durch eine Flagge ausgelöst werden. Bedingter Code funktioniert gut, aber die Ressourcen sind immer enthalten.

Xav und ich plauderten etwas über bedingte Ressourcen in this issue. Sein Fokus liegt auf Debug vs. Produktion (Ressource entspricht BuildConfig.DEBUG), aber es klingt wie etwas flexibler ist eine Möglichkeit.

Diese beiden Dinge könnten von einem benutzerdefinierten Release-Build-Skript verarbeitet werden. In normalen Debug-Builds würden Sie alles in Ruhe lassen. In einem Produktions-Build muss ein Ant-Skript eine Kopie des Projekts abarbeiten, Verzeichnisse, die nicht benötigt werden, vor dem Kompilieren, Signieren und Ziehen ausgleichen.

+0

Das ist, was ich für project3 getan habe, das eine einmalige Übersetzung ins Italienische hat (und daher einige strings_libx.xml-Dateien, die parent-Bibliotheken entsprechen). Mein Baum von Bibliotheken und Anwendungen wird jedoch immer komplexer und ich bin unzufrieden damit, Komplexität hinzuzufügen (Wartungskomplexität aufgrund duplizierter Zeichenfolgendateien oder Komplexität des Arbeitsbereichs mit LibX, um Sprachressourcen zu trennen). Ich denke, dass das Schreiben an der Wand sein kann - ich muss tiefer in die Werkzeuge eintauchen und einige Aktionen schreiben, um die Ausgabe zu reduzieren. – ProjectJourneyman

+0

Ich habe immer noch nicht die Zeit gefunden, um einige Ant-Skripte zu erstellen, aber ich fange an zu denken, dass das wirklich die richtige Lösung ist. Da meine Anforderungen immer komplexer werden, gibt es keinen Ersatz für die Flexibilität meiner eigenen Skripte. Ich denke nicht, dass die DEBUG-Flagge genügend Konfigurationsmöglichkeiten bietet. Wenn ich lange genug warte, wird das neue Android-Build-System mit Gradle fertiggestellt und ich kann es einfach lernen: http://tools.android.com/tech-docs/new-build-system – ProjectJourneyman

Verwandte Themen