توسعه اندروید را امتحان کنید

این آموزش به شما امکان می دهد برای اولین بار توسعه سیستم عامل اندروید را امتحان کنید.

برای توسعه اندروید تنظیم کنید

قبل از دانلود و ساخت شاخه main سورس اندروید، مطمئن شوید که سخت افزار شما الزامات لازم را دارد و نرم افزار مورد نیاز به درستی نصب شده است. همچنین باید با اصطلاحات زیر آشنا باشید:

Git
Git یک سیستم کنترل نسخه توزیع شده رایگان و متن باز است. اندروید از Git برای عملیات محلی مانند شاخه‌بندی، commits، diffs و ویرایش‌ها استفاده می‌کند. برای کمک به یادگیری Git، به مستندات Git مراجعه کنید.
مخزن
Repo یک پوشش پایتون در اطراف Git است که انجام عملیات پیچیده را در چندین مخزن Git ساده می کند. Repo جایگزین Git برای همه عملیات کنترل نسخه نمی شود، فقط انجام عملیات پیچیده Git را آسان تر می کند. Repo از فایل های مانیفست برای جمع آوری پروژه های Git در ابرپروژه اندروید استفاده می کند.
فایل مانیفست
فایل مانیفست یک فایل XML است که مشخص می‌کند پروژه‌های مختلف Git در منبع Android کجا در درخت منبع AOSP قرار می‌گیرند.

نیازهای سخت افزاری را برآورده کنید

ایستگاه کاری توسعه شما باید این الزامات سخت افزاری را برآورده کند یا از آن فراتر رود:

  • یک سیستم 64 بیتی x86.

  • حداقل 400 گیگابایت فضای دیسک رایگان برای بررسی و ساخت کد (250 گیگابایت برای بررسی + 150 گیگابایت برای ساخت).

  • حداقل 64 گیگابایت رم. گوگل از ماشین های ۷۲ هسته ای با ۶۴ گیگابایت رم برای ساخت اندروید استفاده می کند. با این پیکربندی سخت افزاری، تقریباً 40 دقیقه برای ساخت کامل اندروید و تنها چند دقیقه برای ساخت تدریجی اندروید طول می کشد. در مقابل، برای ساخت کامل با یک دستگاه 6 هسته ای با 64 گیگابایت رم تقریباً 6 ساعت طول می کشد.

نیازهای سیستم عامل را برآورده کنید

ایستگاه کاری توسعه شما باید هر توزیع لینوکس 64 بیتی را با کتابخانه GNU C (glibc) 2.17 یا بالاتر اجرا کند.

بسته های مورد نیاز را نصب کنید

برای نصب بسته های مورد نیاز برای اوبونتو 18.04 یا جدیدتر، دستور زیر را اجرا کنید:

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

نرم افزار مورد نیاز را نصب کنید

قبل از اینکه بتوانید با AOSP کار کنید، باید OpenJDK، Make، Python 3 و Repo را نصب کنید. شاخه اصلی AOSP اندروید دارای نسخه های از پیش ساخته شده OpenJDK، Make و Python 3 است، بنابراین نیازی به مراحل نصب اضافی نیست. قسمت زیر نحوه نصب Repo را توضیح می دهد.

Repo را نصب کنید

برای نصب Repo مراحل زیر را دنبال کنید:

  1. اطلاعات بسته فعلی را دانلود کنید:

    sudo apt-get update
  2. برای نصب لانچر Repo دستور زیر را اجرا کنید:

    sudo apt-get install repo

    راه‌انداز Repo یک اسکریپت پایتون را ارائه می‌کند که یک پرداخت را اولیه می‌کند و ابزار کامل Repo را دانلود می‌کند.

    در صورت موفقیت، به مرحله 4 بروید.

  3. (اختیاری) با استفاده از سری دستورات زیر Repo را به صورت دستی نصب کنید:

    export REPO=$(mktemp /tmp/repo.XXXXXXXXX)
    curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo
    gpg --recv-keys 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65
    curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repo

    سه دستور اول یک فایل موقت را تنظیم می کنند، Repo را در فایل دانلود می کنند و بررسی می کنند که کلید ارائه شده با کلید مورد نیاز مطابقت دارد. در صورت موفقیت آمیز بودن این دستورات، دستور نهایی لانچر Repo را نصب می کند.

  4. نسخه لانچر Repo را تأیید کنید:

    repo version

    خروجی باید نسخه 2.4 یا بالاتر را نشان دهد، به عنوان مثال:

    repo launcher version 2.45

