בניית חבילות OTA

אפשר להשתמש בota_from_target_files שסופק ב-build/make/tools/releasetools כדי ליצור גרסה מלאה ומצטברת חבילות OTA למכשירים שמשתמשים בעדכוני מערכת A/B או עדכוני מערכת שאינם מסוג A/B. הכלי לוקח את קובץ target-files.zip שנוצר על ידי מערכת ה-build של Android כקלט.

במכשירים עם Android מגרסה 11 ואילך, אתם יכולים ליצור גרסת build חבילת OTA אחת לכמה מכשירים עם מק"טים שונים. כדי לעשות את זה, הגדרה של מכשירי היעד לשימוש בטביעות אצבע דינמיות ולעדכן את המטא-נתונים של ה-OTA כדי לכלול את המכשיר השם וטביעת האצבע ברשומות לפני ואחרי התנאי.

חבילות OTA מבוססות-קבצים של Android 8.0 שהוצאו משימוש למכשירים שאינם מסוג A/B, שחייבות להיות במקום זאת, צריך להשתמש בחבילות OTA מבוססות-בלוק. שפת תרגום יצירת חבילות OTA מבוססות-בלוקים או מכשירים עם Android מגרסה 7.x ומטה, אישור האפשרות --block לפרמטר ota_from_target_files.

פיתוח עדכונים מלאים

עדכון מלא הוא חבילת OTA שמכילה את כל המצב הסופי של המכשיר (מחיצות מערכת, הפעלה ושחזור). כל עוד המכשיר מסוגל של קבלת החבילה ויישום שלה, החבילה יכולה להתקין את ה-build בלי קשר למצב הנוכחי של המכשיר. לדוגמה, פקודות משתמשות בכלי גרסה כדי לבנות את ארכיון target-files.zip מכשיר tardis.

. build/envsetup.sh && lunch tardis-eng
mkdir dist_output
make dist DIST_DIR=dist_output

make dist יוצר חבילת OTA מלאה (ב-$OUT). הקובץ .zip שהתקבל מכיל את כל מה שדרוש לבניית חבילות OTA למכשיר tardis. אפשר גם לפתח את ota_from_target_files כקובץ בינארי של python ולקרוא לו ליצור חבילות מלאות או מצטברות.

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

הנתיב ota_from_target_files מוגדר ב-$PATH, והפיתון שמתקבל הקובץ הבינארי נמצא בספרייה out/.

ota_update.zip מוכן לשליחה של מכשירי בדיקה (הכול חתום במפתח הבדיקה). עבור מכשירי משתמשים, יש ליצור מפתחות פרטיים משלך ולהשתמש בהם בתור שמפורטות במאמר חתימה על גרסאות build.

יצירת עדכונים הדרגתיים

עדכון מצטבר הוא חבילת OTA שמכילה תיקונים בינאריים לנתונים כבר במכשיר. חבילות עם עדכונים מצטברים בדרך כלל קטנות יותר כי הם לא צריכים לכלול קבצים שלא השתנו. בנוסף, כמו שהקבצים שהשתנו לרוב דומות מאוד לגרסאות הקודמות, החבילה צריכה לכלול רק קידוד של ההבדלים בין שני הקבצים.

אפשר להתקין חבילת עדכון מצטבר רק במכשירים שבהם build של קוד המקור שמשמש להרכבת החבילה. כדי ליצור עדכון מצטבר, נדרש הקובץ target_files.zip מה-build הקודם (הזה הרצוי כדי לעדכן מ-) וגם את הקובץ target_files.zip מה-build החדש. עבור למשל, הפקודות הבאות משתמשות בכלי גרסה כדי ליצור עדכון מצטבר למכשיר tardis.

ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip

ה-build הזה דומה מאוד ל-build הקודם ולעדכון המצטבר החבילה (incremental_ota_update.zip) קטנה בהרבה עדכון מלא (כ-1MB במקום 60MB).

