Moderne Emojis unterstützen

Compose ausprobieren
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Informationen dazu, wie Sie Emoji in Compose unterstützen können.

Der Standardsatz an Emojis wird jährlich von Unicode aktualisiert, da die Verwendung von Emojis für alle Arten von Apps rasant zunimmt.

Wenn in Ihrer App Internetinhalte angezeigt werden oder Texteingaben möglich sind, empfehlen wir dringend, die neuesten Emoji-Schriftarten zu unterstützen. Andernfalls werden spätere Emojis möglicherweise als kleines Quadrat (☐), das als Tofu bezeichnet wird, oder als andere falsch gerenderte Emoji-Sequenzen angezeigt.

Bei Android-Versionen 11 (API-Level 30) und niedriger kann die Emoji-Schriftart nicht aktualisiert werden. Apps, in denen Emojis auf diesen Versionen angezeigt werden, müssen daher manuell aktualisiert werden.

Im Folgenden finden Sie Beispiele für moderne Emojis.

Beispiele Version
🫩 🪉 🇨🇶 16.0 (September 2024)
🐦‍🔥 🧑‍🧑‍🧒‍🧒 👩🏽‍🦽‍➡️ 🇲🇶 15.1 (September 2023)
🩷 🫸🏼 🐦‍⬛ 15.0 (September 2022)
🫠 🫱🏼‍🫲🏿 🫰🏽 14.0 (September 2021)
😶‍🌫️ 🧔🏻‍♀️ 🧑🏿‍❤️‍🧑🏾 13.1 (September 2020)
🥲 🥷🏿 🐻‍❄️ 13.0 (März 2020)
🧑🏻‍🦰 🧑🏿‍🦯 👩🏻‍🤝‍👩🏼 12.1 (Oktober 2019)
🦩 🦻🏿 👩🏼‍🤝‍👩🏻 12.0 (Februar 2019)

Die androidx.emoji2:emoji2-Bibliothek bietet eine einfachere Abwärtskompatibilität mit niedrigeren Android-Versionen. Die emoji2-Bibliothek ist eine Abhängigkeit der AppCompat-Bibliothek und erfordert keine weitere Konfiguration.

Emoji-Unterstützung in Compose

BOM März 2023 (Compose UI 1.4) bietet Unterstützung für die neueste Emoji-Version, einschließlich Abwärtskompatibilität mit älteren Android-Versionen bis hinunter zu API 21. Auf dieser Seite wird beschrieben, wie Sie moderne Emoji im View-System konfigurieren. Weitere Informationen finden Sie auf der Seite Emojis in Compose.

Voraussetzungen

Um zu prüfen, ob in Ihrer App neuere Emojis richtig angezeigt werden, starten Sie sie auf einem Gerät mit Android 10 (API-Level 29) oder niedriger. Auf dieser Seite finden Sie moderne Emojis, die Sie zum Testen verwenden können.

AppCompat verwenden, um die neuesten Emojis zu unterstützen

AppCompat 1.4 bietet Unterstützung für Emojis.

So verwenden Sie AppCompat zur Unterstützung von Emojis:

  1. Prüfen Sie, ob Ihr Modul von der AppCompat-Bibliotheksversion 1.4.0-alpha01 oder höher abhängt.

    build.gradle
    
    // Ensure version is 1.4.0-alpha01 or higher.
    implementation "androidx.appcompat:appcompat.$appcompatVersion"
    
  2. Alle Aktivitäten, in denen Text angezeigt wird, müssen die Klasse AppCompatActivity erweitern.

    Kotlin

    MyActivity.kt
    
    class MyActivity: AppCompatActivity {
    ...
    }

    Java

    MyActivity.java
    
    class MyActivity extends AppCompatActivity {
    ...
    }
  3. Testen Sie die Integration, indem Sie Ihre App auf einem Gerät mit Android 10 oder niedriger starten und den folgenden Teststring anzeigen. Achten Sie darauf, dass alle Zeichen richtig gerendert werden.

    • 16.0: 🫩, 🪉, 🇨🇶
    • 15.1: 🐦‍🔥, 🧑‍🧑‍🧒‍🧒, 👩🏽‍🦽‍➡️, 🇲🇶
    • 15.0: 🩷, 🫸🏼, 🐦‍⬛
    • 14.0: 🫠, 🫱🏼‍🫲🏿, 🫰🏽
    • 13.1: 😶‍🌫️, 🧔🏻‍♀️, 🧑🏿‍❤️‍🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻‍❄️
    • 12.1: 🧑🏻‍🦰, 🧑🏿‍🦯, 👩🏻‍🤝‍👩🏼
    • 12.0: 🦩, 🦻🏿, 👩🏼‍🤝‍👩🏻

