Mit den Ressourcen ist die Unterstützung für die Bereitstellung von Alternativen für verschiedene Sprachen, Betriebssystemversionen, Bildschirmausrichtungen usw. integriert, wie hier beschrieben . Nichts davon ist mit Vermögenswerten verfügbar. Außerdem unterstützen viele Teile der API die Verwendung von Ressourcen-IDs. Schließlich werden die Namen der Ressourcen in konstante Feldnamen umgewandelt, die beim Kompilieren überprüft werden, sodass die Wahrscheinlichkeit von Fehlanpassungen zwischen dem Code und den Ressourcen selbst geringer ist. Nichts davon gilt für Vermögenswerte.
Warum also überhaupt einen Assets-Ordner? Wenn Sie das Asset berechnen möchten, das Sie zur Laufzeit verwenden möchten, ist dies ziemlich einfach. Bei Ressourcen müssten Sie eine Liste aller möglicherweise verwendeten Ressourcen-IDs deklarieren und einen Index in die Liste berechnen. (Dies ist etwas umständlich und führt zu Fehlermöglichkeiten, wenn sich die Ressourcen im Entwicklungszyklus ändern.) (BEARBEITEN: Sie können eine Ressourcen-ID mit Namen abrufen getIdentifier
, dies verliert jedoch die Vorteile der Überprüfung zur Kompilierungszeit.) Assets können auch in einer Ordnerhierarchie organisiert sein, die von Ressourcen nicht unterstützt wird. Es ist eine andere Art, Daten zu verwalten. Obwohl Ressourcen die meisten Fälle abdecken, werden Vermögenswerte gelegentlich verwendet.
Ein weiterer Unterschied: In einem Bibliotheksprojekt definierte Ressourcen werden automatisch in Anwendungsprojekte importiert, die von der Bibliothek abhängen. Bei Vermögenswerten passiert das nicht. Asset-Dateien müssen im Assets-Verzeichnis der Anwendungsprojekte vorhanden sein. [BEARBEITEN: Mit dem neuen Gradle-basierten Build-System von Android (verwendet mit Android Studio) ist dies nicht mehr der Fall. Asset-Verzeichnisse für Bibliotheksprojekte werden in die .aar-Dateien gepackt, sodass in Bibliotheksprojekten definierte Assets in Anwendungsprojekte zusammengeführt werden (sodass sie nicht im Anwendungsverzeichnis vorhanden sein müssen, /assets
wenn sie sich in einer referenzierten Bibliothek befinden).]
BEARBEITEN: Ein weiterer Unterschied ergibt sich, wenn Sie eine benutzerdefinierte Schriftart in Ihre App packen möchten. Es gibt API-Aufrufe zum Erstellen einer Typeface
aus einer im Dateisystem oder im assets/
Verzeichnis Ihrer App gespeicherten Schriftartdatei . Es gibt jedoch keine API zum Erstellen einer Typeface
aus einer im res/
Verzeichnis gespeicherten Schriftartdatei (oder aus einer InputStream
, die die Verwendung des res/
Verzeichnisses ermöglichen würde). [ HINWEIS: Mit Android O (jetzt in der Alpha-Vorschau verfügbar) können Sie benutzerdefinierte Schriftarten als Ressourcen hinzufügen. Siehe die Beschreibung hier diese längst überfälligen Funktion. Solange Ihre Mindest-API-Stufe 25 oder weniger beträgt, müssen Sie sich jedoch daran halten, benutzerdefinierte Schriftarten als Assets und nicht als Ressourcen zu verpacken.]
res
steht für Ressourcen, wofürassets
steht dann?