Funktionen und APIs – Übersicht

Android 15 bietet tolle neue Funktionen und APIs für Entwickler. In den folgenden Abschnitten werden diese Funktionen zusammengefasst, um Ihnen den Einstieg in die zugehörigen APIs zu erleichtern.

Eine detaillierte Liste der neuen, geänderten und entfernten APIs finden Sie im Bericht „API-Unterschiede“. Weitere Informationen zu neuen APIs finden Sie in der Android API-Referenz. Neue APIs sind zur besseren Sichtbarkeit hervorgehoben. Wenn du wissen möchtest, in welchen Bereichen sich Plattformänderungen auf deine Apps auswirken können, solltest du dir die Verhaltensänderungen, die sich auf Apps auswirken, wenn sie auf Android 15 ausgerichtet sind und die Verhaltensänderungen, die alle Apps unabhängig von targetSdkVersion betreffen, ansehen.

Kamera und Medien

Android 15 bietet eine Vielzahl von Funktionen, die die Kamera- und Mediennutzung verbessern und dir Zugriff auf Tools und Hardware bieten, um Creator dabei zu unterstützen, ihre Vision auf Android zum Leben zu erwecken.

Weitere Informationen zu den neuesten Funktionen und Entwicklerlösungen für Android-Medien und -Kameras finden Sie im Vortrag Moderne Android-Medien und Kameraerlebnisse erstellen von der Google I/O.

Booster für wenig Licht

Mit Android 15 wird die Optimierung bei wenig Licht eingeführt, ein neuer Modus für die automatische Belichtung, der sowohl für Kamera 2 als auch für die Kameraerweiterung für den Nachtmodus verfügbar ist. Mit der Funktion „Verstärkung bei wenig Licht“ wird die Belichtung des Vorschaustreams bei schwachem Licht angepasst. Dies unterscheidet sich von der Art und Weise, wie mit der Nachtmodus-Kameraerweiterung Standbilder erstellt werden, da der Nachtmodus eine Reihe von Fotos zu einem einzigen, verbesserten Bild kombiniert. Der Nachtmodus eignet sich zwar sehr gut zum Erstellen von Standbildern, er kann jedoch keinen fortlaufenden Stream von Frames erzeugen, die Optimierung bei wenig Licht hingegen schon. Dadurch ermöglicht die Optimierung bei wenig Licht neue Kamerafunktionen, z. B.:

  • Sie bieten eine optimierte Bildvorschau, damit Nutzer Bilder bei schlechten Lichtverhältnissen besser einordnen können.
  • QR-Codes bei wenig Licht scannen

Wenn Sie „Optimierung bei wenig Licht“ aktivieren, wird sie bei wenig Licht automatisch aktiviert und bei mehr Licht wieder ausgeschaltet.

Apps können bei schlechten Lichtverhältnissen aus dem Vorschaustream aufzeichnen, um ein helleres Video zu speichern.

Weitere Informationen finden Sie unter Verstärkung bei wenig Licht.

In-App-Kamerasteuerung

Android 15 adds a new extension for more control over the camera hardware and its algorithms on supported devices:

  • Advanced flash strength adjustments enabling precise control of flash intensity in both SINGLE and TORCH modes while capturing images.

HDR-Headroom-Steuerung

Unter Android 15 wird ein HDR-Toleranzbereich ausgewählt, der den zugrunde liegenden Gerätefunktionen und der Bittiefe des Panels entspricht. Bei Seiten mit vielen SDR-Inhalten, z. B. einer Messaging-App mit einer einzelnen HDR-Miniaturansicht, kann sich dieses Verhalten negativ auf die wahrgenommene Helligkeit der SDR-Inhalte auswirken. Unter Android 15 kannst du den HDR-Toleranzbereich mit setDesiredHdrHeadroom steuern, um ein ausgewogenes Verhältnis zwischen SDR- und HDR-Inhalten zu erreichen.

Die Helligkeit von SDR-UI-Elementen auf dem linken Bildschirm ist gleichmäßiger als die Helligkeit auf dem rechten Bildschirm. Dadurch werden mögliche Toleranzprobleme simuliert, wenn HDR- und SDR-Inhalte gemischt sind. Durch Anpassung des HDR-Toleranzraums erreichst du ein besseres Gleichgewicht zwischen SDR- und HDR-Inhalten.

Lautstärkeregelung

Mit Android 15 wird der Lautheitsstandard CTA-2075 unterstützt, damit Inkonsistenzen in der Audiowiedergabe vermieden werden und Nutzer die Lautstärke beim Wechseln zwischen Inhalten nicht ständig anpassen müssen. Das System nutzt bekannte Eigenschaften der Ausgabegeräte (Kopfhörer und Lautsprecher) zusammen mit den in AAC-Audioinhalten verfügbaren Lautstärkemetadaten, um die Audiolautstärke und die Dynamikverdichtung intelligent anzupassen.

Damit du diese Funktion aktivieren kannst, musst du dafür sorgen, dass Lautstärke-Metadaten in deinen AAC-Inhalten verfügbar sind, und aktivieren die Plattformfunktion in deiner App. Dazu instanziierst du ein LoudnessCodecController-Objekt, indem du seine create-Factory-Methode mit der Audiositzungs-ID aus der verknüpften AudioTrack aufrufst. Dadurch werden automatisch Audioupdates angewendet. Sie können eine OnLoudnessCodecUpdateListener übergeben, um Lautheitsparameter zu ändern oder zu filtern, bevor sie auf den MediaCodec angewendet werden.

// Media contains metadata of type MPEG_4 OR MPEG_D
val mediaCodec = …
val audioTrack = AudioTrack.Builder()
                                .setSessionId(sessionId)
                                .build()
...
// Create new loudness controller that applies the parameters to the MediaCodec
try {
   val lcController = LoudnessCodecController.create(mSessionId)
   // Starts applying audio updates for each added MediaCodec
}

AndroidX media3 ExoPlayer wird ebenfalls aktualisiert, um die LoudnessCodecController-APIs für eine nahtlose App-Integration zu verwenden.

Virtuelle MIDI 2.0-Geräte

