Funktionen und APIs – Übersicht

Android 15 bietet 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 zu API-Unterschieden. Ausführliche Informationen zu den neuen APIs finden Sie in der Android API-Referenz. Die neuen APIs sind hervorgehoben dargestellt. Wenn du wissen möchtest, in welchen Bereichen sich Plattformänderungen auf deine Apps auswirken können, solltest du dir die Verhaltensänderungen von Android 15, 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 enthält eine Vielzahl von Funktionen, die die Kamera- und Mediennutzung verbessern und mit denen du Tools und Hardware nutzen kannst, um Creator dabei zu unterstützen, ihre Vision auf Android zu verwirklichen.

Weitere Informationen zu den neuesten Funktionen und Entwicklerlösungen für Android-Medien und -Kameras finden Sie im Vortrag Modern Android-Medien- und -Kameraerlebnisse auf 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.

Kamerasteuerung in der App

Unter Android 15 wird eine neue Erweiterung hinzugefügt, mit der Sie die Kamerahardware und ihre Algorithmen auf unterstützten Geräten besser steuern können:

  • Erweiterte Anpassungen der Blitzstärke ermöglichen eine präzise Steuerung der Blitzintensität im SINGLE- und TORCH-Modus während der Aufnahme.

HDR-Tonsteuerung

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 werden nun CTA-2075-Lautheitsstandard, der Ihnen hilft, Vermeiden Sie Inkonsistenzen bei der Audiolautstärke und stellen Sie sicher, dass Nutzer sich nicht ständig darum kümmern müssen, Lautstärke beim Wechsel zwischen Inhalten anpassen. Das System nutzt bekannte Eigenschaften der Ausgabegeräte (Kopfhörer und Lautsprecher) sowie Lautstärkemetadaten, die in AAC-Audioinhalten verfügbar sind, um die Lautstärke und die Komprimierungsebenen des dynamischen Bereichs intelligent anzupassen.

Wenn du diese Funktion aktivieren möchtest, müssen in deinen AAC-Inhalten Lautstärke-Metadaten verfügbar sein und die Plattformfunktion in deiner App aktiviert sein. Dazu erstellst du ein LoudnessCodecController-Objekt, indem du die create-Factorymethode mit der Audiositzungs-ID aus der zugehörigen AudioTrack aufrufst. Dadurch werden automatisch Audioupdates angewendet. Sie können eine OnLoudnessCodecUpdateListener zum Ändern oder Filtern lautheitsparameter, bevor sie auf den MediaCodec

// 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 für die Verwendung der LoudnessCodecController APIs für eine nahtlose Anwendungsintegration

Virtuelle MIDI 2.0-Geräte

Android 13 unterstützt jetzt die Verbindung mit MIDI-2.0-Geräte, die USB verwenden, die über USB kommunizieren Universal MIDI Packets (UMP). Android 15 erweitert UMP-Unterstützung auf virtuelles MIDI Apps, mit denen du durch Kompositions-Apps Synthesizer-Apps steuern kannst als virtuelles MIDI 2.0-Gerät, genau wie bei 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 und Tools für Entwickler

Wir arbeiten zwar vor allem daran, die Produktivitätszentren für Tools wie Android Studio, Jetpack Compose und die Android Jetpack-Bibliotheken zu optimieren, aber wir suchen immer nach Möglichkeiten in der Plattform, damit Sie Ihre Vision leichter verwirklichen können.

Updates zu OpenJDK 17

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.

Verbesserungen beim PDF

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.

Verfeinerungen des automatischen Sprachwechsels

