Mit Android 8.1 (API-Level 27) werden neuen Funktionen für Nutzer und Entwickler. In diesem Dokument werden die Neuigkeiten für Entwickler hervorgehoben.
Android Oreo (Go-Edition)
Android Go ist unsere Initiative, die Nutzung von Android für Milliarden von Menschen weltweit zu optimieren. Mit Android 8.1 machen wir Android zu einer hervorragenden Plattform für Einsteigergeräte. Zu den Funktionen in der Konfiguration für Android Oreo (Go-Edition) gehören:
- Speicheroptimierungen Die Speichernutzung wurde plattformübergreifend verbessert, damit Apps auf Geräten mit 1 GB RAM oder weniger 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 sind auf Geräten mit Android Oreo (Go-Edition) verfügbar. Bei Google Play werden jedoch Apps präsentiert, die von Entwicklern speziell gemäß den Richtlinien für die Entwicklung von Apps für Milliarden von Nutzern optimiert wurden, um Milliarden von Nutzern eine optimale Nutzererfahrung zu bieten.
Wir haben die Richtlinien für die Entwicklung von Apps für Milliarden von Nutzern um zusätzliche Informationen zur Optimierung Ihrer App für Geräte mit Android Oreo (Go-Edition) ergänzt. 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 leihtgewichtiger und effizienter gestalten, profitieren alle Nutzer – unabhängig von ihrem Gerät.
Neural Networks API
Die Neural Networks API bietet beschleunigte Berechnungen und Inferenzen für On-Device-Maschinenlernen-Frameworks wie TensorFlow Lite, die plattformübergreifende ML-Bibliothek von Google für Mobilgeräte, sowie Caffe2 und andere. Im Open-Source-Repository von TensorFlow Lite finden Sie Downloads und Dokumentationen. 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.
Die Klasse BaseAdapter
enthält jetzt die Methode setAutofillOptions()
, mit der Sie Stringdarstellungen der Werte in einem Adapter angeben können. Dies ist nützlich für das Kreiselsymbol
Steuerelemente, die die Werte in ihren Adaptern dynamisch generieren. Mit der Methode setAutofillOptions()
können Sie beispielsweise eine Stringdarstellung der Liste der Jahre bereitstellen, die Nutzer als Ablaufdatum einer Kreditkarte auswählen können. Autofill-Dienste können die Zeichenfolgendarstellung
um die Datenansichten, für die die Daten erforderlich sind, entsprechend auszufüllen.
Außerdem enthält die Klasse AutofillManager
die Methode notifyViewVisibilityChanged(View, int, boolean)
, die Sie aufrufen können, um das Framework über Änderungen an der Sichtbarkeit einer Ansicht in einem virtuellen Gebäude zu informieren. Es gibt auch eine Überlastung der Methode für
virtuelle Strukturen erstellen. Bei nicht virtuellen Strukturen müssen Sie das Framework jedoch in der Regel nicht explizit benachrichtigen, da die Methode bereits von der View
-Klasse aufgerufen wird.
Mit Android 8.1 können Autofill-Dienste die Benutzeroberfläche für das Speichern weiter anpassen, da CustomDescription
and
Validator
in SaveInfo
unterstützt wird.
Benutzerdefinierte Beschreibungen sind nützlich, um dem Autofill-Dienst zu verdeutlichen, was gespeichert wird. Wenn der Bildschirm beispielsweise eine Kreditkarte enthält, kann ein Logo der Kreditkartenbank, die letzten vier Ziffern der Kreditkartennummer und das Ablaufdatum angezeigt werden. 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 Klasse Validator und ihren Unterklassen LuhnChecksumValidator und RegexValidator.
Benachrichtigungen
Android 8.1 enthält die folgenden Änderungen an Benachrichtigungen:
- Apps können jetzt nur einmal pro Sekunde einen Benachrichtigungston auslösen. Benachrichtigungstöne, die diese Rate überschreiten, werden nicht in die Warteschlange aufgenommen und gehen verloren. Diese Änderung hat keine Auswirkungen auf andere Aspekte des Benachrichtigungsverhaltens. Benachrichtigungen werden weiterhin wie erwartet gesendet.
-
NotificationListenerService
undConditionProviderService
werden auf Android-Geräten mit wenig RAM nicht unterstützt, die beim Aufruf vonActivityManager.isLowRamDevice()
true
zurückgeben.
Update für EditText
Ab API-Level 27 gibt die EditText.getText()
-Methode eine Editable
zurück. Bisher wurde eine CharSequence
zurückgegeben. Diese Änderung ist
abwärtskompatibel, da Editable
implementiert
CharSequence
.
Die Editable
-Oberfläche bietet wertvolle zusätzliche
Funktionalität. Da Editable
beispielsweise auch die Spannable
-Oberfläche implementiert, können Sie Markup auf Inhalte innerhalb einer Instanz von EditText
anwenden.
Programmatisch auslösbare Safe Browsing-Maßnahmen
Wenn Sie die WebView
-Implementierung der Safe Browsing API verwenden, kann Ihre App erkennen, wenn eine Instanz von WebView
versucht, eine URL aufzurufen, die von Google als bekannte Bedrohung eingestuft wurde. 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.
Unter Android 8.1 können Sie programmatisch festlegen, wie Ihre App auf eine bekannte Bedrohung reagiert:
- Sie können festlegen, ob Ihre App bekannte Bedrohungen an Safe Browsing meldet.
- Sie können festlegen, dass Ihre App automatisch eine bestimmte Aktion ausführt, z. B. zur sicheren Seite zurückkehrt, wenn eine URL gefunden wird, die von Safe Browsing als bekannte Bedrohung eingestuft wird.
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:
AndroidManifest.xml
<manifest> <application> ... <meta-data android:name="android.webkit.WebView.EnableSafeBrowsing" android:valu>e=&qu<ot;true">;< / /a>pplication /manifest
MyWebActivity.java
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!"); } } }); }
MyWebViewClient.java
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-Extractor
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()
, da dadurch Speicher verschwendet werden kann, da eine Bitmap mit derselben Auflösung wie das Quellvideo zurückgegeben wird. Für
Ein Frame aus einem 4K-Video wäre eine Bitmap von 16 MB, also deutlich größer
Thumbnail-Bild fehlt.
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. Sie legen den Speicherschutz für ein SharedMemory
-Objekt zum Lesen und/oder Schreiben fest. Da das SharedMemory
-Objekt verpackbar ist, können Sie es ganz einfach über AIDL an einen anderen Prozess übergeben.
Die SharedMemory
Die API interagiert mit dem
ASharedMemory
-Einrichtung im NDK.
ASharedMemory
gewährt Zugriff auf einen Dateideskriptor, der dann dem Lesen und Schreiben zugeordnet werden kann. Es ist eine großartige
große Mengen an Daten
zwischen Apps oder zwischen mehreren Prozessen innerhalb einer App.
WallpaperColors API
Unter Android 8.1 (API-Level 27) kann Ihr Live-Hintergrund der System-UI Farbinformationen zur Verfügung stellen. 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. - Wenn Sie ein
WallpaperColors
-Objekt aus einer Bitmap erstellen möchten, rufen Sie die MethodefromBitmap()
auf und übergeben Sie die Bitmapquelle als Parameter. - Wenn Sie ein
WallpaperColors
-Objekt aus einem drawable erstellen möchten, rufen Sie die MethodefromDrawable()
auf und übergeben Sie die 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 ein onComputeColors()
-Lebenszyklusereignis aus, bei dem Sie ein neues WallpaperColors
-Objekt angeben können.
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.
Updates für 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
: Es ist ein anbieterspezifischer Fehler beim Fingerabdrucklesegerät aufgetreten.
Kryptografie-Updates
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:
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. Da Entwickler manchmal reflektiv darauf zugreifen, wurden die Shims beibehalten, um die bisherige Nutzung zu unterstützen. Einige Details haben sich jedoch geändert. So hatten Sockets beispielsweise früher den Typ
OpenSSLSocketImpl
, jetzt aber den TypConscryptFileDescriptorSocket
oderConscryptEngineSocket
, die beide vonOpenSSLSocketImpl
abgeleitet sind. - Bei
SSLSession
-Methoden wurde früherIllegalArgumentException
geworfen, wenn ein Nullbezug übergeben wurde. Jetzt wirdNullPointerException
geworfen. - Mit RSA
KeyFactory
können keine Schlüssel mehr aus Byte-Arrays generiert werden, 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 wurde, gab Conscrypt bisher -1 zurück. Die Leseaktion gibt jetzt
SocketException
zurück. - Die Stamm-CA-Zertifikate wurden geändert. Dabei wurden vor allem eine große Anzahl von veralteten Zertifikaten entfernt, aber auch die Stammzertifikate 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