Android 13 unterstützt jetzt die Verbindung mit MIDI 2.0-Geräten über USB, die über Universal MIDI Packets (UMP) kommunizieren. Android 15 dehnt die UMP-Unterstützung auf virtuelle MIDI-Apps aus. So können Kompositions-Apps Synthesizer-Apps als virtuelles MIDI 2.0-Gerät steuern, genau wie mit einem USB MIDI 2.0-Gerät.

Effizientere AV1-Software-Decodierung

Logo: dav1d

dav1d, der beliebte AV1-Softwaredecoder von VideoLAN, ist jetzt für Android-Geräte verfügbar, die keine AV1-Decodierung in Hardware unterstützen. dav1d ist bis zu 3-mal leistungsfähiger als der alte AV1-Softwaredecoder, sodass mehr Nutzer HD AV1 wiedergeben können, einschließlich einiger Geräte der unteren und mittleren Preisklasse.

Vorerst muss Ihre Anwendung die Verwendung von dav1d aktivieren, indem Sie sie mit dem Namen "c2.android.av1-dav1d.decoder" aufrufen. „dav1d“ wird bei einem nachfolgenden Update zum standardmäßigen AV1-Software-Decoder gemacht. Diese Unterstützung ist standardisiert und auf Android 11-Geräte zurückportiert, die Google Play-Systemupdates erhalten.

Produktivität der Entwicklungsteams und Tools

Während wir bei der Verbesserung Ihrer Produktivitätszentren vor allem auf Tools wie Android Studio, Jetpack Compose und die Android Jetpack-Bibliotheken konzentrieren, suchen wir immer nach Möglichkeiten, wie Sie Ihre Vorstellungen auf der Plattform leichter verwirklichen können.

OpenJDK 17-Updates

Unter Android 15 werden die Kernbibliotheken von Android fortlaufend aktualisiert, damit sie den Funktionen der neuesten OpenJDK-LTS-Releases entsprechen.

Die folgenden wichtigen Funktionen und Verbesserungen wurden eingeführt:

Diese APIs werden auf über einer Milliarde Geräten mit Android 12 (API-Level 31) und höher über Google Play-Systemupdates aktualisiert, damit du die neuesten Programmierfunktionen nutzen kannst.

PDF-Verbesserungen

Android 15 enthält wesentliche Verbesserungen an den PdfRenderer APIs. Apps können erweiterte Funktionen wie das Rendern von passwortgeschützten Dateien, Anmerkungen, Formularbearbeitung, Suche und Auswahl mit Kopie enthalten. Linearisierte PDF-Optimierungen werden unterstützt, um die lokale PDF-Anzeige zu beschleunigen und die Ressourcennutzung zu reduzieren.

Die neuesten Updates beim PDF-Rendering umfassen Funktionen wie die Suche in eingebetteten PDF-Dateien.

PdfRenderer wurde in ein Modul verschoben, das unabhängig vom Plattform-Release mithilfe von Google Play-Systemupdates aktualisiert werden kann. Wir unterstützen diese Änderungen wieder auf Android 11 (API-Level 30) und erstellen eine kompatible Version der API-Oberfläche vor Android 15 namens PdfRendererPreV.

Wir schätzen Ihr Feedback zu den Verbesserungen, die wir an der PdfRenderer-API-Oberfläche vorgenommen haben, und planen, die Integration dieser APIs in Ihre App mit einer zukünftigen Android Jetpack-Bibliothek noch weiter zu vereinfachen.

Optimierungen für den automatischen Sprachwechsel

Android 14 added on-device, multi-language recognition in audio with automatic switching between languages, but this can cause words to get dropped, especially when languages switch with less of a pause between the two utterances. Android 15 adds additional controls to help apps tune this switching to their use case. EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS confines the automatic switching to the beginning of the audio session, while EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES deactivates the language switching after a defined number of switches. These options are particularly useful if you expect that there will be a single language spoken during the session that should be autodetected.

Verbesserte OpenType Variable Font API

In Android 15 wurde die Nutzerfreundlichkeit der Schriftart der OpenType-Variablen verbessert. Sie können jetzt eine FontFamily-Instanz aus einer variablen Schriftart erstellen, ohne mit der buildVariableFamily API Gewichtachsen anzugeben. Der Text-Renderer überschreibt den Wert der wght-Achse, um ihn an den angezeigten Text anzupassen.

Mit der neuen API wird der Code zum Erstellen einer Typeface erheblich vereinfacht:

Kotlin

val newTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build()

Java

Typeface newTypeface = Typeface.CustomFallbackBuilder(
            new FontFamily.Builder(
                new Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build();

Früher hätten Sie viel mehr Code benötigt, um dasselbe Typeface-Objekt zu erstellen:

Kotlin

val oldTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf")
                    .setFontVariationSettings("'wght' 400")
                    .setWeight(400)
                    .build())
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 100")
                        .setWeight(100)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 200")
                        .setWeight(200)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 300")
                        .setWeight(300)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 500")
                        .setWeight(500)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 600")
                        .setWeight(600)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 700")
                        .setWeight(700)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 800")
                        .setWeight(800)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 900")
                        .setWeight(900)
                        .build()
                ).build()
        ).build()

Java

Typeface oldTypeface = new Typeface.CustomFallbackBuilder(
    new FontFamily.Builder(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 400")
            .setWeight(400)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 100")
            .setWeight(100)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 200")
            .setWeight(200)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 300")
            .setWeight(300)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 500")
            .setWeight(500)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 600")
            .setWeight(600)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 700")
            .setWeight(700)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 800")
            .setWeight(800)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 900")
            .setWeight(900)
            .build()
    )
    .build()
).build();

Hier ein Beispiel dafür, wie ein Typeface, der mit der alten und der neuen API erstellt wurde, gerendert wird:

Beispiel für den Unterschied zwischen dem Schriftbildrendering bei Verwendung neuer und alter APIs

In diesem Beispiel hat die mit der alten API erstellte Typeface nicht die Möglichkeit, genaue Schriftstärken für die Font-Instanzen mit 350, 450, 550 und 650 zu erstellen. Daher greift der Renderer auf die nächsthöhere Gewichtung zurück. In diesem Fall wird also 300 statt 350, 400 statt 450 gerendert und so weiter. Im Gegensatz dazu wird bei dem mit den neuen APIs erstellten Typeface dynamisch eine Font-Instanz für eine bestimmte Gewichtung erstellt, sodass auch die genauen Gewichtungen für 350, 450, 550 und 650 gerendert werden.