In Ihrer App werden automatisch abwärtskompatible Emojis auf allen Geräten angezeigt, die einen emoji2-kompatiblen Anbieter für herunterladbare Schriftarten bieten, z. B. Geräte, die von den Google Play-Diensten unterstützt werden.

Wenn in Ihrer App AppCompat verwendet wird, aber das Tofu-Symbol (☐) angezeigt wird

In einigen Fällen wird in Ihrer App möglicherweise Tofu anstelle des richtigen Emojis angezeigt, auch wenn Sie die AppCompat-Bibliothek hinzufügen. Im Folgenden finden Sie mögliche Erklärungen und Lösungen.

Sie führen die App auf einem Gerät aus, das vor Kurzem geflasht wurde, oder auf einem neuen Emulator.

Löschen Sie die Daten der Google Play-Dienste für die App, um das Caching von Schriftarten zu entfernen, das beim Starten der App auftreten kann. In der Regel wird das Problem dadurch nach einigen Stunden behoben.

So löschen Sie die App-Daten:

  1. Öffnen Sie auf Ihrem Android-Gerät die Einstellungen.

  2. Tippe auf Apps & Benachrichtigungen.

  3. Tippen Sie auf Alle Apps anzeigen oder App-Info.

  4. Scrollen Sie durch die Apps und tippen Sie auf Google Play-Dienste.

  5. Tippen Sie auf Speicher und Cache.

  6. Tippen Sie auf Cache leeren.

Ihre App verwendet keine AppCompat-Klasse für Text.

Das kann passieren, wenn Sie AppCompatActivity nicht erweitern oder eine Ansicht im Code instanziieren, z. B. TextView. Überprüfen Sie Folgendes:

  • Die Aktivität erstreckt sich über AppCompatActivity.
  • Wenn Sie die Ansicht im Code erstellen, verwenden Sie die richtige AppCompat-Unterklasse.

AppCompatActivity wird beim Aufblasen von XML automatisch anstelle von AppCompatTextView aufgeblasen. Sie müssen Ihre XML-Datei also nicht aktualisieren.TextView

Das Testgerät unterstützt keine herunterladbaren Schriftarten

Prüfen Sie, ob DefaultEmojiCompatConfig.create eine Konfiguration zurückgibt, die nicht null ist.

In einem Emulator mit einem niedrigeren API-Level wurden die Google Play-Dienste nicht aktualisiert.

Wenn Sie einen Emulator mit einem früheren API-Level verwenden, müssen Sie möglicherweise die mitgelieferten Google Play-Dienste für emoji2 aktualisieren, um den Schriftartenanbieter zu finden. Melden Sie sich dazu im Google Play Store auf dem Emulator an.

So prüfen Sie, ob eine kompatible Version installiert ist:

  1. Führen Sie den folgenden Befehl aus:

    adb shell dumpsys package com.google.android.gms | grep version
    
  2. Prüfen Sie, ob versionCode höher als 211200000 ist.

Emojis ohne AppCompat unterstützen

Wenn Ihre App AppCompat nicht enthalten kann, kann sie emoji2 direkt verwenden. Diese Methode ist aufwendiger. Verwenden Sie sie daher nur, wenn Ihre App nicht AppCompat verwenden kann.

