Mit Android 8.1 (API-Level 27) werden neuen Funktionen für Nutzer und Entwickler. In diesem Dokument werden die Neuerungen für Entwickler beschrieben.
Android Oreo (Go-Edition)
<ph type="x-smartling-placeholder"></ph> Android Go ist unsere Initiative zur Optimierung von Android auf der ganzen Welt online gehen. Ab Android 8.1 machen wir Android zu einer tollen Plattform für Einsteigergeräte. Funktionen in Android Oreo Die Konfiguration (Go-Edition) umfasst:
- Arbeitsspeicheroptimierung: Optimierte Speichernutzung auf der Plattform, um damit Apps auf Geräten mit maximal 1 GB RAM effizient ausgeführt werden können.
- Flexible Ausrichtungsoptionen: Neu Hardware-Funktion , um die Verteilung Ihrer Apps auf Geräte mit normalem oder niedrigem RAM über Google Play
- Google Play: Alle Apps werden auf Geräten mit Android Oreo verfügbar sein. Go-Edition erhalten, bietet Google Play einen Einblick in Apps, die speziell von Entwicklern optimiert wurden. um Milliarden von Menschen ein großartiges Erlebnis zu bieten. <ph type="x-smartling-placeholder"></ph> Richtlinien.
Wir haben das Gebäude für Milliarden Nutzer saniert <ph type="x-smartling-placeholder"></ph> Richtlinien mit zusätzlichen Informationen zur <ph type="x-smartling-placeholder"></ph> Optimierung deiner App für Geräte mit Android Oreo (Go-Edition) Für die meisten Entwickler ist es sinnvoll, von Google Play Funktion für mehrere APK-Dateien, mit der du eine Version deines APK auf Geräte mit wenig RAM ausrichten kannst ist die beste Vorbereitung für Geräte, auf denen Android Oreo (Go-Edition) ausgeführt wird. Wenn Sie Ihre App leichter und effizienter ist, profitieren alle Nutzer auf allen Geräten.
Neural Networks API
Die Neural Networks API ermöglicht eine beschleunigte Berechnung und Inferenz für On-Device-Maschinen Lern-Frameworks wie TensorFlow Lite: die plattformübergreifende ML-Bibliothek von Google für Mobilgeräte – sowie Caffe2 und andere. Zur TensorFlow Lite Open Source Repository für Downloads und Dokumente. TensorFlow Lite arbeitet mit der Neural Networks API zusammen, um Modelle wie MobileNets Inception v3, und Intelligente Antworten effizient über dein Mobilgerät erstellen.
Updates für das Autofill-Framework
Android 8.1 (API-Level 27) bietet mehrere Verbesserungen für die Funktion „Autofill“ Framework, das Sie in Ihre Apps integrieren können.
Das BaseAdapter
Klasse enthält jetzt die setAutofillOptions()
, mit der Sie Zeichenfolgendarstellungen der Werte in einer
Adapter. Dies ist nützlich für das Kreiselsymbol
Steuerelemente, die die Werte in ihren Adaptern dynamisch generieren. Beispiel:
können Sie mit der Methode setAutofillOptions()
einen String
Darstellung der Liste von Jahren, die die Nutzenden im Rahmen eines
Gültigkeitsdatum der Kreditkarte. Autofill-Dienste können die Zeichenfolgendarstellung
um die Datenansichten, für die die Daten erforderlich sind, entsprechend auszufüllen.
Außerdem enthält die AutofillManager
Klasse enthält die Methode notifyViewVisibilityChanged(View, int, boolean)
den Sie aufrufen können, um das Framework über Änderungen in der Sichtbarkeit eines
in einer virtuellen Struktur ansehen. Es gibt auch eine Überlastung der Methode für
virtuelle Strukturen erstellen. Bei nicht virtuellen Strukturen ist es jedoch normalerweise nicht erforderlich,
das Framework explizit benachrichtigen, da die Methode bereits vom
View
.
Mit Android 8.1 haben die Autofill-Dienste außerdem mehr Möglichkeiten, die Benutzeroberfläche zum Speichern anzupassen.
durch die Unterstützung von CustomDescription
and
Validator
innerhalb von SaveInfo
.
Benutzerdefinierte Beschreibungen helfen dem Autofill-Service zu verdeutlichen,
wird gespeichert; Enthält der Bildschirm beispielsweise eine Kreditkarte,
Das Logo der Kreditkartenbank, die letzten vier Ziffern der Kreditkartennummer
und die Ablaufnummer. Weitere Informationen findest du in der
CustomDescription
.
.
Validator
-Objekten wird verwendet, um zu verhindern, dass die Benutzeroberfläche zum Speichern von Autofill-Daten beim Validator
Zustand nicht erfüllt ist. Weitere Informationen finden Sie in der
Validator und den zugehörigen abgeleiteten Klassen,
LuhnChecksumValidator und RegexValidator.
Benachrichtigungen
In Android 8.1 wurden die folgenden Änderungen bei Benachrichtigungen vorgenommen:
- Apps können jetzt nur einmal pro Sekunde einen Benachrichtigungston auslösen. Warntöne, die diesen Wert überschreiten nicht in die Warteschlange gestellt und gehen verloren. Diese Änderung hat keine Auswirkungen auf andere Aspekte der Benachrichtigung und Benachrichtigungen weiterhin wie erwartet gepostet werden.
-
NotificationListenerService
undConditionProviderService
werden bei niedrigem RAM nicht unterstützt Android-Geräte, dietrue
zurückgeben, wennActivityManager.isLowRamDevice()
wird aufgerufen.
EditText-Update
Ab API-Level 27 gibt die Methode EditText.getText()
ein Editable
zurück. zuvor
wurde ein CharSequence
zurückgegeben. Diese Änderung ist
abwärtskompatibel, da Editable
implementiert
CharSequence
.
Die Editable
-Oberfläche bietet wertvolle zusätzliche
Funktionalität. Zum Beispiel, weil Editable
auch
Spannable
-Schnittstelle implementiert, kannst du Markup auf
Inhalt innerhalb einer Instanz von EditText
.
Programmatische Safe Browsing-Aktionen
Mit der Methode
WebView
der Safe Browsing API implementiert hat, kann deine App
erkennen, wenn eine Instanz von WebView
versucht, zu navigieren
auf eine URL verweist, die Google als bekannte Bedrohung klassifiziert hat. Standardmäßig enthält der Parameter
WebView
zeigt ein Interstitial an, das Nutzer vor der bekannten Bedrohung warnt.
In diesem Bildschirm haben Nutzer die Möglichkeit, die URL trotzdem zu laden oder zu einem
auf der vorherigen Seite verwendet.
In Android 8.1 können Sie programmatisch definieren, wie Ihre Anwendung auf eine bekannte Bedrohung reagiert:
- Du kannst festlegen, ob deine App bekannte Bedrohungen an Safe meldet Surfen.
- Sie können festlegen, dass Ihre App eine bestimmte Aktion automatisch ausführt, z. B. wenn sie auf eine URL stößt, die Safe Browsing als bekannte Bedrohung klassifiziert.
Hinweis:Für einen optimalen Schutz vor bekannten Bedrohungen
bis Sie Safe Browsing initialisiert haben, bevor Sie ein
Die Methode loadUrl()
des WebView
-Objekts.
Die folgenden Code-Snippets zeigen, wie Sie die Instanzen Ihrer App
WebView
, um nach dem Auftreten einer
bekannte Bedrohung:
<manifest> <application> ... <meta-data android:name="android.webkit.WebView.EnableSafeBrowsing" android:value="true" /> </application> </manifest>
Kotlin
private var superSafeWebView: WebView? = null private var safeBrowsingIsInitialized: Boolean = false // ... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) superSafeWebView = WebView(this).apply { webViewClient = MyWebViewClient() safeBrowsingIsInitialized = false startSafeBrowsing(this@SafeBrowsingActivity, { success -> safeBrowsingIsInitialized = true if (!success) { Log.e("MY_APP_TAG", "Unable to initialize Safe Browsing!") } }) } }
Java
private WebView superSafeWebView; private boolean safeBrowsingIsInitialized; // ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); superSafeWebView = new WebView(this); superSafeWebView.setWebViewClient(new MyWebViewClient()); safeBrowsingIsInitialized = false; superSafeWebView.startSafeBrowsing(this, new ValueCallback<Boolean>() { @Override public void onReceiveValue(Boolean success) { safeBrowsingIsInitialized = true; if (!success) { Log.e("MY_APP_TAG", "Unable to initialize Safe Browsing!"); } } }); }
Kotlin
class MyWebViewClient : WebViewClient() { // Automatically go "back to safety" when attempting to load a website that // Safe Browsing has identified as a known threat. An instance of WebView // calls this method only after Safe Browsing is initialized, so there's no // conditional logic needed here. override fun onSafeBrowsingHit( view: WebView, request: WebResourceRequest, threatType: Int, callback: SafeBrowsingResponse ) { // The "true" argument indicates that your app reports incidents like // this one to Safe Browsing. callback.backToSafety(true) Toast.makeText(view.context, "Unsafe web page blocked.", Toast.LENGTH_LONG).show() } }
Java
public class MyWebViewClient extends WebViewClient { // Automatically go "back to safety" when attempting to load a website that // Safe Browsing has identified as a known threat. An instance of WebView // calls this method only after Safe Browsing is initialized, so there's no // conditional logic needed here. @Override public void onSafeBrowsingHit(WebView view, WebResourceRequest request, int threatType, SafeBrowsingResponse callback) { // The "true" argument indicates that your app reports incidents like // this one to Safe Browsing. callback.backToSafety(true); Toast.makeText(view.getContext(), "Unsafe web page blocked.", Toast.LENGTH_LONG).show(); } }
Video-Thumbnail-Extraktor
Die Klasse MediaMetadataRetriever
hat eine neue Methode, getScaledFrameAtTime()
, die
Frame in der Nähe einer bestimmten Zeitposition und gibt eine Bitmap mit demselben Seitenverhältnis zurück.
Verhältnis als Quell-Frame, aber so skaliert, dass er in ein Rechteck mit vorgegebener Breite und
Höhe. Dies ist nützlich, um Thumbnails aus Videos zu generieren.
Wir empfehlen, diese Methode anstelle von getFrameAtTime()
zu verwenden, da sonst Arbeitsspeicher verschwendet wird
da es eine Bitmap
mit derselben Auflösung wie das Quellvideo zurückgibt. Für
Ein Frame aus einem 4K-Video wäre eine Bitmap von 16 MB, also deutlich größer
Thumbnail-Bild wäre.
Shared Memory API
Mit Android 8.1 (API-Level 27) wird eine neue
SharedMemory
der API erstellen. Mit dieser Klasse können Sie anonyme
SharedMemory
Instanz. Du legst den Speicherschutz fest
auf einer
SharedMemory
Objekt zum Lesen und/oder Schreiben und, da das
SharedMemory
parcelable-Objekt ist, können Sie es über AIDL problemlos an einen anderen Prozess übergeben.
Die SharedMemory
Die API interagiert mit dem
ASharedMemory
-Einrichtung im NDK.
ASharedMemory
gewährt Zugriff
an einen Dateideskriptor, der dann Lese- und Schreibvorgänge zugeordnet werden kann. Es ist eine großartige
große Mengen an Daten
zwischen Apps oder zwischen mehreren Prozessen innerhalb einer App.
HintergründeColors API
Mit Android 8.1 (API-Level 27) kann dein Live-Hintergrund farbig dargestellt werden
an die System-UI senden. Dazu erstellen Sie eine WallpaperColors
aus einer Bitmap, einem Drawable oder mithilfe von drei manuell ausgewählten Farben.
Sie können diese Farbinformationen auch abrufen.
So erstellen Sie eine WallpaperColors
führen Sie einen der folgenden Schritte aus:
- So erstellen Sie eine
WallpaperColors
mithilfe von drei Farben erstellen, erstellen Sie eine Instanz vonWallpaperColors
. indem Sie die primäre, die sekundäre und die tertiäre Farbe übergeben. Die primäre Farbe darf nicht null sein. - So erstellen Sie eine
WallpaperColors
aus einer Bitmap abrufen möchten, rufen Sie die MethodefromBitmap()
durch Übergeben der Bitmapquelle als Parameter. - So erstellen Sie eine
WallpaperColors
aus einem Drawable zu erstellen, rufe die FunktionfromDrawable()
auf durch Übergeben der Drawable-Quelle als Parameter.
Um die primären, sekundären oder tertiären Farbdetails aus der die folgenden Methoden auf:
getPrimaryColor()
gibt die visuell repräsentativste Farbe des Hintergrunds zurück.getSecondaryColor()
gibt die zweitwichtigste Farbe des Hintergrunds zurück.getTertiaryColor()
gibt die drittwichtigste Farbe des Hintergrunds zurück.
Um das System über wesentliche Farbänderungen in Ihrem Live-Hintergrund zu informieren,
notifyColorsChanged()
aufrufen
. Diese Methode löst einen onComputeColors()
-Lebenszyklus aus
Veranstaltung, bei der Sie die Möglichkeit haben, eine neue WallpaperColors
-Objekt enthält.
Um einen Listener für Farbänderungen hinzuzufügen, können Sie die Methode addOnColorsChangedListener()
aufrufen. Sie können
auch die Methode getWallpaperColors()
aufrufen
um die Primärfarben eines Hintergrunds abzurufen.
Aktualisierung der Fingerabdrücke
Die Klasse FingerprintManager
hat
die folgenden Fehlercodes eingeführt:
-
FINGERPRINT_ERROR_LOCKOUT_PERMANENT
: Der Nutzer hat versucht, zu oft verwendet wird, um das Gerät mit dem Fingerabdrucksensor zu entsperren. -
FINGERPRINT_ERROR_VENDOR
: ein anbieterspezifischer Fingerabdruck Lesefehler ist aufgetreten.
Neuigkeiten zu Kryptografie
Bei Android 8.1 wurden einige Änderungen an der Kryptografie vorgenommen:
- In Conscrypt wurden neue Algorithmen implementiert. Conscrypt
-Implementierung wird bevorzugt gegenüber dem bestehenden Bouncy Castle verwendet.
Implementierung. Zu den neuen Algorithmen gehören:
<ph type="x-smartling-placeholder">
- </ph>
AlgorithmParameters:GCM
KeyGenerator:AES
KeyGenerator:DESEDE
KeyGenerator:HMACMD5
KeyGenerator:HMACSHA1
KeyGenerator:HMACSHA224
KeyGenerator:HMACSHA256
KeyGenerator:HMACSHA384
KeyGenerator:HMACSHA512
SecretKeyFactory:DESEDE
Signature:NONEWITHECDSA
Cipher.getParameters().getParameterSpec(IvParameterSpec.class)
nein funktioniert bei Algorithmen, die GCM verwenden, länger. Verwenden Sie stattdessengetParameterSpec(GCMParameterSpec.class)
- Viele mit TLS verknüpfte interne Conscrypt-Klassen wurden refaktoriert. Seit
Entwickler greifen manchmal auf diese Informationen zu.
unterstützen die vorherige Nutzung, einige Details haben sich jedoch geändert. Beispiel: Sockets
früher vom Typ
OpenSSLSocketImpl
, jetzt sind sie jedoch vom TypConscryptFileDescriptorSocket
oderConscryptEngineSocket
, die beide auch aufOpenSSLSocketImpl
SSLSession
-Methoden zum AuslösenIllegalArgumentException
bei der Übergabe einer Nullreferenz.NullPointerException
werfen.- Für die RSA
KeyFactory
ist das Generieren von Schlüsseln nicht mehr zulässig aus Byte-Arrays, die größer als der codierte Schlüssel sind. Anrufe angeneratePrivate()
undgeneratePublic()
, die einKeySpec
, bei denen die Schlüsselstruktur das Feld Gesamter Puffer führt zuInvalidKeySpecException
. - Wenn ein Socket-Lesevorgang durch das Schließen des Sockets unterbrochen wird, hat Conscrypt verwendet
um -1 aus dem Lesevorgang zurückzugeben. Der Lesevorgang
SocketException
- Der Satz der Root-CA-Zertifikate wurde geändert. Dabei wurde größtenteils der veralteten Zertifikate, wobei die Root-Zertifikate für WoSign und StartCom. Weitere Informationen zu dieser Entscheidung findest du in den Blogpost zum Thema Sicherheit, Finale Aufhebung des Vertrauens in WoSign- und StartCom-Zertifikate