Detaillierte Steuerung für Zeilenumbrüche

Ab Android 15 können ein TextView und der zugrunde liegende Zeilenumbruch einen bestimmten Teil des Textes in derselben Zeile beibehalten, um die Lesbarkeit zu verbessern. Sie können diese Anpassung des Zeilenumbruchs mithilfe des Tags <nobreak> in Stringressourcen oder in createNoBreakSpan nutzen. Ebenso können Sie mit dem <nohyphen>-Tag oder createNoHyphenationSpan Wörter aus Bindestrichen beibehalten.

Die folgende Stringressource enthält beispielsweise keinen Zeilenumbruch und wird mit dem Text „Pixel 8 Pro.“ gerendert, der an einer unerwünschten Stelle unterbrochen wird:

<resources>
    <string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>

Im Gegensatz dazu enthält diese Stringressource das Tag <nobreak>, das die Wortgruppe „Pixel 8 Pro“ umschließt und Zeilenumbrüche verhindert:

<resources>
    <string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>

Der Unterschied in der Darstellung dieser Strings wird in den folgenden Bildern dargestellt:

Layout für eine Textzeile, in der die Wortgruppe „Pixel 8 Pro.“ nicht mit einem <nobreak>-Tag umgebrochen ist.
Layout für dieselbe Textzeile, in die die Wortgruppe „Pixel 8 Pro.“ mit einem <nobreak>-Tag umgebrochen ist.

App-Archivierung

Android und Google Play haben letztes Jahr die Unterstützung der App-Archivierung angekündigt. Damit können Nutzer Speicherplatz freigeben, indem sie selten verwendete Apps, die mit Android App Bundle bei Google Play veröffentlicht wurden, teilweise vom Gerät entfernen. Android 15 unterstützt jetzt das Archivieren und Dearchivieren von Apps auf Betriebssystemebene, was die Implementierung für alle App-Shops vereinfacht.

Apps mit der Berechtigung REQUEST_DELETE_PACKAGES können die Methode PackageInstaller requestArchive aufrufen, um die Archivierung eines installierten App-Pakets anzufordern. Dadurch werden das APK und alle im Cache gespeicherten Dateien entfernt, aber die Nutzerdaten bleiben erhalten. Archivierte Apps werden über die LauncherApps APIs als anzeigbare Apps zurückgegeben. Nutzer sehen eine UI, die darauf hinweist, dass diese Apps archiviert wurden. Wenn ein Nutzer auf eine archivierte Anwendung tippt, erhält das zuständige Installationsprogramm eine Anfrage zum Wieder aktivieren und der Wiederherstellungsprozess kann mit dem ACTION_PACKAGE_ADDED-Broadcast überwacht werden.

Grafik

Android 15 bietet die neuesten Grafikverbesserungen, einschließlich ANGLE und Ergänzungen des Canvas-Grafiksystems.

GPU-Zugriff von Android modernisieren

Logo: Vulkan

Die Android-Hardware hat sich seit den Anfängen stark weiterentwickelt, als das Kernbetriebssystem auf einer einzigen CPU ausgeführt wurde und auf GPUs über APIs basierend auf Pipelines mit fester Funktion zugegriffen wurde. Die Vulkan® Graphics API ist im NDK seit Android 7.0 (API-Level 24) mit einer Abstraktion auf niedrigerer Ebene verfügbar, die moderne GPU-Hardware besser widerspiegelt, besser skaliert werden kann, um mehrere CPU-Kerne zu unterstützen, und einen geringeren CPU-Treiberaufwand bietet, was zu einer verbesserten App-Leistung führt. Vulkan wird von allen modernen Spiel-Engines unterstützt.

Vulkan ist die von Android bevorzugte Schnittstelle zur GPU. Daher enthält Android 15 ANGLE als optionale Ebene zum Ausführen von OpenGL® ES auf Vulkan. Durch den Wechsel zu ANGLE wird die Android OpenGL-Implementierung standardisiert, um die Kompatibilität und in einigen Fällen auch die Leistung zu verbessern. Sie können die Stabilität und Leistung Ihrer OpenGL ES-App mit ANGLE testen. Aktivieren Sie dazu unter Android 15 die Entwickleroption unter Einstellungen -> System -> Entwickleroptionen -> Experimentell: ANGLE aktivieren.

Die Roadmap „Android ANGLE“ auf Vulkan

Roadmap der bevorstehenden Änderungen bei den Android GPU APIs

Im Rahmen der Optimierung unseres GPU-Stacks werden wir in Zukunft ANGLE als GL-Systemtreiber auf weiteren neuen Geräten veröffentlichen. Wir gehen davon aus, dass OpenGL/ES künftig nur über ANGLE verfügbar sein wird. Die Unterstützung von OpenGL ES auf allen Geräten wird jedoch fortgesetzt.

Empfohlene nächste Schritte

Wählen Sie in den Entwickleroptionen den ANGLE-Treiber für OpenGL ES aus und testen Sie Ihre App. Bei neuen Projekten empfehlen wir Ihnen dringend, Vulkan für C/C++ zu verwenden.

Verbesserungen für Canvas

Android 15 continues our modernization of Android's Canvas graphics system with new capabilities:

  • Matrix44 provides a 4x4 matrix for transforming coordinates that should be used when you want to manipulate the canvas in 3D.
  • clipShader intersects the current clip with the specified shader, while clipOutShader sets the clip to the difference of the current clip and the shader, each treating the shader as an alpha mask. This supports the drawing of complex shapes efficiently.

Leistung und Akku

Android unterstützt dich weiterhin dabei, die Leistung und Qualität deiner Apps zu verbessern. Mit Android 15 werden neue APIs eingeführt, die dir dabei helfen, Aufgaben in deiner App effizienter auszuführen, die App-Leistung zu optimieren und Statistiken zu deinen Apps zu erfassen.

Best Practices für den Akkuverbrauch, Tipps zur Fehlerbehebung beim Netzwerk und zur Stromnutzung sowie Details dazu, wie wir die Effizienz der Hintergrundarbeit unter Android 15 und neueren Android-Versionen verbessern, finden Sie im Talk der Google I/O zur Optimierung der Akkueffizienz bei Hintergrundarbeiten unter Android.

ApplicationStartInfo-API

