גרסת 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

אמור להופיע סיכום של היעד וסביבת ה-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_config-build_variant

הרכיבים במחרוזת הזו הם:

  • product_name הוא שם המוצר שרוצים לפתח, למשל aosp_cf_x86_64_phone או aosp_husky. ה-product_name הספציפי שלכם יכול להיות בפורמט שלכם למכשיר, אבל הפורמט שבו Google משתמשת במכשירים שלה כולל את הרכיבים הבאים:

    • aosp מתייחס לפלטפורמת Android Open Source.
    • (אופציונלי) cf נכלל כאשר היעד מיועד להרצה במהלך הדמיה של Cuttlefish.
    • ארכיטקטורה וחומרה (שם קוד), כמו x86_64_phone או husky, שהוא שם הקוד של Pixel 8 Pro. רשימה של שמות הקוד של מכשירי Google מופיעה במאמר שמות קוד של מכשירים.
  • השדה release_config מוגדר להגדרת גרסה, כמו הגדרת הגרסה לפיתוח שנקראת trunk_staging. הגדרת הגרסה מאפשרת לזהות תכונות וקוד מסוימים שמאחורי דגלים להשקת תכונות, והם מופעלים או מושבתים בגרסה. מידע נוסף על הגדרות הגרסה זמין במאמר הגדרת ערכים להשקה של דגל תכונה.

  • החלק build_variant במחרוזת יכול להיות אחד משלושת הערכים בטבלה הבאה:

    build_variant תיאור
    user גרסת ה-build הזו מספקת גישה מוגבלת לאבטחה והיא מתאימה לסביבת הייצור.
    userdebug גרסת ה-build הזו עוזרת למפתחי המכשירים להבין את הביצועים והעוצמה של גרסאות שעדיין נמצאות בפיתוח. כשמפתחים עם build של userdebug, פועלים לפי ההנחיות ל-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 במאמר הגדרה לפיתוח AOSP (2.3 עד 8.0) .
  • יש JDK אחר שהותקן בעבר שמופיע בנתיבים. מוסיפים את JDK הנכון לתחילת הנתיב או מסירים את JDK הבעייתי.