Die Firma Google hat die Version 17 der offenen mobilen Plattform Android veröffentlicht. Die zu dem neuen Release gehörenden Quelltexte sind im Git-Repository des Projekts (Branch android-17.0.0_r1) verfügbar. Die Firmware-Builds wurden für die Geräte Pixel 6/6a/6 Pro, Pixel 7/7a/7 Pro, Pixel 8/8a/8 Pro, Pixel 9/9a/9 Pro/9 Pro XL/9 Pro Fold, Pixel 10/10 Pro/10 Pro XL/10 Pro Fold, Pixel Fold und Pixel Tablet vorbereitet. Vorab-Builds der Firmware sind für die Geräte HONOR, iQOO, Lenovo, OnePlus, OPPO, realme, Sharp, vivo und Xiaomi verfügbar. Im Rahmen der Entwicklung werden universelle GSI-Builds (Generic System Images) erstellt, die für verschiedene Geräte auf Basis von ARM64- und x86_64-Architekturen geeignet sind.
Unter den Änderungen (1, 2, 3):
- Ein neuer Modus für die Multi-Window-Nutzung – "Bubbles" – wurde hinzugefügt, der es ermöglicht, beliebige Anwendungen in schwebenden Fenstern zu starten, die ähnlich wie Benachrichtigungen zum Versenden von Nachrichten über anderen Inhalten angezeigt werden („Blasen“), jedoch nicht an eine spezielle API gebunden sind. Das Öffnen einer Anwendung in einem schwebenden Fenster erfolgt durch langes Drücken auf das Anwendungssymbol. Auf großen Bildschirmen werden die Symbole für die schwebenden Fenster in einem separaten Bereich der Taskleiste angezeigt. Solche Fenster können gruppiert, verschoben und auf dem Bildschirm angeheftet werden.

- Die Weiterentwicklung der Plattform für Geräte mit großen Bildschirmen wie Tablets, Laptops, Desktop-Systemen und Smartphones mit klappbaren Bildschirmen wurde fortgesetzt. Die zuvor geltenden Optionen zum Deaktivieren des neuen Verhaltens auf Geräten mit Bildschirmen, die breiter als 600 dp sind, wurden entfernt. Dies betrifft das Ignorieren bestimmter APIs für die Steuerung von Bildschirmgröße und -ausrichtung (screenOrientation, resizeableActivity, [min|max]AspectRatio) sowie die adaptive Anordnung von Anwendungen in Fenstern, die Größenänderungen und Bewegung über den Bildschirm ermöglichen.


- Eine neue System-API, die EyeDropper API, wurde hinzugefügt, mit der die Anwendung Informationen über die Farbe eines beliebigen Pixels auf dem Bildschirm erhalten kann, ohne Berechtigungen für die Bildschirmaufnahme zu benötigen. Die Sicherheit wird gewährleistet, da der Benutzer selbst den Bereich zur Farbbestimmung über eine vom System verwaltete Schnittstelle mit einer 'Pipette' auswählen kann, die nicht vom Programm kontrolliert wird, d.h. die Anwendung kann keine Informationen über ein bestimmtes Pixel anfordern und den Bildschirminhalt pixelgenau reproduzieren.

- Eine Systemoberfläche zur Auswahl von Kontakten aus dem Adressbuch wurde hinzugefügt, auf die zugegriffen wird, wenn die Berechtigung ACTION_PICK_CONTACTS erteilt wird. Die Schnittstelle ermöglicht es, auf die Berechtigung READ_CONTACTS zu verzichten, die den Zugriff auf alle Kontaktdaten erlaubt. Bei der Aufrufung der neuen Schnittstelle entscheidet der Benutzer, welche Informationen aus dem Adressbuch an die Anwendung weitergegeben werden, wobei nur die Auswahl bestimmter Felder möglich ist.