In früheren Android-Versionen war das Start-up von Apps eher ein Rätsel. Es war schwierig, in Ihrer App festzustellen, ob sie aus einem kalten, warmen oder heißen Zustand gestartet wurde. Es war auch schwierig zu wissen, wie lange Ihre App in den verschiedenen Startphasen verbracht hat: Verzweigen des Prozesses, Aufrufen von onCreate, Zeichnen des ersten Frames usw. Als die Application-Klasse instanziiert wurde, konnten Sie nicht wissen, ob die Anwendung über einen Broadcast, einen Contentanbieter, einen Job, eine Sicherung, den Boot-Abschluss, einen Alarm oder eine Activity gestartet wurde.

Die ApplicationStartInfo API unter Android 15 bietet all das und noch mehr. Sie können sogar eigene Zeitstempel in den Ablauf einfügen, um Zeitdaten an einem Ort zu erfassen. Zusätzlich zum Erfassen von Messwerten können Sie ApplicationStartInfo verwenden, um den Anwendungsstart direkt zu optimieren. So können Sie beispielsweise die kostspielige Instanziierung von UI-bezogenen Bibliotheken in Ihrer Application-Klasse beim Start Ihrer Anwendung aufgrund einer Übertragung vermeiden.

Detaillierte Informationen zur App-Größe

Since Android 8.0 (API level 26), Android has included the StorageStats.getAppBytes API that summarizes the installed size of an app as a single number of bytes, which is a sum of the APK size, the size of files extracted from the APK, and files that were generated on the device such as ahead-of-time (AOT) compiled code. This number is not very insightful in terms of how your app is using storage.

Android 15 adds the StorageStats.getAppBytesByDataType([type]) API, which lets you get insight into how your app is using up all that space, including APK file splits, AOT and speedup related code, dex metadata, libraries, and guided profiles.

Von der Anwendung verwaltete Profilerstellung

Android 15 includes the all-new ProfilingManager class, which lets you collect profiling information from within your app. We're planning to wrap this with an Android Jetpack API that will simplify construction of profiling requests, but the core API will allow the collection of heap dumps, heap profiles, stack sampling, and more. It provides a callback to your app with a supplied tag to identify the output file, which is delivered to your app's files directory. The API does rate limiting to minimize the performance impact.

Verbesserungen der SQLite-Datenbank

Mit Android 15 werden neue SQLite APIs eingeführt, die erweiterte Features der zugrunde liegenden SQLite-Engine zur Verfügung stellen, die auf bestimmte Leistungsprobleme abzielen, die in Apps auftreten können.

Entwickler sollten sich die Best Practices für die SQLite-Leistung ansehen, um ihre SQLite-Datenbank optimal zu nutzen, insbesondere wenn Sie mit großen Datenbanken arbeiten oder latenzempfindliche Abfragen ausführen.

  • Schreibgeschützte verzögerte Transaktionen: Wenn Sie schreibgeschützte Transaktionen ausgeben (ohne Schreibanweisungen), verwenden Sie beginTransactionReadOnly() und beginTransactionWithListenerReadOnly(SQLiteTransactionListener), um schreibgeschützte DEFERRED-Transaktionen auszugeben. Solche Transaktionen können gleichzeitig ausgeführt werden. Wenn sich die Datenbank im WAL-Modus befindet, können sie gleichzeitig mit IMMEDIATE- oder EXCLUSIVE-Transaktionen ausgeführt werden.
  • Zeilenanzahl und -IDs: Es wurden neue APIs hinzugefügt, um die Anzahl der geänderten Zeilen oder die zuletzt eingefügte Zeilen-ID abzurufen, ohne eine zusätzliche Abfrage auszuführen. getLastChangedRowCount() gibt die Anzahl der Zeilen zurück, die mit der letzten SQL-Anweisung in der aktuellen Transaktion eingefügt, aktualisiert oder gelöscht wurden. getTotalChangedRowCount() gibt die Anzahl der aktuellen Verbindung zurück. getLastInsertRowId() gibt den rowid der letzten Zeile zurück, die bei der aktuellen Verbindung eingefügt werden soll.
  • Rohanweisungen: Sie geben eine unbearbeitete SQlite-Anweisung aus und vermeiden dabei Convenience-Wrapper und zusätzlichen Verarbeitungsaufwand.

Updates des Dynamic Performance Framework von Android

Android 15 continues our investment in the Android Dynamic Performance Framework (ADPF), a set of APIs that allow games and performance intensive apps to interact more directly with power and thermal systems of Android devices. On supported devices, Android 15 will add new ADPF capabilities:

  • A power-efficiency mode for hint sessions to indicate that their associated threads should prefer power saving over performance, great for long-running background workloads.
  • GPU and CPU work durations can both be reported in hint sessions, allowing the system to adjust CPU and GPU frequencies together to best meet workload demands.
  • Thermal headroom thresholds to interpret possible thermal throttling status based on headroom prediction.

To learn more about how to use ADPF in your apps and games, head over to the documentation.

Datenschutz

Android 15 bietet eine Vielzahl von Funktionen, mit denen App-Entwickler die Privatsphäre der Nutzer schützen können.

Erkennung von Bildschirmaufzeichnungen

Unter Android 15 werden Apps unterstützt, die erkennen, dass sie aufgezeichnet werden. Ein Callback wird immer dann ausgelöst, wenn die App innerhalb einer Bildschirmaufzeichnung den Status „Sichtbar“ oder „Unsichtbar“ wechselt. Eine Anwendung gilt als sichtbar, wenn Aktivitäten aufgezeichnet werden, die der UID des Registrierungsprozesses gehören. So können Sie den Nutzer informieren, wenn Ihre Anwendung einen sensiblen Vorgang ausführt, wenn dieser aufgezeichnet wird.

val mCallback = Consumer<Int> { state ->
  if (state == SCREEN_RECORDING_STATE_VISIBLE) {
    // We're being recorded
  } else {
    // We're not being recorded
  }
}

override fun onStart() {
   super.onStart()
   val initialState =
      windowManager.addScreenRecordingCallback(mainExecutor, mCallback)
   mCallback.accept(initialState)
}

override fun onStop() {
    super.onStop()
    windowManager.removeScreenRecordingCallback(mCallback)
}

Erweiterte IntentFilter-Funktionen