سورس اندروید را دانلود کنید

منبع اندروید در مجموعه ای از مخازن Git که توسط گوگل میزبانی شده است قرار دارد. هر مخزن Git شامل کل تاریخچه منبع اندروید، از جمله تغییرات در منبع و زمان ایجاد تغییرات است. برای دانلود سورس اندروید:

  1. به فهرست اصلی خود بروید:

    cd ~
  2. یک زیر شاخه کاری محلی در آن ایجاد کنید:

    mkdir aosp
  3. به دایرکتوری بروید:

    cd aosp
  4. شاخه اصلی کد منبع مخزن AOSP را راه اندازی کنید (پیش فرض):

    repo init --partial-clone -b main -u https://android.googlesource.com/platform/manifest
  5. اطلاعات کاربری Git (نام، آدرس ایمیل) خود را وارد یا بپذیرید.

  6. همگام سازی کد منبع:

    repo sync -c -j8

    اگر در حین دانلود با مشکلی مواجه شدید، به عیب یابی و رفع مشکلات همگام سازی مراجعه کنید.

کد را بسازید

برای ساخت کد:

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

    source build/envsetup.sh
  2. نوع دستگاه مورد نظر را برای ساخت با دستور 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
    ============================================
    
  3. هدف را بسازید:

    m

انتظار می رود اولین ساخت ساعت ها طول بکشد. ساخت‌های بعدی زمان بسیار کمتری می‌برند. خروجی ساخت شما در $OUT_DIR ظاهر می شود.

کوتلفیش را راه اندازی کنید

Cuttlefish شبیه ساز اندروید است که برای آزمایش ساخت های شما استفاده می شود.

  1. دستورات زیر را برای دانلود، ساخت و نصب بسته های میزبان دبیان اجرا کنید:

    sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl
    git clone https://github.com/google/android-cuttlefish
    cd android-cuttlefish
    for dir in base frontend; do
    pushd $dir
    # Install build dependencies
    sudo mk-build-deps -i
    dpkg-buildpackage -uc -us
    popd
    done
    sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
    sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f
    sudo usermod -aG kvm,cvdnetwork,render $USER
    sudo reboot

    راه اندازی مجدد باعث نصب ماژول های هسته اضافی می شود و قوانین udev را اعمال می کند.

  2. راه اندازی ترد ماهی:

    launch_cvd --daemon
    
  3. با پیمایش به https://localhost:8443 در مرورگر وب خود به دستگاه Cuttlefish متصل شوید. دستگاه مجازی مبتنی بر Android شما نمایش داده می شود.

تغییر ایجاد کنید

کد منبع را به دنبال این فهرست تغییر مثال به روز کنید.

  1. از ریشه پرداخت خود ( aosp/ directory)، به پروژه frameworks/native Git بروید:

    cd frameworks/native
  2. یک پروژه موقت را با این دستور شروع کنید:

    repo start <some-name> .
  3. از ویرایشگر خود برای ویرایش SurfaceFlinger.cpp در مکان زیر استفاده کنید:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. این خط را پیدا کنید:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. این خط را در ابتدای updateColorMatrixLocked() اضافه کنید:

    mClientColorMatrix = mat4(vec4{1.0f, 0.0f, 0.0f, 0.0f}, vec4{0.0f, -1.0f, 0.0f, 0.0f},
                              vec4{0.0f, 0.0f, -1.0f, 0.0f}, vec4{0.0f, 1.0f, 1.0f, 1.0f});
    
  6. کد را بسازید:

    m
  7. به روز رسانی بیلد در دستگاه:

    adb root
    adb remount -R
    adb root
    adb sync
    adb reboot
  8. بررسی کنید که در دستگاه انتخابی خود تغییر رنگی مشابه آنچه در شکل 1 نشان داده شده است مشاهده کنید.

    Example of a successful color change

    شکل 1. ظاهر صفحه بعد از تغییر رنگ موفق

یه تست درست کن