So unterstützen Sie Emojis ohne die AppCompat-Bibliothek:

  1. Fügen Sie in der Datei build.gradle Ihrer App emoji2 und emoji2-views ein.

    build.gradle
    
    def emojiVersion = "1.0.0-alpha03"
    implementation "androidx.emoji2:emoji2:$emojiVersion"
    implementation "androidx.emoji2:emoji2-views:$emojiVersion"
    

    Das Modul emoji2-views bietet Unterklassen von TextView, Button und EditText, die EmojiCompat implementieren. Verwenden Sie es nicht in einer App, die AppCompat enthält, da dort bereits EmojiCompat implementiert ist.

  2. Verwenden Sie in XML und Code überall, wo Sie TextView, EditText oder Button verwenden, stattdessen EmojiTextView, EmojiEditText oder EmojiButton.

    activity_main.xml
    
    <androidx.emoji2.widget.EmojiTextView ... />
    <androidx.emoji2.widget.EmojiEditText ... />
    <androidx.emoji2.widget.EmojiButton ... />
    

    Wenn Sie das emoji2-Modul einbinden, verwendet das System den Standardanbieter für herunterladbare Schriftarten, um die Emoji-Schriftart kurz nach dem Start der App automatisch zu laden. Es ist keine weitere Konfiguration erforderlich.

  3. Um Ihre Integration zu testen, starten Sie Ihre App auf einem Gerät mit Android 11 oder niedriger und lassen Sie die folgenden Teststrings anzeigen. Achten Sie darauf, dass alle Zeichen richtig gerendert werden.

    • 16.0: 🫩, 🪉, 🇨🇶
    • 15.1: 🐦‍🔥, 🧑‍🧑‍🧒‍🧒, 👩🏽‍🦽‍➡️, 🇲🇶
    • 15.0: 🩷, 🫸🏼, 🐦‍⬛
    • 14.0: 🫠, 🫱🏼‍🫲🏿, 🫰🏽
    • 13.1: 😶‍🌫️, 🧔🏻‍♀️, 🧑🏿‍❤️‍🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻‍❄️
    • 12.1: 🧑🏻‍🦰, 🧑🏿‍🦯, 👩🏻‍🤝‍👩🏼
    • 12.0: 🦩, 🦻🏿, 👩🏼‍🤝‍👩🏻

EmojiCompat ohne Widgets verwenden

EmojiCompat verwendet EmojiSpan, um korrekte Bilder zu rendern. Daher muss jedes angegebene CharSequence-Objekt in ein Spanned-Objekt mit EmojiSpan-Objekten umgewandelt werden. Die EmojiCompat-Klasse bietet die Methode process() zum Konvertieren von CharSequences in Spanned-Instanzen. Mit dieser Methode können Sie process() im Hintergrund aufrufen und die Ergebnisse im Cache speichern, was die Leistung Ihrer App verbessert.

Kotlin

val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")

Java

CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");

EmojiCompat für Eingabemethoden-Editoren verwenden

Mit der Klasse EmojiCompat können Tastaturen die von der App unterstützten Emojis rendern, mit denen sie interagieren. Eingabemethoden-Editoren (IMEs) können mit der Methode getEmojiMatch() prüfen, ob eine Instanz von EmojiCompat ein Emoji rendern kann. Diese Methode verwendet die CharSequence eines Emojis und gibt true zurück, wenn EmojiCompat das Emoji erkennen und rendern kann.

Die Tastatur kann auch die Version von EmojiCompat prüfen, die von der App unterstützt wird, um zu ermitteln, welche Emojis in der Palette gerendert werden sollen. Um die Version zu prüfen, kann die Tastatur, sofern verfügbar, im EditorInfo.extras-Bundle nach den folgenden Tasten suchen:

  • EDITOR_INFO_METAVERSION_KEY: Die Version der Emoji-Metadaten, die von der App verwendet werden. Wenn dieser Schlüssel nicht vorhanden ist, verwendet die App EmojiCompat nicht.
  • EDITOR_INFO_REPLACE_ALL_KEY: Wenn der Schlüssel vorhanden und auf true festgelegt ist, konfiguriert die App EmojiCompat so, dass alle Emojis ersetzt werden, auch wenn sie im System vorhanden sind.