- Der API PhotoPickerUiCustomizationParams wurde hinzugefügt, um die Benutzeroberfläche der Fotowahl zu ändern, was es ermöglicht, sie näher am Stil der anrufenden Anwendung zu gestalten. Zum Beispiel kann das Seitenverhältnis der Fotovorschaubilder von 1:1 (quadratisch) auf 9:16 (Hochformat) geändert werden.

- Die Berechtigung USE_LOCATION_BUTTON wurde hinzugefügt, die es ermöglicht, eine Systemtaste für den Zugriff auf präzise Standortdaten in die Benutzeroberfläche der Anwendung einzufügen. Die Taste wird vom System gezeichnet und öffnet nach dem Drücken durch den Benutzer den Zugriff auf den Standort nur für die Dauer der aktuellen Sitzung.

- Eine Einstellung wurde hinzugefügt, die die Anzeige der Anwendungsnamen unter ihren Icons entfernt.

- Die Gestaltung der Werkzeugleiste für die Aufnahme von Screencasts wurde geändert.

- Die Unterstützung für Bildschirmreaktionen (Screen Reactions) wurde hinzugefügt, die die Videoaufnahme mit der Frontkamera mit der Erstellung eines Screencasts kombinieren, um eigene Kommentare zu den Aktionen auf dem Bildschirm hinzuzufügen.
- Ein Modus für Spiele auf Geräten mit faltbaren Bildschirmen wurde hinzugefügt, bei dem eine Hälfte des faltbaren Bildschirms zur Anzeige des Spiels und die andere für den virtuellen Controller verwendet wird.

- Die Handoff-API wurde hinzugefügt, die es ermöglicht, den Status einer Anwendung auf ein anderes Android-Gerät in der Nähe (z. B. ein Tablet) zu übertragen und dort weiterzuarbeiten.

