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

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

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

אנדרואיד 8.0 הוצאה משימוש חבילות OTA מבוססות קבצים עבור מכשירים שאינם A/B, אשר חייבים במקום זאת להשתמש בחבילות OTA מבוססות בלוק . כדי ליצור חבילות או התקנים מבוססי OTA מבוססי בלוק המריצים אנדרואיד 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 כקובץ פיתון בינארי ולקרוא לו כדי לבנות חבילות מלאות או מצטברות.

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

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

ota_update.zip מוכן כעת להישלח למכשירי בדיקה (הכל חתום עם מפתח הבדיקה). עבור מכשירי משתמש, צור והשתמש במפתחות פרטיים משלך כמפורט ב- Signing builds for release .

בניית עדכונים מצטברים

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

אתה יכול להתקין חבילת עדכון מצטברת רק במכשירים עם בניית המקור המשמשת לבניית החבילה. כדי לבנות עדכון מצטבר, אתה צריך את הקובץ 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

מבנה זה דומה מאוד לגירסה הקודמת, וחבילת העדכון המצטבר ( incremental_ota_update.zip ) קטנה בהרבה מהעדכון המלא המקביל (בערך 1 MB במקום 60 MB).

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

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

בניית חבילות OTA עבור מספר SKUs

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

על מק"ט

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

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

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

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

טביעת אצבע היא שרשור מוגדר של פרמטרי בנייה כגון 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- נגזרים ממאפייני הבנייה התואמים הבאים.

  • הערך pre-device נגזר ro.product.device build.
  • הערכים pre-build-incremental ו- post-build-incremental נגזרים ro.build.version.incremental build.
  • ערכי ה- pre-build וה- post-build נגזרים ro.build.fingerprint build.

במכשירים המריצים אנדרואיד 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

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