شما می توانید به توسعه گسترده ترین سیستم عامل نصب شده در تاریخ زمین کمک کنید. بله، شما اینجا هستید تا یک مهندس پلتفرم اندروید شوید.
اگرچه مسیر چالش برانگیز است، تیم اندروید در تلاش است تا سفر شما را در هر نسخه سادهتر کند. و این تیم هر روز از طریق کار مستقیم در پروژه منبع باز Android (AOSP) بهبود مییابد.
پس بنشینید، یک ترمینال راه اندازی کنید و بیایید تاریخ بسازیم.
اهداف
ماموریت این کد لبه دوگانه است:
- تا به شما کمی از نحوه گردش کار توسعه دهندگان برای مهندسان اندرویدی که بر روی پلتفرم (سیستم عامل) کار می کنند، بچشید.
- شما را تشویق میکند تا درباره ابزارها، اسناد، و گردش کار برنامهنویس Android بازخورد ارائه کنید.
پیش نیازها
لیست الزامات برای این کد لبه از الزامات توسعه پلتفرم عمومی ( AOSP ) مشتق شده است. برای گرفتن این کد لبه، موارد زیر را تنظیم کنید:
- ایستگاه کاری لینوکس فیزیکی که تمام نیازهای عمومی را برآورده می کند.
- Repo و پیکربندی Git مورد نیاز برای ویرایش پایه کد اندروید.
محیط
به طور معمول، کاربران مستقیماً روی ایستگاه کاری میسازند و توسعه میدهند. از آنجایی که ممکن است در ترمینال های مختلفی کار کنید و بسیاری از دستورات استفاده شده مختص ترمینال هستند، باید آنها را در هر جلسه ترمینال دوباره اجرا کنید. به طور خاص، اینها شامل دستورات source build/envsetup.sh
و lunch
هستند.
راه اندازی ایستگاه کاری
- بسته های لازم را روی ایستگاه کاری خود نصب کنید .
- در حالی که هنوز در ترمینال هستید، Repo را نصب کنید و اعتبار تمام مخازن Git را دریافت کنید .
کد را راه اندازی و همگام سازی کنید
به فهرست اصلی خود بروید:
cd ~
یک زیر شاخه کاری محلی در آن ایجاد کنید:
mkdir aosp
به دایرکتوری بروید:
cd aosp
شاخه اصلی کد منبع مخزن AOSP را راه اندازی کنید (پیش فرض):
repo init -u https://android.googlesource.com/platform/manifest
اطلاعات کاربری Git (نام، آدرس ایمیل) خود را وارد یا بپذیرید.
همگام سازی کد منبع:
repo sync -j8
همگامسازی اولیه ممکن است یک ساعت یا بیشتر طول بکشد.
هر پرداخت مخزن با یک فایل مانیفست نشان داده می شود. داشتن بیش از 1 بازپرداخت در یک زمان مجاز است، تا زمانی که آنها در دایرکتوری های مجزا وجود داشته باشند. اما توجه داشته باشید که هر پرداخت و ساخت تقریباً 300 گیگابایت مصرف دارد (و در حال افزایش است)، بنابراین یا خود را به 2 پرداخت مخزن محدود کنید یا سیستم خود را با یک درایو ثانویه تقویت کنید.
کد را بسازید
برای ساخت اندروید باید نوع دستگاه مورد نظر را برای ساخت با دستور lunch
انتخاب کنید. هدف یک جایگشت دستگاه است، مانند یک مدل خاص یا فاکتور فرم.
هدف دستگاه موجود در زیر، aosp_cf_x86_64_phone-userdebug
، شما را قادر می سازد تا دستگاه اندروید مجازی Cuttlefish را برای آزمایش بدون دستگاه فیزیکی بسازید.
برای ساختن و بهروزرسانی یک دستگاه فیزیکی، هدف دیگری را انتخاب کنید و دستورالعملهای مربوط به دستگاههای چشمک زن را دنبال کنید.
با اجرای دستور زیر از ریشه کد منبع خود، محیط خود را برای ساخت دستگاه های اندرویدی تنظیم کنید:
source build/envsetup.sh
هدف ساخت را به دستور lunch منتقل کنید، مانند این:
lunch aosp_cf_x86_64_phone-userdebug
کد را از هر جایی در پرداخت خود با استفاده از:
m
انتظار می رود اولین ساخت ساعت ها طول بکشد. ساختهای بعدی زمان بسیار کمتری میبرند.
یک نمونه Acloud ایجاد کنید
Acloud یک ابزار خط فرمان در AOSP است که به کاربران در ایجاد دستگاه های اندروید مجازی، در این مورد Cuttlefish کمک می کند.
اگر در همان جلسه ترمینال مورد استفاده برای ساخت کد هستید، ادامه دهید. در غیر این صورت، ابتدا اسکریپت envsetup.sh
و همان دستور lunch
را که در آنجا استفاده کردید، دوباره اجرا کنید. سپس
وابستگی ها را برای اجرای یک دستگاه مجازی Cuttlefish به صورت محلی با این موارد نصب کنید:
acloud setup
اگر از شما خواسته شد، ایستگاه کاری خود را مجددا راه اندازی کنید تا همه تغییرات اعمال شوند.
یک نمونه محلی
acloud
با:acloud create --local-image --local-instance
دستگاه Cuttlefish را انتخاب کنید.
شما باید با یک جلسه VNC حاوی یک دستگاه اندرویدی استقبال کنید!
می توانید با استفاده از ماوس و صفحه کلید خود با دستگاه مجازی در ایستگاه کاری خود تعامل داشته باشید. همچنین میتوانید هنگام استفاده از دستگاه خود، با استفاده از دستور logcat
Android Debug Bridge (adb) فعالیت را در گزارشها دنبال کنید:
adb logcat
تعییری ایجاد کن
کد منبع را به دنبال این فهرست تغییر مثال به روز کنید.
از ریشه پرداخت خود (
aosp/
directory)، به پروژهframeworks/native
Git بروید:cd frameworks/native
یک پروژه موقت را با این دستور شروع کنید:
repo start <some-name> .
SurfaceFlinger.cpp
را ویرایش کنید تا بهروزرسانیهای فهرست تغییرات را در مکان زیر اضافه کنید:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
این خط را پیدا کنید:
postComposition();
آن دو خط را با خط زیر جایگزین کنید:
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();
کد را بسازید:
m
به روز رسانی بیلد در دستگاه:
adb root
adb remount
adb sync
adb reboot
acloud reconnect
اگر از شما خواسته شد دستگاهی را انتخاب کنید، دستگاهی را انتخاب کنید که کمترین زمان سپری شده را نشان می دهد. (این احتمالاً آخرین مورد در لیستی است که می بینید.) برای مشاهده تمام نمونه های دستگاه مجازی، از دستورات
acloud list
وacloud list -v
استفاده کنید.
بررسی کنید که در دستگاه انتخابی خود تغییر رنگی مشابه آنچه در شکل 1 نشان داده شده است مشاهده کنید.
شکل 1. ظاهر صفحه بعد از تغییر رنگ موفق
کد خود را تست کنید
این بخش از Codelab از یک آزمایش نمونه استفاده می کند که در درخت منبع قرار دارد و ناموفق است. این از Atest برای اجرای تست به صورت محلی و آزمایش کد استفاده می کند.
برای استفاده از آزمون، دستورالعمل های زیر را دنبال کنید:
اجرا کن:
atest DevCodelabTest
آزمون شکست خواهد خورد. برای رفع آن، کد منبع آزمون ناموفق را پیدا کنید:
atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
سپس اینجا را نگاه کنید
platform_testing/tests/example/devcodelab
برای دریافت فایل برای ویرایش، نام آزمون را در
android.test.example.devcodelab.DevCodelabTest
انتخاب کنید و آن را جایگزین کنید.
با/
برای به دست آوردن این نتیجه:src/android/test/example/devcodelab/DevCodelabTest.java
سپس ویرایش کنید
platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
جایگزین کردن
Assert.assertTrue(false)
با
Assert.assertTrue(true)
دوباره تست را اجرا کنید تا مطمئن شوید مشکل را برطرف کرده اید:
atest DevCodelabTest
کد خود را برای بررسی آپلود کنید
Repo استفاده از Git را با ترکیب کردن دستوراتی مانند git clone
برای کار در چندین مخزن (یا پروژه) Git به طور همزمان ساده می کند.
برای مروری بر Git و Repo، با پیوندهایی به اسناد کامل در مورد کار با کد منبع Android، به ابزارهای کنترل منبع مراجعه کنید. برای لیست کامل پروژه های Git و پروژه های جداگانه (مسیرها) برای شاخه های مرتبط با هر پروژه به مخزن AOSP مراجعه کنید.
برای بررسی کد پروژه های خود در Git، از سیستم بازبینی کد مبتنی بر وب Gerrit استفاده خواهید کرد.
با فرض اینکه تغییرات خود را در
frameworks/native
انجام داده اید، این دستورات را برای آپلود آنها اجرا کنید:cd frameworks/native
repo start codelab .
git add .
git commit
برای پیام commit خود، موارد زیر را وارد کنید:
Android codelab change Test: manual atest
تغییر خود را آپلود کنید:
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 .
در این مرحله، کار شما تمام شده است! کارت خوب بود!
کمک بگیر
اگر در طول این کد لبه با خطا مواجه شدید، لطفاً با استفاده از پیوند ردیاب مشکل در پایین هر صفحه، آنها را گزارش کنید. سوالات خود را برای گروه ساخت اندروید ارسال کنید.