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

يمكنك المساعدة في تطوير نظام التشغيل الأكثر انتشارًا في تاريخ الأرض. نعم، أنت هنا للبدء في رحلتك لتصبح مهندسًا لمنصة 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
    

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

إطلاق الحبار

Cuttlefish هو محاكي Android المستخدم لاختبار بنياتك.

  1. إذا لم تقم بتثبيت Cuttlefish من قبل، فيجب عليك تثبيت تبعيات 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
    

    تؤدي إعادة التشغيل إلى تثبيت وحدات kernel إضافية وتطبيق قواعد udev .

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

    launch_cvd --daemon</code>
    
  3. اتصل بجهاز Cuttlefish بالانتقال إلى https://localhost:8443 في متصفح الويب الخاص بك. يتم الترحيب بك من خلال دفق فيديو للجهاز الذي يعمل بنظام Android والذي قمت بإنشائه للتو.

اصنع فرق

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

  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
    

تأكد من أنك ترى تغييرًا في اللون على جهازك المحدد مشابهًا لما يظهر في الشكل 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 .