مختبر كود مطور أندرويد

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

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

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

الأهداف

تتمثل مهمة Codelab هذا في شقين:

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

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

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

بيئة

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

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

  1. قم بتثبيت الحزم الضرورية على محطة العمل الخاصة بك.
  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
    

توقع أن يستغرق البناء الأول ساعات. تستغرق عمليات البناء اللاحقة وقتًا أقل بكثير.

إنشاء مثيل iCloud

Acloud هي أداة سطر أوامر في AOSP تساعد المستخدمين في إنشاء أجهزة Android افتراضية، في هذه الحالة Cuttlefish.

إذا كنت في نفس الجلسة الطرفية المستخدمة لإنشاء التعليمات البرمجية ، فتابع. بخلاف ذلك، أعد تشغيل البرنامج النصي envsetup.sh ونفس أمر lunch الذي استخدمته هناك أولاً. ثم

  1. قم بتثبيت التبعيات لتشغيل جهاز Cuttlefish الظاهري محليًا باستخدام:

    acloud setup
    
  2. إذا طُلب منك، أعد تشغيل محطة العمل الخاصة بك لتصبح كافة التغييرات سارية المفعول.

  3. قم بإنشاء مثيل محلي لـ acloud باستخدام:

    acloud create --local-image --local-instance
    
  4. حدد جهاز الحبار.

يجب أن يتم الترحيب بك بجلسة VNC تحتوي على جهاز Android!

يمكنك التفاعل مع الجهاز الظاهري الموجود على محطة العمل الخاصة بك باستخدام الماوس ولوحة المفاتيح. يمكنك أيضًا متابعة النشاط داخل السجلات أثناء استخدام جهازك عن طريق استخدام أمر Android Debug Bridge (adb) logcat :

adb logcat

اصنع فرق

قم بتحديث الكود المصدري باتباع هذا المثال لقائمة التغيير .

  1. من جذر الخروج ( aosp/ Directory)، انتقل إلى مشروع Git frameworks/native :

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

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

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

    postComposition();
    
  5. استبدل هذين السطرين بما يلي:

    postComposition();
    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});
    updateColorMatrixLocked();
    
  6. بناء الكود:

    m
    
  7. تحديث البنية على الجهاز:

    adb root
    adb remount
    adb sync
    adb reboot
    acloud reconnect
    
  8. إذا تمت مطالبتك بتحديد جهاز، فاختر الجهاز الذي يعرض أقصر وقت منقضي. (من المحتمل أن يكون هذا هو الأخير في القائمة التي تراها.) لرؤية جميع مثيلات الأجهزة الافتراضية، استخدم acloud list وأوامر acloud list -v .

تأكد من أنك ترى تغييرًا في اللون على جهازك المحدد مشابهًا لما يظهر في الشكل 1.

Example of a successful color change

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

اختبر الكود الخاص بك

يستخدم هذا الجزء من Codelab اختبارًا نموذجيًا موجودًا في الشجرة المصدر ولكنه فاشل. يستخدم هذا Atest لتشغيل الاختبار محليًا واختبار الكود.

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

  1. يجري:

    atest DevCodelabTest
    
  2. سوف يفشل الاختبار. لإصلاح ذلك، ابحث عن الكود المصدري للاختبار الفاشل:

    atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
    
  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

عرض التغيير الخاص بك في جيريت

انتقل إلى الرابط المطبوع في الوحدة الطرفية والذي يشبه هذا الرابط:

https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432

وبهذا يكتمل البرنامج التدريبي المبدئي لتطوير نظام Android الأساسي. راجع إرسال التصحيحات لمعرفة الخطوات التالية، وللحصول على التفاصيل الكاملة حول تطوير Android، راجع بقية هذا الموقع.

التراجع عن التغيير الخاص بك

عادةً، بعد الاختبار وبعد المراجعة والموافقة، تقوم بإرسال التغيير في Gerrit ودمجه في المستودع.

بدلاً من ذلك، ولأغراض هذا الدرس التطبيقي حول الترميز، يمكنك التراجع عن قائمة التغييرات الخاصة بك عن طريق النقر على "التخلي" في 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 .