הגדרת ART

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

דף זה דן כיצד להגדיר ART ואפשרויות ההידור שלו. הנושאים הנידונים כאן כוללים תצורה של קומפילציה מוקדמת של תמונת המערכת, אפשרויות הידור של dex2oat, וכיצד להחליף שטח מחיצות מערכת, שטח מחיצת נתונים וביצועים.

ראה ART ו-Dalvik , פורמט Dalvik Executable , ואת הדפים הנותרים ב-source.android.com כדי לעבוד עם ART. ראה אימות התנהגות אפליקציה ב-Android Runtime (ART) כדי להבטיח שהאפליקציות שלך פועלות כהלכה.

איך ART עובד

ART משתמש בהידור מוקדם (AOT), והחל מ-Android 7.0 (Nougat או N), הוא משתמש בשילוב היברידי של AOT, קומפילציה בדיוק בזמן (JIT) והידור מונחה פרופיל. השילוב של כל מצבי ההידור הללו ניתן להגדרה ויידונו בסעיף זה. כדוגמה, מכשירי Pixel מוגדרים עם זרימת ההידור הבאה:

  1. יישום מותקן בתחילה ללא כל קומפילציה של AOT. בפעמים הראשונות שהאפליקציה פועלת, היא מתפרשת, והשיטות המבוצעות לעתים קרובות מבוצעות ב-JIT.
  2. כאשר המכשיר לא פעיל ונטען, דמון הידור פועל לקוד AOT-קומפילציה בשימוש תכוף על סמך פרופיל שנוצר במהלך הריצות הראשונות.
  3. ההפעלה מחדש הבאה של אפליקציה משתמשת בקוד מונחה הפרופיל ולהימנע מביצוע קומפילציה של JIT בזמן ריצה עבור שיטות שכבר הידור. שיטות שמקבלות הידור של JIT במהלך הריצות החדשות מתווספות לפרופיל, שלאחר מכן ייקלט על ידי דמון הקומפילציה.

ART מורכב מהדר (כלי dex2oat ) וזמן ריצה ( libart.so ) שנטען להפעלת ה-Zygote. הכלי dex2oat לוקח קובץ APK ומייצר קובץ חפץ קומפילציה אחד או יותר שזמן הריצה טוען. מספר הקבצים, ההרחבות והשמות שלהם כפופים לשינוי בין מהדורות, אך נכון לגרסה של אנדרואיד 8, הקבצים שנוצרים הם:

  • .vdex : מכיל את קוד ה-DEX הלא דחוס של ה-APK, עם כמה מטא נתונים נוספים כדי להאיץ את האימות.
  • .odex : מכיל קוד הידור AOT עבור שיטות ב-APK.
  • .art (optional) : מכיל ייצוגים פנימיים של ART של כמה מחרוזות ומחלקות המפורטות ב-APK, המשמשים להאצת הפעלת האפליקציה.

אפשרויות קומפילציה

אפשרויות הידור עבור ART הן משתי קטגוריות:

  1. תצורת מערכת ROM: איזה קוד מקבל AOT-קומפילציה בעת בניית תמונת מערכת.
  2. תצורת זמן ריצה: כיצד ART מרכיב ומריץ יישומים במכשיר.

אפשרות ART אחת המרכזית להגדיר את שתי הקטגוריות הללו היא מסנני מהדר . מסנני מהדר מניעים את האופן שבו ART מרכיב קוד DEX והיא אפשרות המועברת לכלי dex2oat . החל באנדרואיד 8, ישנם ארבעה מסננים נתמכים רשמית:

  • verify : הפעל רק אימות קוד DEX.
  • quicken : (הוסר מאז Android 12) הפעל אימות קוד DEX ובצע אופטימיזציה של כמה הוראות DEX כדי לקבל ביצועי מתורגמן טובים יותר.
  • speed : הפעל אימות קוד DEX ו-AOT-קומפילציה של כל השיטות.
  • speed-profile : הפעל אימות קוד DEX ושיטות קומפילציה של AOT המפורטות בקובץ פרופיל.

תצורת מערכת ROM