این بخش از Codelab از یک آزمایش نمونه استفاده می کند که در درخت منبع قرار دارد و ناموفق است.

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

  1. اجرا کنید:

    atest DevCodelabTest

    آزمون شکست می خورد.

  2. ردیابی پشته آزمون شکست خورده را بررسی کنید:

    STACKTRACE:
    java.lang.AssertionError
     at org.junit.Assert.fail(Assert.java:87)
     at org.junit.Assert.assertTrue(Assert.java:42)
     at org.junit.Assert.assertTrue(Assert.java:53)
     at android.test.example.devcodelab.DevCodelabTest.testHelloWorld(DevCodelabTest.java:29)

    آخرین خط ردیابی پشته آزمایشی را نشان می دهد که در حال شکست است ( testHelloWorld ). این تست در فایلی به نام DevCodelabTest.java است.

  3. برای تعیین مکان آزمایشی که باید اصلاح شود، WORKING_DIRECTORY /platform_testing/tests/example/devcodelab/src/ را به آخرین خط دنباله پشته تا نام فایل آزمایشی اضافه کنید. بنابراین، android.test.example.devcodelab.DevCodelabTest تبدیل به WORKING_DIRECTORY /platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java می شود.

  4. platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java را ویرایش کنید و Assert.assertTrue(false) را با Assert.assertTrue(true) جایگزین کنید.

  5. دوباره تست را اجرا کنید تا مطمئن شوید مشکل را برطرف کرده اید:

    atest DevCodelabTest

کد خود را برای بررسی آپلود کنید

Repo استفاده از Git را با ترکیب کردن دستوراتی مانند git clone برای کار در چندین مخزن (یا پروژه) Git به طور همزمان ساده می کند.

برای بررسی کد پروژه های خود در Git، از سیستم بررسی کد مبتنی بر وب Gerrit استفاده کنید.

  1. با فرض اینکه تغییرات خود را در frameworks/native انجام داده اید، این دستورات را برای آپلود تغییرات خود اجرا کنید:

    cd frameworks/native
    repo start codelab .
    git add .
    git commit
  2. برای پیام commit خود، موارد زیر را وارد کنید:

    Android codelab change
    Test: manual atest
    
  3. تغییر خود را آپلود کنید:

    repo upload

    اگر موفق باشید، پیامی شبیه این می‌بینید:

    Upload project frameworks/native/ to remote branch main:
     branch codelab ( 1 commit, Wed Aug 7 09:32:33 2019 -0700):
            ff46b36d android codelab change
    to https://android-review.googlesource.com/ (y/N)? y
    remote: Processing changes: refs: 1, new: 1, done
    remote:
    remote: SUCCESS
    remote:
    remote:   https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432 android codelab change [NEW]
    remote:
    To https://android-review.googlesource.com/platform/frameworks/native
    * [new branch]          codelab -> refs/for/main
    

تغییر خود را در Gerrit مشاهده کنید

برای مشاهده تغییر خود در Gerrit، به خروجی پیوند در ترمینال بروید. لینک مشابه زیر است:

https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432

تغییر خود را برگردانید

به طور معمول، پس از آزمایش و پس از بررسی و تایید، تغییر خود را در Gerrit ارسال می کنید و آن را در مخزن ادغام می کنید. در عوض، برای اهداف این نرم افزار کد، کار خود را برگردانید:

  1. در Gerrit، روی Abandon کلیک کنید.

  2. شاخه موقت مرتبط را در فهرست frameworks/native پروژه (یا زیر شاخه های آن) رها کنید:

    repo abandon codelab .
  3. تغییراتی را که در فایل تست ایجاد کرده اید برگردانید. از آنجایی که در تغییر تست repo start ، git commit و repo upload را اجرا نکردید، می توانید خود فایل را بازنشانی کنید. با فرض اینکه در aosp/platform_testing directory هستید، از دستور زیر برای تنظیم مجدد فایل استفاده کنید:

    git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
    git checkout .

این نرم افزار Codelab برای توسعه پلتفرم اندروید را تکمیل می کند.

کمک بگیرید

اگر در طول این کد لبه با خطا مواجه شدید، با استفاده از پیوند Issue Tracker در پایین هر صفحه، آنها را گزارش کنید. سوالات خود را برای گروه ساخت اندروید ارسال کنید.

تایپ کنید ps -A | grep crosvm برای دیدن اینکه آیا crosvm از قبل در حال اجرا است یا خیر. اگر crossvm در حال اجرا است، stop_cvd || true تایپ کنید stop_cvd || true یا kill crosvm با فرآیند PID.