درس تطبيقي حول ترمي�� م��و��ري تطبيقات Android

يمكنك المساعدة في تطوير أكثر نظام تشغيل تم تثبيته على نطاق واسع في التاريخ. من كوكب الأرض. نعم، أنت هنا لبدء رحلة لتصبح مهندس برمجي في منصّة Android .

وعلى الرغم من صعوبة هذا المسار، يسعى فريق Android جاهدًا لتبسيط ورحلتك وكل إصدار. ويُجري الفريق تحسينات كل يوم من خلال الأنشطة العمل في "المشروع المفتوح المصدر لنظام Android" (AOSP).

لذا ندعوك للاستراحة وإطلاق العنان لإبداعك ومشاركة التاريخ مع صناعة التاريخ.

الأهداف

تتضمّن ��همة هذا الدرس التطبيقي حول الترميز هدفَين:

  1. إليك لمحة عن سير عمل المطوّرين لمهندسي Android الذين يعملون على المنصة (نظام التشغيل).
  2. ننصحك بتقديم الملاحظات. حول أدوات Android ووثائقه وسير عمل مطوّري البرامج.

المتطلّبات الأساسية

يتم استخراج قائمة متطلبات هذا الدرس التطبيقي حول الترميز من المتطلبات الخاصة (AOSP). لحضور هذا الدرس التطبيقي حول الترميز، إعداد ما يلي:

البيئة

عادةً ما يقوم المستخدمون بالبناء والتطوير على محطة العمل مباشرةً. بما أنّه قد تتم العمل في محطات طرفية مختلفة، وبما أنّ العديد من الأوامر المستخدَمة خاصة بالمحطة الطرفية، عليك إعادة تشغيلها في كل جلسة من جلسات المحطة الطرفية. وعلى وجه التحديد، وتتضمّن الأمرين source build/envsetup.sh وlunch.

إعداد محطة العمل

  1. يمكنك تثبيت الحزم اللازمة على نظام التشغيل Android.
  2. تثبيت Repo والحصول على بيانات الاعتماد أثناء استخدام الوحدة الطرفية إلى جميع مستودعات Git.

إعداد الرمز ومزامنته

  1. انتقِل إلى الدليل الرئيسي:

    cd ~
  2. أنشئ دليلاً فرعيًا محليًا للعمل داخله:

    mkdir aosp
  3. انتقِل إلى الدليل:

    cd aosp
  4. نفِّذ الفرع الرئيسي لرمز مصدر رمز مصدر مستودع AOSP (الإعداد التلقائي):

    repo init -u https://android.googlesource.com/platform/manifest
  5. أدخِل بيانات اعتماد Git أو اقبلها (الاسم وعنوان البريد الإلكتروني).

  6. مزامنة رمز المصدر:

    repo sync -j8

قد تستغرق عمل��ات المزامنة الأولية ساعة أو أكثر.

يتم تمثيل كل عملية سحب من مستودع باستخدام ملف بيان. يُسمح بإجراء أكثر من عملية دفع في مستودع واحد في الوقت نفسه، شرط الموجودة في أدلة مميزة. لكن لاحظ أن كل عملية دفع وإنشاء مبالغ استخدام 300 غيغابايت تقريبًا (وما زال في زيادة)، لذا عليك إما تقييد نفسك بـ 2 من عمليات الدفع من مستودع، أو زيادة نظامك بمحرك أقراص ثانوي.

إنشاء الرمز البرمجي

لإنشاء نظام التشغيل Android، عليك اختيار نوع جهاز مستهدَف لبناء التطبيق باستخدام الأمر lunch. الهدف هو تبديل الجهاز، مثل نموذج أو شكل جهاز معين.

يتيح لك استهداف الجهاز aosp_cf_x86_64_phone-userdebug إنشاء جهاز Android افتراضي من نوع Cuttlefish بغرض الاختبار بدون استخدام جهاز فعلي.

ولإنشاء جهاز مادي وتحديثه، اختَر هدفًا آخر واتّبع الخطوات التالية: إرشادات الأجهزة الوامضة.

  1. يمكنك إعداد بيئتك لإنشاء أجهزة Android من خلال تنفيذ العبارة التالية من جذر عملية تسجيل الخروج من الرمز المصدر:

    source build/envsetup.sh
  2. قم بتمرير هدف الإصدار إلى أمر الغداء، مثل هذا:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
  3. يمكنك إنشاء الرمز من أي مكان في عملية الدفع باستخدام:

    m

