يمكنك المساعدة في تطوير أكثر نظام تشغيل تم تثبيته على نطاق واسع في التاريخ. من كوكب الأرض. نعم، أنت هنا للشروع في رحلة أن تصبح Android هندسة المنصات.
وعلى الرغم من صعوبة هذا المسار، يسعى فريق Android جاهدًا لتبسيط ورحلتك وكل إصدار. ويُجري الفريق تحسينات كل يوم من خلال الأنشطة العمل في "المشروع المفتوح المصدر لنظام Android" (AOSP).
لذا ندعوك للاستراحة وإطلاق العنان لإبداعك ومشاركة التاريخ مع صناعة التاريخ.
الأهداف
ينطوي هذا الدرس التطبيقي حول الترميز على شقين:
- لمنحك لمحة بسيطة عن سير عمل المطوّرين مثل مهندسي Android الذين يعملون على النظام الأساسي (نظام التشغيل).
- ننصحك بتقديم الملاحظات. حول أدوات Android ووثائقه وسير عمل مطوّري البرامج.
المتطلّبات الأساسية
يتم استخراج قائمة متطلبات هذا الدرس التطبيقي حول الترميز من المتطلبات الخاصة (AOSP). لحضور هذا الدرس التطبيقي حول الترميز، إعداد ما يلي:
- أن تستوفي محطة عمل Linux جميع المتطلبات العامة.
- Repo وإعدادات Git المطلوبة للتعديل قاعدة رموز Android.
البيئة
عادةً ما يقوم المستخدمون بالبناء والتطوير على محطة العمل مباشرةً. لأنه قد
تعمل في وحدات طرفية متعددة، كما أن العديد من الأوامر المستخدمة خاصة بالوحدة الطرفية،
عليك إعادة تشغيلهما في كل جلسة طرفية. على وجه التحديد،
وتتضمّن الأمرين source build/envsetup.sh
وlunch
.
إعداد محطة العمل
- يمكنك تثبيت الحزم اللازمة على نظام التشغيل Android.
- تثبيت Repo والحصول على بيانات الاعتماد أثناء استخدام الوحدة الطرفية إلى جميع مستودعات Git.
إعداد الرمز ومزامنته
انتقِل إلى الدليل الرئيسي:
cd ~
أنشئ دليلاً فرعيًا محليًا للعمل داخله:
mkdir aosp
انتقِل إلى الدليل:
cd aosp
نفِّذ الفرع الرئيسي لرمز مصدر رمز مصدر مستودع AOSP (الإعداد التلقائي):
repo init -u https://android.googlesource.com/platform/manifest
أدخِل بيانات اعتماد Git أو اقبلها (الاسم وعنوان البريد الإلكتروني).
مزامنة رمز المصدر:
repo sync -j8
قد تستغرق عمليات المزامنة الأولية ساعة أو أكثر.
يتم تمثيل كل عملية دفع من خلال Repo بملف بيان. يُسمح بإجراء أكثر من عملية دفع في مستودع واحد في الوقت نفسه، شرط الموجودة في أدلة مميزة. لكن لاحظ أن كل عملية دفع وإنشاء مبالغ استخدام 300 غيغابايت تقريبًا (وما زال في زيادة)، لذا عليك إما تقييد نفسك بـ 2 من عمليات الدفع من مستودع، أو زيادة نظامك بمحرك أقراص ثانوي.
إنشاء الرمز البرمجي
لإصدار Android، يجب اختيار هدف.
نوع الجهاز المطلوب إنشاؤه باستخدام الأمر lunch
. الهدف هو تبديل الجهاز،
مثل نموذج أو شكل جهاز معين.
يتيح لك استهداف الجهاز aosp_cf_x86_64_phone-userdebug
لتصميم جهاز Android افتراضي للحبت
للاختبار بدون جهاز مادي.
ولإنشاء جهاز مادي وتحديثه، اختَر هدفًا آخر واتّبع الخطوات التالية: إرشادات الأجهزة الوامضة.
يمكنك إعداد بيئتك لإنشاء أجهزة Android من خلال تشغيل التالي من جذر طلب الدفع الخاص برمز المصدر:
source build/envsetup.sh
قم بتمرير هدف الإصدار إلى أمر الغداء، كما يلي:
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
يمكنك إنشاء الرمز من أي مكان في الدفع باستخدام:
m
من المتوقّع أن تستغرق عملية الإنشاء الأولى ساعات. وتستغرق عمليات الإنشاء اللاحقة بشكل كبير وقت أقل.
إطلاق حبَّار
حبَّار هو محاكي Android الذي يُستخدم لاختبار تصميماتك.
إذا لم يسبق لك تثبيت تطبيق 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
في في متصفح الويب الخاص بك. يتم الترحيب بك من خلال بث فيديو لنظام التشغيل Android الجهاز الذي أنشأته للتو.
تغيير
عدِّل رمز المصدر باتّباع المثال التالي قائمة التغييرات.
من جذر عملية الدفع (دليل
aosp/
)، انتقِل إلى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. مظهر الشاشة بعد تغيير اللون بنجاح
اختبار الرمز
يستخدِم هذا الجزء من الدرس التطبيقي حول الترميز مثالاً على اختبار في شجرة المصدر وهي تفشل. يستخدم ذلك 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. يُرجى الاطّلاع على مستودع AOSP. للحصول على القائمة الكاملة لمشروعات Git والمشروعات الفردية (المسارات) الخاصة والفروع المرتبطة بكل مشروع.
لمراجعة الرموز البرمجية لمشاريعك في Git، استخدِم دالة Gerrit. نظام مراجعة الرموز البرمجية المستند إلى الويب.
بافتراض أنك أجريت التغييرات في مشروع
frameworks/native
، شغِّل هذه الأوامر لتحميلها:cd frameworks/native
repo start codelab .
git add .
git 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
وبهذا يتم إكمال الدرس التطبيقي حول الترميز الخاص بتطوير نظام Android الأساسي. عرض إرسال رموز التصحيح لمعرفة الخطوات التالية، وللحصول على التفاصيل الكاملة حول تطوير Android، اطّلع على بقية لهذا الموقع.
التراجع عن التغيير
عادة، بعد الاختبار وعند المراجعة والموافقة، يمكنك إرسال التغيير في غيريت ودمجه في المستودع.
ولأغراض تتعلّق بالدرس التطبيقي حول الترميز، يمكنك العودة إلى قائمة التغييرات بالنقر على تخلي في 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 .
في هذه المرحلة، لقد انتهيتَ! أحسنت.
الحصول على مساعدة
إذا واجهت أخطاء خلال هذا الدرس التطبيقي حول الترميز، يمكنك الإبلاغ عنها باستخدام أداة تتبُّع المشاكل أسفل أي صفحة. إرسال الأسئلة إلى إنشاء تطبيقات Android المجموعة.