اندروید بسازید

دستورالعمل های این صفحه را برای ساخت اندروید دنبال کنید.

محیط ساخت خود را تنظیم کنید

از داخل فهرست کاری خود، اسکریپت envsetup.sh را برای تنظیم محیط ساخت خود منبع کنید:

source build/envsetup.sh

این اسکریپت چندین دستور را وارد می کند که به شما امکان می دهد با کد منبع اندروید کار کنید، از جمله دستورات استفاده شده در این صفحه. برای مشاهده منبع اسکریپت، به platform/build/envsetup.sh مراجعه کنید. برای مشاهده راهنمای داخلی، hmm تایپ کنید.

یک هدف را انتخاب کنید

قبل از ساخت اندروید، باید هدفی را برای ساختن مشخص کنید. هدف منعکس کننده پلتفرم هدفی است که شما برای آن می سازید. برای شناسایی هدف برای ساخت، از دستور lunch و به دنبال آن یک رشته نشان دهنده هدف استفاده کنید. به عنوان مثال:

lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

باید ببینید خلاصه ای از محیط هدف و ساخت شماست:

============================================
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 به پلتفرم متن باز اندروید اشاره دارد.
    • (اختیاری) هنگامی که هدف قرار است در شبیه ساز Cuttlefish اجرا شود، cf گنجانده می شود.
    • معماری و سخت‌افزار (نام رمز)، مانند x86_64_phone یا husky ، که اسم رمز Pixel 8 Pro است. برای فهرست نام‌های رمز دستگاه‌های Google، به نام‌های رمز دستگاه مراجعه کنید.
  • release_config روی یک پیکربندی انتشار تنظیم شده است، مانند پیکربندی انتشار توسعه به نام trunk_staging . پیکربندی انتشار، ویژگی‌ها و کدهای خاصی را شناسایی می‌کند که در پشت پرچم‌های راه‌اندازی ویژگی‌ها قرار دارند و برای یک ساختنی فعال یا غیرفعال شده‌اند. برای اطلاعات بیشتر در مورد پیکربندی‌های انتشار، به تنظیم مقادیر راه‌اندازی پرچم ویژگی مراجعه کنید.

  • بخش build_variant رشته می تواند یکی از سه مقدار جدول زیر باشد:

    build_variant توضیحات
    user این نوع ساخت دسترسی امنیتی محدودی را فراهم می کند و برای تولید مناسب است.
    userdebug این نوع ساخت به توسعه دهندگان دستگاه کمک می کند تا عملکرد و قدرت نسخه های در حال توسعه را درک کنند. هنگام توسعه با ساخت userdebug ، دستورالعمل های مربوط به userdebug را دنبال کنید.
    eng این نوع ساخت، زمان ساخت سریع‌تری دارد و اگر به عملکرد و قدرت اهمیتی نمی‌دهید، برای توسعه روزمره بهترین گزینه است.

اگر lunch بدون هیچ استدلالی اجرا کنید، لیستی از اهداف مشترک ارائه می شود. همچنین می‌توانید رشته‌های هدف خود را با کنار هم قرار دادن عناصر رشته هدف با استفاده از اطلاعات موجود در این صفحه و نام‌هایی که نشان‌دهنده سخت‌افزار خاص Google در نام‌های رمز دستگاه هستند، ایجاد کنید.

مشاهده هدف فعلی

برای مشاهده تنظیمات فعلی ناهار، اجرا کنید:

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

کد را بسازید

دستور زیر را برای ساختن هدف خود اجرا کنید. بسته به مشخصات ایستگاه کاری شما، ساخت اول ممکن است کمتر از یک ساعت و تا چند ساعت طول بکشد. ساخت‌های بعدی زمان بسیار کمتری می‌برند.

m

خروجی ساخت شما در $OUT_DIR ظاهر می شود. اگر اهداف متفاوتی بسازید، هر ساخت هدف در $OUT_DIR ظاهر می شود.

دستور m از بالای درخت ساخته می شود، بنابراین می توانید m از داخل زیر شاخه ها اجرا کنید. اگر مجموعه متغیر محیطی TOP را دارید، دستور m از آن استفاده می کند. اگر TOP تنظیم نشده باشد، دستور m درخت را از دایرکتوری فعلی جستجو می کند و سعی می کند بالای درخت را پیدا کند.

دستور m می تواند وظایف موازی را با آرگومان -jN انجام دهد. اگر آرگومان -j را ارائه نکنید، سیستم ساخت به طور خودکار تعداد کار موازی را انتخاب می کند که فکر می کند برای سیستم شما بهینه است.

می توانید با فهرست کردن نام ماژول ها در خط فرمان m خود، به جای تصویر کامل دستگاه، ماژول های خاصی بسازید. علاوه بر این، دستور m برخی از اهداف شبه را ارائه می دهد که اهداف نامیده می شوند. به عنوان مثال، m nothing چیزی نمی سازد، اما ساختار ساخت را تجزیه و تایید می کند. برای فهرستی از اهداف معتبر، m help را تایپ کنید.

عیب یابی خطاهای ساخت (8.0 یا قبل از آن)

اگر در حال ساخت AOSP 8 یا قبل از آن هستید، m ممکن است زمانی که با مشکلی در نسخه جاوا شما مواجه شود، متوقف شود. به عنوان مثال، ممکن است این پیام را دریافت کنید:

************************************************************
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 مشکل ساز را حذف کنید.
،