מחלקים חבילה מצטברת רק למכשירים שפועלים בדיוק באותו האופן ה-build הקודם ששימש כנקודת ההתחלה של החבילה המצטברת. עליך להבהב התמונות בPREVIOUS-tardis-target_files.zip או PREVIOUS-tardis-img.zip (שניהם נוצרו באמצעות make dist, כדי להבהב באמצעות fastboot update), במקום את היחידות שבתוך הספרייה PRODUCT_OUT (שנוצרו באמצעות make, שיישמר מהבהב עם fastboot flashall). מנסה להתקין את החבילה המצטברת במכשיר עם תוצאות build אחרות, התקבלה שגיאת התקנה. כאשר ההתקנה נכשלה, המכשיר נשאר באותו מצב עבודה (עם מערכת); החבילה מאמתת את המצב הקודם של כל הקבצים שהיא מעדכנת לפני שנוגעים בהם, כדי שהמכשיר לא יהיה במצב משודרג למחצה.

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

בניית חבילות OTA למספר מק"טים

מערכת Android מגרסה 11 ואילך תומכת בשימוש ב-OTA יחיד חבילה למספר מכשירים עם מק"טים שונים. כדי לעשות את זה צריך להגדיר מכשירי היעד להשתמש בטביעות אצבע דינמיות ועדכון המטא-נתונים של ה-OTA (באמצעות כלי OTA) כדי לכלול את שם המכשיר וטביעת האצבע לפני ואחרי רשומות של תנאי.

מידע על מק"טים

הפורמט של מק"ט הוא וריאציה של מערכת build משולבת , היא בדרך כלל קבוצת משנה לא מוצהרת של הפרמטרים הנוכחיים של build_fingerprint. יצרני ציוד מקורי יכולים להשתמש בכל שילוב של פרמטרים של גרסת build שאושרו על ידי CDD עבור מק"ט, גם להשתמש בתמונה אחת בשביל המק"טים האלה. לדוגמה, במק"ט הבא יש כמה וריאציות:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA הוא רמת המכשיר (למשל, Pro, Premium או Plus)
  • modifierB הוא וריאציית החומרה (כמו רדיו)
  • modifierC הוא האזור, שיכול להיות כללי (למשל NA, אירופה, המזרח התיכון ואפריקה (EMEA) או CHN) או ספציפי למדינה או לשפה (למשל JPN, ENG או CHN)

יצרני ציוד מקורי רבים משתמשים בתמונה אחת עבור כמה מק"טים, ואז מפיקים את המוצר הסופי שם המכשיר וטביעת האצבע שלו בזמן הריצה לאחר אתחול המכשיר. התהליך הזה מפשט את תהליך הפיתוח של הפלטפורמה ומאפשר למכשירים עם אבל גם שמות מוצרים שונים כדי לשתף תמונות נפוצות (כמו tardis וגם tardispro).

שימוש בטביעות אצבע דינמיות

טביעת אצבע היא שרשור מוגדר של build פרמטרים כמו ro.product.brand, ro.product.name וגם ro.product.device. טביעת האצבע של המכשיר נגזר מטביעת האצבע של מחיצת המערכת ומשמש המזהה הייחודי של התמונות (והבייטים) שפועלות במכשיר. כדי ליצור טביעת אצבע דינמית, משתמשים בלוגיקה דינמית בקובץ build.prop של המכשיר כדי מקבלים את הערך של משתני תוכנת האתחול בזמן האתחול של המכשיר, ואז משתמשים בנתונים האלה יצירה של טביעת אצבע דינמית למכשיר.