- Interaktive angeheftete Fenster wurden implementiert, die im Gegensatz zu herkömmlichen Fenstern im Picture-in-Picture-Modus (PiP) interaktiv bleiben, wenn sie über anderen Anwendungen im Desktop-Modus angeheftet werden.
- Zwei neue APIs wurden hinzugefügt: API UWB DL-TDOA – zur Positionsbestimmung eines Geräts innerhalb von Gebäuden mithilfe von Wi-Fi für die Navigation in Innenräumen; API Proximity Detection zur Erkennung von Geräten in der Nähe über Wi-Fi.
- Die Unterstützung für das Videoformat VVC (Versatile Video Coding), auch bekannt als der Videokomprimierungsstandard H.266, wurde hinzugefügt, das gemeinsam von den Arbeitsgruppen MPEG (ISO/IEC JTC 1) und VCEG (ITU-T) entwickelt wurde, unter Beteiligung von Unternehmen wie Apple, Ericsson, Intel, Huawei, Microsoft, Qualcomm und Sony. H.266 ersetzt H.265 (HEVC) und bietet eine hohe Effizienz bei der Übertragung und Speicherung aller Bildschirmauflösungen (von SD und HD bis 4K und 8K), unterstützt Videos mit erweitertem Dynamikbereich (HDR, High Dynamic Range) und 360-Grad-Panorama-Videos.
- Die Möglichkeit, Videos mit konstanter Qualität aufzunehmen, wurde hinzugefügt. Der Modus wird im Objekt MediaRecorder über die Methode setVideoEncodingQuality() eingestellt, die es ermöglicht, die Qualitätsstufe festzulegen, ohne an die Bitrate gebunden zu sein.
- Unterstützung für das RAW14-Bildformat wurde hinzugefügt, das in professionellen Digitalkameras verwendet wird und die Speicherung von 15 Bit pro Farbkanal ermöglicht.
- Unterstützung für das HDR-Videoformat Eclipsa Video wurde hinzugefügt.
- Ein programmierter Audio-Encoder für das HE-AAC-Format (High-Efficiency Advanced Audio Coding) wurde hinzugefügt, der sowohl niedrige als auch hohe Bitraten unterstützt.
- Eine neue Berechtigung ACCESS_LOCAL_NETWORK wurde hinzugefügt, um den Zugriff von Anwendungen auf das lokale Netzwerk einzuschränken. Mit dieser Berechtigung können Anwendungen Geräte im lokalen Netzwerk erkennen und sich verbinden, z. B. Smart-Home-Geräte und Mediensysteme. Die Berechtigung wurde hinzugefügt, um das Scannen von Ressourcen im lokalen Netzwerk durch bösartige Anwendungen zu blockieren, zum Beispiel zur versteckten Identifizierung der Umgebung des Benutzers.
- Der Schutz vor dem Abfangen von Einmalpasswörtern (OTP) und Bestätigungscodes, die per SMS gesendet werden, wurde erweitert. Der direkte Zugriff auf solche Nachrichten wird den meisten Anwendungen jetzt erst drei Stunden nach Eingangs der Nachricht gewährt. Im Standard-SMS-Leseanwendung werden solche Nachrichten sofort angezeigt.
- Ein Schutzmechanismus gegen Anrufe von Betrügern, die sich als Mitarbeiter von Banken ausgeben, wurde implementiert. Die Plattform kann mit installierten Banking-Anwendungen interagieren, um zu bestätigen, dass der Anruf von der Bank initiiert wurde. Zudem können Banken Telefonnummern definieren, bei denen nur eingehende Anrufe erlaubt sind.
- Die Möglichkeit wurde hinzugefügt, Anwendungen vorübergehenden Zugriff auf Daten zum genauen Standort zu gewähren, der nur während der aktuellen Sitzung der Anwendung gültig ist.
- Der Mechanismus zum Schutz vor dynamischem Code-Laden (DCL, Dynamic Code Loading) wurde erweitert, um mit nativen Bibliotheken zu arbeiten, die über die Methode System.load() geladen werden, und nicht nur.
Dateien im DEX- und JAR-Format. DCL ermöglicht es, die Einspeisung von schadhafter Software in dynamisch geladene ausführbare Dateien zu vermeiden, indem für solche Dateien Zugriffsrechte gesetzt werden, die nur Lesezugriff erlauben. - Der Mechanismus für Certificate Transparency, der ein öffentliches Protokoll aller ausgestellten und widerrufenen Zertifikate führt, ist standardmäßig aktiviert.
- Die Möglichkeit, APK-Pakete mit einer digitalen Signatur basierend auf einem hybriden Algorithmus zu signieren, der einen klassischen Algorithmus mit dem ML-DSA-Algorithmus kombiniert, der resistent gegen Brute-Force-Angriffe auf Quantencomputern ist, wurde bereitgestellt.
- Für Anwendungen, die im Hintergrund arbeiten, ist der Zugriff auf die API zur Audiowiedergabe, zum Anschluss an Audiogeräte und zur Änderung der Lautstärke eingeschränkt. Es wird davon ausgegangen, dass nur aktive Anwendungen, mit denen der Benutzer gerade interagiert, die Wiedergabe starten und die Lautstärke ändern können.
- Es wurde Unterstützung für hybride Verschlüsselung basierend auf dem HPKE-Mechanismus (Hybrid Public Key Encryption, RFC 9180) hinzugefügt, der die einfache Schlüsselübertragung bei der asymmetrischen Verschlüsselung mit der hohen Geschwindigkeit der symmetrischen Verschlüsselung kombiniert (Daten werden mit einem schnellen symmetrischen Schlüssel verschlüsselt, während der Schlüssel selbst mit einer langsamen asymmetrischen Methode verschlüsselt wird).
- Bei der Eingabe von Passwörtern und PIN-Codes über eine physische Tastatur ist standardmäßig die Anzeige des zuletzt eingegebenen Zeichens während der Eingabe deaktiviert.
- Um die Unterstützung von Touchpads in Spielen zu erleichtern, wurde die Ereignisbehandlung von Maus und Touchpad vereinheitlicht – standardmäßig werden Touchpad-Ereignisse, die sich auf die Bewegungen des Zeigers und Scrollgesten beziehen, jetzt in das Format mit relativen Koordinaten umgewandelt, wie bei der Maus. Der Zugriff auf absolute Koordinaten wird bereitgestellt, wenn der MODUS POINTER_CAPTURE_MODE_ABSOLUTE explizit angegeben wird.
- Der ChooserSession-Objekt wurde um die Methode getInitialRestingBounds() erweitert, mit der die endgültige Position und Größe des Auswahldialogs (Chooser) nach dem Ende der Animation und dem Laden der Daten ermittelt werden kann.
- Die Methoden getStreamingAppMaxDownlinkKbps und getStreamingAppMaxUplinkKbps wurden hinzugefügt, um die maximale Bandbreite der Kommunikationskanäle zu bestimmen, um die Qualitätsstufe beim Streaming auszuwählen.
- Herstellern von Hardware wurde eine API zur Verfügung gestellt, um Erweiterungen für Kameras zu erstellen, die es Anwendungen ermöglichen, spezifische Funktionen wie den Mechanismus zur Verbesserung der Detailsuperauflösung, Rauschunterdrückungsmodi und KI-Optimierer für die Qualität zu nutzen.
- Eine API zum Abrufen von Informationen über den Kameratyp (eingebaute Kamera, über USB angeschlossene Webcam oder virtuelle Kamera) wurde hinzugefügt.
- Die Unterstützung von Hörgeräten, die über die Schnittstelle Bluetooth Low Energy (BLE) angeschlossen werden, wurde hinzugefügt. Solche Geräte werden in eine neue Kategorie TYPE_BLE_HEARING_AID eingestuft, was es Anwendungen ermöglicht, Hörgeräte und Kopfhörer zu unterscheiden und die Wiedergabe von Systemklängen separat zu steuern (zum Beispiel können Benachrichtigungstöne, Anrufe und Wecksignale über den eingebauten Lautsprecher des Telefons und nicht über das Hörgerät wiedergegeben werden).
- Getrennte Einstellungen wurden hinzugefügt, um die Anzeige des auf der physischen Tastatur und auf dem Touchscreen eingegebenen Passworts zu aktivieren. Standardmäßig werden die Zeichen des Passworts, die mit der physischen Tastatur eingegeben werden, sofort verborgen.
- Die Anzeige der Anwendungs-Widgets auf externen Bildschirmen wurde verbessert, indem die DPI-Differenzen bei der Skalierung berücksichtigt werden.
- Die ACTION_VPN_APP_EXCLUSION_SETTINGS-Anfrage wurde hinzugefügt, die es ermöglicht, den Systemeinstellungen aufrufen, um einer Anwendung den Netzwerkzugang zu ermöglichen. VPN-Tunnel.
- Unterstützung für die in OpenJDK 25 verfügbaren Sprach- und Java-Klassenfunktionalitäten wurde hinzugefügt.
- Die Möglichkeiten der Programmierschnittstellen zur Arbeit mit der Kamera wurden erweitert. Im Objekt CameraCaptureSession wurde die Methode updateOutputConfigurations() hinzugefügt, um Ausgabebereiche dynamisch zu verbinden oder zu trennen, ohne die gesamte Datenaufzeichnungssitzung mit der Kamera neu konfigurieren zu müssen. In der Praxis ermöglicht die Änderung ein reibungsloses Umschalten zwischen verschiedenen Betriebsmodi der Kamera (zum Beispiel zwischen Videoaufnahme und Fotografie). Bei der Arbeit mit logischen Kameras, die mehrere physische Sensoren abdecken, wurde die Möglichkeit hinzugefügt, Metadaten zu jedem Sensor abzurufen, nicht nur für den primären.
- Das Attribut android:usesCleartextTraffic, das der Anwendung die Übertragung unverschlüsselten Traffics, z. B. über 'http' erlaubte, wurde als veraltet erklärt. Bei Bedarf für die Nutzung unverschlüsselten Traffics sollten separate Sicherheitskonfigurationsdateien verwendet werden.
- Einstellungen zum Verwalten der VoIP-Anrufhistorie wurden hinzugefügt, die die Speicherung von Informationen in Protokollen und die Anzeige von Informationen über getätigte Anrufe im Interface ermöglichen.
- Die API für Wi-Fi RTT (Round-Trip-Time) wurde um die Möglichkeit erweitert, kontinuierlich die ungefähre Entfernung zu Zugangspunkten zu bestimmen und sichere Knoten für P2P-Verbindungen (Peer-to-Peer) zu identifizieren.
- Im CompanionDeviceManager wurden neue Profile für die Anforderung von Rechten und die Interaktion von Anwendungen mit medizinischen Geräten und Fitnesstrackern hinzugefügt.
- Im Android Runtime (ART) wurde ein generationenbasierter Garbage Collector (Generational Concurrent Mark-Compact Garbage Collector) implementiert, der eine getrennte Verarbeitung von "alten" und "jungen" Objekten verwendet. Dies erhöht die Effizienz der Freigabe kürzlich erstellter Objekte mit kurzer Lebensdauer. Die Anwendung des generationenbasierten Garbage Collectors verringert das Risiko von Pausen bei der Ressourcenzuteilung und reduziert die CPU-Belastung, was die Energieeffizienz erhöht.
- Es wurde eine Begrenzung für die maximale Menge an RAM implementiert, die eine Anwendung nutzen kann. Bei Überschreitung des Limits, das auf dem im Gerät verfügbaren RAM basiert, wird die Anwendung zwangsweise beendet. Um den Speicherverbrauch zu reduzieren, wird der R8 Optimizer angeboten, der die Namen von Klassen, Methoden und Feldern verpackt sowie nicht verwendeten Code und Ressourcen entfernt.
- Beim Zusammenstellen des Linux-Kernels wurde die AutoFDO-Optimierung (Auto-Feedback-Directed Optimization) aktiviert, die die Ergebnisse des Profilierens mit Informationen über die Häufigkeit der Ausführung verschiedener Codeabschnitte verwendet, um die Leistung von häufig ausgeführten Operationen zu steigern. In durchgeführten Tests führte die Aktivierung von AutoFDO im Kernel zu einer Verkürzung der Ladezeit um 2,1 %, einer Beschleunigung des ersten Programmstarts um 4,3 %, einer Steigerung der Effizienz von Systemaufrufen um 9,3 %, einer Verkürzung der Ausführungszeit von mmap-Transaktionen für Binder um 12,3 %, HwBinder um 20 % und Binder RPC um 21,7 %.
- Eine neue Implementierung der Nachrichtenwarteschlange android.os.MessageQueue wurde ohne Sperren entwickelt. Die neue Implementierung verbessert die Leistung und reduziert die Bildverluste.
- Anwendungen, die die Unterstützung für Android 17 und neuere Versionen angeben, ist es untersagt, die Werte von als „static final“ gekennzeichneten Feldern zu ändern, was aggressivere Leistungsoptimierungen zur Laufzeit ermöglicht.
- Um den Speicherverbrauch zu reduzieren, wurde die Größe der benutzerdefinierten Layouts für Benachrichtigungsansichten (notification view) begrenzt.
- Dem Profiler ProfilingManager wurden zusätzliche Trigger TRIGGER_TYPE_COLD_START, TRIGGER_TYPE_OOM und TRIGGER_TYPE_KILL_EXCESSIVE_CPU_USAGE hinzugefügt, um Daten zu sammeln, die bei der Fehlersuche von Leistungsproblemen nützlich sind.
Quelle: opennet.ru











