גרסת build של Android

פועלים לפי ההוראות שבדף הזה כדי לבנות את 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_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 הבעייתי.