Im Laufe der Zeit hat sich unser Android-Projekt stark erweitert, und heutzutage erstellen wir mehrere gebrandete APKs aus demselben Quellbaum. Dies ist aufgrund der Paketbenennungsanforderungen von Android eine Herausforderung geworden.
Wir haben unseren gesamten Code in einem Android-Bibliotheksprojekt, das im Hauptanwendungsprojekt enthalten ist. Außerdem haben wir Android-Bibliotheks-Overlays für Marken-Ressourcen, die für jede Marke verwendet werden. Wenn wir eine Marke aufbauen möchten, fügen wir ein paar zusätzliche Eigenschaften für diese Marke hinzu, darunter die Overlay-Android-Bibliotheken vor der Haupt-Android-Bibliothek mit gemeinsam genutztem Code. Zur Veranschaulichung:
%Vor%Die 'BrandALibrary' oder 'BrandBLibrary' wird zum Zeitpunkt der Erstellung gewechselt, indem .properties-Dateien zum Zeitpunkt der Erstellung mit Befehlszeilenschaltern eingebunden werden. Nichts ist zu schick dort. Das Buildskript muss außerdem den Paketnamen des .APK zum Zeitpunkt der Erstellung ändern, damit die beiden .APK-Dateien gleichzeitig auf einem bestimmten Gerät koexistieren können (hauptsächlich für QA-Zwecke, da wir nicht erwarten, dass Kunden beides haben) die gleiche Zeit ... obwohl sie könnten).
Alles funktionierte sehr gut, bis unser Build nach dem Hinzufügen einer Klasse zu unserem Shared-Code-Library-Projekt brach. Bei der Suche nach einem Grund, warum dies geschieht, stolperte ich über die folgende Webseite, wo der Gefährte auf das gleiche Problem gestoßen war und seine Version von aapt korrigiert hatte, um diese Arbeit zu machen:
Während unseres Builds werden die folgenden Fehler in den Protokollen angezeigt:
%Vor%Meine benutzerdefinierten Attribute sind nichts Besonderes, ich habe eine state_add und eine state_list definiert, mit denen ich die Standardzustände für ein Steuerelement festlegen kann, das eine Schaltfläche mit einem Symbol anzeigt, das angibt, welche Status angezeigt werden sollen. Es ist in gewisser Weise wie ein "Toggle" -Button, und ich könnte am Ende dieses Steuerelement durch eine Umschalttaste ersetzen.
Ich habe dieses Tutorial gefolgt, als ich diese Schaltfläche erstellt habe .
Meine Frage ist, schließlich (dieser Typ ist langatmig, nicht wahr?), gibt es eine Möglichkeit, sicherzustellen, dass aapt die Paketnamen, die in benutzerdefinierten Attributen verwendet werden, neu zuordnen wird. Wenn ich sogar mehr benutzerdefinierte Steuerelemente in unsere Bibliothek schreiben möchte, benötigen wir appt, um Folgendes tun zu können:
Fehle ich etwas Grundlegendes mit der Art, wie benutzerdefinierte Attribute während eines Ant-Builds zugeordnet werden? Gibt es etwas Einfaches, das ich tun kann, um meine Build-Probleme zu beheben?
Tags und Links android custom-attributes android-build aapt