من المتوقّع أن يستغرق إنشاء الإصدار الأول ساعات. وتستغرق التصميمات اللاحقة إلى حد كبير وقت أقل.

إطلاق Cuttlefish

حبَّار هو محاكي Android الذي يُستخدم لاختبار تصميماتك.

  1. إذا لم يسبق لك تثبيت تطبيق 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 القواعد.

  2. إطلاق حبَّار:

    launch_cvd --daemon
    
  3. الاتصال بجهاز حبَّار من خلال الانتقال إلى https://localhost:8443 في في متصفح الويب الخاص بك. يتم الترحيب بك من خلال بث فيديو لنظام التشغيل Android الجهاز الذي أنشأته للتو.

تغيير

عدِّل رمز المصدر باتّباع المثال التالي قائمة التغييرات.

  1. من جذر عملية الدفع (دليل aosp/)، انتقِل إلى frameworks/native مشروع Git:

    cd frameworks/native
  2. ابدأ مشروعًا مؤقتًا باستخدام الأمر التالي:

    repo start <some-name> .
  3. عدِّل SurfaceFlinger.cpp لتضمين التعديلات من قائمة التغييرات في الموقع التالي:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. ابحث عن هذا الخط:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. أضف هذين السطرين في بداية 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});
    
  6. إنشاء التعليمة ��لبرمجية:

    m
  7. تحديث الإصدار على الجهاز:

    adb root
    adb remount
    adb sync
    adb reboot

تأكَّد من ظهور تغيير في اللون على الجهاز الذي اخترته، تمامًا مثل ما يظهر. في الشكل 1.

مثال على تغيير اللون الناجح

الشكل 1. مظهر الشاشة بعد تغيير اللون بنجاح

اختبار الرمز

يستخدِم هذا الجزء من الدرس التطبيقي نموذج اختبار في شجرة المصدر والذي يتعذّر إكماله. يستخدم ذلك Atest لـ إجراء الاختبار محليًا واختبار الرمز.

لاستخدام الاختبار، اتّبِع التعليمات التالية:

  1. التشغيل:

    atest DevCodelabTest
  2. سيفشل الاختبار. فحص تتبُّع تسلسل استدعاء الدوال البرمجية للاختبار الذي تعذّر إكماله:

    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)
  3. ثم انظر هنا

    platform_testing/tests/example/devcodelab
    
  4. لتعديل الملف، أدخِل اسم الاختبار في android.test.example.devcodelab.DevCodelabTest واستبدال . بـ /، للحصول على هذه النتيجة:

    src/android/test/example/devcodelab/DevCodelabTest.java
    
  5. ثم تعديل

    platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
    

    لاستبدال

    Assert.assertTrue(false)
    

    مع

    Assert.assertTrue(true)
    
  6. أعِد تشغيل الاختبار للتأكّد من حلّ المشكلة:

    atest DevCodelabTest

تحميل الرمز للمراجعة

يعمل Repo على تبسيط استخدام Git من خلال تجميع أوامر مثل git clone للعمل عبر العديد من مستودعات (أو مشاريع) Git دفعة واحدة

راجِع أدوات التحكم في المصدر للحصول على نظرة عامة حول Git وRepo، مع وروابط إلى المستندات الكاملة حول العمل باستخدام رمز المصدر لنظام التشغيل Android. يُرجى الاطّلاع على مستودع AOSP. للحصول على القائمة الكاملة لمشروعات Git والمشروعات الفردية (المسارات) الخاصة والفروع المرتبطة بكل مشروع.

لمراجعة الرموز البرمجية لمشاريعك في Git، استخدِم دالة Gerrit. نظام مراجعة الرموز البرمجية المستند إلى الويب.

  1. بافتراض أنك أجريت التغييرات في مشروع frameworks/native، شغِّل هذه الأوامر لتحميلها:

    cd frameworks/native
    repo start codelab .
    git add .
    git commit
  2. بالنسبة إلى رسالة الالتزام، أدخِل ما يلي:

    Android codelab change
    Test: manual atest
    
  3. حمِّل التغيير:

    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 المجموعة.