Android 15 unterstützt eine präzisere Intent-Auflösung über UriRelativeFilterGroup. Es enthält eine Reihe von UriRelativeFilter-Objekten, die eine Reihe von Intent-Abgleichregeln bilden, die jeweils erfüllt sein müssen. Dazu gehören URL-Suchparameter, URL-Fragmente sowie Blockier- oder Ausschlussregeln.

Diese Regeln können in der XML-Datei AndroidManifest mit dem neuen <uri-relative-filter-group>-Tag definiert werden, das optional ein android:allow-Tag enthalten kann. Diese Tags können <data>-Tags enthalten, die vorhandene Daten-Tag-Attribute sowie die neuen Attribute android:query und android:fragment verwenden.

Hier ein Beispiel für die AndroidManifest-Syntax:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="http" />
  <data android:scheme="https" />
  <data android:domain="astore.com" />
  <uri-relative-filter-group>
    <data android:pathPrefix="/auth" />
    <data android:query="region=na" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:query="mobileoptout=true" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:fragmentPrefix="faq" />
  </uri-relative-filter-group>
</intent-filter>

Vertrauliches Profil

Der private Bereich kann entsperrt und gesperrt werden, um sensible Apps auf einem Gerät ein- oder auszublenden.

Im privaten Bereich können Nutzer einen separaten Bereich auf ihrem Gerät erstellen, in dem sie vertrauliche Apps vor neugierigen Blicken schützen können – im Rahmen einer zusätzlichen Authentifizierung. Im privaten Bereich wird ein separates Nutzerprofil verwendet. Wenn ein Nutzer den privaten Bereich sperrt, wird das Profil pausiert und alle Apps im privaten Bereich sind nicht mehr aktiv. Der Nutzer kann die Gerätesperre oder einen separaten Sperrfaktor für den privaten Bereich verwenden.

Apps im privaten Bereich werden in einem separaten Container im Launcher angezeigt und sind in der Ansicht „Zuletzt verwendet“, in Benachrichtigungen, in den Einstellungen und in anderen Apps ausgeblendet, wenn der private Bereich gesperrt ist. Von Nutzern erstellte und heruntergeladene Inhalte (z. B. Medien oder Dateien) und Konten werden zwischen dem privaten Bereich und dem Hauptbereich getrennt. Mit dem Sharesheet des Systems und der Bildauswahl können Apps bereichsübergreifend Zugriff auf Inhalte gewähren, wenn der private Bereich entsperrt ist.

Wir empfehlen Ihnen, Ihre App im privaten Bereich zu testen, um zu prüfen, ob sie wie erwartet funktioniert. Das gilt insbesondere, wenn Ihre App in eine der folgenden Kategorien fällt:

Letzte Nutzerauswahl für den Zugriff auf ausgewählte Fotos abfragen

Wenn der Teilzugriff auf Medienberechtigungen gewährt wurde, ist es jetzt möglich, dass Apps nur die zuletzt ausgewählten Fotos und Videos hervorheben. Diese Funktion kann die Nutzerfreundlichkeit für Apps verbessern, die häufig Zugriff auf Fotos und Videos anfordern. Wenn Sie dieses Feature in Ihrer Anwendung verwenden möchten, aktivieren Sie beim Abfragen von MediaStore über ContentResolver das Argument QUERY_ARG_LATEST_SELECTION_ONLY.

Kotlin

val externalContentUri = MediaStore.Files.getContentUri("external")

val mediaColumns = arrayOf(
   FileColumns._ID,
   FileColumns.DISPLAY_NAME,
   FileColumns.MIME_TYPE,
)

val queryArgs = bundleOf(
   // Return only items from the last selection (selected photos access)
   QUERY_ARG_LATEST_SELECTION_ONLY to true,
   // Sort returned items chronologically based on when they were added to the device's storage
   QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC",
   QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?",
   QUERY_ARG_SQL_SELECTION_ARGS to arrayOf(
       FileColumns.MEDIA_TYPE_IMAGE.toString(),
       FileColumns.MEDIA_TYPE_VIDEO.toString()
   )
)

Java

Uri externalContentUri = MediaStore.Files.getContentUri("external");

String[] mediaColumns = {
    FileColumns._ID,
    FileColumns.DISPLAY_NAME,
    FileColumns.MIME_TYPE
};

Bundle queryArgs = new Bundle();
queryArgs.putBoolean(MediaStore.QUERY_ARG_LATEST_SELECTION_ONLY, true);
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SORT_ORDER, FileColumns.DATE_ADDED + " DESC");
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SELECTION, FileColumns.MEDIA_TYPE + " = ? OR " + FileColumns.MEDIA_TYPE + " = ?");
queryArgs.putStringArray(MediaStore.QUERY_ARG_SQL_SELECTION_ARGS, new String[] {
    String.valueOf(FileColumns.MEDIA_TYPE_IMAGE),
    String.valueOf(FileColumns.MEDIA_TYPE_VIDEO)
});

Privacy Sandbox für Android

Android 15 enthält die neuesten Erweiterungen für Android-Anzeigendienste sowie die neueste Version der Privacy Sandbox für Android. Diese Ergänzung ist Teil unserer Bemühungen, neue Technologien zu entwickeln, die den Datenschutz für Nutzer verbessern und effektive, personalisierte Anzeigen für mobile Apps ermöglichen. Auf unserer Privacy Sandbox-Seite finden Sie weitere Informationen zur Privacy Sandbox für Entwicklervorschauen und Betaprogrammen für Android, um Ihnen den Einstieg zu erleichtern.

Health Connect

Android 15 enthält die neuesten Erweiterungen rund um Health Connect by Android, eine sichere und zentrale Plattform zum Verwalten und Freigeben von von Apps erhobenen Gesundheits- und Fitnessdaten. Dieses Update unterstützt neue Datentypen für Fitness, Ernährung, Hauttemperatur, Trainingspläne und mehr.

Die Erfassung der Hauttemperatur ermöglicht es Nutzern, genauere Temperaturdaten von einem Wearable oder einem anderen Tracking-Gerät zu speichern und zu teilen.

Trainingspläne sind strukturierte Trainingspläne, die einem Nutzer helfen, seine Fitnessziele zu erreichen. Die Unterstützung für Trainingspläne umfasst eine Vielzahl von Abschluss- und Leistungszielen:

