פיתוח גרסאות build ל-Android

פועלים לפי ההוראות בדף הזה כדי ליצור את Android.

הגדרת סביבת ה-build

בספריית העבודה, מריצים את הסקריפט envsetup.sh כדי להגדיר את סביבת הבנייה:

source build/envsetup.sh

הסקריפט הזה מייבא כמה פקודות שמאפשרות לעבוד עם קוד המקור של Android, כולל הפקודות שמופיעות בדף הזה. כדי לראות את המקור של הסקריפט, אפשר לעיין במאמר בנושא platform/build/envsetup.sh. כדי להציג את העזרה המובנית, מקלידים hmm.

בחירת יעד

לפני שבונים את Android, צריך לזהות יעד לבנייה. יעד משקף את פלטפורמת היעד שעבורה אתם בונים. כדי לזהות את יעד ה-Build, משתמשים בפקודה lunch ואחריה מחרוזת שמייצגת את היעד. לדוגמה:

lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug

יופיע סיכום של סביבת היעד והסביבה לבנייה:

============================================
PLATFORM_VERSION_CODENAME=Baklava
PLATFORM_VERSION=Baklava
TARGET_PRODUCT=aosp_cf_x86_64_only_phone
TARGET_BUILD_VARIANT=userdebug
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=silvermont
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.10.11-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=BP1A.250305.020
OUT_DIR=out
============================================

המחרוזת שמייצגת את היעד היא בפורמט הבא:

lunch product_name-release_config-build_variant

הרכיבים במחרוזת הזו הם:

  • product_name הוא שם המוצר שרוצים ליצור, כמו aosp_cf_x86_64_only_phone או aosp_husky. המספר הספציפי שלכם, product_name, יכול להיות בפורמט שונה במכשיר שלכם, אבל הפורמט שבו Google משתמשת במכשירים שלה כולל את הרכיבים הבאים:

    • aosp מתייחס ל-Android Open Source Platform (פלטפורמת Android בקוד פתוח).
    • (אופציונלי) cf נכלל כשהיעד מיועד להפעלה באמולטור Cuttlefish.
    • ארכיטקטורה וחומרה (שם קוד), כמו x86_64_only_phone או husky, שהוא שם הקוד של Pixel 8 Pro. רשימת שמות הקוד של מכשירי Google זמינה במאמר שמות קוד של מכשירים.
  • הערך של release_config מוגדר כהגדרת מוצר, כמו הגדרת המוצר של הפיתוח שנקראת aosp_current. הגדרת גרסה מזהה תכונות וקוד מסוימים שמוסתרים מאחורי דגלים להשקת תכונות, ומופעלים או מושבתים בגרסה. מידע נוסף על הגדרות של גרסאות זמין במאמר הגדרת ערכי השקה של דגלי תכונות.

  • החלק build_variant במחרוזת יכול להיות אחד משלושת הערכים שבטבלה הבאה:

    build_variant תיאור
    user גרסת ה-build הזו מספקת גישה מוגבלת לאבטחה ומתאימה לייצור.
    userdebug גרסת ה-build הזו עוזרת למפתחי המכשירים להבין את הביצועים והעוצמה של גרסאות שנמצאות בפיתוח. כשמפתחים באמצעות גרסת build של userdebug, צריך לפעול לפי ההנחיות ל-userdebug.
    eng לגרסה הזו של ה-build יש זמן build מהיר יותר, והיא מתאימה ביותר לפיתוח יומיומי אם לא חשוב לכם הביצועים והעוצמה.

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

הצגת היעד הנוכחי

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

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

יצירת הקוד

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

m

הפלט של הבנייה יופיע ב-$OUT_DIR. אם יוצרים יעדים שונים, כל יעד שנוצר מופיע ב-$OUT_DIR.

הפקודה m מתבססת על החלק העליון של העץ, כך שאפשר להריץ את הפקודה m מתוך תיקיות משנה. אם משתנה הסביבה TOP מוגדר, הפקודה m משתמשת בו. אם לא מוגדר TOP, הפקודה m מחפשת בעץ החל מהספרייה הנוכחית, בניסיון למצוא את החלק העליון של העץ.

הפקודה m יכולה לטפל במשימות מקבילות באמצעות הארגומנט -jN. אם לא מספקים ארגומנט -j, מערכת הבנייה בוחרת באופן אוטומטי את מספר המשימות המקבילות שהיא חושבת שהוא אופטימלי למערכת שלכם.

כדי ליצור מודולים ספציפיים במקום את תמונת המכשיר המלאה, אפשר לציין את שמות המודולים בשורת הפקודה m. בנוסף, הפקודה m מספקת כמה יעדים פסאודו, שנקראים goals. לדוגמה, הפקודה m nothing לא יוצרת שום דבר, אבל היא מנתחת ומאמתת את מבנה ה-build. כדי לראות רשימה של יעדים תקינים, מקלידים m help.

פתרון בעיות שקשורות לבנייה (גרסה 8.0 או גרסה ישנה יותר)

אם אתם יוצרים גרסה של AOSP 8 או גרסה מוקדמת יותר, יכול להיות שהתהליך של m ייפסק אם תהיה בעיה בגרסה של Java שמותקנת אצלכם. לדוגמה, יכול להיות שתקבלו את ההודעה הבאה:

************************************************************
You are attempting to build with the incorrect version
of java.

Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.

Please follow the machine setup instructions at
    https://source.android.com/source/initializing.html
************************************************************

אלה הסיבות האפשריות והפתרונות:

  • לא התקנתם את JDK הנכון, כפי שמפורט בקטעי JDK במאמר הגדרה לפיתוח AOSP‏ (2.3 עד 8.0) .
  • נראה שיש עוד JDK שהותקן בעבר בנתיב. מוסיפים את ה-JDK הנכון בתחילת הנתיב או מסירים את ה-JDK הבעייתי.