קיימות מספר אפשרויות בנייה זמינות עבור הגדרת ROM של מערכת. אופן התצורה של אפשרויות אלה תלוי בשטח האחסון הזמין עבור תמונת המערכת ובמספר היישומים המותקנים מראש. ניתן לחלק את ה-JARs/APKs המורכבים לתוך ROM מערכת לארבע קטגוריות:

  • קוד אתחול classpath: הידור עם מסנן המהדר speed-profile כברירת מחדל.
  • קוד שרת המערכת (ראה PRODUCT_SYSTEM_SERVER_JARS , PRODUCT_APEX_SYSTEM_SERVER_JARS , PRODUCT_STANDALONE_SYSTEM_SERVER_JARS , PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS בהמשך מסמך זה):
    • (מאז אנדרואיד 14 (ניסיוני AOSP)) הידור עם מסנן מהדר speed-profile כברירת מחדל, או הידור עם מסנן מהדר speed אם לא מסופק פרופיל.
    • (עד אנדרואיד 13) הידור עם מסנן מהדר speed כברירת מחדל.
    ניתן להגדרה באמצעות PRODUCT_SYSTEM_SERVER_COMPILER_FILTER (ראה בהמשך מסמך זה).
  • יישומי ליבה ספציפיים למוצר (ראה PRODUCT_DEXPREOPT_SPEED_APPS בהמשך מסמך זה): הידור עם מסנן מהדר speed כברירת מחדל.
  • כל שאר היישומים: הידור עם מסנן המהדר speed-profile כברירת מחדל, או הידור עם מסנן המהדר verify אם לא מסופק פרופיל.

    ניתן להגדרה באמצעות PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER (ראה בהמשך מסמך זה).