Unter Android 14 wurde die mehrsprachige Spracherkennung auf dem Gerät mit automatischem Wechsel zwischen Sprachen hinzugefügt. Dies kann jedoch dazu führen, dass Wörter ausgelassen werden, insbesondere wenn Sprachen mit weniger Pausen zwischen den beiden Äußerungen wechseln. Android 15 bietet zusätzliche Steuerelemente, mit denen Apps diesen Wechsel auf ihren Anwendungsfall abstimmen können. EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS beschränkt den automatischen Wechsel bis zum Beginn der Audiositzung, während EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES den Sprachwechsel nach einer bestimmten Anzahl von Wechsel deaktiviert. Diese Optionen sind besonders nützlich, wenn Sie davon ausgehen, dass während der Sitzung eine einzelne Sprache gesprochen wird, die automatisch erkannt werden sollte.

Verbesserte OpenType Variable Font API

Android 15 verbessert die Nutzerfreundlichkeit der OpenType-Variablenschrift. Sie können jetzt eine FontFamily-Instanz aus einer Variablenschrift zu erstellen, ohne mit der buildVariableFamily API gewichten. Der Text-Renderer überschreibt Wert der wght-Achse, der dem angezeigten Text entspricht.

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

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();

Bisher war viel mehr Code erforderlich, um dieselbe Typeface 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 mit der alten und neuen API erstellt wurde Renderings:

Beispiel dafür, wie sich das Schriftbild-Rendering bei neuen und alten Schriftbildern unterscheidet
APIs

In diesem Beispiel hat der mit der alten API erstellte Typeface nicht die für die Schriftstärke 350, 450, 550 und 650 Font-Instanzen, sodass der Renderer auf die nächste Gewichtung zurückgreift. Also in In diesem Fall wird 300 statt 350, 400 statt 450 und so weiter. Im Gegensatz dazu erstellt die mit den neuen APIs erstellte Typeface dynamisch eine Font-Instanz für eine bestimmte Gewichtung, sodass genaue Gewichtungen für 350, 450, 550 und 650 an.

Detaillierte Steuerelemente für Zeilenumbrüche

Ab Android 15 werden ein TextView und die zugrunde liegende Mit dem Zeilenumbruch kann der gegebene Teil des Textes in derselben Zeile beibehalten werden, Lesbarkeit. Sie können diese Anpassungen für Zeilenumbrüche nutzen, indem Sie das Tag <nobreak> in Stringressourcen oder createNoBreakSpan Ebenso können Sie Wörter aus mit dem Tag <nohyphen> oder createNoHyphenationSpan

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

<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 den Wortgruppe „Pixel 8 Pro“. und verhindert Zeilenumbrüche:

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

Der Unterschied beim Rendern dieser Strings ist in den folgenden Bilder:

Layout für eine Textzeile mit dem Text „Pixel 8 Pro“. wird nicht mit einem <nobreak>-Tag umschlossen.
Layout für dieselbe Textzeile mit dem Text „Pixel 8 Pro“. wird mit einem <nobreak>-Tag umschlossen.

App-Archivierung

Android und Google Play haben angekündigt, dass die App-Archivierung zuletzt unterstützt wird. Jahr, sodass Nutzer Speicherplatz freigeben können, indem sie selten verwendete Apps auf dem Gerät, die über die Android-App veröffentlicht wurden Set bei Google Play. Android 15 unterstützt das Archivieren und Entarchivieren von Apps auf Betriebssystemebene. Dadurch lässt sich die Funktion in allen App-Shops einfacher implementieren.

Apps mit der Berechtigung REQUEST_DELETE_PACKAGES können die PackageInstaller requestArchive, um die Archivierung eines installiertes App-Paket entfernt, wodurch das APK und alle im Cache gespeicherten Dateien entfernt werden, Nutzerdaten. Archivierte Apps werden über die LauncherApps APIs als darstellbare Apps zurückgegeben. Nutzer sehen eine UI-Anzeige, die darauf hinweist, dass diese Apps archiviert sind. Wenn ein Nutzer auf eine archivierte App tippt, erhält eine Anfrage zum Wieder aktivieren und der Wiederherstellungsprozess kann die von der ACTION_PACKAGE_ADDED-Übertragung überwacht werden.

Grafik

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

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

