כדי ליצור את Android, פועלים לפי ההוראות שמפורטות בדף הזה.
הגדרת סביבת ה-build
בספריית העבודה, מריצים את הסקריפט envsetup.sh כדי להגדיר את סביבת build:
source build/envsetup.shהסקריפט הזה מייבא כמה פקודות שמאפשרות לעבוד עם קוד המקור של Android, כולל הפקודות שמופיעות בדף הזה. כדי לראות את המקור של הסקריפט, אפשר לעיין בplatform/build/envsetup.sh.
כדי להציג את העזרה המובנית, מקלידים hmm.
בחירת יעד
לפני שמתחילים לבנות את Android, צריך לזהות יעד לבנייה. יעד משקף את פלטפורמת היעד שאתם בונים עבורה. כדי לזהות את יעד הבנייה, משתמשים בפקודה lunch ואחריה מחרוזת שמייצגת את היעד. לדוגמה:
lunch aosp_cf_x86_64_only_phone-aosp_current-userdebugיופיע תקציר של יעד הסביבה וסביבת ה-build:
============================================
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. - אפשר לכלול את
cfאם רוצים להריץ את היעד באמולטור Cuttlefish. - שם הקוד של הארכיטקטורה והחומרה, למשל
x86_64_only_phoneאוhusky, שהוא שם הקוד של Pixel 8 Pro. רשימה של שמות קוד למכשירי Google זמינה במאמר שמות קוד למכשירים.
-
הערך של
release_configמוגדר כהגדרת גרסה, כמו הגדרת גרסת הפיתוח שנקראתaosp_current. הגדרת גרסה מזהה תכונות וקוד מסוימים שמוסתרים מאחורי דגלים להשקת תכונות, ומופעלים או מושבתים בגרסה. מידע נוסף על הגדרות של השקות זמין במאמר הגדרת ערכי השקה של feature flag.החלק
build_variantבמחרוזת יכול להיות אחד משלושת הערכים שבטבלה הבאה:build_variantתיאור userוריאנט ה-build הזה מספק גישה מוגבלת לאבטחה והוא מתאים לייצור. userdebugוריאנט ה-build הזה עוזר למפתחי המכשיר להבין את הביצועים ואת העוצמה של גרסאות שנמצאות בפיתוח. כשמפתחים באמצעות userdebugbuild, צריך לפעול בהתאם להנחיות בנושא userdebug.engלוריאנט build הזה יש משך זמן של תהליך build מהיר יותר, והוא מתאים במיוחד לסביבות פיתוח יומיומיות (שבהן הביצועים וההספק פחות חשובים).
אם מריצים את הפקודה lunch ללא ארגומנטים, lunch מספק רשימה של יעדים נפוצים. כדי ליצור מחרוזות טירגוט מותאמות אישית, משלבים רכיבים של מחרוזות טירגוט עם שמות קוד של חומרה. רשימה של שמות קוד זמינה במאמר שמות קוד של מכשירים.
הצגת היעד הנוכחי
כדי לראות את ההגדרות הנוכחיות של ארוחת הצהריים, מריצים את הפקודה:
$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"
יצירת הקוד
מריצים את הפקודה הבאה כדי ליצור את היעד. בהתאם למפרט של תחנת העבודה, יכול להיות שהגרסה הראשונה תיצור תוך פחות משעה, ויכול להיות שייקח כמה שעות. הגרסאות הבאות ייבנו בזמן קצר בהרבה.
mהפלט של הבנייה יופיע ב-$OUT_DIR. אם יוצרים יעדים שונים, כל יעד מופיע ב-$OUT_DIR.
הפקודה m מתבססת על החלק העליון של העץ, כך שאפשר להריץ את הפקודה m מתוך תיקיות משנה. אם משתנה הסביבה TOP מוגדר, הפקודה m משתמשת בו. אם לא מוגדר TOP, הפקודה m מחפשת בעץ החל מהספרייה הנוכחית, בניסיון למצוא את החלק העליון של העץ.
הפקודה m יכולה לטפל במשימות מקבילות באמצעות הארגומנט -jN. אם לא מספקים ארגומנט -j, מערכת ה-build בוחרת באופן אוטומטי את מספר המשימות המקבילות שהיא חושבת שהוא אופטימלי למערכת שלכם.
אפשר ליצור מודולים ספציפיים במקום את תמונת המכשיר המלאה. לשם כך, צריך לציין את שמות המודולים בשורת הפקודה m. בנוסף, הפקודה m מספקת כמה יעדים פסאודו, שנקראים goals. לדוגמה, הפקודה m nothing לא יוצרת שום דבר, אבל היא מנתחת ומאמתת את מבנה ה-build. כדי לראות רשימה של יעדים תקינים, מקלידים m help.
פתרון בעיות שקשורות לבנייה
בקטע הזה מפורטות הוראות לטיפול בשגיאות בנייה.
שגיאות במערכת קבצים לקריאה בלבד (Android 17 ואילך)
במהלך הבנייה, עץ המקור של AOSP הוא לקריאה בלבד. אם הגרסה שאתם מריצים מנסה לשנות את עץ המקור במהלך הגדרת המוצר או בכל חלק אחר של הבנייה, יכול להיות שהבנייה תיכשל ויוצגו שגיאות של מערכת קבצים לקריאה בלבד. אתם יכולים להשתמש באפשרויות האלה כדי לשנות באופן זמני את עץ המקור למצב קריאה-כתיבה:
כדי לשנות את כל עץ המקור לגישה של קריאה וכתיבה במהלך ה-build, מוסיפים את
BUILD_BROKEN_SRC_DIR_IS_WRITABLE=trueלסביבת ה-build.כדי לשנות חלק מהעץ לגישה של קריאה וכתיבה במהלך ה-build, משתמשים ב-
BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST="path1, path2, ...". הנתיבים צריכים להיות הנתיבים של הספריות שבהן צריך לאפשר כתיבה, ביחס לראש סביבת העבודה.
גרסת Java שגויה (Android מגרסה 8.0 ומטה)
אם אתם מפתחים ל-Android 8.0 (רמת API 26) ולגרסאות קודמות, יכול להיות שהפקודה 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 מתאים. מידע נוסף זמין במאמר הגדרה לפיתוח ב-AOSP (גרסאות 2.3 עד 8.0).
- נראה שיש עוד JDK שהותקן בעבר בנתיב שלך. מוסיפים את ה-JDK הנכון בתחילת הנתיב או מסירים את ה-JDK הבעייתי.