Weitere Informationen zum Konfigurieren einer EmojiCompat-Instanz

Emojis in benutzerdefinierten Ansichten verwenden

Wenn Ihre App benutzerdefinierte Ansichten hat, die direkte oder indirekte Unterklassen von TextView sind, z. B. Button, Switch oder EditText, und in denen nutzergenerierte Inhalte angezeigt werden können, muss für jede dieser Ansichten EmojiCompat implementiert werden.

Das Verfahren variiert je nachdem, ob Ihre App die AppCompat-Bibliothek verwendet.

Benutzerdefinierte Ansichten für Apps mit AppCompat hinzufügen

Wenn Ihre App AppCompat verwendet, erweitern Sie die AppCompat-Implementierung anstelle der Plattformimplementierung. Die folgende Tabelle enthält Informationen dazu, wie Sie Ihre Ansichten in AppCompat erweitern können:

Anstatt zu verlängern... Erweitern
TextView AppCompatTextView
EditText AppCompatEditText
ToggleButton AppCompatToggleButton
Switch SwitchCompat
Button AppCompatButton
CheckedTextView AppCompatCheckedTextView
RadioButton AppCompatRadioButton
CheckBox AppCompatCheckBox
AutoCompleteTextView AppCompatAutoCompleteTextView
MultiAutoCompleteTextView AppCompatMultiAutoCompleteTextView

Benutzerdefinierte Ansichten für Apps ohne AppCompat hinzufügen

Wenn in Ihrer App AppCompat nicht verwendet wird, können Sie die View-Integrationshilfen im emoji2-views-helper-Modul verwenden, die für benutzerdefinierte Ansichten vorgesehen sind. Dies sind die Hilfsfunktionen, die von der AppCompat-Bibliothek zur Implementierung der Emoji-Unterstützung verwendet werden.

Führen Sie die folgenden Schritte aus, um benutzerdefinierte Ansichten für Apps zu unterstützen, die AppCompat nicht verwenden.

  1. Fügen Sie die Bibliothek emoji2-views-helper hinzu:

    implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
    
  2. Folgen Sie der Anleitung, um EmojiTextViewHelper oder EmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelperEmojiEditTextHelper

  3. Testen Sie die Integration, indem Sie Ihre App auf einem Gerät mit Android 10 oder niedriger starten und den folgenden Teststring anzeigen. Achten Sie darauf, dass alle Zeichen richtig gerendert werden.

    • 16.0: 🫩, 🪉, 🇨🇶
    • 15.1: 🐦‍🔥, 🧑‍🧑‍🧒‍🧒, 👩🏽‍🦽‍➡️, 🇲🇶
    • 15.0: 🩷, 🫸🏼, 🐦‍⬛
    • 14.0: 🫠, 🫱🏼‍🫲🏿, 🫰🏽
    • 13.1: 😶‍🌫️, 🧔🏻‍♀️, 🧑🏿‍❤️‍🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻‍❄️
    • 12.1: 🧑🏻‍🦰, 🧑🏿‍🦯, 👩🏻‍🤝‍👩🏼
    • 12.0: 🦩, 🦻🏿, 👩🏼‍🤝‍👩🏻

Optionale Funktionen für die Verarbeitung von Emoji2

Nachdem Sie die emoji2-Bibliothek in Ihre App eingebunden haben, können Sie die in diesem Abschnitt beschriebenen optionalen Funktionen hinzufügen.

Emoji2 für die Verwendung einer anderen Schriftart oder eines anderen herunterladbaren Schriftartanbieters konfigurieren