Mit Android 15 wird die Modernisierung des Canvas-Grafiksystems von Android mit neuen Funktionen fortgesetzt:

  • Matrix44 bietet eine 4x4-Matrix zum Transformieren von Koordinaten, die für die Bearbeitung des Canvas in 3D verwendet werden sollten.
  • clipShader überschneidet den aktuellen Clip mit dem angegebenen Shader. clipOutShader legt den Clip auf die Differenz des aktuellen Clips und des Shaders fest. Jeder Shader behandelt den Shader als Alpha-Maske. Dadurch können komplexe Formen effizient gezeichnet werden.

Leistung und Akku

Android hilft dir weiterhin dabei, die Leistung und Qualität deiner Apps zu verbessern. Mit Android 15 werden neue APIs eingeführt, mit denen Aufgaben in Ihrer App effizienter ausgeführt, die App-Leistung optimiert und Informationen zu Ihren Apps gesammelt werden können.

Best Practices für den Akkuverbrauch, die Fehlerbehebung bei Netzwerk- und Stromverbrauch und Details dazu, wie wir die Akkueffizienz von Hintergrundaufgaben unter Android 15 und neueren Versionen von Android verbessern, finden Sie auf der Google I/O im Artikel Akkueffizienz der Hintergrundarbeit unter Android verbessern.

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

Seit Android 8.0 (API-Level 26) enthält Android die StorageStats.getAppBytes API, die die installierte Größe einer App als eine einzelne Bytezahl zusammenfasst. Dies ist die Summe aus der APK-Größe, der Größe der aus dem APK extrahierten Dateien und der auf dem Gerät generierten Dateien, z. B. kompilierter Vorab-Code (AOT). Diese Zahl ist nicht sehr aufschlussreich für die Speichernutzung Ihrer App.

Unter Android 15 wird die StorageStats.getAppBytesByDataType([type]) API hinzugefügt, mit der du Informationen darüber erhalten kannst, wie deine App den gesamten Speicherplatz nutzt, einschließlich APK-Dateiaufteilungen, AOT-Code und beschleunigtem Code, DEX-Metadaten, Bibliotheken und geführten Profilen.

Von Anwendungen verwaltete Profilerstellung

Android 15 enthält die Klasse ProfilingManager, mit der Sie Profiling-Informationen in Ihrer App erfassen können. Wir planen, diese in eine Android Jetpack API einzubinden, die die Erstellung von Profiling-Anfragen vereinfacht. Die Kern-API ermöglicht jedoch unter anderem die Erfassung von Heap-Dumps, Heap-Profilen und Stack-Stichproben. Sie bietet einen Rückruf an Ihre App mit einem bereitgestellten Tag zur Identifizierung der Ausgabedatei, die an die Dateien Ihrer App übergeben wird. -Verzeichnis. Die API begrenzt die Ratenbegrenzung, um die Auswirkungen auf die Leistung zu minimieren.

SQLite-Datenbankverbesserungen

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 für das Android Dynamic Performance Framework

Für Android 15 investieren wir weiterhin in das Android Dynamic Performance Framework (ADPF). Diese APIs ermöglichen eine direktere Interaktion von Spielen und leistungsintensiven Apps mit den Energie- und Wärmesystemen von Android-Geräten. Auf unterstützten Geräten werden mit Android 15 neue ADPF-Funktionen hinzugefügt:

  • Ein Energiesparmodus für Hinweissitzungen, der angibt, dass die zugehörigen Threads Energiesparen gegenüber Leistung vorziehen sollten. Dies eignet sich hervorragend für Hintergrundarbeitslasten mit langer Ausführungszeit.
  • Sowohl GPU- als auch CPU-Arbeitsdauer können in Hinweissitzungen gemeldet werden. Dadurch kann das System CPU- und GPU-Frequenzen gemeinsam anpassen, um die Arbeitslastanforderungen bestmöglich zu erfüllen.
  • Grenzwerte für den thermischen Toleranzbereich, um den Status einer Drosselung anhand der Vorhersage des Toleranzbereichs zu interpretieren.

