شما می توانید به توسعه گسترده ترین سیستم عامل نصب شده در تاریخ زمین کمک کنید. بله، شما اینجا هستید تا یک مهندس پلتفرم اندروید شوید.
اگرچه مسیر چالش برانگیز است، تیم اندروید در تلاش است تا سفر شما را در هر نسخه سادهتر کند. و این تیم هر روز از طریق کار مستقیم در پروژه منبع باز 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-trunk_staging-userdebug
کد را از هر جایی در پرداخت خود با استفاده از:
m
انتظار می رود اولین ساخت ساعت ها طول بکشد. ساختهای بعدی زمان بسیار کمتری میبرند.
Cuttlefish شبیه ساز اندروید است که برای آزمایش ساخت های شما استفاده می شود.
اگر هرگز 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
را اعمال می کند.راه اندازی ترد ماهی:
launch_cvd --daemon
با پیمایش به
https://localhost:8443
در مرورگر وب خود به دستگاه Cuttlefish متصل شوید. با پخش جریانی ویدیویی از دستگاه مجهز به Android که به تازگی ساخته اید به استقبال شما می آید.
کد منبع را به دنبال این فهرست تغییر مثال به روز کنید.
از ریشه پرداخت خود (
aosp/
directory)، به پروژهframeworks/native
Git بروید:cd frameworks/native
یک پروژه موقت را با این دستور شروع کنید:
repo start <some-name> .
SurfaceFlinger.cpp
را ویرایش کنید تا بهروزرسانیهای فهرست تغییرات را در مکان زیر اضافه کنید:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
این خط را پیدا کنید:
void SurfaceFlinger::updateColorMatrixLocked() {
این دو خط را در شروع 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});
کد را بسازید:
m
به روز رسانی بیلد در دستگاه:
adb root
adb remount
adb sync
adb reboot
بررسی کنید که در دستگاه انتخابی خود تغییر رنگی مشابه آنچه در شکل 1 نشان داده شده است مشاهده کنید.
شکل 1. ظاهر صفحه بعد از تغییر رنگ موفق
این بخش از Codelab از یک آزمایش نمونه استفاده می کند که در درخت منبع قرار دارد و ناموفق است. این از Atest برای اجرای تست به صورت محلی و آزمایش کد استفاده می کند.
برای استفاده از آزمون، دستورالعمل های زیر را دنبال کنید:
اجرا کنید:
atest DevCodelabTest
آزمون شکست خواهد خورد. ردیابی پشته آزمون شکست خورده را بررسی کنید:
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)
سپس اینجا را نگاه کنید
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
به پیوندی که در ترمینال چاپ شده است بروید که شبیه این است:
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 در پایین هر صفحه، آنها را گزارش کنید. سوالات خود را برای گروه ساخت اندروید ارسال کنید.