این آموزش به شما امکان می دهد برای اولین بار توسعه سیستم عامل اندروید را امتحان کنید.
برای توسعه اندروید تنظیم کنید
قبل از دانلود و ساخت شاخه 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 مراحل زیر را دنبال کنید:
اطلاعات بسته فعلی را دانلود کنید:
sudo apt-get update
برای نصب لانچر Repo دستور زیر را اجرا کنید:
sudo apt-get install repo
راهانداز Repo یک اسکریپت پایتون را ارائه میکند که یک پرداخت را اولیه میکند و ابزار کامل Repo را دانلود میکند.
در صورت موفقیت، به مرحله 4 بروید.
(اختیاری) با استفاده از سری دستورات زیر 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 را نصب می کند.
نسخه لانچر Repo را تأیید کنید:
repo version
خروجی باید نسخه 2.4 یا بالاتر را نشان دهد، به عنوان مثال:
repo launcher version 2.45
سورس اندروید را دانلود کنید
منبع اندروید در مجموعه ای از مخازن Git که توسط گوگل میزبانی شده است قرار دارد. هر مخزن Git شامل کل تاریخچه منبع اندروید، از جمله تغییرات در منبع و زمان ایجاد تغییرات است. برای دانلود سورس اندروید:
به فهرست اصلی خود بروید:
cd ~
یک زیر شاخه کاری محلی در آن ایجاد کنید:
mkdir aosp
به دایرکتوری بروید:
cd aosp
شاخه اصلی کد منبع مخزن AOSP را راه اندازی کنید (پیش فرض):
repo init --partial-clone -b main -u https://android.googlesource.com/platform/manifest
اطلاعات کاربری Git (نام، آدرس ایمیل) خود را وارد یا بپذیرید.
همگام سازی کد منبع:
repo sync -c -j8
اگر در حین دانلود با مشکلی مواجه شدید، به عیب یابی و رفع مشکلات همگام سازی مراجعه کنید.
کد را بسازید
برای ساخت کد:
از داخل فهرست کاری خود، اسکریپت
envsetup.sh
را برای تنظیم محیط ساخت خود منبع کنید:source build/envsetup.sh
نوع دستگاه مورد نظر را برای ساخت با دستور
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 ============================================
هدف را بسازید:
m
انتظار می رود اولین ساخت ساعت ها طول بکشد. ساختهای بعدی زمان بسیار کمتری میبرند. خروجی ساخت شما در $OUT_DIR
ظاهر می شود.
کوتلفیش را راه اندازی کنید
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 -R
adb root
adb sync
adb reboot
بررسی کنید که در دستگاه انتخابی خود تغییر رنگی مشابه آنچه در شکل 1 نشان داده شده است مشاهده کنید.
شکل 1. ظاهر صفحه بعد از تغییر رنگ موفق
یه تست درست کن
این بخش از Codelab از یک آزمایش نمونه استفاده می کند که در درخت منبع قرار دارد و ناموفق است.
برای اجرا، اشکال زدایی و رفع تست، این دستورالعمل ها را دنبال کنید:
اجرا کنید:
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)
آخرین خط ردیابی پشته آزمایشی را نشان می دهد که در حال شکست است (
testHelloWorld
). این تست در فایلی به نامDevCodelabTest.java
است.برای تعیین مکان آزمایشی که باید اصلاح شود،
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
می شود.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، از سیستم بررسی کد مبتنی بر وب 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 مشاهده کنید
برای مشاهده تغییر خود در Gerrit، به خروجی پیوند در ترمینال بروید. لینک مشابه زیر است:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
تغییر خود را برگردانید
به طور معمول، پس از آزمایش و پس از بررسی و تایید، تغییر خود را در Gerrit ارسال می کنید و آن را در مخزن ادغام می کنید. در عوض، برای اهداف این نرم افزار کد، کار خود را برگردانید:
در Gerrit، روی Abandon کلیک کنید.
شاخه موقت مرتبط را در فهرست
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 .
این نرم افزار Codelab برای توسعه پلتفرم اندروید را تکمیل می کند.
کمک بگیرید
اگر در طول این کد لبه با خطا مواجه شدید، با استفاده از پیوند Issue Tracker در پایین هر صفحه، آنها را گزارش کنید. سوالات خود را برای گروه ساخت اندروید ارسال کنید.
تایپ کنید ps -A | grep crosvm
برای دیدن اینکه آیا crosvm
از قبل در حال اجرا است یا خیر. اگر crossvm
در حال اجرا است، stop_cvd || true
تایپ کنید stop_cvd || true
یا kill crosvm
با فرآیند PID.