Weitere Informationen zur Verwendung von ADPF in Ihren Apps und Spielen finden Sie in der Dokumentation.

Datenschutz

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

Bildschirmaufzeichnungserkennung

Android 15 unterstützt Apps, um zu erkennen, dass sie aufgezeichnet werden. Ein Callback wird immer dann aufgerufen, wenn die Anwendung wechselt ob sie innerhalb einer Bildschirmaufzeichnung sichtbar oder unsichtbar sind. Eine App ist als sichtbar gelten, wenn Aktivitäten, die zur UID des Registrierungsprozesses gehören, aufgezeichnet wird. Wenn Ihre App einen vertraulichen Vorgang ausführt, kann den Nutzer über die Aufzeichnung informieren.

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 genauere Intent-Auflösung durch UriRelativeFilterGroup mit einer Reihe von UriRelativeFilter-Objekte, die einen Satz von Intent bilden die jeweils erfüllt werden müssen, einschließlich URL-Suchparameter, URL- Fragmenten und Blockier- oder Ausschlüsse.

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

Hier ein Beispiel für die Syntax AndroidManifest:

<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

<ph type="x-smartling-placeholder">
</ph>
Der private Bereich kann zum Ein- oder Ausblenden entsperrt und gesperrt werden. sensible Apps auf einem Gerät.

Im privaten Bereich können Nutzer einen separaten Bereich auf ihrem Gerät erstellen, in dem sie Schützt sensible Apps vor neugierigen Blicken – Authentifizierung. Im privaten Bereich wird ein separates Nutzerprofil verwendet. Der Nutzer kann Sie können für den privaten Bereich die Gerätesperre oder einen separaten Sperrfaktor verwenden.

Apps im privaten Bereich werden in einem separaten Container im Launcher angezeigt. sind in der Ansicht „Letzte“, in den 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 zwischen dem privaten Bereich und dem im Hauptbereich. Das System-Sharesheet und das Mit der Bildauswahl können Apps Zugriff auf Inhalte gewähren in Projektbereichen, wenn der private Bereich entsperrt ist.

Nutzer können vorhandene Apps und ihre Daten nicht in den privaten Bereich verschieben. Stattdessen Nutzer wählen im privaten Bereich eine Installationsoption aus, um eine App über welchen App-Store sie bevorzugen. Apps im privaten Bereich werden installiert als separate Kopien von beliebigen Apps im Hauptbereich (neue Kopien derselben App)

Wenn ein Nutzer den privaten Bereich sperrt, wird das Profil beendet. Während das Profil wird beendet, sind Apps im privaten Bereich nicht mehr aktiv und können nicht mehr ausgeführt werden. Aktivitäten im Vordergrund und im Hintergrund, einschließlich der Anzeige von Benachrichtigungen.

Wir empfehlen, deine App im privaten Bereich zu testen, um sicherzustellen, dass deine App wie erwartet funktioniert, insbesondere wenn Ihre App in einen der folgenden Kategorien:

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

Apps können jetzt nur die zuletzt ausgewählten Fotos hervorheben und Videos, wenn der teilweise Zugriff auf Medienberechtigungen gewährt wird. Dieses kann die User Experience für Apps verbessern, die häufig auf Fotos und Videos zugreifen. Um diese Funktion in deiner App zu verwenden, aktiviere die Argument QUERY_ARG_LATEST_SELECTION_ONLY beim Abfragen von MediaStore bis ContentResolver.

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 integriert die neuesten Erweiterungen Health Connect by Android, eine sichere und zentrale Plattform zum Verwalten und Teilen von durch Apps erhobenen Gesundheits- und Fitnessdaten. Dieses Update Unterstützung weiterer Datentypen über Fitness, Ernährung, Hauttemperatur, Trainingspläne und mehr.

Mit dem Tracking der Hauttemperatur können Nutzer genauere Temperaturdaten von einem Wearable oder einem anderen Tracking-Gerät speichern und teilen.

