פועלים לפי ההוראות שבדף הזה כדי לבנות את Android.
הגדרה של סביבת ה-build
כדי להגדיר את סביבת ה-build, יוצרים מתוך ספריית העבודה את הסקריפט envsetup.sh
:
source build/envsetup.sh
הסקריפט מייבא כמה פקודות שמאפשרות לעבוד עם קוד המקור של Android, כולל הפקודות המשמשות בדף הזה. כדי לראות את מקור הסקריפט, עיינו ב-platform/build/envsetup.sh
.
כדי להציג את העזרה המובנית, מקלידים hmm
.
בחירת יעד
לפני שיוצרים את Android, צריך לזהות יעד שרוצים ליצור. היעד משקף את פלטפורמת היעד שאתם בונים. כדי לזהות את היעד ל-build, משתמשים בפקודה lunch
ואז במחרוזת שמייצגת את היעד. לדוגמה:
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
הצגת היעד הנוכחי
כדי לראות את ההגדרות הנוכחיות של ארוחת הצהריים, מריצים את הפקודה:
$ echo "$TARGET_PRODUCT-$TARGET_RELEASE-$TARGET_BUILD_VARIANT"
המחרוזת שמייצגת את היעד היא בפורמט הבא:
lunch product_name-release-build_variant
הרכיבים של המחרוזת הזו:
product_name הוא שם המוצר שרוצים ליצור, למשל
aosp_cf_x86_64_phone
אוaosp_husky
. הקובץ product_name הספציפי יכול להיות בפורמט שמתאים למכשיר שלכם, אבל הפורמט שבו Google משתמשת במכשירים שלה כולל את הרכיבים הבאים:- המונח
aosp
מתייחס לפלטפורמת הקוד הפתוח של Android. - (אופציונלי)
cf
נכלל כשהיעד מיועד לרוץ באמולטור Cuttlefish. - ארכיטקטורה וחומרה (שם קוד), כמו
x86_64_phone
אוhusky
(שהוא שם הקוד של Pixel 8 Pro). לרשימת שמות הקוד של מכשירי Google, ראו שמות הקוד של המכשירים.
- המונח
הערך release מוגדר ל-
trunk_staging
.החלק build_variant במחרוזת יכול להיות אחד משלושת הערכים שמופיעים בטבלה הבאה:
build_variant תיאור user
לווריאנט הזה של ה-build הזה יש גישה מוגבלת לאבטחה, והוא מתאים לייצור. userdebug
הווריאנט הזה של ה-build הזה עוזר למפתחי המכשירים להבין את הביצועים ואת העוצמה של גרסאות בפיתוח. כשמפתחים עם build מסוג userdebug
, צריך לפעול בהתאם להנחיות לניפוי באגים למשתמשים.eng לווריאנט הזה של ה-build הזה יש זמן build מהיר יותר והוא מתאים במיוחד לפיתוח יומיומי אם לא חשובים לכם הביצועים והכוח.
אם מריצים את הפקודה lunch
ללא ארגומנטים, מוצגת רשימה של יעדים נפוצים.
אתם יכולים גם ליצור מחרוזות יעד משלכם על ידי חיבור הרכיבים של מחרוזת היעד באמצעות המידע שבדף הזה ושמות הקוד שמייצגים חומרה ספציפית של Google בקטע שמות הקוד של המכשירים.
כתיבת הקוד
מריצים את הפקודה הבאה כדי ליצור את היעד. בהתאם למפרט של תחנת העבודה, ה-build הראשון עשוי להימשך פחות משעה ועד כמה שעות. גרסאות ה-build הבאות נמשכות פחות זמן באופן משמעותי.
$ m
הפלט הראשון שאתם אמורים לראות הוא תקציר של סביבת היעד וה-build:
============================================
PLATFORM_VERSION_CODENAME=VanillaIceCream
PLATFORM_VERSION=VanillaIceCream
PRODUCT_INCLUDE_TAGS=com.android.mainline
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=generic
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=AOSP.MAIN
OUT_DIR=out
============================================
הפלט של ה-build יופיע ב-$OUT_DIR
. אם יוצרים יעדים שונים, כל גרסת build של יעד מופיעה ב-$OUT_DIR
.
הפקודה m
מבוססת על החלק העליון של העץ, כך שאפשר להריץ את m
מתוך ספריות משנה. אם הגדרתם את משתנה הסביבה TOP
, הפקודה m
תשתמש בו. אם המדיניות TOP
לא מוגדרת, הפקודה m
מחפשת את העץ מהספרייה הנוכחית ומנסה למצוא את החלק העליון של העץ.
הפקודה m
יכולה לטפל במשימות מקבילות באמצעות ארגומנט -jN
. אם לא מספקים ארגומנט -j
, מערכת ה-build תבחר אוטומטית ספירת משימות מקבילה שלדעתה מתאימה למערכת שלכם.
כדי ליצור מודולים ספציפיים במקום את התמונה המלאה של המכשיר, אפשר לרשום את שמות המודולים בשורת הפקודה m
. נוסף לכך, הפקודה m
מספקת פסאודו יעדים שנקראים מטרות עסקיות. לדוגמה, m nothing
לא יוצר שום דבר, אבל מנתח ומאמת את מבנה ה-build. לרשימה של מטרות עסקיות תקינות, מקלידים m help
.
פתרון בעיות ב-build (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 במאמר Set up for AOSP Development (2.3 8.0)
- יש נתיב JDK אחר שהותקן קודם לכן. מוסיפים את ה-JDK הנכון בתחילת הנתיב או מסירים את ה-JDK הבעייתי.