לדוגמה, כדי להשתמש בטביעות אצבע דינמיות במכשירים tardis ו-tardispro, מעדכנים את הקבצים הבאים כפי שמוצג בהמשך.

  • מעדכנים את הקובץ odm/etc/build_std.prop כך שיכלול את השורה הבאה.

    ro.odm.product.device=tardis
    
  • מעדכנים את הקובץ odm/etc/build_pro.prop כך שיכלול את השורה הבאה.

    ro.odm.product.device=tardispro
    
  • מעדכנים את הקובץ odm/etc/build.prop כך שיכלול את השורות הבאות.

    ro.odm.product.device=tardis
    import /odm/etc/build_${ro.boot.product.hardware.sku}.prop
    

השורות האלה מגדירות באופן דינמי את שם המכשיר, טביעת האצבע ro.build.fingerprint על סמך הערך של מאפיין תוכנת האתחול ro.boot.product.hardware.sku (לקריאה בלבד).

עדכון מטא-נתונים של חבילת OTA

חבילת OTA מכילה קובץ מטא-נתונים (META-INF/com/android/metadata) מתאר את החבילה, כולל את התנאי המוקדם והתנאי המאוחר של ה-OTA חבילה. לדוגמה, הקוד הבא הוא קובץ המטא-נתונים של חבילת OTA מטרגט את המכשיר tardis.

post-build=google/tardis/tardis:11/RP1A.200521.001/6516341:userdebug/dev-keys
post-build-incremental=6516341
post-sdk-level=30
post-security-patch-level=2020-07-05
post-timestamp=1590026334
pre-build=google/tardis/tardis:11/RP1A.200519.002.A1/6515794:userdebug/dev-keys
pre-build-incremental=6515794
pre-device=tardis

הערכים pre-device, pre-build-incremental ו-pre-build מגדירים את הערכים של צריך להגדיר את המכשיר כדי שאפשר יהיה להתקין את חבילת ה-OTA. הערכים post-build-incremental ו-post-build מגדירים את מצב המכשיר הצפוי אחרי התקנת חבילת OTA. הערכים של pre- וגם השדות post- נגזרים ממאפייני ה-build התואמים הבאים.

  • הערך pre-device נגזר מנכס ה-build ro.product.device.
  • הערכים pre-build-incremental ו-post-build-incremental נגזרים מנכס ה-build ro.build.version.incremental.
  • הערכים pre-build ו-post-build נגזרים נכס build אחד (ro.build.fingerprint).

במכשירים עם Android מגרסה 11 ואילך, אפשר להשתמש ב- הדגל --boot_variable_file בכלי OTA כדי לציין נתיב לקובץ מכיל את הערכים של משתני זמן הריצה ששימשו ליצירת היא טביעת אצבע דינמית. לאחר מכן הנתונים משמשים כדי לעדכן את המטא-נתונים של ה-OTA כך שיכללו שם המכשיר וטביעת האצבע בתנאים pre- ו-post- (באמצעות קו אנכי | כתו מפריד). הדגל --boot_variable_file כולל התחביר והתיאור הבאים.

  • תחביר: --boot_variable_file <path>
  • תיאור: מציין נתיב לקובץ שמכיל את הערכים האפשריים של ro.boot.* נכסים. משמש לחישוב טביעות האצבע הזמינות בסביבת זמן הריצה כאשר מאפייני ro.product.* מסוימים מבוטלים על ידי הצהרת הייבוא. הקובץ צריך לכלול מאפיין אחד בכל שורה, כאשר בכל שורה מופיעים הפרטים הבאים פורמט: prop_name=value1,value2.

לדוגמה, כשהנכס הוא ro.boot.product.hardware.sku=std,pro, המטא-נתונים של OTA במכשירים tardis ו-tardispro מוצגים בהמשך.

post-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-device=tardis|tardispro

כדי לתמוך בפונקציונליות הזו במכשירים עם Android 10, אפשר לעיין בחומר העזר בנושא . רשימת השינויים הזו מנתחת באופן מותנה את ההצהרות import בbuild.prop שמאפשר לזהות שינויים במאפיינים ולשקף אותם המטא-נתונים הסופיים של OTA.