Trainingspläne sind strukturierte Trainingspläne, die Nutzern helfen, ihre Fitnessziele zu erreichen. Trainingspläne unterstützen eine Vielzahl von Zielvorhaben für den Abschluss und die Leistung:

Weitere Informationen zu den neuesten Updates für Health Connect auf Android finden Sie im Vortrag Building adaptable experiences with Android Health (Adaptive Funktionen mit Android Health entwickeln) von der Google I/O.

Teilfreigabe des Bildschirms

Android 15 unterstützt die Teilfreigabe des Bildschirms. App-Fenster und nicht den gesamten Bildschirm. Diese Funktion wurde erstmals aktiviert in Android 14 QPR2, umfasst MediaProjection Callbacks, die deine App zulassen um die Teilfreigabe des Bildschirms anzupassen. Bei Apps, die auf Android 14 (API-Level 34) oder höher ausgerichtet sind, ist für jede MediaProjection-Aufnahmesitzung die Einwilligung des Nutzers erforderlich.

Nutzererfahrung und System-UI

Android 15 bietet App-Entwicklern und Nutzern mehr Kontrolle und Flexibilität bei der Konfiguration von Geräten, die ihren Anforderungen entsprechen.

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

Umfassendere Widget-Vorschauen mit der Generated Previews API

Vor Android 15 bestand die einzige Möglichkeit, Vorschauen für die Widget-Auswahl bereitzustellen, Eine statische Bild- oder Layoutressource Diese Vorschauen unterscheiden sich oft erheblich vom Erscheinungsbild des tatsächlichen 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 seines Widgets erstellen oder ein XML-Layout erstellen, um eine Widget-Vorschau zu erhalten.

Android 15 unterstützt jetzt generierte Vorschauen. Das bedeutet, dass App-Widget-Anbieter RemoteViews generieren können, um sie anstelle einer statischen Ressource als Auswahlvorschau zu verwenden.

Apps können der Widget-Auswahl Remote-Ansichten zur Verfügung stellen, um die Inhalte in der Auswahl so zu aktualisieren, dass sie repräsentativer für das sind, was der Nutzer sieht.

Push API

Apps können generierte Vorschauen über eine Push-API bereitstellen. Apps bieten und erhalten keine explizite Anfrage vom Host gesendet, um eine Vorschau anzuzeigen. Vorschauen werden in AppWidgetService gespeichert und können von den Gastgebern auf Anfrage abgerufen 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 sieht so aus:

  1. Der Widget-Anbieter ruft jederzeit setWidgetPreview auf. Die bereitgestellten Vorschauen werden zusammen mit anderen Anbieterinformationen in AppWidgetService gespeichert.
  2. setWidgetPreview benachrichtigt Hosts über eine aktualisierte Vorschau über das AppWidgetHost.onProvidersChanged-Rückruf. Daraufhin reagiert das Widget alle Anbieterinformationen neu lädt.
  3. Bei der Anzeige einer Widget-Vorschau prüft der Host AppWidgetProviderInfo.generatedPreviewCategories. Wenn das ausgewählte Element Kategorie verfügbar ist, ruft AppWidgetManager.getWidgetPreview an gibt die gespeicherte Vorschau für diesen Anbieter zurück.

Wann Sie setWidgetPreview anrufen sollten

Da es keinen Callback für die Vorschau gibt, können Apps wenn sie ausgeführt werden. 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 Vorschauen beschrieben:

  • Anbieter, die in ihrer Widget-Vorschau echte Daten anzeigen, z. B. personalisierte oder aktuelle Informationen. Diese Anbieter können die Vorschau einrichten, sobald der Nutzer angemeldet sind oder die Erstkonfiguration in der App vorgenommen hat. Danach werden sie können eine regelmäßige Aufgabe einrichten, um die Vorschauen im gewünschten Rhythmus zu aktualisieren. Beispiele für diese Art von Widget sind Foto-, Kalender-, Wetter- oder Nachrichten-Widgets.
  • Anbieter, die in Vorschau- oder Schnellaktions-Widgets statische Informationen anzeigen, die keine Daten enthalten. Diese Anbieter können die Vorschau einmal einrichten, App-Starts. Beispiele für diese Art von Widget sind Widget „Aktionen“ oder das Widget für Chrome-Verknüpfungen.

