يمكنك المساعدة في تطوير أكثر نظام تشغيل تم تثبيته على نطاق واسع في التاريخ. من كوكب الأرض. نعم، أنت هنا لبدء رحلة لتصبح مهندس برمجي في منصّة 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
قد تستغرق عمليات المزامنة الأولية ساعة أو أكثر.
يتم تمثيل كل عملية سحب من مستودع باستخدام ملف بيان. يُسمح بإجراء أكثر من عملية دفع في مستودع واحد في الوقت نفسه، شرط الموجودة في أدلة مميزة. لكن لاحظ أن كل عملية دفع وإنشاء مبالغ استخدام 300 غيغابايت تقريبًا (وما زال في زيادة)، لذا عليك إما تقييد نفسك بـ 2 من عمليات الدفع من مستودع، أو زيادة نظامك بمحرك أقراص ثانوي.
إنشاء الرمز البرمجي
لإنشاء نظام التشغيل Android، عليك اختيار نوع جهاز
مستهدَف لبناء التطبيق باستخدام الأمر lunch
. الهدف هو تبديل الجهاز،
مثل نموذج أو شكل جهاز معين.
يتيح لك استهداف الجهاز aosp_cf_x86_64_phone-userdebug
إنشاء جهاز Android افتراضي من نوع Cuttlefish بغرض
الاختبار بدون استخدام جهاز فعلي.
ولإنشاء جهاز مادي وتحديثه، اختَر هدفًا آخر واتّبع الخطوات التالية: إرشادات الأجهزة الوامضة.
يمكنك إعداد بيئتك لإنشاء أجهزة Android من خلال تنفيذ العبارة التالية من جذر عملية تسجيل الخروج من الرمز المصدر:
source build/envsetup.sh
قم بتمرير هدف الإصدار إلى أمر الغداء، مثل هذا:
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
يمكنك إنشاء الرمز من أي مكان في عملية الدفع باستخدام:
m
من المتوقّع أن يستغرق إنشاء الإصدار الأول ساعات. وتستغرق التصميمات اللاحقة إلى حد كبير وقت أقل.
إطلاق Cuttlefish
حبَّار هو محاكي 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
سيفشل الاختبار. فحص تتبُّع تسلسل استدعاء الدوال البرمجية للاختبار الذي تعذّر إكماله:
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. يُرجى الاطّلاع على مستودع 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 المجموعة.