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

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

اگرچه مسیر چالش برانگیز است، تیم اندروید در تلاش است تا سفر شما را در هر نسخه ساده‌تر کند. و این تیم هر روز از طریق کار مستقیم در پروژه منبع باز Android (AOSP) بهبود می‌یابد.

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

اهداف

ماموریت این کد لبه دوگانه است:

  1. تا به شما کمی از نحوه گردش کار توسعه دهندگان برای مهندسان اندرویدی که بر روی پلتفرم (سیستم عامل) کار می کنند، بچشید.
  2. شما را تشویق می‌کند تا درباره ابزارها، اسناد، و گردش کار برنامه‌نویس Android بازخورد ارائه کنید.
پیش نیازها

لیست الزامات برای این کد لبه از الزامات توسعه پلتفرم عمومی ( AOSP ) مشتق شده است. برای گرفتن این کد لبه، موارد زیر را تنظیم کنید:

محیط زیست

به طور معمول، کاربران مستقیماً روی ایستگاه کاری می‌سازند و توسعه می‌دهند. از آنجا که ممکن است در ترمینال های مختلفی کار کنید و بسیاری از دستورات استفاده شده مختص ترمینال هستند، باید آنها را در هر جلسه ترمینال دوباره اجرا کنید. به طور خاص، اینها شامل دستورات source build/envsetup.sh و lunch هستند.

راه اندازی ایستگاه کاری
  1. بسته های لازم را روی ایستگاه کاری خود نصب کنید .
  2. در حالی که هنوز در ترمینال هستید، Repo را نصب کنید و اعتبار تمام مخازن Git را دریافت کنید .
کد را راه اندازی و همگام سازی کنید
  1. به فهرست اصلی خود بروید:

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

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

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

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

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

    repo sync -j8

همگام‌سازی‌های اولیه ممکن است یک ساعت یا بیشتر طول بکشد.

هر پرداخت مخزن با یک فایل مانیفست نشان داده می شود. داشتن بیش از 1 بازپرداخت در یک زمان مجاز است، تا زمانی که آنها در دایرکتوری های مجزا وجود داشته باشند. اما توجه داشته باشید که هر پرداخت و ساخت تقریباً 300 گیگابایت مصرف دارد (و در حال افزایش است)، بنابراین یا خود را به 2 پرداخت مخزن محدود کنید یا سیستم خود را با یک درایو ثانویه تقویت کنید.

کد را بسازید

برای ساخت اندروید باید نوع دستگاه مورد نظر را برای ساخت با دستور lunch انتخاب کنید. هدف یک جایگشت دستگاه است، مانند یک مدل خاص یا فاکتور فرم.

هدف دستگاه aosp_cf_x86_64_phone-userdebug به شما امکان می دهد دستگاه اندروید مجازی Cuttlefish را برای آزمایش بدون دستگاه فیزیکی بسازید.

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

  1. با اجرای دستور زیر از ریشه کد منبع خود، محیط خود را برای ساخت دستگاه های اندرویدی تنظیم کنید:

    source build/envsetup.sh
  2. هدف ساخت را به دستور lunch منتقل کنید، مانند این:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
  3. کد را از هر جایی در پرداخت خود با استفاده از:

    m

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

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

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

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

    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
    adb sync
    adb reboot

بررسی کنید که در دستگاه انتخابی خود تغییر رنگی مشابه آنچه در شکل 1 نشان داده شده است مشاهده کنید.

Example of a successful color change

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

کد خود را تست کنید

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

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

  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)
  3. سپس اینجا را نگاه کنید

    platform_testing/tests/example/devcodelab
    
  4. برای دریافت فایل برای ویرایش، نام آزمون را در android.test.example.devcodelab.DevCodelabTest انتخاب کنید و آن را جایگزین کنید . با / برای به دست آوردن این نتیجه:

    src/android/test/example/devcodelab/DevCodelabTest.java
    
  5. سپس ویرایش کنید

    platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
    

    جایگزین کردن

    Assert.assertTrue(false)
    

    با

    Assert.assertTrue(true)
    
  6. دوباره تست را اجرا کنید تا مطمئن شوید مشکل را برطرف کرده اید:

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

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

برای مروری بر Git و Repo، با پیوندهایی به اسناد کامل در مورد کار با کد منبع Android، به ابزارهای کنترل منبع مراجعه کنید. برای لیست کامل پروژه های Git و پروژه های جداگانه (مسیرها) برای شاخه های مرتبط با هر پروژه به مخزن AOSP مراجعه کنید.

برای بررسی کد پروژه های خود در 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 مشاهده کنید

به پیوندی که در ترمینال چاپ شده است بروید که شبیه این است:

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

این نرم افزار Codelab شروع برای توسعه پلتفرم اندروید را تکمیل می کند. برای مراحل بعدی به ارسال پچ ها مراجعه کنید و برای جزئیات کامل در مورد توسعه اندروید، بقیه این سایت را ببینید.

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

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

درعوض، برای اهداف این نرم‌افزار، فهرست تغییرات خود را با کلیک بر روی Abandon در Gerrit برگردانید.

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

repo abandon codelab .

همچنین به یاد داشته باشید که تغییراتی را که در فایل تست ایجاد کرده اید برگردانید. از آنجایی که شما 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 .

در این مرحله، کار شما تمام شده است! کار خوب!

کمک بگیرید

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