אפשרויות Makefile

  • WITH_DEXPREOPT
  • האם dex2oat מופעל על קוד DEX המותקן על תמונת המערכת. מופעל כברירת מחדל.

  • DONT_DEXPREOPT_PREBUILTS (מאז אנדרואיד 5)
  • הפעלת DONT_DEXPREOPT_PREBUILTS מונעת אופטימיזציה מראש של המבנים המוקדמים. אלו הן אפליקציות include $(BUILD_PREBUILT) שצוינו ב- Android.mk שלהם. דילוג על אופטימיזציה מוקדמת של אפליקציות מובנות מראש שסביר להניח שיתעדכנו דרך Google Play חוסך מקום בתמונת המערכת אך מוסיף לזמן האתחול הראשון. שימו לב שלאפשרות זו אין השפעה על אפליקציות מובנות מראש המוגדרות ב- Android.bp .

  • PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER (מאז Android 9)
  • PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER מציין את מסנן המהדר המוגדר כברירת מחדל עבור יישומים שעברו אופטימיזציה מראש. יישומים אלה מוגדרים ב- Android.bp או include $(BUILD_PREBUILT) שצוין ב- Android.mk שלהם. אם לא צוין, ערך ברירת המחדל הוא speed-profile , או verify אם הערך לא צוין ולא מסופק פרופיל.

  • WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY (חדש באנדרואיד 8 MR1)
  • הפעלת WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY אופטימיזציה מראש רק למסלול האתחול וצנצנות שרת המערכת.

  • LOCAL_DEX_PREOPT
  • ניתן להפעיל או להשבית אופטימיזציה מראש על בסיס אפליקציה בודדת על ידי ציון האפשרות LOCAL_DEX_PREOPT בהגדרת המודול. זה יכול להיות שימושי להשבית אופטימיזציה מוקדמת של אפליקציות שעשויות לקבל מיד עדכוני Google Play מכיוון שהעדכונים יגרמו לקוד שעבר אופטימיזציה מראש בתמונת המערכת למיושנת. זה שימושי גם כדי לחסוך מקום ב-OTAs שדרוג גרסאות עיקריות, מכיוון שלמשתמשים יש כבר גרסאות חדשות יותר של אפליקציות במחיצת הנתונים.

    LOCAL_DEX_PREOPT תומך בערכים 'true' או 'false' כדי להפעיל או להשבית אופטימיזציה מראש, בהתאמה. בנוסף, ניתן לציין 'nostripping' אם אופטימיזציה מוקדמת לא צריכה להסיר את קובץ classes.dex מקובץ ה-APK או JAR. בדרך כלל הקובץ הזה מופשט מכיוון שהוא כבר לא נחוץ לאחר אופטימיזציה מוקדמת, אבל האפשרות האחרונה הזו נחוצה כדי לאפשר לחתימות APK של צד שלישי להישאר תקפות.

  • PRODUCT_DEX_PREOPT_BOOT_FLAGS
  • מעביר אפשרויות ל- dex2oat כדי לשלוט על אופן הידור של תמונת האתחול. ניתן להשתמש בו כדי לציין רשימות מחלקות תמונה מותאמות אישית, רשימות מחלקות הידור ומסנני מהדר.

  • PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
  • מעביר אפשרויות ל- dex2oat כדי לשלוט על אופן הידור של כל דבר מלבד תמונת האתחול.

  • PRODUCT_DEX_PREOPT_MODULE_CONFIGS
  • מספק את היכולת להעביר אפשרויות dex2oat עבור מודול מסוים ותצורת מוצר. הוא מוגדר בקובץ device.mk של מוצר על ידי $(call add-product-dex-preopt-module-config,<modules>,<option>) כאשר <modules> הוא רשימה של שמות LOCAL_MODULE ו-LOCAL_PACKAGE עבור JAR ו-APK קבצים, בהתאמה.

  • PRODUCT_DEXPREOPT_SPEED_APPS (New in Android 8)
  • רשימת יישומים שזוהו כליבה למוצרים ורצוי להידור עם מסנן מהדר speed . לדוגמה, יישומים מתמשכים כגון SystemUI מקבלים הזדמנות להשתמש בהידור מונחה פרופיל רק באתחול הבא, כך שייתכן שעדיף שהאפליקציות האלה יהיו תמיד מהידור של AOT.

  • PRODUCT_SYSTEM_SERVER_APPS (New in Android 8)
  • רשימת יישומים שנטענים על ידי שרת המערכת. יישומים אלה מורכבים כברירת מחדל עם מסנן מהדר speed .

  • PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD(Post Android 8)
  • האם לכלול גרסת ניפוי באגים של ART במכשיר. כברירת מחדל, זה מופעל עבור userdebug ו-eng builds. ניתן לעקוף את ההתנהגות על ידי הגדרה מפורשת של האפשרות ל- true או false .

    כברירת מחדל, המכשיר משתמש בגרסה ללא ניפוי באגים ( libart.so ). כדי לעבור, הגדר את מאפיין המערכת persist.sys.dalvik.vm.lib.2 ל- libartd.so .

  • WITH_DEXPREOPT_PIC (Removed in Android 8)
  • באנדרואיד 5.1.0 עד אנדרואיד 6.0.1, ניתן לציין WITH_DEXPREOPT_PIC כדי לאפשר קוד בלתי תלוי במיקום (PIC). עם זה, קוד הידור מהתמונה לא צריך להיות מועבר מ /system לתוך /data/dalvik-cache, חוסך מקום במחיצת הנתונים. עם זאת, יש השפעה קלה על זמן הריצה מכיוון שהיא משביתה אופטימיזציה שמנצלת את הקוד תלוי המיקום. בדרך כלל, מכשירים שרוצים לחסוך מקום ב-/data צריכים לאפשר הידור PIC.

    באנדרואיד 7.0, הידור PIC הופעל כברירת מחדל.

  • WITH_DEXPREOPT_BOOT_IMG_ONLY (הוסר ב-Android 8 MR1)
  • אפשרות זו הוחלפה ב-WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY שגם בוחר מראש את צנצנות שרת המערכת.

  • PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
  • אפשרות זו מציינת את מסנן המהדר עבור שרת המערכת.

    • (מאז אנדרואיד 14 (ניסיוני AOSP)) אם לא צוין, נעשה שימוש במסנן המהדר speed-profile , או במסנן המהדר speed אם לא מסופק פרופיל.
    • (עד אנדרואיד 13) אם לא צוין, נעשה שימוש במסנן מהדר speed .
    • אם מוגדר speed , נעשה שימוש במסנן מהדר speed .
    • אם מוגדר ל- speed-profile , נעשה שימוש במסנן המהדר speed-profile , או בשימוש במסנן verify של המהדר אם לא מסופק פרופיל.
    • אם מוגדר verify , נעשה שימוש במסנן המהדר verify .

  • PRODUCT_SYSTEM_SERVER_JARS , PRODUCT_APEX_SYSTEM_SERVER_JARS , PRODUCT_STANDALONE_SYSTEM_SERVER_JARS , PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
  • להלן רשימות של צנצנות שנטענות על ידי שרת המערכת. הצנצנות מורכבות עם מסנן המהדר שצוין על ידי PRODUCT_SYSTEM_SERVER_COMPILER_FILTER

    • (נדרש) PRODUCT_SYSTEM_SERVER_JARS : רשימת מארזי classpath של שרת המערכת בפלטפורמה (כלומר, כחלק מ- SYSTEMSERVERCLASSPATH ). נדרשת הוספת צנצנות classpath של שרת המערכת לרשימה זו. כישלון בהוספת צנצנות classpath של שרת המערכת לרשימה גורמת לכך שהצנצנות הללו לא נטענות.
    • (נדרש) PRODUCT_APEX_SYSTEM_SERVER_JARS : רשימת צנצנות classpath של שרת המערכת שנמסרו דרך apex (כלומר, כחלק מ- SYSTEMSERVERCLASSPATH ). הפורמט הוא <apex name>:<jar name> . נדרשת הוספת צנצנות classpath של שרת apex לרשימה זו. כישלון בהוספת צנצנות classpath של שרת apex לרשימה זו גורמת לכך שהצנצנות הללו לא נטענות.
    • (אופציונלי, מאז אנדרואיד 13) PRODUCT_STANDALONE_SYSTEM_SERVER_JARS : רשימת צנצנות ששרת המערכת טוען באופן דינמי באמצעות מעמיסי כיתות נפרדים (דרך SystemServiceManager.startServiceFromJar ). הוספת צנצנות שרת מערכת עצמאיות לרשימה זו אינה נדרשת אך מומלצת בחום מכיוון שהיא הופכת את הצנצנות להידור ולכן יש להם ביצועי זמן ריצה טובים.
    • (נדרש, מאז Android 13) PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS : רשימת צנצנות המועברות דרך apex ששרת המערכת נטען באופן דינמי באמצעות מעמיסי כיתות נפרדים (כלומר, דרך SystemServiceManager.startServiceFromJar או שהוכרזו כ <apex-system-service> ). הפורמט הוא <apex name>:<jar name> . נדרשת הוספת צנצנות שרת מערכת apex עצמאיות לרשימה זו. כישלון בהוספת צנצנות שרת מערכת apex עצמאיות לרשימה זו גורם לכישלון אתחול.

    תצורת נתיב אתחול

    • רשימת שיעורים טעונים מראש
    • רשימת המחלקות הטעונות מראש היא רשימה של מחלקות שהזיגוטה מאתחל בעת ההפעלה. זה חוסך מכל אפליקציה את הצורך להפעיל את מאתחול המחלקות הללו בנפרד, מה שמאפשר להם להפעיל מהר יותר ולשתף דפים בזיכרון. קובץ רשימת המחלקות הטעונות מראש נמצא ב- frameworks/base/config/preloaded-classes כברירת מחדל, והוא מכיל רשימה שמכווננת לשימוש רגיל בטלפון. זה עשוי להיות שונה עבור מכשירים אחרים כגון רכיבים לבישים, ויש לכוון אותו בהתאם. היזהר בעת כוונון זה; הוספת יותר מדי מחלקות מבזבזת זיכרון כאשר מחלקות שאינן בשימוש נטענות. הוספת מעט מדי מחלקות מאלצת כל אפליקציה להיות בעלת עותק משלה, מה ששוב מבזבז זיכרון.

      שימוש לדוגמה (ב-device.mk של המוצר):

      PRODUCT_COPY_FILES += <filename>:system/etc/preloaded-classes
      

      הערה: יש למקם שורה זו לפני בירושה של קבצי makefile של תצורת מוצר המקבלים את ברירת המחדל מ: build/target/product/base.mk

    תצורת זמן ריצה

    אפשרויות ג'יט

    האפשרויות הבאות משפיעות על מהדורות אנדרואיד רק כאשר מהדר ART JIT זמין.

    • dalvik.vm.usejit: האם ה-JIT מופעל או לא.
    • dalvik.vm.jitinitialsize (ברירת מחדל 64K): הקיבולת הראשונית של מטמון הקוד. מטמון הקוד יעבור באופן קבוע ויגדל במידת הצורך.
    • dalvik.vm.jitmaxsize (ברירת מחדל 64M): הקיבולת המרבית של מטמון הקוד.
    • dalvik.vm.jitthreshold: (ברירת מחדל 10000) - זהו הסף שמונה ה-"hotness" של מתודה צריך לעבור על מנת שהשיטה תהיה הידור JIT. מונה ה"חמות" הוא מדד פנימי לזמן הריצה. זה כולל את מספר השיחות, סניפים לאחור וגורמים אחרים.
    • dalvik.vm.usejitprofiles: האם פרופילי JIT מופעלים או לא; זה עשוי לשמש גם אם dalvik.vm.usejit הוא false. שים לב שאם זה שקרי, speed-profile מסנן המהדר אינו מקים AOT שום שיטה והוא שווה ערך verify .
    • dalvik.vm.jitprithreadweight (ברירת המחדל היא dalvik.vm.jitthreshold / 20) - המשקל של ה"דגימות" של JIT (ראה jitthreshold) עבור שרשור ממשק המשתמש של האפליקציה. השתמש כדי להאיץ את הקומפילציה של שיטות המשפיעות ישירות על חווית המשתמש בעת אינטראקציה עם האפליקציה.
    • dalvik.vm.jittransitionweight: (ברירת המחדל ל-dalvik.vm.jitthreshold / 10) המשקל של הפעלת השיטה שעוברת בין קוד קומפילציה למתורגמן. זה עוזר לוודא שהשיטות המעורבות מורכבות כדי למזער מעברים (שהם יקרים).

    אפשרויות מנהל חבילות

    מאז אנדרואיד 7.0, יש דרך גנרית לציין את רמת הקומפילציה/אימות שקרה בשלבים שונים. ניתן להגדיר את רמות ההידור באמצעות מאפייני מערכת כאשר ברירת המחדל היא:

    • pm.dexopt.install=speed-profile
    • זהו מסנן הקומפילציה המשמש בעת התקנת אפליקציות דרך Google Play. אנו ממליצים להגדיר את מסנן ההתקנה ל-speed-profile על מנת לאפשר שימוש בפרופילים מקובצי המטא נתונים של dex. שים לב שאם פרופיל לא מסופק או אם הוא ריק, פרופיל מהירות שווה ערך לאימות.

    • pm.dexopt.bg-dexopt=speed-profile
    • זהו מסנן הקומפילציה המשמש כאשר המכשיר אינו פעיל, נטען ונטען במלואו. נסה את מסנן המהדר של speed-profile כדי לנצל את היתרון של קומפילציה מונחה פרופיל ולחסוך באחסון.

    • pm.dexopt.boot-after-ota=verify
    • מסנן הקומפילציה בשימוש לאחר עדכון באוויר. אנו ממליצים בחום על מסנן המהדר verify אפשרות זו כדי למנוע זמני אתחול ארוכים מאוד.

    • pm.dexopt.first-boot=verify
    • מסנן ההידור בפעם הראשונה שהמכשיר מאתחל. המסנן המשמש כאן משפיע רק על זמן האתחול לאחר היצרן. אנו ממליצים verify את המסנן כדי למנוע פעמים ארוכות לפני שמשתמש ישתמש בטלפון בפעם הראשונה. שים לב שאם כל היישומים בתמונת המערכת כבר מורכבים עם verify , speed-profile או speed עם ההקשר הנכון של מטעין המחלקה, pm.dexopt.first-boot לא תהיה השפעה.

    אפשרויות Dex2oat

    שים לב שהאפשרויות הללו משפיעות על dex2oat במהלך הידור במכשיר וכן במהלך אופטימיזציה מוקדמת, בעוד שרוב האפשרויות שנדונו לעיל משפיעות רק על אופטימיזציה מוקדמת.

    כדי לשלוט dex2oat בזמן שהוא מרכיב את תמונת האתחול:

    • dalvik.vm.image-dex2oat-Xms: גודל ערימה ראשונית
    • dalvik.vm.image-dex2oat-Xmx: גודל ערימה מקסימלי
    • dalvik.vm.image-dex2oat-filter: אפשרות מסנן מהדר
    • dalvik.vm.image-dex2oat-threads: מספר שרשורים לשימוש

    כדי לשלוט dex2oat בזמן שהוא קומפילציה של הכל מלבד תמונת האתחול:

    • dalvik.vm.dex2oat-Xms: גודל ערימה ראשונית
    • dalvik.vm.dex2oat-Xmx: גודל ערימה מקסימלי
    • dalvik.vm.dex2oat-filter: אפשרות מסנן מהדר

    במהדורות דרך אנדרואיד 6.0, ניתנת אפשרות אחת נוספת להידור של כל דבר מלבד תמונת האתחול:

    • dalvik.vm.dex2oat-threads: מספר שרשורים לשימוש

    החל מאנדרואיד 6.1, זה הופך לשתי אפשרויות נוספות להידור של הכל מלבד תמונת האתחול:

    • dalvik.vm.boot-dex2oat-threads: מספר השרשורים לשימוש בזמן האתחול
    • dalvik.vm.dex2oat-threads: מספר שרשורים לשימוש לאחר זמן האתחול

    החל מאנדרואיד 7.1, שתי אפשרויות מסופקות לשליטה על אופן השימוש בזיכרון בעת ​​קומפילציה של כל דבר מלבד תמונת האתחול:

    • dalvik.vm.dex2oat-very-large: מינימום גודל קובץ dex הכולל בבתים כדי להשבית את הידור AOT
    • dalvik.vm.dex2oat-swap: השתמש בקובץ ה-dex2oat swap (עבור מכשירים עם זיכרון נמוך)

    אין לצמצם את האפשרויות השולטות בגודל הערימה הראשוני והמקסימלי עבור dex2oat מכיוון שהן יכולות להגביל את היישומים שניתן להדר.

    החל מאנדרואיד 11, שלוש אפשרויות זיקה למעבד מסופקות כדי לאפשר להגביל שרשורי מהדר לקבוצה מסוימת של מעבדים:

    • dalvik.vm.boot-dex2oat-cpu-set: מעבדים המריצים שרשורי dex2oat במהלך זמן האתחול
    • dalvik.vm.image-dex2oat-cpu-set: מעבדים המריצים את dex2oat תוך כדי קומפילציה של תמונת האתחול
    • dalvik.vm.dex2oat-cpu-set: מעבדים מריצים שרשורי dex2oat לאחר זמן האתחול

    יש לציין את המעבדים כרשימה מופרדת בפסיקים של מזהי CPU. לדוגמה כדי להפעיל על dex2oat על המעבדים 0-3, הגדר:

    dalvik.vm.dex2oat-cpu-set=0,1,2,3
    

    בעת הגדרת מאפייני הזיקה ל-CPU, אנו ממליצים להתאים את המאפיין המתאים למספר השרשורים של dex2oat כדי להתאים למספר ה-CPUs שנבחרו כדי למנוע מחלוקת מיותרת על זיכרון ו-I/O:

    dalvik.vm.dex2oat-cpu-set=0,1,2,3
    dalvik.vm.dex2oat-threads=4
    

    החל מאנדרואיד 12, נוספו האפשרויות הבאות:

    • dalvik.vm.ps-min-first-save-ms: הזמן להמתין לזמן הריצה כדי ליצור פרופיל של האפליקציה, בפעם הראשונה שהאפליקציה מופעלת
    • dalvik.vm.ps-min-save-period-ms: הזמן המינימלי להמתנה לפני עדכון הפרופיל של אפליקציה
    • dalvik.vm.systemservercompilerfilter: מסנן המהדר שהמכשיר משתמש בו בעת הידור מחדש של שרת המערכת

    תצורה ספציפית ל-A/B

    תצורת ROM

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

    שימוש לדוגמה (ב- device-common.mk ):

    PRODUCT_PACKAGES += \
         cppreopts.sh
    PRODUCT_PROPERTY_OVERRIDES += \
         ro.cp_system_other_odex=1
    

    וב- BoardConfig.mk של המכשיר:

    BOARD_USES_SYSTEM_OTHER_ODEX := true
    

    שים לב שקוד אתחול classpath, קוד שרת מערכת ויישומי ליבה ספציפיים למוצר תמיד קומפלט למחיצת המערכת. כברירת מחדל, כל שאר היישומים עוברים קומפילציה למחיצת המערכת השנייה שאינה בשימוש. ניתן לשלוט בכך באמצעות ה- SYSTEM_OTHER_ODEX_FILTER , בעל ערך כברירת מחדל של:

    SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/%
    

    רקע dexopt OTA

    עם התקנים תומכי A/B, ניתן להרכיב יישומים ברקע לעדכון לתמונת המערכת החדשה. ראה הידור אפליקציה ברקע כדי לכלול באופן אופציונלי את סקריפט ההידור והקבצים הבינאריים בתמונת המערכת. מסנן ההידור המשמש להידור זה נשלט באמצעות:

    pm.dexopt.ab-ota=speed-profile
    

    אנו ממליצים להשתמש ב- speed-profile כדי לנצל את היתרון של הידור מודרך פרופיל ולחסוך באחסון.