Einige Anbieter zeigen in der Auswahl für den Hub-Modus möglicherweise statische Vorschaubilder, aber in der Auswahl für den Startbildschirm echte Informationen an. Diese Anbieter müssen sich an die Richtlinien halten, für beide Anwendungsfälle, um eine Vorschau festzulegen.

Die Funktion „Bild im Bild“

Android 15 führt Änderungen bei Bild im Bild (BiB) ein, die eine einheitliche weichere Übergänge beim Wechsel in den BiB-Modus. Dies ist hilfreich für Apps mit UI-Elementen, die über der Hauptbenutzeroberfläche eingeblendet werden und in BiB einfügen

Entwickler verwenden den onPictureInPictureModeChanged-Callback, um Logik zu definieren die die Sichtbarkeit der eingeblendeten UI-Elemente ein-/ausschaltet. Dieser Callback ist wird ausgelöst, wenn die BiB-Animation zum Ein- oder Ausschalten abgeschlossen ist. Beginnt in Unter Android 15 enthält die Klasse PictureInPictureUiState einen weiteren Status.

Bei diesem UI-Status wird für Apps, die auf Android 15 (API-Level 35) ausgerichtet sind, die Activity#onPictureInPictureUiStateChanged-Callback wird aufgerufen mit isTransitioningToPip(), sobald die BiB-Animation beginnt. Es gibt viele UI-Elemente, die für die App im BiB-Modus nicht relevant sind, Beispielansichten oder Layouts, die Informationen wie Vorschläge, bevorstehende Videos, Bewertungen und Titel. Wenn die App in den BiB-Modus wechselt, verwende die onPictureInPictureUiStateChanged-Callback zum Ausblenden dieser UI-Elemente. Wenn der Parameter wenn die App vom BiB-Fenster in den Vollbildmodus wechselt, verwenden Sie onPictureInPictureModeChanged-Callback zum Einblenden dieser Elemente, wie in die folgenden Beispiele:

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

Diese Ein/Aus-Schaltfläche für die schnelle Sichtbarkeit irrelevanter UI-Elemente (für ein BiB-Fenster) hilft sorgen für eine flüssigere und flimmernde BiB-Animation.

Verbesserte „Bitte nicht stören“-Regeln

Mit AutomaticZenRule können Apps die Funktion „Aufmerksamkeitserkennung“ anpassen Verwaltungsregeln (Bitte nicht stören) und entscheiden, wann sie aktiviert oder deaktiviert werden . In Android 15 wurden diese Regeln erheblich erweitert, um die Nutzerfreundlichkeit zu verbessern. Die folgenden Verbesserungen sind enthalten:

  • AutomaticZenRule Typen hinzufügen, damit das System einige Regeln besonders behandeln kann.
  • AutomaticZenRule wurde ein Symbol hinzugefügt, damit die Modi besser erkennbar sind.
  • Durch Hinzufügen eines triggerDescription-Strings zu AutomaticZenRule, der Folgendes beschreibt: Bedingungen, unter denen die Regel für den Nutzer aktiviert werden soll.
  • Hinzugefügt ZenDeviceEffects auf AutomaticZenRule, sodass Regeln z. B. die Graustufe auslösen, Nachtmodus verwenden oder den Hintergrund dimmen.

VibrationEffect für Benachrichtigungskanäle festlegen

Android 15 unterstützt die Einstellung starker Vibrationen für eingehende Benachrichtigungen, indem mit NotificationChannel.setVibrationEffect, sodass können Ihre Nutzer zwischen verschiedenen Benachrichtigungstypen unterscheiden, ohne auf ihr Gerät schauen zu müssen.

Große Bildschirme und Formfaktoren

