Ab Android 9 (API-Level 28) schränkt die Plattform ein, welche nicht SDK-Schnittstellen Ihre App verwenden kann. Diese Einschränkungen gelten immer dann, wenn eine App auf eine Nicht-SDK-Schnittstelle verweist oder versucht, ihren Handle mithilfe von Reflection oder JNI abzurufen. Diese Einschränkungen wurden eingeführt, um die Nutzer- und Entwicklerfreundlichkeit zu verbessern und das Risiko von Abstürzen für Nutzer und Notfall-Roll-outs für Entwickler zu verringern. Weitere Informationen zu dieser Entscheidung finden Sie unter Stabilität durch geringere Nutzung von Nicht-SDK-Schnittstellen verbessern.
Zwischen SDK- und Nicht-SDK-Schnittstellen unterscheiden
Im Allgemeinen sind öffentliche SDK-Schnittstellen diejenigen, die im Paketindex des Android-Frameworks dokumentiert sind. Die Verarbeitung von Nicht-SDK-Benutzeroberflächen ist ein Implementierungsdetail, das von der API abstrahiert wird. Daher können diese Benutzeroberflächen ohne vorherige Ankündigung geändert werden.
Um Abstürze und unerwartetes Verhalten zu vermeiden, sollten Apps nur die offiziell dokumentierten Teile der Klassen im SDK verwenden. Das bedeutet auch, dass Sie nicht auf Methoden oder Felder zugreifen sollten, die nicht im SDK aufgeführt sind, wenn Sie mit einer Klasse über Mechanismen wie Reflection interagieren.
Listen für Nicht-SDK-APIs
Mit jedem neuen Release von Android werden weitere Nicht-SDK-Schnittstellen eingeschränkt. Uns ist bewusst, dass sich diese Einschränkungen auf Ihren Release-Workflow auswirken können. Wir möchten Ihnen daher die Möglichkeit geben, die Nutzung von Nicht-SDK-Schnittstellen zu erkennen, Feedback zu geben und die neuen Richtlinien zu planen und anzupassen.
Um die Auswirkungen von Einschränkungen für Nicht-SDKs auf Ihren Entwicklungsablauf zu minimieren, sind die Nicht-SDK-Schnittstellen in Listen unterteilt, in denen festgelegt ist, wie stark ihre Verwendung eingeschränkt ist, je nachdem, auf welche API-Ebene das Ziel ausgerichtet ist. In der folgenden Tabelle werden die einzelnen Listen beschrieben:
Liste | Code-Tags | Beschreibung |
---|---|---|
Sperrliste |
|
Nicht-SDK-Schnittstellen, die Sie unabhängig von der Ziel-API-Ebene Ihrer App nicht verwenden können. Wenn Ihre App versucht, auf eine dieser Schnittstellen zuzugreifen, wird ein Fehler vom System ausgegeben. |
Bedingt blockiert |
|
Ab Android 9 (API-Level 28) hat jede API-Ebene Nicht-SDK-Schnittstellen, die eingeschränkt sind, wenn eine App auf diese API-Ebene ausgerichtet ist. Diese Listen sind mit der maximalen API-Ebene ( Wenn Ihre App versucht, auf eine Oberfläche zuzugreifen, die für Ihr Ziel-API-Level eingeschränkt ist, verhält sich das System so, als wäre die API Teil der Blockliste. |
Nicht unterstützt |
|
Nicht-SDK-Schnittstellen, die uneingeschränkt verwendet werden können und von Ihrer App verwendet werden. Beachten Sie jedoch, dass diese Schnittstellen nicht unterstützt werden und ohne vorherige Ankündigung geändert werden können. Diese Schnittstellen werden in zukünftigen Android-Versionen voraussichtlich in einer max-target-x -Liste bedingt blockiert. |
SDK |
|
Oberflächen, die frei verwendet werden können und jetzt im Rahmen des offiziell dokumentierten Android-Frameworks Package Index unterstützt werden. |
APIs testen |
|
Schnittstellen, die für interne Systemtests verwendet werden, z. B. APIs, die Tests über die Compatibility Test Suite (CTS) ermöglichen. Test-APIs sind nicht Teil des SDKs. Ab Android 11 (API-Level 30) sind Test-APIs in der Blockierungsliste enthalten. Sie dürfen also unabhängig vom Ziel-API-Level nicht mehr in Apps verwendet werden. Alle Test-APIs werden nicht unterstützt und können unabhängig vom API-Level der Plattform ohne vorherige Ankündigung geändert werden. |
Sie können einige Nicht-SDK-Schnittstellen verwenden (je nach Ziel-API-Ebene Ihrer App). Die Verwendung von Nicht-SDK-Methoden oder ‑Feldern birgt jedoch immer ein hohes Risiko, dass Ihre App nicht mehr funktioniert. Wenn Ihre App auf Nicht-SDK-Schnittstellen basiert, sollten Sie mit der Planung einer Migration zu SDK-Schnittstellen oder anderen Alternativen beginnen. Wenn Sie keine Alternative zur Verwendung einer Nicht-SDK-Benutzeroberfläche für eine Funktion in Ihrer App finden, sollten Sie eine neue öffentliche API anfordern.
Feststellen, zu welcher Liste eine Benutzeroberfläche gehört
Die Listen der Nicht-SDK-Benutzeroberflächen werden als Teil der Plattform erstellt. In den folgenden Abschnitten finden Sie Informationen zu den einzelnen Android-Releases.
Android 16 (Entwicklervorschau)
Für Android 16 können Sie die folgende Datei herunterladen, in der alle Nicht-SDK-Schnittstellen und die entsprechenden Listen beschrieben werden:
Datei: hiddenapi-flags.csv
SHA-256-Prüfsumme:
a22d5c2fa9c24ec0b864f0680208e9794222d1921114abe3245979143ce6d1c6
Weitere Informationen zu den Änderungen an der Liste der Nicht-SDK-APIs in Android 16 finden Sie unter Änderungen an den Einschränkungen für Nicht-SDK-Schnittstellen in Android 16.
Android 15
Für Android 15 (API-Level 35) können Sie die folgende Datei herunterladen, in der alle nicht SDK-spezifischen Schnittstellen und die entsprechenden Listen beschrieben werden:
Datei: hiddenapi-flags.csv
SHA-256-Prüfsumme:
40134e205e58922a708c453726b279a296e6a1f34a988abd90cec0f3432ea5a9
Weitere Informationen zu den Änderungen an der Liste der nicht SDK-spezifischen APIs in Android 15 finden Sie unter Änderungen an den Einschränkungen für nicht SDK-spezifische Schnittstellen in Android 15.
Android 14
Für Android 14 (API-Level 34) können Sie die folgende Datei herunterladen, in der alle nicht SDK-spezifischen Schnittstellen und die entsprechenden Listen beschrieben werden:
Datei: hiddenapi-flags.csv
SHA-256-Prüfsumme:
7e00db074cbe51c51ff4b411f7b48e98692951395c5c17d069c822cc1d0eae0f
Weitere Informationen zu den Änderungen an der Liste der Nicht-SDK-APIs in Android 14 finden Sie unter Änderungen an den Einschränkungen für Nicht-SDK-Schnittstellen in Android 14.
Android 13
Für Android 13 (API-Level 33) können Sie die folgende Datei herunterladen, in der alle nicht SDK-Schnittstellen und die entsprechenden Listen beschrieben werden:
Datei: hiddenapi-flags.csv
SHA-256-Prüfsumme:
233a277aa8ac475b6df61bffd95665d86aac6eb2ad187b90bf42a98f5f2a11a3
Weitere Informationen zu den Änderungen an der Liste der nicht SDK-spezifischen APIs in Android 13, einschließlich vorgeschlagener öffentlicher API-Alternativen für APIs, die in Android 13 bedingt blockiert sind, finden Sie unter Änderungen an den Einschränkungen für nicht SDK-spezifische Schnittstellen in Android 13.
Android 12
Für Android 12 (API-Level 31) können Sie die folgende Datei herunterladen, in der alle nicht SDK-spezifischen Schnittstellen und die entsprechenden Listen beschrieben werden:
Datei: hiddenapi-flags.csv
SHA-256-Prüfsumme:
40674ff4291eb268f86561bf687e69dbd013df9ec9531a460404532a4ac9a761
Weitere Informationen zu den Änderungen an der Liste der nicht SDK-spezifischen APIs in Android 12, einschließlich vorgeschlagener öffentlicher API-Alternativen für APIs, die in Android 12 bedingt blockiert sind, finden Sie unter Liste der Änderungen für Android 12.
Android 11
Für Android 11 (API-Level 30) können Sie die folgende Datei herunterladen, in der alle nicht SDK-spezifischen Schnittstellen und die entsprechenden Listen beschrieben werden:
Datei: hiddenapi-flags.csv
SHA-256-Prüfsumme:
a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56
Weitere Informationen zu den Änderungen an der Liste der nicht SDK-spezifischen APIs in Android 11, einschließlich vorgeschlagener öffentlicher API-Alternativen für APIs, die in Android 11 bedingt blockiert sind, finden Sie unter Änderungen an der Liste für Android 11.
Android 10
Für Android 10 (API-Level 29) können Sie die folgende Datei herunterladen, in der alle nicht SDK-spezifischen Schnittstellen und die entsprechenden Listen beschrieben werden:
Datei: hiddenapi-flags.csv
SHA-256-Prüfsumme:
f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb
Weitere Informationen zu den Änderungen an der Liste der nicht SDK-APIs in Android 10, einschließlich vorgeschlagener öffentlicher API-Alternativen für APIs, die in Android 10 bedingt blockiert sind, finden Sie unter List changes for Android 10 (Änderungen an der Liste für Android 10).
Android 9
Für Android 9 (API-Level 28) enthält die folgende Textdatei eine Liste der nicht SDK-spezifischen APIs, die nicht eingeschränkt sind (graue Liste):
hiddenapi-light-greylist.txt
.
Die Sperrliste (blacklist
) und die Liste der bedingt blockierten APIs (dunkelgraue Liste) werden zum Zeitpunkt des Builds abgeleitet.
Listen aus AOSP generieren
Wenn Sie mit AOSP arbeiten, können Sie eine hiddenapi-flags.csv
-Datei generieren, die alle nicht SDK-Schnittstellen und die entsprechenden Listen enthält. Laden Sie dazu die AOSP-Quelle herunter und führen Sie dann den folgenden Befehl aus:
m out/soong/hiddenapi/hiddenapi-flags.csv
Sie finden die Datei dann unter folgendem Pfad:
out/soong/hiddenapi/hiddenapi-flags.csv
Erwartetes Verhalten beim Zugriff auf eingeschränkte Nicht-SDK-Schnittstellen
In der folgenden Tabelle wird beschrieben, was passiert, wenn Ihre App versucht, auf eine nicht SDK-Schnittstelle zuzugreifen, die auf der Sperrliste steht.
Zugriffsmittel | Ergebnis |
---|---|
Dalvik-Anweisung, die auf ein Feld verweist | NoSuchFieldError ausgelöst |
Dalvik-Anweisung, die auf eine Methode verweist | NoSuchMethodError ausgelöst |
Reflexion mit Class.getDeclaredField() oder Class.getField() |
NoSuchFieldException ausgelöst |
Reflexion mit Class.getDeclaredMethod() , Class.getMethod() |
NoSuchMethodException ausgelöst |
Reflexion mit Class.getDeclaredFields() , Class.getFields() |
Nicht-SDK-Mitglieder werden nicht in den Ergebnissen angezeigt |
Reflexion mit Class.getDeclaredMethods() , Class.getMethods() |
Nicht-SDK-Mitglieder werden nicht in den Ergebnissen angezeigt |
JNI mit env->GetFieldID() |
NULL zurückgegeben, NoSuchFieldError ausgelöst |
JNI mit env->GetMethodID() |
NULL zurückgegeben, NoSuchMethodError ausgelöst |
App auf Nicht-SDK-Schnittstellen testen
Es gibt mehrere Methoden, mit denen Sie in Ihrer App nach Nicht-SDK-Schnittstellen suchen können.
Mit einer debugfähigen App testen
Sie können Nicht-SDK-Schnittstellen testen, indem Sie eine debuggbare App auf einem Gerät oder Emulator mit Android 9 (API-Level 28) oder höher erstellen und ausführen. Achten Sie darauf, dass das von Ihnen verwendete Gerät oder der von Ihnen verwendete Emulator mit dem Ziel-API-Level Ihrer App übereinstimmt.
Während der Tests Ihrer App druckt das System eine Protokollmeldung aus, wenn Ihre App auf bestimmte Nicht-SDK-Schnittstellen zugreift. In den Protokollmeldungen Ihrer App finden Sie die folgenden Details:
- Die deklarierende Klasse, der Name und der Typ (im Format, das von der Android-Laufzeit verwendet wird).
- Die Zugriffsmethode: Verknüpfung, Reflection oder JNI.
- Zu welcher Liste die Nicht-SDK-Benutzeroberfläche gehört.
Sie können mit adb logcat
auf diese Protokollmeldungen zugreifen, die unter der PID der laufenden App angezeigt werden. Ein Eintrag im Protokoll könnte beispielsweise so aussehen:
Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)
Mit der StrictMode API testen
Sie können auch mit der StrictMode
API nach Nicht-SDK-Schnittstellen suchen. Verwenden Sie die Methode detectNonSdkApiUsage
, um diese Funktion zu aktivieren. Nachdem Sie die StrictMode
API aktiviert haben, können Sie mithilfe einer penaltyListener
einen Callback für jede Verwendung einer nicht SDK-Schnittstelle erhalten, in der Sie eine benutzerdefinierte Verarbeitung implementieren können. Das im Callback bereitgestellte Violation
-Objekt leitet sich von Throwable
ab und der enthaltene Stack-Trace liefert den Kontext der Verwendung.
Mit dem Veridex-Tool testen
Sie können auch das Veridex-Tool zur statischen Analyse auf Ihrem APK ausführen. Das Veridex-Tool scannt die gesamte Codebasis des APK, einschließlich aller Bibliotheken von Drittanbietern, und meldet alle gefundenen Verwendungen von Nicht-SDK-Schnittstellen.
Zu den Einschränkungen des Veridex-Tools gehören:
- Aufrufe über JNI können nicht erkannt werden.
- Es kann nur einen Teil der Aufrufe durch Reflection erkennen.
- Die Analyse inaktiver Codepfade ist auf Prüfungen auf API-Ebene beschränkt.
- Es kann nur auf Computern ausgeführt werden, die SSE4.2- und POPCNT-Anweisungen unterstützen.
Windows
Es werden keine nativen Windows-Binärdateien bereitgestellt. Sie können das Veridex-Tool jedoch unter Windows ausführen, indem Sie die Linux-Binärdateien über das Windows-Subsystem für Linux (WSL) ausführen. Bevor Sie die Schritte in diesem Abschnitt ausführen, installieren Sie die WSL und wählen Sie Ubuntu als Linux-Distribution aus.
Nachdem Ubuntu installiert ist, starten Sie ein Ubuntu-Terminal und führen Sie dann die folgenden Schritte aus:
- Laden Sie das veridex-Tool aus dem Repository für vorgefertigte Android-Laufzeitumgebungen herunter.
- Extrahieren Sie den Inhalt der Datei
appcompat.tar.gz
. - Suchen Sie im extrahierten Ordner nach der Datei
veridex-linux.zip
und extrahieren Sie sie. Rufen Sie den entpackten Ordner auf und führen Sie den folgenden Befehl aus. Dabei steht
your-app.apk
für die APK-Datei, die Sie testen möchten:./appcompat.sh --dex-file=your-app.apk
macOS
So führen Sie das Veridex-Tool unter macOS aus:
- Laden Sie das veridex-Tool aus dem Repository für vorgefertigte Android-Laufzeitumgebungen herunter.
- Extrahieren Sie den Inhalt der Datei
appcompat.tar.gz
. - Suchen Sie im extrahierten Ordner nach der Datei
veridex-mac.zip
und extrahieren Sie sie. Rufen Sie den entpackten Ordner auf und führen Sie den folgenden Befehl aus. Dabei ist
/path-from-root/your-app.apk
der Pfad zum zu testenden APK, ausgehend vom Stammverzeichnis Ihres Systems:./appcompat.sh --dex-file=/path-from-root/your-app.apk
Linux
So führen Sie das Veridex-Tool unter Linux aus:
- Laden Sie das veridex-Tool aus dem Repository für vorgefertigte Android-Laufzeitumgebungen herunter.
- Extrahieren Sie den Inhalt der Datei
appcompat.tar.gz
. - Suchen Sie im extrahierten Ordner nach der Datei
veridex-linux.zip
und extrahieren Sie sie. Rufen Sie den entpackten Ordner auf und führen Sie den folgenden Befehl aus. Dabei steht
your-app.apk
für die APK-Datei, die Sie testen möchten:./appcompat.sh --dex-file=your-app.apk
Mit dem Lint-Tool von Android Studio testen
Wenn Sie Ihre App in Android Studio erstellen, wird Ihr Code mit dem Lint-Tool auf mögliche Probleme geprüft. Wenn Ihre App Nicht-SDK-Schnittstellen verwendet, werden je nach Liste, zu der diese Schnittstellen gehören, möglicherweise Buildfehler oder Warnungen angezeigt.
Sie können das Lint-Tool auch über die Befehlszeile ausführen oder Prüfungen manuell für ein bestimmtes Projekt, einen bestimmten Ordner oder eine bestimmte Datei ausführen.
Mit der Play Console testen
Wenn Sie Ihre App in der Play Console in einen Test-Track hochladen, wird sie automatisch auf potenzielle Probleme geprüft und ein Pre-Launch-Bericht wird generiert. Wenn Ihre App Nicht-SDK-Schnittstellen verwendet, wird im Pre-Launch-Bericht je nach Liste, zu der diese Schnittstellen gehören, ein Fehler oder eine Warnung angezeigt.
Weitere Informationen finden Sie im Abschnitt zur Android-Kompatibilität im Hilfeartikel Pre-Launch-Berichte zum Erkennen von Problemen verwenden.
Neue öffentliche API anfordern
Wenn Sie keine Alternative zur Verwendung einer Nicht-SDK-Benutzeroberfläche für eine Funktion in Ihrer App finden, können Sie eine neue öffentliche API anfordern, indem Sie in unserem Issue Tracker eine Funktionsanfrage erstellen.
Geben Sie beim Erstellen einer Funktionsanfrage die folgenden Informationen an:
- Welche nicht unterstützte API Sie verwenden, einschließlich des vollständigen Descriptors in der
Accessing hidden ...
-Logcat-Nachricht. - Warum Sie diese APIs verwenden müssen, einschließlich Details zur übergeordneten Funktion, für die die API erforderlich ist, nicht nur Details auf niedriger Ebene.
- Warum die zugehörigen öffentlichen SDK-APIs für Ihre Zwecke nicht ausreichen.
- Andere Alternativen, die Sie ausprobiert haben, und warum diese nicht funktioniert haben.
Wenn Sie diese Details in Ihrer Funktionsanfrage angeben, steigt die Wahrscheinlichkeit, dass eine neue öffentliche API gewährt wird.
Sonstige Fragen
In diesem Abschnitt finden Sie Antworten auf weitere häufig gestellte Fragen von Entwicklern:
Allgemeine Fragen
Wie kann Google sicher sein, dass die Anforderungen aller Apps über den Issuetracker erfasst werden können?
Die ersten Listen für Android 9 (API-Level 28) wurden durch eine statische Analyse von Apps erstellt, die mit den folgenden Methoden ergänzt wurde:
- manuelle Tests der Top-Apps bei Google Play und anderer Anbieter
- Interne Berichte
- automatische Datenerhebung von internen Nutzern
- Berichte zur Entwicklervorschau
- eine zusätzliche statische Analyse, die konservativ mehr Falschalarme einbezieht
Bei der Bewertung der Listen für jede neue Version berücksichtigen wir die API-Nutzung sowie das Feedback der Entwickler über den Issue-Tracker.
Wie kann ich den Zugriff auf Nicht-SDK-Schnittstellen aktivieren?
Sie können den Zugriff auf Nicht-SDK-Schnittstellen auf Entwicklungsgeräten aktivieren, indem Sie mithilfe von adb-Befehlen die API-Durchsetzungsrichtlinie ändern. Die verwendeten Befehle variieren je nach API-Ebene. Für diese Befehle ist kein gerootetes Gerät erforderlich.
- Android 10 (API-Level 29) oder höher
Verwenden Sie den folgenden adb-Befehl, um den Zugriff zu aktivieren:
command:
adb shell settings put global hidden_api_policy 1
Verwenden Sie den folgenden Befehl, um die API-Durchsetzungsrichtlinie auf die Standardeinstellungen zurückzusetzen:
adb shell settings delete global hidden_api_policy
- Android 9 (API-Level 28)
Verwenden Sie die folgenden adb-Befehle, um den Zugriff zu aktivieren:
adb shell settings put global hidden_api_policy_pre_p_apps 1
adb shell settings put global hidden_api_policy_p_apps 1
Verwenden Sie die folgenden Befehle, um die API-Durchsetzungsrichtlinie auf die Standardeinstellungen zurückzusetzen:
adb shell settings delete global hidden_api_policy_pre_p_apps
adb shell settings delete global hidden_api_policy_p_apps
Sie können die Ganzzahl in der API-Durchsetzungsrichtlinie auf einen der folgenden Werte festlegen:
- 0: Deaktiviert die Erkennung aller Nicht-SDK-Benutzeroberflächen. Wenn Sie diese Einstellung verwenden, werden alle Protokollmeldungen für die Verwendung einer Nicht-SDK-Benutzeroberfläche deaktiviert und Sie können Ihre App nicht mit der
StrictMode
API testen. Diese Einstellung wird nicht empfohlen. - 1: Zugriff auf alle Nicht-SDK-Benutzeroberflächen aktivieren, aber Protokollmeldungen mit Warnungen bei jeder Verwendung einer Nicht-SDK-Benutzeroberfläche ausgeben. Mit dieser Einstellung können Sie Ihre App auch mit der
StrictMode
API testen. - 2: Die Verwendung von Nicht-SDK-Schnittstellen, die auf der Sperrliste stehen oder für Ihre Ziel-API-Ebene bedingt blockiert sind, wird unterbunden.
Fragen zu Listen mit Nicht-SDK-Benutzeroberflächen
Wo finde ich die Listen der nicht SDK-APIs im System-Image?
Sie sind in den Flag-Bits für den Feld- und Methodenzugriff in Plattform-DEX-Dateien codiert. Im System-Image gibt es keine separate Datei, die diese Listen enthält.
Sind die Listen der nicht SDK-APIs auf verschiedenen OEM-Geräten mit denselben Android-Versionen identisch?
OEMs können der Sperrliste eigene Schnittstellen hinzufügen, aber keine Schnittstellen aus den AOSP-Listen für nicht SDK-APIs entfernen. Die CDD verhindert solche Änderungen und CTS-Tests sorgen dafür, dass die Liste von der Android Runtime erzwungen wird.
Fragen zur Kompatibilität ähnlicher Apps
Gibt es Einschränkungen für Nicht-NDK-Schnittstellen in nativem Code?
Das Android SDK enthält Java-Schnittstellen. Ab Android 7 (API-Level 26) hat die Plattform den Zugriff auf nicht NDK-Schnittstellen für nativen C/C++-Code eingeschränkt. Weitere Informationen finden Sie unter Stabilität mit privaten C/C++-Symboleinschränkungen in Android N verbessern.
Ist geplant, die Manipulation von dex2oat- oder DEX-Dateien einzuschränken?
Wir haben derzeit keine Pläne, den Zugriff auf die dex2oat-Binärdatei einzuschränken. Wir beabsichtigen jedoch nicht, das DEX-Dateiformat stabil zu machen oder es über die Teile hinaus als öffentliche Schnittstelle zu verwenden, die im Dalvik-Ausführformat öffentlich spezifiziert sind. Wir behalten uns das Recht vor, dex2oat und die nicht näher bezeichneten Teile des DEX-Formats jederzeit zu ändern oder zu entfernen. Beachten Sie auch, dass abgeleitete Dateien, die von dex2oat erstellt wurden, wie ODEX (auch OAT genannt), VDEX und CDEX, alle als „Nicht spezifiziert“ gekennzeichnet sind.
Was ist, wenn ein wichtiges Drittanbieter-SDK (z. B. ein Obfuscator) nicht ohne nicht-SDK-Schnittstellen auskommt, aber die Kompatibilität mit zukünftigen Android-Versionen aufrechterhalten wird? Kann Android in diesem Fall von seinen Kompatibilitätsanforderungen absehen?
Wir haben nicht vor, Kompatibilitätsanforderungen pro SDK zu erlassen. Wenn ein SDK-Entwickler die Kompatibilität nur durch die Verwendung von Schnittstellen in den nicht unterstützten Listen (früher grau) aufrechterhalten kann, sollte er mit der Planung einer Migration zu SDK-Schnittstellen oder anderen Alternativen beginnen und eine neue öffentliche API anfordern, wenn er keine Alternative zur Verwendung einer Nicht-SDK-Schnittstelle findet.
Gelten Einschränkungen für nicht SDK-basierte Oberflächen für alle Apps, einschließlich System- und selbst entwickelter Apps, und nicht nur für Drittanbieter-Apps?
Ja, es gibt jedoch Ausnahmen für Apps, die mit dem Plattformschlüssel signiert sind, und für einige System-Image-Apps. Diese Ausnahmen gelten nur für Apps, die Teil des System-Images (oder aktualisierter System-Image-Apps) sind. Die Liste ist nur für Apps gedacht, die auf den privaten Plattform-APIs und nicht auf den SDK-APIs basieren (LOCAL_PRIVATE_PLATFORM_APIS := true
).