Weitere Informationen zu den neuesten Updates für Health Connect in Android findest du im Vortrag Building anpassbare Experiences with Android Health von der Google I/O.

Teilfreigabe des Bildschirms

Unter Android 15 wird die Teilfreigabe des Bildschirms unterstützt. Nutzer können also statt des gesamten Gerätebildschirms nur ein App-Fenster teilen oder aufzeichnen. Diese Funktion, die erstmals in Android 14 QPR2 aktiviert wurde, enthält MediaProjection-Callbacks, mit denen deine App die Teilbildschirmfreigabe anpassen kann. Hinweis: Für Apps, die auf Android 14 (API-Level 34) oder höher ausgerichtet sind, ist jetzt für jede MediaProjection-Erfassungssitzung eine Nutzereinwilligung erforderlich.

Nutzererfahrung und System-UI

Android 15 bietet App-Entwicklern und Nutzern mehr Kontrolle und Flexibilität bei der Konfiguration ihres Geräts an ihre Anforderungen.

Weitere Informationen dazu, wie Sie mithilfe der neuesten Verbesserungen in Android 15 die Nutzerfreundlichkeit Ihrer App verbessern können, finden Sie im Vortrag zur Verbesserung der Nutzerfreundlichkeit Ihrer Android-App von der Google I/O.

Umfassendere Widget-Vorschauen mit der Generated Previews API

Vor Android 15 bestand die einzige Möglichkeit zur Bereitstellung von Vorschauen für die Widget-Auswahl darin, eine statische Bild- oder Layoutressource anzugeben. Diese Vorschauen unterscheiden sich häufig deutlich vom Aussehen des eigentlichen Widgets, wenn es auf dem Startbildschirm platziert wird. Außerdem können mit Jetpack Glance keine statischen Ressourcen erstellt werden. Daher musste ein Glance-Entwickler einen Screenshot von seinem Widget erstellen oder ein XML-Layout erstellen, um eine Widgetvorschau zu erhalten.

Unter Android 15 werden generierte Vorschauen unterstützt. Anbieter von App-Widgets können also RemoteViews generieren und als Auswahlvorschau anstelle einer statischen Ressource verwenden.

Apps können der Widget-Auswahl Remote-Ansichten zur Verfügung stellen, damit sie den Inhalt in der Auswahl so aktualisieren können, dass er dem Nutzer besser entspricht.

Push-API

Apps können generierte Vorschauen über eine Push API bereitstellen. Anwendungen können jederzeit in ihrem Lebenszyklus Vorschauen bereitstellen. Sie erhalten keine explizite Anfrage vom Host, eine Vorschau bereitzustellen. Vorschauen werden in AppWidgetService beibehalten und können von Hosts bei Bedarf angefordert werden. Im folgenden Beispiel wird eine XML-Widget-Layoutressource geladen und als Vorschau festgelegt:

AppWidgetManager.getInstance(appContext).setWidgetPreview(
   ComponentName(
       appContext,
       SociaLiteAppWidgetReceiver::class.java
   ),
   AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
   RemoteViews("com.example", R.layout.widget_preview)
)

Der erwartete Ablauf lautet:

  1. Der Widget-Anbieter ruft jederzeit setWidgetPreview auf. Die bereitgestellten Vorschauen werden zusammen mit anderen Anbieterinformationen in AppWidgetService beibehalten.
  2. setWidgetPreview benachrichtigt Hosts über den AppWidgetHost.onProvidersChanged-Callback über eine aktualisierte Vorschau. Daraufhin werden vom Widget-Host alle Anbieterinformationen neu geladen.
  3. Beim Anzeigen einer Widgetvorschau prüft der Host AppWidgetProviderInfo.generatedPreviewCategories. Wenn die ausgewählte Kategorie verfügbar ist, ruft er AppWidgetManager.getWidgetPreview auf, um die gespeicherte Vorschau für diesen Anbieter zurückzugeben.

Wann Sie setWidgetPreview anrufen sollten

Da es keinen Callback für die Bereitstellung von Vorschauen gibt, können Apps jederzeit während der Ausführung Vorschauen senden. Wie oft die Vorschau aktualisiert wird, hängt vom Anwendungsfall des Widgets ab.

In der folgenden Liste werden die beiden Hauptkategorien von Anwendungsfällen für die Vorschau beschrieben:

  • Anbieter, die in der Widget-Vorschau echte Daten zeigen, z. B. personalisierte oder aktuelle Informationen. Diese Anbieter können die Vorschau festlegen, sobald sich der Nutzer angemeldet oder eine Erstkonfiguration in der App vorgenommen hat. Danach können sie eine regelmäßige Aufgabe einrichten, um die Vorschauen im gewünschten Rhythmus zu aktualisieren. Ein solcher Widget-Typ kann beispielsweise ein Foto-, Kalender-, Wetter- oder Nachrichten-Widget sein.
  • Anbieter, die statische Informationen in Vorschauen oder Quick-Action-Widgets anzeigen, aber keine Daten enthalten. Diese Anbieter können eine Vorschau beim ersten Start der App festlegen. Beispiele für diese Art von Widget sind ein Drive-Schnellaktionen-Widget oder ein Chrome-Verknüpfungs-Widget.

Einige Anbieter zeigen in der Hub-Modusauswahl möglicherweise eine statische Vorschau, aber echte Informationen in der Auswahl auf dem Startbildschirm. Diese Anbieter sollten die Richtlinien für beide Anwendungsfälle befolgen, um Vorschauen festzulegen.

Die Funktion „Bild im Bild“

Mit Android 15 wurden neue Änderungen für den Bild-im-Bild-Modus (BiB) eingeführt, die einen noch reibungsloseren Übergang beim Wechsel in den BiB-Modus ermöglichen. Dies ist vorteilhaft für Apps, bei denen UI-Elemente über der Haupt-UI, die in BiB eingefügt wird, eingeblendet werden.

Entwickler verwenden den onPictureInPictureModeChanged-Callback, um eine Logik zu definieren, die die Sichtbarkeit der eingeblendeten UI-Elemente ein-/ausschaltet. Dieser Callback wird ausgelöst, wenn die BiB-Animation zum Starten oder Beenden abgeschlossen ist. Ab Android 15 enthält die Klasse PictureInPictureUiState einen neuen Status.