Android 15 bietet Ihren Apps die Möglichkeit, die Formfaktoren von Android, einschließlich großer Displays, klappbarer und faltbarer Geräte, optimal zu nutzen.

Verbessertes Multitasking auf großen Bildschirmen

Mit Android 15 können Nutzer auf Geräten mit großen Bildschirmen noch einfacher mehrere Dinge gleichzeitig erledigen. Für So können Nutzende ihre bevorzugten Kombinationen von Splitscreen-Apps speichern, Sie können auf die Taskleiste zugreifen und sie anpinnen, um schnell zwischen Apps zu wechseln. Das bedeutet, ist es wichtiger denn je, eine adaptive App zu entwickeln.

Auf der Google I/O gibt es Sitzungen zum Thema Entwicklung adaptiver Android- und Benutzeroberfläche mit Material 3 erstellen, adaptive Bibliothek das hilfreich sein kann. In unserer Dokumentation finden Sie weitere Informationen dazu, wie Sie Designs für große Unternehmen .

Unterstützung für Coverdisplay

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

Android 15 aktualisiert die Plattform, damit Ihre App auf die neuesten Fortschritte in den Bereichen Kommunikation und Funktechnologien zugreifen kann.

Satellitensupport

Android 15 erweitert die Plattformunterstützung für die Satellitenverbindung weiter und enthält einige UI-Elemente, die für eine einheitliche Nutzererfahrung bei der Satellitenverbindung sorgen.

Mit ServiceState.isUsingNonTerrestrialNetwork() können Apps erkennen, wenn ein Gerät mit einem Satelliten verbunden ist. So können sie besser nachvollziehen, warum vollständige Netzwerkdienste möglicherweise nicht verfügbar sind. Außerdem unterstützt Android 15 SMS- und MMS-Apps sowie vorinstallierte RCS-Apps, um die Satellitenverbindung zum Senden und Empfangen von Nachrichten zu nutzen.

Wenn das Gerät eine Verbindung zu einem Satelliten herstellt, wird eine Benachrichtigung angezeigt.

Reibungslosere NFC-Funktionen

Android 15 arbeitet daran, das kontaktlose Bezahlen nahtloser und zuverlässiger zu gestalten und gleichzeitig das robuste NFC-System von Android zu unterstützen. Auf unterstützten Geräten können Apps den NfcAdapter anfordern, in den Beobachtungsmodus zu wechseln. In diesem Modus werden die PollingFrame-Objekte des NFC-Dienstes der App zur Verarbeitung gesendet, wobei das Gerät zwar abhört, aber nicht auf die NFC-Lesegeräte reagiert. Die PollingFrame-Objekte können zur Authentifizierung vor der ersten Kommunikation mit dem NFC-Lesegerät verwendet werden, was in vielen Fällen eine Transaktion mit nur einem Fingertipp ermöglicht.

Darüber hinaus können Anwendungen jetzt auf unterstützten Geräten einen Filter registrieren, sodass sie über die Aktivität der Abfrageschleife benachrichtigt werden können. 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, die Daten deiner App schützen und Nutzern mehr Transparenz und Kontrolle über ihre Daten bieten. Im Vortrag von Google I/O unter Nutzersicherheit auf Android-Geräten schützen erfahren Sie mehr darüber, wie wir die Nutzersicherheit verbessern und Ihre App vor neuen Bedrohungen schützen.

Anmeldedaten-Manager in Autofill einbinden

Starting with Android 15, developers can link specific views like username or password fields with Credential Manager requests, making it easier to provide a tailored user experience during the sign-in process. When the user focuses on one of these views, a corresponding request is sent to Credential Manager. The resulting credentials are aggregated across providers and displayed in autofill fallback UIs, such as inline suggestions or drop-down suggestions. The Jetpack androidx.credentials library is the preferred endpoint for developers to use and will soon be available to further enhance this feature in Android 15 and higher.

Registrierung und Anmeldung durch einmaliges Tippen in biometrische Aufforderungen einbinden

