Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Namespace per librerie native

Android 7.0 ha introdotto spazi dei nomi per le librerie native per limitare la visibilità dell'API interna e risolvere situazioni in cui le app finiscono accidentalmente utilizzando le librerie della piattaforma anziché le proprie. Consulta il post sul miglioramento della stabilità con restrizioni dei simboli C / C ++ privati ​​nel post del blog Android 7.0 per sviluppatori Android per modifiche specifiche dell'applicazione.

Architettura

La modifica separa le librerie di sistema dalle librerie dell'applicazione e rende difficile l'utilizzo accidentale delle librerie di sistema interne (e viceversa).

Spazi dei nomi per le librerie native

Figura 1. Spazi dei nomi per le librerie native

Gli spazi dei nomi per le librerie native impediscono alle app di utilizzare API native della piattaforma privata (come è stato fatto con OpenSSL). Rimuove anche le situazioni in cui le app finiscono accidentalmente utilizzando le librerie della piattaforma anziché le proprie (come testimoniato da libpng ).

Aggiunta di ulteriori librerie native

Oltre alle librerie native pubbliche standard, i fornitori di silicio (a partire da Android 7.0) e i produttori di dispositivi (a partire da Android 9) possono scegliere di fornire librerie native aggiuntive accessibili alle app inserendole nelle rispettive cartelle delle librerie ed elencandole esplicitamente in .txt File.

Le cartelle della libreria sono:

  • /vendor/lib (per 32-bit) e /vendor/lib64 (per 64-bit) per librerie di fornitori di silicio
  • /system/lib (per 32 bit) e /system/lib64 (per 64 bit) per librerie dei produttori di dispositivi

I file .txt sono:

  • /vendor/etc/public.libraries.txt per le librerie dei fornitori di silicio
  • /system/etc/public.libraries-COMPANYNAME.txt per le librerie dei produttori di dispositivi, dove COMPANYNAME fa riferimento a un nome del produttore (come awesome.company ). COMPANYNAME dovrebbe corrispondere a [A-Za-z0-9_.-]+ ; caratteri alfanumerici, _, . (punto) e -. È possibile avere più di questi file .txt in un dispositivo se alcune librerie provengono da fornitori di soluzioni esterne.

Le librerie native nella partizione di system rese pubbliche dai produttori di dispositivi DEVONO essere denominate lib*COMPANYNAME.so , ad esempio libFoo.awesome.company.so . In altre parole, libFoo.so senza il suffisso del nome dell'azienda NON DEVE essere reso pubblico. Il COMPANYNAME nel nome del file della libreria DEVE corrispondere al COMPANYNAME nel nome del file txt in cui è elencato il nome della libreria.

Le librerie native che fanno parte di AOSP NON DEVONO essere rese pubbliche (tranne le librerie native pubbliche standard che sono pubbliche per impostazione predefinita). Solo le librerie aggiuntive aggiunte dai produttori di silicio o dai produttori di dispositivi possono essere rese accessibili alle app.

A partire da Android 8.0, le librerie pubbliche del fornitore hanno le seguenti restrizioni aggiuntive e impostazioni necessarie:

  1. La libreria nativa nel fornitore deve essere correttamente etichettata in modo che sia accessibile alle app. Se l'accesso è richiesto da qualsiasi app (comprese le app di terze parti), la libreria deve essere etichettata come same_process_hal_file in un file file_contexts specifico del file_contexts come segue:
    /vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
    dove libnative.so è il nome della libreria nativa.
  2. La libreria, direttamente o transitivamente tramite le sue dipendenze, non deve dipendere da librerie di sistema diverse dalle librerie VNDK-SP e LLNDK. L'elenco delle librerie VNDK-SP e LLNDK è disponibile in development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv .

Aggiornamento di app per non utilizzare librerie native non pubbliche

Questa funzione è abilitata solo per le applicazioni destinate all'SDK versione 24 o successive; per la compatibilità con le versioni precedenti, vedere la Tabella 1. Cosa aspettarsi se l'app si collega a librerie native private . L'elenco delle librerie native Android accessibili alle app (note anche come librerie native pubbliche) è elencato nella sezione 3.1.1 del CDD. Le app che hanno come target 24 o versioni successive e che utilizzano librerie non pubbliche devono essere aggiornate. Vedi App NDK che si collegano alle librerie della piattaforma per maggiori dettagli.