Mit diesem neuen UI-Status beobachten Apps, die auf Android 15 ausgerichtet sind, den Activity#onPictureInPictureUiStateChanged-Callback, der mit isTransitioningToPip() aufgerufen wird, sobald die BiB-Animation beginnt. Es gibt viele UI-Elemente, die für die App im BiB-Modus nicht relevant sind, z. B. Ansichten oder Layout, die Informationen wie Vorschläge, kommende Videos, Bewertungen und Titel enthalten. Wenn die App in den BiB-Modus wechselt, verwende den onPictureInPictureUiStateChanged-Callback, um diese UI-Elemente auszublenden. Wenn die App vom BiB-Fenster in den Vollbildmodus wechselt, kannst du diese Elemente mit dem onPictureInPictureModeChanged-Callback einblenden, wie in den folgenden Beispielen gezeigt:

override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
        if (pipState.isTransitioningToPip()) {
          // Hide UI elements
        }
    }
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
        if (isInPictureInPictureMode) {
          // Unhide UI elements
        }
    }

Durch die Ein-/Aus-Schaltfläche, mit der irrelevante UI-Elemente (für ein BiB-Fenster) schnell sichtbar sind, lässt sich die BiB-Animation ohne Flimmern reibungsloser starten.

Verbesserte „Bitte nicht stören“-Regeln

AutomaticZenRule lets apps customize Attention Management (Do Not Disturb) rules and decide when to activate or deactivate them. Android 15 greatly enhances these rules with the goal of improving the user experience. The following enhancements are included:

  • Adding types to AutomaticZenRule, allowing the system to apply special treatment to some rules.
  • Adding an icon to AutomaticZenRule, helping to make the modes be more recognizable.
  • Adding a triggerDescription string to AutomaticZenRule that describes the conditions on which the rule should become active for the user.
  • Added ZenDeviceEffects to AutomaticZenRule, allowing rules to trigger things like grayscale display, night mode, or dimming the wallpaper.

VibrationEffect für Benachrichtigungskanäle festlegen

Android 15 unterstützt das Festlegen von starken Vibrationen für eingehende Benachrichtigungen nach Kanal mit NotificationChannel.setVibrationEffect. So können Nutzer zwischen verschiedenen Arten von Benachrichtigungen unterscheiden, ohne auf ihr Gerät sehen zu müssen.

Große Displays und Formfaktoren

Android 15 bietet deinen Apps die Möglichkeit, die Formfaktoren von Android, einschließlich großer Displays, umklappbarer und faltbarer Smartphones, optimal zu nutzen.

Verbessertes Multitasking auf großen Bildschirmen

Android 15 gives users better ways to multitask on large screen devices. For example, users can save their favorite split-screen app combinations for quick access and pin the taskbar on screen to quickly switch between apps. This means that making sure your app is adaptive is more important than ever.

Google I/O has sessions on Building adaptive Android apps and Building UI with the Material 3 adaptive library that can help, and our documentation has more to help you Design for large screens.

Unterstützung für das Cover

Deine App kann eine Eigenschaft deklarieren, die unter Android 15 verwendet wird, damit deine Application oder Activity auf kleinen Titelbildschirmen unterstützter umklappbarer Geräte angezeigt werden können. Diese Bildschirme sind zu klein, um als kompatible Ziele für die Ausführung von Android-Apps betrachtet zu werden, aber Ihre App kann diese unterstützen, sodass Ihre App an mehr Orten verfügbar ist.

Konnektivität

Unter Android 15 wird die Plattform aktualisiert, damit deine App Zugriff auf die neuesten Fortschritte in der Kommunikations- und drahtlosen Technologie erhält.

Satellitenunterstützung

Android 15 continues to extend platform support for satellite connectivity and includes some UI elements to ensure a consistent user experience across the satellite connectivity landscape.

Apps can use ServiceState.isUsingNonTerrestrialNetwork() to detect when a device is connected to a satellite, giving them more awareness of why full network services might be unavailable. Additionally, Android 15 provides support for SMS and MMS apps as well as preloaded RCS apps to use satellite connectivity for sending and receiving messages.

A notification appears when the device connects to a satellite.

Nahtlose NFC-Funktionen

Android 15 arbeitet daran, kontaktloses Bezahlen nahtloser und zuverlässiger zu gestalten und gleichzeitig das robuste NFC-App-Angebot von Android zu unterstützen. Auf unterstützten Geräten können Apps das NfcAdapter anfordern, um in den Beobachtungsmodus zu wechseln. In diesem Modus reagiert das Gerät auf NFC-Lesegeräte, reagiert aber nicht auf NFC-Lesegeräte und sendet die Objekte der NFC-Dienst-PollingFrame zur Verarbeitung. Die PollingFrame-Objekte können zur Authentifizierung vor der ersten Kommunikation mit dem NFC-Lesegerät verwendet werden. Dadurch ist in vielen Fällen eine Transaktion mit einmaligem Tippen möglich.

Darüber hinaus können Apps jetzt auf unterstützten Geräten einen Fingerabdruck registrieren, um über Aktivitäten von Abfrageschleifen informiert zu werden. Dies ermöglicht einen reibungslosen Betrieb mit mehreren NFC-fähigen Anwendungen.

Wallet-Rolle

Mit Android 15 wird eine neue Wallet-Rolle eingeführt, die eine engere Einbindung in die bevorzugte Wallet-App des Nutzers ermöglicht. Diese Rolle ersetzt die NFC-Standardeinstellung für kontaktloses Bezahlen. Nutzer können den Wallet-Rolleninhaber unter Einstellungen > Apps > Standard-Apps verwalten.

Die Rolle „Wallet“ wird beim Routing von NFC-Tippaktionen für AIDs verwendet, die in der Zahlungskategorie registriert sind. Eingaben werden immer an den Wallet-Rolleninhaber gesendet, es sei denn, eine andere App, die für dieselbe AID registriert ist, wird im Vordergrund ausgeführt.

Diese Rolle wird auch verwendet, um zu bestimmen, wo die Kachel für den Schnellzugriff für Wallet bei Aktivierung platziert werden soll. Wenn die Rolle auf „None“ festgelegt ist, ist die QuickAccess-Kachel nicht verfügbar und NFC-Tippaktionen für Zahlungskategorien werden nur an die Vordergrund-App gesendet.