So konfigurieren Sie emoji2 für die Verwendung einer anderen Schriftart oder eines anderen Anbieters herunterladbarer Schriftarten:

  1. Deaktivieren Sie die EmojiCompatInitializer, indem Sie Ihrem Manifest Folgendes hinzufügen:

    <provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge">
    <meta-data android:name="androidx.emoji2.text.EmojiCompatInitializer"
               tools:node="remove" />
    </provider>
  2. Führen Sie einen der folgenden Schritte aus:

    • Rufen Sie DefaultEmojiCompatConfiguration.create(context) auf, um die Standardkonfiguration zu verwenden.

    • Erstellen Sie mit EmojiCompat.Config eine eigene Konfiguration, um Schriftarten aus einer anderen Quelle zu laden. Diese Klasse bietet mehrere Optionen zum Ändern des EmojiCompat-Verhaltens, wie im folgenden Abschnitt beschrieben.

EmojiCompat-Verhalten ändern

Sie können eine Instanz von EmojiCompat.Config verwenden, um das Verhalten von EmojiCompat zu ändern.

Die wichtigste Konfigurationsoption ist setMetadataLoadStrategy(), mit der gesteuert wird, wann EmojiCompat die Schriftart lädt. Das Laden der Schriftart beginnt, sobald EmojiCompat.load() aufgerufen wird. Dadurch werden alle erforderlichen Downloads ausgelöst. Das System erstellt einen Thread für das Herunterladen von Schriftarten, sofern Ihre App keinen bereitstellt.

Mit LOAD_STRATEGY_MANUAL können Sie steuern, wann EmojiCompat.load() aufgerufen wird, und LOAD_STRATEGY_DEFAULT sorgt dafür, dass das Laden synchron im Aufruf von EmojiCompat.init() beginnt.

Die meisten Apps verwenden LOAD_STRATEGY_MANUAL, um den Thread und das Timing des Schriftartenladens zu steuern. Ihre App muss die Ausführung bis nach der Anzeige des ersten Bildschirms verzögern, um Startlatenz zu vermeiden. EmojiCompatInitializer folgt dieser Vorgehensweise und verzögert das Laden der Emoji-Schriftart, bis der erste Bildschirm wieder angezeigt wird.

Verwenden Sie die folgenden Methoden aus der Basisklasse, um andere Aspekte der Konfiguration festzulegen:

  • setReplaceAll(): Gibt an, ob EmojiCompat alle gefundenen Emojis durch Instanzen von EmojiSpan ersetzt. Wenn EmojiCompat standardmäßig davon ausgeht, dass das System ein Emoji rendern kann, wird es nicht ersetzt. Wenn diese Option auf true festgelegt ist, werden alle Emojis durch EmojiSpan-Objekte ersetzt.EmojiCompat
  • setEmojiSpanIndicatorEnabled(): Gibt an, ob EmojiCompat ein Emoji durch ein EmojiSpan-Objekt ersetzt. Wenn dieser Parameter auf true gesetzt ist, wird mit EmojiCompat ein Hintergrund für die EmojiSpan gezeichnet. Diese Methode wird hauptsächlich zum Debuggen verwendet.
  • setEmojiSpanIndicatorColor: Legt die Farbe für die Anzeige eines EmojiSpan fest. Der Standardwert ist GREEN.
  • registerInitCallback(): Informiert eine App über den Status der EmojiCompat-Initialisierung.

Initialisierungs-Listener hinzufügen

Die Klassen EmojiCompat und EmojiCompat.Config bieten die Methoden registerInitCallback() und unregisterInitCallback() zum Registrieren und Aufheben der Registrierung von Initialisierungs-Callbacks. Ihre App verwendet diese Callbacks, um zu warten, bis EmojiCompat initialisiert ist, bevor Sie Emojis in einem Hintergrundthread oder in einer benutzerdefinierten Ansicht verarbeiten.

Erstellen Sie zum Verwenden dieser Methoden eine Instanz der Klasse EmojiCompat.InitCallback. Rufen Sie diese Methoden auf und übergeben Sie die Instanz der EmojiCompat.InitCallback-Klasse. Wenn die Initialisierung erfolgreich ist, ruft die Klasse EmojiCompat die Methode onInitialized() auf. Wenn die Bibliothek nicht initialisiert werden kann, ruft die EmojiCompat-Klasse die Methode onFailed() auf.