Der Anmeldedaten-Manager integriert biometrische Aufforderungen in die Erstellung von Anmeldedaten und Anmeldeprozessen, sodass Anbieter keine biometrische Aufforderungen. Anbieter von Anmeldedaten müssen sich daher nur auf die der Erstellungs- und Abrufvorgänge, ergänzt mit dem biometrischen Flussergebnis. Dieser vereinfachte Prozess ermöglicht eine effizientere und optimierte Erstellung und Abruf von Anmeldedaten.

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

Mit Android 15 werden eine Reihe neuer APIs eingeführt, die Berechtigungsprüfungen für Inhalts-URIs durchführen:

Bedienungshilfen

Android 15 bietet neue 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 zusätzliche Funktionen, die die Nutzerfreundlichkeit ergänzen, wenn ein Gerät in verschiedenen Sprachen verwendet wird.

Schriftart der Variablen CJK

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.

Zeichenblockierung

Ab Android 15 kann Text mithilfe von Buchstabenabstand ausgerichtet werden. Verwenden Sie dazu JUSTIFICATION_MODE_INTER_CHARACTER. Interwort-Begründung lautete erstmals mit Android 8.0 (API-Level 26) eingeführt und Zeichen Justification bietet ähnliche Funktionen für Sprachen, Leerzeichen für die Segmentierung, z. B. Chinesisch oder Japanisch.

Layout für japanischen Text mit JUSTIFICATION_MODE_NONE
Layout für englischen Text mit JUSTIFICATION_MODE_NONE


Layout für japanischen Text mit JUSTIFICATION_MODE_INTER_WORD
Layout für englischen Text mit JUSTIFICATION_MODE_INTER_WORD


Layout für japanischen Text mit dem JUSTIFICATION_MODE_INTER_CHARACTER.
Layout für englischen Text mit dem JUSTIFICATION_MODE_INTER_CHARACTER.

Automatischen Zeilenumbruch konfigurieren

Android unterstützt jetzt wortbasierte Zeilenumbrüche für Japanisch und Koreanisch in Android 13 (API-Level 33) Durch Zeilenumbrüche dagegen verbessern sich von kurzen Textzeilen gut lesbar sind, eignen sie sich nicht gut für lange Textzeilen. In Android 15 können Apps textbasierte Zeilenumbrüche nur auf kurze Zeilen anwenden des Textes, unter Verwendung des LINE_BREAK_WORD_STYLE_AUTO Option. Mit dieser Option wird die beste Wortstiloption für den Text ausgewählt.

Für kurze Textzeilen werden satzbasierte Zeilenumbrüche verwendet, die wie LINE_BREAK_WORD_STYLE_PHRASE funktionieren, wie im folgenden Bild dargestellt:

Bei kurzen Textzeilen fügt LINE_BREAK_WORD_STYLE_AUTO satzbasierte Zeilenumbrüche ein, um die Lesbarkeit des Textes zu verbessern. Dies entspricht der Anwendung LINE_BREAK_WORD_STYLE_PHRASE

Bei längeren Textzeilen verwendet LINE_BREAK_WORD_STYLE_AUTO das Zeichen „Nein“ Zeilenumbruch-Wortformat, das genauso funktioniert wie LINE_BREAK_WORD_STYLE_NONE, wie in den folgendes Bild:

Bei langen Textzeilen LINE_BREAK_WORD_STYLE_AUTO wendet keinen Zeilenumbruch an, um die Lesbarkeit des Textes zu verbessern. Dies entspricht der Anwendung von LINE_BREAK_WORD_STYLE_NONE.

Neue japanische Schriftart Hentaigana

In Android 15 eine Schriftartdatei für das alte japanische Hiragana (bekannt als Hentaigana) ist standardmäßig gebündelt. Die einzigartigen Formen von Hentaigana-Figuren sorgen dafür, einem Design oder einem Design unverwechselbar machen und gleichzeitig Übertragung und Verständnis alter japanischer Dokumente.

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

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.