Sicherheit

Mit Android 15 kannst du die Sicherheit deiner App verbessern, deine App-Daten schützen und Nutzern mehr Transparenz und Kontrolle über ihre Daten bieten. Im Vortrag Nutzersicherheit unter Android schützen von der Google I/O erfahren Sie mehr darüber, wie wir die Sicherheitsmaßnahmen für Nutzer verbessern und Ihre App vor neuen Bedrohungen schützen.

Schlüsselverwaltung für Ende-zu-Ende-Verschlüsselung

Wir führen E2eeContactKeysManager in Android 15 ein. Damit wird die Ende-zu-Ende-Verschlüsselung (E2EE) in Android-Apps durch die Bereitstellung einer API auf Betriebssystemebene für das Speichern kryptografischer öffentlicher Schlüssel ermöglicht.

E2eeContactKeysManager ist für die Einbindung in die Anwendung für Plattformkontakte konzipiert und bietet Nutzern eine zentrale Möglichkeit, die öffentlichen Schlüssel ihrer Kontakte zu verwalten und zu prüfen.

Berechtigungsprüfungen für Inhalts-URIs

Android 15 introduces a new set of APIs that perform permission checks on content URIs:

Bedienungshilfen

Android 15 bietet zusätzliche Funktionen, die die Barrierefreiheit für Nutzer verbessern.

Bessere Brailleschrift

Seit Android 15 unterstützt TalkBack nun Braillezeilen, die den HID-Standard sowohl über USB als auch über sicheres Bluetooth verwenden.

Dieser Standard ähnelt dem für Mäuse und Tastaturen. Er wird Android im Laufe der Zeit dabei helfen, eine breitere Palette von Braillezeilen zu unterstützen.

Lokalisierung

Android 15 bietet Funktionen, die die Nutzerfreundlichkeit ergänzen, wenn ein Gerät in verschiedenen Sprachen verwendet wird.

Schriftart für CJK-Variablen

Ab Android 15 ist NotoSansCJK die Schriftartdatei für Chinesisch, Japanisch und Koreanisch (CJK) als variable Schriftart. Variable Schriftarten eröffnen neue Möglichkeiten für die Creative-Typografie in CJK-Sprachen. Designschaffende können ein breiteres Spektrum an Stilen ausprobieren und optisch ansprechende Layouts erstellen, die zuvor schwer oder unmöglich zu erreichen waren.

Wie die Variablenschrift für die Sprachen Chinesisch, Japanisch und Koreanisch (CJK) mit unterschiedlichen Schriftbreiten angezeigt wird.

Begründung zwischen den Zeichen

Starting with Android 15, text can be justified utilizing letter spacing by using JUSTIFICATION_MODE_INTER_CHARACTER. Inter-word justification was first introduced in Android 8.0 (API level 26), and inter-character justification provides similar capabilities for languages that use the whitespace character for segmentation, such as Chinese, Japanese, and others.

Layout for Japanese text using JUSTIFICATION_MODE_NONE.
Layout for English text using JUSTIFICATION_MODE_NONE.


Layout for Japanese text using JUSTIFICATION_MODE_INTER_WORD.
Layout for English text using JUSTIFICATION_MODE_INTER_WORD.


Layout for Japanese text using the new JUSTIFICATION_MODE_INTER_CHARACTER.
Layout for English text using the new JUSTIFICATION_MODE_INTER_CHARACTER.

Automatische Konfiguration von Zeilenumbrüchen

Ab Android 13 (API-Level 33) unterstützt Android nun auch textbasierte Zeilenumbrüche für Japanisch und Koreanisch. Wortgruppenbasierte Zeilenumbrüche verbessern zwar die Lesbarkeit kurzer Textzeilen, funktionieren aber nicht gut bei langen Textzeilen. In Android 15 können Apps jetzt mit der Option LINE_BREAK_WORD_STYLE_AUTO jetzt wortgruppenbasierte Zeilenumbrüche nur auf kurze Textzeilen anwenden. Mit dieser Option wird die beste Wortstiloption für den Text ausgewählt.

Für kurze Textzeilen werden sitzungsbasierte Zeilenumbrüche verwendet, die genauso wie LINE_BREAK_WORD_STYLE_PHRASE funktionieren, wie in der folgenden Abbildung gezeigt:

Bei kurzen Textzeilen werden in LINE_BREAK_WORD_STYLE_AUTO sitzungsspezifische Zeilenumbrüche angewendet, um die Lesbarkeit des Textes zu verbessern. Dies entspricht dem Anwenden von LINE_BREAK_WORD_STYLE_PHRASE.

Bei längeren Textzeilen verwendet LINE_BREAK_WORD_STYLE_AUTO einen Wortstil ohne Zeilenumbrüche und funktioniert genauso wie LINE_BREAK_WORD_STYLE_NONE, wie in der folgenden Abbildung gezeigt:

Bei langen Textzeilen wendet LINE_BREAK_WORD_STYLE_AUTO keinen Zeilenumbruchstil an, um die Lesbarkeit des Textes zu verbessern. Dies entspricht dem Anwenden von LINE_BREAK_WORD_STYLE_NONE.

Neue japanische Hentaigana-Schriftart

In Android 15 ist eine neue Schriftartdatei für das alte japanische Hiragana (Hentaigana) standardmäßig gebündelt. Die einzigartigen Formen der Hentaigana-Figuren können den Kunstwerken oder dem Design ein besonderes Flair verleihen und gleichzeitig dazu beitragen, die genaue Übertragung und das Verständnis antiker japanischer Dokumente zu bewahren.

Zeichen- und Textstil für die japanische Schriftart Hentaigana.

VideoLAN cone Copyright (c) 1996-2010 VideoLAN. Dieses Logo oder eine modifizierte Version dürfen von jeder Person verwendet oder modifiziert werden, um auf das VideoLAN-Projekt oder ein vom VideoLAN-Team entwickeltes Produkt zu verweisen. Dies bedeutet jedoch nicht, dass dies vom Projekt unterstützt wird.

Vulkan und das Vulkan-Logo sind eingetragene Marken von Khronos Group Inc.

OpenGL ist eine eingetragene Marke und das OpenGL ES-Logo ist eine Marke von Hewlett Packard Enterprise, die mit Genehmigung von Khronos verwendet wird.