Rufen Sie die Methode getLoadState() auf, um den Initialisierungsstatus zu einem beliebigen Zeitpunkt zu prüfen. Diese Methode gibt einen der folgenden Werte zurück: LOAD_STATE_LOADING, LOAD_STATE_SUCCEEDED, oder LOAD_STATE_FAILED.

Unterstützung von gebündelten Schriftarten mit Emoji2

Mit dem emoji2-bundled-Artefakt können Sie einen Emoji-Font in Ihre App einbinden. Da der NotoColorEmoji-Font jedoch über 10 MB groß ist, empfehlen wir dringend, dass Ihre App nach Möglichkeit herunterladbare Fonts verwendet. Das emoji2-bundled-Artefakt ist für Apps auf Geräten vorgesehen, die herunterladbare Schriftarten nicht unterstützen.

So verwenden Sie das emoji2-bundled-Artefakt:

  1. emoji2-bundled- und emoji2-Artefakte einbeziehen:

    implementation "androidx.emoji2:emoji2:$emojiVersion"
    implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
    
  2. Konfigurieren Sie emoji2 für die Verwendung der gebündelten Konfiguration:

    Kotlin

    EmojiCompat.init(BundledEmojiCompatConfig(context))

    Java

    EmojiCompat.init(new BundledEmojiCompatConfig(context));
  3. Testen Sie die Integration, indem Sie die vorherigen Schritte zum Einbinden von emojicompat mit oder ohne AppCompat ausführen. Prüfen Sie, ob der Teststring richtig angezeigt wird.

    • 16.0: 🫩, 🪉, 🇨🇶
    • 15.1: 🐦‍🔥, 🧑‍🧑‍🧒‍🧒, 👩🏽‍🦽‍➡️, 🇲🇶
    • 15.0: 🩷, 🫸🏼, 🐦‍⬛
    • 14.0: 🫠, 🫱🏼‍🫲🏿, 🫰🏽
    • 13.1: 😶‍🌫️, 🧔🏻‍♀️, 🧑🏿‍❤️‍🧑🏾
    • 13.0: 🥲, 🥷🏿, 🐻‍❄️
    • 12.1: 🧑🏻‍🦰, 🧑🏿‍🦯, 👩🏻‍🤝‍👩🏼
    • 12.0: 🦩, 🦻🏿, 👩🏼‍🤝‍👩🏻

Auswirkungen der automatischen EmojiCompat-Konfiguration

Das System wendet die Standardkonfiguration mit der Startup-Bibliothek EmojiCompatInitializer und DefaultEmojiCompatConfig an.

Nachdem die erste Aktivität in Ihrer App fortgesetzt wurde, wird das Laden der Emoji-Schriftart durch den Initialisierer geplant. Durch diese kurze Verzögerung kann Ihre App ihre ursprünglichen Inhalte ohne potenzielle Latenz aufgrund des Schriftartenladens in einem Hintergrundthread anzeigen.

DefaultEmojiCompatConfig sucht nach einem auf dem System installierten Anbieter für herunterladbare Schriftarten, der die EmojiCompat-Schnittstelle implementiert, z. B. Google Play-Dienste. Auf Geräten, die von Google Play-Diensten unterstützt werden, wird die Schriftart über die Google Play-Dienste geladen.

Der Initialisierer erstellt einen Hintergrundthread zum Laden der Emoji-Schriftart. Der Schriftart-Download kann bis zu 10 Sekunden dauern, bevor er das Zeitlimit überschreitet. Nachdem die Schriftart heruntergeladen wurde, dauert es etwa 150 Millisekunden, bis EmojiCompat in einem Hintergrundthread initialisiert wird.

Die Initialisierung von EmojiCompat wird verzögert, auch wenn Sie EmojiCompatInitializer deaktivieren. Wenn Sie EmojiCompat manuell konfigurieren, rufen Sie EmojiCompat.load() auf, nachdem der erste Bildschirm Ihrer App angezeigt wurde, um Konflikte im Hintergrund mit dem Laden des ersten Bildschirms zu vermeiden.

Nach dem Laden verwendet EmojiCompat etwa 300 KB RAM, um die Emoji-Metadaten zu speichern.