Ich mache eine Android-App, die es dem Client erlauben muss, die Ressourcen von ihrem Server zu verwalten, die Zeichenketten, Zeichenvorlagen usw. enthalten.
Ich habe bereits einen Mechanismus zum Herunterladen einer Zip-Datei mit all diesen Dateien erstellt, und sie sind in der Lage, Zeichenfolgen ziemlich einfach zu ändern. Ich habe auch einen Mechanismus erstellt, der dem Client ermöglicht, bg color für UI-Steuerelemente zu ändern. um Breite, Höhe usw. zu ändern, aber ich habe das Gefühl, dass es einen besseren Weg geben muss, all das zu erschaffen.
Ich glaube also, die wirkliche Frage ist:
Was ist die beste Vorgehensweise, um ein benutzerdefiniertes Design zu erstellen, es auf dem Server bereitzustellen, die App herunterzuladen und anschließend auf die App anzuwenden?
Ich weiß, wie man ein benutzerdefiniertes Design erstellt und es mit der App bereitstellt und wie es zur Laufzeit angewendet wird. Das Problem hierbei ist jedoch, dass Ressourcen vorkompiliert werden und nach der Erstellung von APK Entwickler nicht mehr geändert werden können sie wären erforderlich, um neue Themen / Zeichenvorlagen / Stile / Zeichenfolgen hinzuzufügen.
Muss ich einen benutzerdefinierten Mechanismus für all dies erstellen (Laden von Bildern, Stilen, Zeichenfolgen usw. aus dem Dateisystem) und sie während der Laufzeit anwenden, indem ich meine eigenen Steuerelemente zB im Konstruktor erzeuge oder gibt es a Möglichkeit, das richtig zu machen :)? (Wie macht Swiftkey das mit allen Tastatur-Themen, und wie machen es ähnliche Apps, so dass die Benutzer das Thema herunterladen und es danach anwenden können)?
Es tut mir leid, wenn ich keine ähnliche Frage sah, ich habe wirklich versucht, in den letzten zwei Tagen selbst eine Antwort zu finden, aber ich habe nichts Nützliches gefunden, also ist dies meine letzte Chance, eine konstruktive Antwort zu bekommen :) .
Der Lösung, die ich am nächsten kam, war diese Antwort: Ändern des App-Designs zur Laufzeit mithilfe der externen Theme-Datei , aber ich habe diese Funktionalität bereits entwickelt, und ich weiß, dass ich die Farben so ändern kann, aber das Problem ist, dass ich in der Lage wäre, Dinge wie Grenzen zu ändern , bei gedrückten Tasten usw., die andere Ressourcen als einen einfachen Farbwert benötigen: (.
Vielen Dank!
P.S. Ich habe auch über die Erweiterungsdateien gelesen, also ist das etwas, das ich berücksichtigen muss, während ich darüber nachdenke, oder muss ich woanders hinsehen? Das Problem mit obb-Dateien ist, dass sie über PlayStore verteilt werden müssen und nicht für den Client "perfekt" sind, da sie ihn mithilfe von Jobb packen und für PlayStore bereitstellen müssen, was für sie zu technisch ist eine Zip-Datei, die es auf den Server stellt, und die App sollte den Rest erledigen:).
Ich habe mich schließlich dazu entschlossen, dies zu lösen, indem ich ein benutzerdefiniertes System für die Verarbeitung von Zeichensätzen, Strings usw. entwickle. Jetzt habe ich eine benutzerdefinierte Klasse namens "ResourceManager", die behandelt, was geladen werden muss und wie Themen verteilt werden Datei, die von der App heruntergeladen, extrahiert und später verwendet wird.
Ich musste neun Patch-Images selbst kompilieren, bevor ich sie in eine Zip-Datei legte, und ich tat das mit "abrc" von hier: Ссылка
Ich habe auch ein einfaches Bash-Skript erstellt, das rekursiv durch einen benutzerdefinierten Ordner läuft und alle neun Patch-Images mit abrc kompiliert.
Ich habe auch einen einfachen Helfer im ResourceManager erstellt, der die Bildschirmdichte überprüft und mir sagt, dass ich normalerweise Bilder in hdpi, xhdpi usw. dichten kann, und schließlich erzeuge ich die Bilder nicht jedes Mal neu, wenn ich es brauche Ich speichere sie in einer statischen Liste von HashMap, damit ich die bereits erstellten wiederverwenden kann und auf diese Weise hoffe, dass ich nicht zu viel Telefonspeicher verschwenden muss:).
OK, das ist alles in kurzen Zeilen, wenn jemand irgendwelche Fragen hat, lass es mich wissen, ich werde diese Erfahrung gerne mit anderen teilen.
Prost!
============ EDIT ============
Hier ist die Klasse, die ich zu diesem Zweck geschrieben habe (sie lädt die Datei herunter, prüft auf ihre Version, lädt Strings aus der JSON-Datei statt strings.xml usw.)
HINWEIS: Dies ist keine vollständige Klasse, daher fehlen einige Teile, aber ich denke, es ist mehr als genug, um die Idee zu bekommen, wie ich all das gelöst habe:)
%Vor%Tags und Links android android-theme