כדי ליצור את 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 Open Source Platform. - (אופציונלי)
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 הזה עוזר למפתחי המכשירים להבין את הביצועים והיכולות של גרסאות שנמצאות בפיתוח. כשמפתחים באמצעות גרסת build של
userdebug, צריך לפעול לפי ההנחיות ל-userdebug. eng| וריאנט ה-build הזה מאפשר קיצור משך זמן של תהליך build והוא מתאים ביותר לפיתוח יומיומי אם הביצועים וההספק לא חשובים לכם.
אם מריצים את הפקודה lunch בלי ארגומנטים, מוצגת רשימה של יעדים נפוצים.
אפשר גם ליצור מחרוזות יעד משלכם על ידי הרכבת הרכיבים של מחרוזת היעד באמצעות המידע שבדף הזה ושמות הקוד שמייצגים מכשירי Google ספציפיים בשמות קוד של מכשירים.
הצגת היעד הנוכחי
כדי לראות את ההגדרות הנוכחיות של ארוחת הצהריים, מריצים את הפקודה:
$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"
יצירת הקוד
מריצים את הפקודה הבאה כדי ליצור את היעד. בהתאם למפרט של תחנת העבודה, יכול להיות שהגרסה הראשונה תיצור תוך פחות משעה, ויכול להיות שייקח כמה שעות. גרסאות build עוקבות ייקחו הרבה פחות זמן.
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 לקריאה בלבד במהלך הבנייה.
ניסיון לבנות מוביל לשגיאות במערכת הקבצים לקריאה בלבד
במהלך הבנייה, עץ המקור של AOSP הוא לקריאה בלבד. אם הגרסה שאתם מריצים מנסה לשנות את עץ המקור במהלך הגדרת המוצר או בכל חלק אחר של הבנייה, יכול להיות שהבנייה תיכשל ויוצגו שגיאות של מערכת קבצים לקריאה בלבד. אפשר להשתמש באפשרויות האלה כדי לשנות באופן זמני את עץ המקור למצב קריאה-כתיבה:
כדי לשנות את כל עץ המקור לגישה לקריאה ולכתיבה במהלך הבנייה, מוסיפים את
BUILD_BROKEN_SRC_DIR_IS_WRITABLE=trueלסביבת הבנייה.כדי לשנות חלק מהעץ לקריאה-כתיבה במהלך ה-build, משתמשים ב-
BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST="path1, path2, ..."הנתיבים צריכים להיות הנתיבים של הספריות שבהן צריך לאפשר כתיבה, ביחס לראש סביבת העבודה.
פתרון בעיות שקשורות לבנייה (גרסה 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 הבעייתי.