Überblick
Android Pie ist das neueste Android-Betriebssystem und wurde offiziell am 6. August 2018 veröffentlicht. Einzelheiten zu den Funktionen finden Sie im Android Pie-Funktionen dokumentieren. Android Pie enthält mehrere Verhaltensänderungen. Die meisten davon betreffen Apps, die auf Android Pie (API-Ebene 28) abzielen, aber Sie können auch Probleme mit Apps finden, die auf eine ältere Android-Version abzielen und auf einem Android Pie-Gerät ausgeführt werden.

Bei der Verwendung des Brightcove SDK für Android sind einige Änderungen zu beachten:
Eine vollständige Liste der Verhaltensänderungen für Ihre Apps finden Sie im Verhaltensänderungen für alle Apps dokumentieren. Informationen zu Verhaltensänderungen ausschließlich bei der Ausrichtung auf Android Pie finden Sie im Verhaltensänderungen für API 28+ dokumentieren.
TLS standardmäßig aktiviert
Transport Layer Security (TLS) ist ein Protokoll zur Bereitstellung einer sicheren Kommunikation über ein Computernetzwerk. TLS wird auf HTTP implementiert und ermöglicht eine verschlüsselte Kommunikation über HTTPS.
Als Google Android Marshmallow (API-Level 23) veröffentlichte, stellte es eine Konfiguration zum Deaktivieren des Klartextverkehrs bereit, die Ihre App daran hindern würde, klare HTTP-Anfragen zu stellen. Mit der Veröffentlichung von Android Pie (API-Level 28) ist der Klartextverkehr standardmäßig deaktiviert.
Wenn der Klartextverkehr standardmäßig deaktiviert ist und Ihre Anwendung versucht, eine klare HTTP-Anforderung auszuführen, wird eine IOException mit der folgenden Meldung ausgelöst:
Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
Weitere Informationen finden Sie auf der Website von Google: Änderungen der Framework-Sicherheit und Konfiguration der Netzwerksicherheit.
Wenn Ihre App auf Android Pie (API-Ebene 28) oder höher ausgerichtet ist, müssen Sie diese Verhaltensänderung verarbeiten, damit Ihre App wie erwartet funktioniert. Sie haben drei Möglichkeiten:
- Stellen Sie sicher, dass Ihre App nur HTTPS-Anfragen stellt
- Aktivieren Sie klaren HTTP-Verkehr für alle Domänen
- Klaren HTTP-Datenverkehr für bestimmte Domains aktivieren
Nur HTTPS
Eine Möglichkeit besteht darin, sicherzustellen, dass alle Ihre Netzwerkanforderungen HTTPS verwenden. Gehen Sie dazu wie folgt vor:
-
Aktivieren Sie Ihr CDN für eine sichere Kommunikation.
- Video Cloud-Kunden (unabhängig davon, ob Sie das hauseigene CDN oder ein benanntes CDN verwenden) sollten sich an ihre Brightcove-Kontomanager wenden, um sicherzustellen, dass Konten für die Bereitstellung über HTTPS konfiguriert sind.
-
Für diejenigen, die Remote-Assets verwenden, müssen Sie Ihr CDN möglicherweise entsprechend konfigurieren.
-
Verwenden Sie sichere Kommunikation, um Ihre Medieninhalte bereitzustellen. Dazu gehören Videos, Anzeigen, Bildunterschriften, Posterbilder, Miniaturansichten und andere API-Verbindungen von Drittanbietern.
-
Video Cloud-Kunden: Verwenden Sie die Playback-API, um das sichere Protokoll für jedes Ihrer Assets abzurufen. Das Brightcove SDK für Android wählt standardmäßig HTTPS aus, wenn verfügbar.
- Brightcove Player-Kunden: Stellen Sie sicher, dass Ihre Medieninhalte über HTTPS bereitgestellt werden.
-
HTTP für alle Domains
Ihre App kann klaren HTTP-Traffic für alle Domains verwenden. Hier sind zwei Beispiele, wie Sie dies tun können:
- Aktualisieren Sie das Anwendungs-Tag
- Fügen Sie eine Konfigurationsdatei für die Netzwerksicherheit hinzu
Aktualisieren Sie das Anwendungs-Tag
-
Um dies zu aktivieren, öffnen Sie das AndroidManifest Datei und fügen Sie die folgende Zeile in die
application
Schild. Zum Beispiel:<application android:name="mypackage.MyApplication" android:usesCleartextTraffic="true"> … </application>
Fügen Sie eine Konfigurationsdatei für die Netzwerksicherheit hinzu
-
Erstellen Sie beispielsweise eine XML-Datei network-security-config.xml , und fügen Sie es dem hinzu res/xml Verzeichnis. Sehen Sie sich das folgende Beispiel an, um klaren Datenverkehr zuzulassen:
<network-security-config> <base-config cleartextTrafficPermitted="true"/> </network-security-config>
-
Legen Sie den Dateinamen in Ihrem . fest AndroidManifest Wie nachfolgend dargestellt:
<application android:name="mypackage.MyApplication" android:networkSecurityConfig="@xml/network_security_config"> … </application>
Weitere Informationen finden Sie unter Android Konfiguration der Netzwerksicherheit dokumentieren.
HTTP für bestimmte Domains
Sie können festlegen, dass bestimmte Domänen für die Verwendung von klaren HTTP-Anforderungen zugelassen werden. Gehen Sie dazu folgendermaßen vor:
-
Erstellen Sie beispielsweise eine XML-Datei network-security-config.xml , und fügen Sie es dem hinzu res/xml Verzeichnis. Im folgenden Beispiel erfahren Sie, wie Sie Ihre Domains einrichten:
<network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">c.brightcove.com</domain> <domain includeSubdomains="true">solutions.brightcove.com</domain> </domain-config> </network-security-config>
-
Legen Sie den Dateinamen in Ihrem . fest AndroidManifest Wie nachfolgend dargestellt:
<application android:name="mypackage.MyApplication" android:networkSecurityConfig="@xml/network_security_config"> … </application>
Weitere Informationen finden Sie unter Android Konfiguration der Netzwerksicherheit dokumentieren.
Einstellung des Apache HTTP-Clients
Bei Android Pie wurde die Unterstützung des Apache HTTP-Clients entfernt. Dies betrifft Apps, die auf Android Pie oder höher ausgerichtet sind. Es kann sich auch auf Apps auswirken, die auf ältere Android-Versionen abzielen, wenn ein nicht standardmäßiges ClassLoader
. Zur Laufzeit, wenn die ClassLoader
Versucht, eine Apache HTTP-Client-Klasse auf Android Pie zu laden, wird ein NoClassDefFoundError
. Weitere Informationen finden Sie unter Googles: Einstellung des Apache HTTP-Clients dokumentieren.
Wenn Ihre App das Brightcove FreeWheel-Plugin verwendet, tritt dieses Problem auf und Sie erhalten eine Ausnahme wie hier gezeigt:
java.lang.NoClassDefFoundError: tv.freewheel.utils.URLLoader
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/impl/client/BasicCookieStore;
Um dieses Problem zu beheben, fügen Sie die folgende Zeile in die Manifestdatei Ihrer App ein:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
Veraltete Konstanten
Es gibt mehrere Konstanten, die in der veraltet waren KonnektivitätsManager Klasse. Einige dieser Konstanten werden derzeit vom Brightcove SDK verwendet, insbesondere von den Offline-Wiedergabe- und Offline-Analysefunktionen. Hier ist die Liste:
android.net.ConnectivityManager.TYPE_BLUETOOTH
android.net.ConnectivityManager.TYPE_ETHERNET
android.net.ConnectivityManager.TYPE_MOBILE
android.net.ConnectivityManager.TYPE_VPN
android.net.ConnectivityManager.TYPE_WIFI
android.net.ConnectivityManager.TYPE_WIMAX
Dies hat keine Auswirkungen auf die Funktionalität der genannten Funktionen, aber beachten Sie, dass diese Konstanten in einer zukünftigen Android-Betriebssystemversion möglicherweise entfernt werden. Dies gilt auch für das Brightcove Native SDK.