Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Namespaces für native Bibliotheken

In Android 7.0 wurden Namespaces für native Bibliotheken eingeführt, um die interne API-Sichtbarkeit einzuschränken und Situationen zu lösen, in denen Apps versehentlich Plattformbibliotheken anstelle ihrer eigenen verwenden. Weitere Informationen zu anwendungsspezifischen Änderungen finden Sie im Blogbeitrag zur Verbesserung der Stabilität mit privaten C / C ++ - Symbolbeschränkungen in Android 7.0 .

Die Architektur

Die Änderung trennt Systembibliotheken von Anwendungsbibliotheken und erschwert die versehentliche Verwendung interner Systembibliotheken (und umgekehrt).

Namespaces für native Bibliotheken

Abbildung 1. Namespaces für native Bibliotheken

Namespaces für native Bibliotheken verhindern, dass Apps native APIs für private Plattformen verwenden (wie dies bei OpenSSL der Fall war). Außerdem werden Situationen beseitigt, in denen Apps versehentlich Plattformbibliotheken anstelle ihrer eigenen verwenden (wie bei libpng ).

Hinzufügen zusätzlicher nativer Bibliotheken

Zusätzlich zu den öffentlichen Standardbibliotheken können Siliziumanbieter (ab Android 7.0) und Gerätehersteller (ab Android 9) zusätzliche native Bibliotheken bereitstellen, auf die Apps zugreifen können, indem sie diese in die entsprechenden Bibliotheksordner stellen und explizit in .txt auflisten Dateien.

Die Bibliotheksordner sind:

  • /vendor/lib (für 32-Bit) und /vendor/lib64 (für 64-Bit) für Bibliotheken von Siliziumanbietern
  • /system/lib (für 32-Bit) und /system/lib64 (für 64-Bit) für Bibliotheken von Geräteherstellern

Die TXT-Dateien sind:

  • /vendor/etc/public.libraries.txt für Bibliotheken von Siliziumanbietern
  • /system/etc/public.libraries-COMPANYNAME.txt für Bibliotheken von Geräteherstellern, wobei COMPANYNAME auf einen Namen des Herstellers verweist (z. B. awesome.company ). COMPANYNAME sollte mit [A-Za-z0-9_.-]+ ; Alphanumerische Zeichen, _, . (Punkt) und -. Es ist möglich, mehrere solcher TXT-Dateien auf einem Gerät zu haben, wenn einige Bibliotheken von externen Lösungsanbietern stammen.

Nativen Bibliotheken in der system , die von Geräteherstellern veröffentlicht werden muss benannt werden lib*COMPANYNAME.so , zB libFoo.awesome.company.so . Mit anderen Worten, libFoo.so ohne das Firmennamensuffix darf NICHT veröffentlicht werden. Der COMPANYNAME im Bibliotheksdateinamen MUSS mit dem COMPANYNAME im txt-Dateinamen übereinstimmen, in dem der Bibliotheksname aufgeführt ist.

Native Bibliotheken, die Teil von AOSP sind, dürfen NICHT veröffentlicht werden (mit Ausnahme der standardmäßigen öffentlichen nativen Bibliotheken, die standardmäßig öffentlich sind). Nur die zusätzlichen Bibliotheken, die von Siliziumanbietern oder Geräteherstellern hinzugefügt wurden, können Apps zugänglich gemacht werden.

Ab Android 8.0 gelten für öffentliche Bibliotheken von Anbietern die folgenden zusätzlichen Einschränkungen und erforderlichen Setups:

  1. Die native Bibliothek des Anbieters muss ordnungsgemäß gekennzeichnet sein, damit Apps darauf zugreifen können. Wenn Apps (einschließlich Apps von Drittanbietern) Zugriff benötigen, muss die Bibliothek in einer herstellerspezifischen Datei file_contexts wie folgt als same_process_hal_file gekennzeichnet werden:
    /vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
    wobei libnative.so der Name der nativen Bibliothek ist.
  2. Die Bibliothek darf entweder direkt oder transitiv über ihre Abhängigkeiten nicht von anderen Systembibliotheken als VNDK-SP- und LLNDK-Bibliotheken abhängen. Die Liste der VNDK-SP- und LLNDK-Bibliotheken finden Sie unter development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv .

Aktualisieren von Apps, um nicht öffentliche native Bibliotheken nicht zu verwenden

Diese Funktion ist nur für Anwendungen aktiviert, die auf SDK Version 24 oder höher abzielen. Informationen zur Abwärtskompatibilität finden Sie in Tabelle 1. Was ist zu erwarten, wenn Ihre App mit privaten nativen Bibliotheken verknüpft wird? Die Liste der nativen Android-Bibliotheken, auf die Apps zugreifen können (auch als öffentliche native Bibliotheken bezeichnet), ist in CDD-Abschnitt 3.1.1 aufgeführt. Apps, die auf 24 oder höher ausgerichtet sind und nicht öffentliche Bibliotheken verwenden, sollten aktualisiert werden. Weitere Informationen finden Sie unter NDK-Apps, die mit Plattformbibliotheken verknüpft sind.