Codelab برنامه نویس اندروید

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

اگرچه مسیر چالش برانگیز است، تیم اندروید در تلاش است تا سفر شما را در هر نسخه ساده‌تر کند. و این تیم هر روز از طریق کار مستقیم در پروژه منبع باز 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-userdebug
    
  3. کد را از هر جایی در پرداخت خود با استفاده از:

    m
    

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

یک نمونه Acloud ایجاد کنید

Acloud یک ابزار خط فرمان در AOSP است که به کاربران در ایجاد دستگاه های اندروید مجازی، در این مورد Cuttlefish کمک می کند.

اگر در همان جلسه ترمینال مورد استفاده برای ساخت کد هستید، ادامه دهید. در غیر این صورت، ابتدا اسکریپت envsetup.sh و همان دستور lunch را که در آنجا استفاده کردید، دوباره اجرا کنید. سپس

  1. یک نمونه محلی Acloud با:

    acloud create --local-image --local-instance
    
  2. به روز رسانی بسته های مورد نیاز را بپذیرید.

  3. اگر از شما خواسته شد، ایستگاه کاری خود را مجددا راه اندازی کنید تا همه تغییرات اعمال شوند.

  4. دستگاه Cuttlefish را انتخاب کنید.

شما باید با یک جلسه VNC حاوی یک دستگاه اندرویدی استقبال کنید!

می توانید با استفاده از ماوس و صفحه کلید خود با دستگاه مجازی در ایستگاه کاری خود تعامل داشته باشید. همچنین می‌توانید هنگام استفاده از دستگاه خود، با استفاده از دستور logcat Android Debug Bridge (adb) فعالیت را در گزارش‌ها دنبال کنید:

adb logcat

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

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

  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. این دو خط را پیدا کنید:

    postFrame();
    postComposition();
    
  5. آن دو خط را با خط زیر جایگزین کنید:

    postFrame();
    postComposition();
    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});
    updateColorMatrixLocked();
    
  6. کد را بسازید:

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

    adb root
    adb remount
    adb sync
    adb reboot
    acloud reconnect
    
  8. اگر از شما خواسته شد دستگاهی را انتخاب کنید، دستگاهی را انتخاب کنید که کمترین زمان سپری شده را نشان می دهد. (این احتمالاً آخرین مورد در لیستی است که می بینید.) برای مشاهده تمام نمونه های دستگاه مجازی، از acloud list acloud list -v استفاده کنید.

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

Example of a successful color change

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

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

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

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

  1. اجرا کن:

    atest DevCodelabTest
    
  2. آزمون شکست خواهد خورد. برای رفع آن، کد منبع آزمون ناموفق را پیدا کنید:

    atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
    
  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 master:
  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/master

تغییر خود را در 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 .

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

کمک بگیر

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