אנדרואיד 7.0 הציגה מרחבי שמות לספריות מקוריות כדי להגביל את הנראות הפנימית של API ולפתור מצבים שבהם אפליקציות משתמשות בטעות בספריות פלטפורמה במקום שלהן. עיין בפוסט שיפור היציבות עם מגבלות סמל C/C++ פרטיות בבלוג של מפתחי Android 7.0 Android לשינויים ספציפיים ליישום.
ארכיטקטורה
ב-Android 7.0 ומעלה, ספריות מערכת מופרדות מספריות אפליקציות.

איור 1. מרחבי שמות לספריות מקוריות
מרחבי שמות עבור ספריות מקוריות מונעות מאפליקציות להשתמש בממשקי API מקוריים של פלטפורמה פרטית (כפי שנעשה עם OpenSSL). זה גם מסיר מצבים שבהם אפליקציות משתמשות בטעות בספריות פלטפורמה במקום שלהן (כפי שניתן לראות ב- libpng
). קשה לספריות אפליקציות להשתמש בספריות מערכת פנימיות במקרה (ולהיפך).
הוספת ספריות מקומיות נוספות
בנוסף לספריות מקוריות ציבוריות רגילות, ספקי סיליקון (החל מ-Android 7.0) ויצרני מכשירים (החל מ-Android 9) עשויים לבחור לספק ספריות מקוריות נוספות נגישות לאפליקציות על ידי הכנסתן תחת תיקיות הספרייה המתאימות ורישום מפורש שלהן ב-.txt קבצים.
תיקיות הספרייה הן:
-
/vendor/lib
(עבור 32 סיביות) ו/vendor/lib64
(עבור 64 סיביות) עבור ספריות של ספקי סיליקון -
/system/lib
(עבור 32 סיביות) ו/system/lib64
(עבור 64 סיביות) עבור ספריות מיצרני מכשירים
קבצי ה-.txt הם:
-
/vendor/etc/public.libraries.txt
עבור ספריות של ספקי סיליקון -
/system/etc/public.libraries-COMPANYNAME.txt
עבור ספריות מיצרני מכשירים, כאשרCOMPANYNAME
מתייחס לשם של היצרן (כגוןawesome.company
).COMPANYNAME
חייב להתאים ל-[A-Za-z0-9_.-]+
; אותיות אלפא - נומריות, _, . (נקודה) ו-. אפשר להחזיק מספר קובצי txt כאלה במכשיר אם חלק מהספריות הן מספקי פתרונות חיצוניים.
ספריות מקוריות במחיצת system
המפורסמות לציבור על ידי יצרני המכשיר חייבות להיקרא lib*COMPANYNAME.so
, לדוגמה, libFoo.awesome.company.so
. במילים אחרות, אסור לפרסם את libFoo.so
ללא סיומת שם החברה. COMPANYNAME
בשם קובץ הספרייה חייב להתאים ל- COMPANYNAME
בשם קובץ ה-txt שבו מופיע שם הספרייה.
אסור לפרסם ספריות מקוריות שהן חלק מ-AOSP (למעט הספריות המקומיות הציבוריות הסטנדרטיות שהן ציבוריות כברירת מחדל). רק הספריות הנוספות שנוספו על ידי ספקי סיליקון או יצרני מכשירים ניתנות לנגישות לאפליקציות.
החל מ-Android 8.0, לספריות ציבוריות של ספקים יש את ההגבלות הנוספות וההגדרות הנדרשות:
- הספרייה המקורית של הספק חייבת להיות מסומנת כהלכה כדי שתוכל להיות נגישה לאפליקציות. אם נדרשת גישה על ידי אפליקציות כלשהן (כולל יישומי צד שלישי), הספרייה חייבת להיות מתויגת כ-
same_process_hal_file
בקובץfile_contexts
ספציפי לספק באופן הבא:/vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
כאשרlibnative.so
הוא שם הספרייה המקורית. - הספרייה, באופן ישיר או טרנזיטיבי באמצעות התלות שלה, לא חייבת להיות תלויה בספריות מערכת מלבד ספריות VNDK-SP ו-LLNDK. אתר את רשימת הספריות VNDK-SP ו-LLNDK בכתובת
development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv
.
עדכון אפליקציות כך שלא ישתמשו בספריות מקוריות שאינן ציבוריות
תכונה זו מופעלת רק עבור יישומים המתמקדים ב-SDK גרסה 24 ואילך; לתאימות לאחור, ראה טבלה 1. למה לצפות אם האפליקציה שלך מקשרת לספריות מקוריות פרטיות . רשימת הספריות המקוריות של אנדרואיד הנגישות לאפליקציות (המוכרות גם כספריות מקוריות ציבוריות) רשומה בסעיף CDD 3.1.1. יש לעדכן אפליקציות הממוקדות לגילאי 24 ומעלה ומשתמשות בספריות שאינן ציבוריות. ראה אפליקציות NDK המקשרות לספריות פלטפורמה לפרטים נוספים.
עדכון אפליקציות עבור התלות בספרייה המקורית שלהן
אפליקציות המתמקדות ב-SDK גרסה 31 (Android 12) ומעלה חייבות לציין במפורש את התלות המקורית של הספרייה המשותפת שלהן באמצעות <uses-native-library>
במניפסט האפליקציה. אם חלק כלשהו מהספרייה המבוקשת אינו קיים במכשיר, האפליקציה לא מותקנת. כאשר האפליקציות מותקנות, הן מסופקות רק עם הספריות המשותפות המקוריות שביקשו. משמעות הדבר היא שאפליקציות אינן יכולות לגשת לספריות משותפות מקוריות שאינן מופיעות במניפסט האפליקציה.