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?raw/
Verzeichnis zu schreiben ?/res
Verzeichnissen und '/ Assets' ist schreibgeschützt, da sie in der APK-Datei gepackt sind.Beide sind ziemlich ähnlich. Der eigentliche Hauptunterschied zwischen beiden besteht darin, dass
res
jede Datei im Verzeichnis eine vorkompilierte Datei erhält, aufID
die problemlos zugegriffen werden kannR.id.[res id]
. Dies ist nützlich, um schnell und einfach auf Bilder, Sounds, Symbole ... zuzugreifen.Das
assets
Verzeichnis ähnelt eher einem Dateisystem und bietet mehr Freiheit, um beliebige Dateien dort abzulegen. Sie können dann auf jede der Dateien in diesem System zugreifen, wie Sie es tun würden, wenn Sie über Java auf eine Datei in einem beliebigen Dateisystem zugreifen. Dieses Verzeichnis ist gut für Dinge wie Spieldetails, Wörterbücher, ... usw. Hoffentlich hilft das.quelle
Assets
Ordner ablegen , das Android-System enthält jetzt einfonts
Verzeichnis und wir können unsere benutzerdefinierte Schriftartendatei dort ablegen oder Android Studio kann sie für uns herunterladen.Ich weiß, dass dies alt ist, aber um es klar zu machen, gibt es in der offiziellen Android-Dokumentation jeweils eine Erklärung:
von http://developer.android.com/tools/projects/index.html
assets/
Das ist leer. Sie können es zum Speichern von Rohdaten verwenden. Dateien, die Sie hier speichern, werden unverändert in eine APK-Datei kompiliert, und der ursprüngliche Dateiname bleibt erhalten. Sie können in diesem Verzeichnis wie in einem typischen Dateisystem mithilfe von URIs navigieren und Dateien mit dem AssetManager als Bytestrom lesen. Dies ist beispielsweise ein guter Ort für Texturen und Spieldaten.
res/raw/
Für beliebige Rohdaten. Das Speichern von Asset-Dateien hier anstelle des Assets / Verzeichnisses unterscheidet sich nur in der Art und Weise, wie Sie darauf zugreifen. Diese Dateien werden von aapt verarbeitet und müssen von der Anwendung mithilfe einer Ressourcen-ID in der R-Klasse referenziert werden. Dies ist beispielsweise ein guter Ort für Medien wie MP3- oder Ogg-Dateien.
quelle
Im Folgenden sind einige wichtige Punkte aufgeführt:
Fazit
quelle
Wenn Sie sie irgendwo im Java-Code referenzieren müssen, legen Sie Ihre Dateien besser im Verzeichnis "res" ab.
Und alle Dateien im res-Ordner werden in der R-Datei indiziert, was das Laden viel schneller (und viel einfacher!) Macht.
quelle
Verwenden Sie Assets wie ein Dateisystem, um Dateien aller Art zu sichern. Und verwenden Sie res, um zu speichern, wofür es gemacht ist, Layouts, Bilder, Werte.
quelle
Ted Hopp hat das ganz nett beantwortet. Ich habe res / raw für meine OpenGL-Textur- und Shader-Dateien verwendet. Ich dachte darüber nach, sie in ein Asset-Verzeichnis zu verschieben, um eine hierarchische Organisation bereitzustellen.
Dieser Thread hat mich davon überzeugt. Erstens, weil mir die Verwendung einer eindeutigen Ressourcen-ID gefällt. Zweitens, weil es sehr einfach ist, InputStream / openRawResource oder BitmapFactory zum Einlesen der Datei zu verwenden. Drittens, weil es sehr nützlich ist, in einer tragbaren Bibliothek arbeiten zu können.
quelle
Assets bieten eine Möglichkeit, beliebige Dateien wie Text, XML, Schriftarten, Musik und Videos in Ihre Anwendung aufzunehmen. Wenn Sie versuchen, diese Dateien als "Ressourcen" einzuschließen, verarbeitet Android sie in seinem Ressourcensystem und Sie können die Rohdaten nicht abrufen. Wenn Sie unberührt auf Daten zugreifen möchten, sind Assets eine Möglichkeit, dies zu tun.
quelle
res/raw
eingeben, können Sie mit auf die Rohdaten zugreifenopenRawResource(resourceName)
.