دستورالعمل های این صفحه را برای ساخت اندروید دنبال کنید.

محیط ساخت خود را تنظیم کنید

از داخل فهرست کاری خود، اسکریپت envsetup.sh را برای تنظیم محیط ساخت خود منبع کنید:

source build/envsetup.sh

این اسکریپت چندین دستور را وارد می کند که به شما امکان می دهد با کد منبع اندروید کار کنید، از جمله دستورات استفاده شده در این صفحه. برای مشاهده منبع اسکریپت، به platform/build/envsetup.sh مراجعه کنید. برای مشاهده راهنمای داخلی، hmm تایپ کنید.

یک هدف را انتخاب کنید

قبل از ساخت اندروید، باید هدفی را برای ساختن مشخص کنید. هدف منعکس کننده پلتفرم هدفی است که شما برای آن می سازید. برای شناسایی هدف برای ساخت، از دستور lunch و به دنبال آن یک رشته نشان دهنده هدف استفاده کنید. به عنوان مثال:

lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

باید ببینید خلاصه ای از محیط هدف و ساخت شماست:

============================================
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 به پلتفرم متن باز اندروید اشاره دارد.
    • (اختیاری) هنگامی که هدف قرار است در شبیه ساز Cuttlefish اجرا شود، cf گنجانده می شود.
    • معماری و سخت‌افزار (نام رمز)، مانند x86_64_phone یا husky ، که اسم رمز Pixel 8 Pro است. برای فهرست نام‌های رمز دستگاه‌های Google، به نام‌های رمز دستگاه مراجعه کنید.
  • release_config روی یک پیکربندی انتشار تنظیم شده است، مانند پیکربندی انتشار توسعه به نام trunk_staging . پیکربندی انتشار، ویژگی‌ها و کدهای خاصی را شناسایی می‌کند که در پشت پرچم‌های راه‌اندازی ویژگی‌ها قرار دارند و برای یک ساختنی فعال یا غیرفعال شده‌اند. برای اطلاعات بیشتر در مورد پیکربندی‌های انتشار، به تنظیم مقادیر راه‌اندازی پرچم ویژگی مراجعه کنید.

  • بخش build_variant رشته می تواند یکی از سه مقدار جدول زیر باشد:

    build_variant توضیحات
    user این نوع ساخت دسترسی امنیتی محدودی را فراهم می کند و برای تولید مناسب است.
    userdebug این نوع ساخت به توسعه دهندگان دستگاه کمک می کند تا عملکرد و قدرت نسخه های در حال توسعه را درک کنند. هنگام توسعه با ساخت userdebug ، دستورالعمل های مربوط به userdebug را دنبال کنید.
    eng این نوع ساخت، زمان ساخت سریع‌تری دارد و اگر به عملکرد و قدرت اهمیتی نمی‌دهید، برای توسعه روزمره بهترین گزینه است.

اگر lunch بدون هیچ استدلالی اجرا کنید، لیستی از اهداف مشترک ارائه می شود. همچنین می‌توانید رشته‌های هدف خود را با کنار هم قرار دادن عناصر رشته هدف با استفاده از اطلاعات موجود در این صفحه و نام‌هایی که نشان‌دهنده سخت‌افزار خاص Google در نام‌های رمز دستگاه هستند، ایجاد کنید.

مشاهده هدف فعلی

برای مشاهده تنظیمات فعلی ناهار، اجرا کنید:

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

کد را بسازید

دستور زیر را برای ساختن هدف خود اجرا کنید. بسته به مشخصات ایستگاه کاری شما، ساخت اول ممکن است کمتر از یک ساعت و تا چند ساعت طول بکشد. ساخت‌های بعدی زمان بسیار کمتری می‌برند.

m

خروجی ساخت شما در $OUT_DIR ظاهر می شود. اگر اهداف متفاوتی بسازید، هر ساخت هدف در $OUT_DIR ظاهر می شود.

دستور m از بالای درخت ساخته می شود، بنابراین می توانید m از داخل زیر شاخه ها اجرا کنید. اگر مجموعه متغیر محیطی TOP را دارید، دستور m از آن استفاده می کند. اگر TOP تنظیم نشده باشد، دستور m درخت را از دایرکتوری فعلی جستجو می کند و سعی می کند بالای درخت را پیدا کند.

دستور m می تواند وظایف موازی را با آرگومان -jN انجام دهد. اگر آرگومان -j را ارائه نکنید، سیستم ساخت به طور خودکار تعداد کار موازی را انتخاب می کند که فکر می کند برای سیستم شما بهینه است.

می توانید با فهرست کردن نام ماژول ها در خط فرمان m خود، به جای تصویر کامل دستگاه، ماژول های خاصی بسازید. علاوه بر این، دستور m برخی از اهداف شبه را ارائه می دهد که اهداف نامیده می شوند. به عنوان مثال، m nothing چیزی نمی سازد، اما ساختار ساخت را تجزیه و تایید می کند. برای فهرستی از اهداف معتبر، m help را تایپ کنید.

عیب یابی خطاهای ساخت (8.0 یا قبل از آن)

اگر در حال ساخت AOSP 8 یا قبل از آن هستید، m ممکن است زمانی که با مشکلی در نسخه جاوا شما مواجه شود، متوقف شود. به عنوان مثال، ممکن است این پیام را دریافت کنید:

************************************************************
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 مشکل ساز را حذف کنید.