פועלים לפי ההוראות שבדף הזה כדי לבנות את 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
לפניכם תקציר של סביבת היעד וה-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
============================================
המחרוזת שמייצגת את היעד היא בפורמט הבא:
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 במאמר שמות קוד למכשירים.
הצגת היעד הנוכחי
כדי לראות את ההגדרות הנוכחיות של ארוחת הצהריים, מריצים את הפקודה:
$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"
יצירת הקוד
מריצים את הפקודה הבאה כדי ליצור את היעד. בהתאם למפרט של תחנת העבודה, ה-build הראשון עשוי להימשך פחות משעה ועד כמה שעות. הזמן הנדרש ליצירת גרסאות build הבאות יהיה קצר בהרבה.
m
הפלט של ה-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 הבעייתי.