Codelab למפתחי Android

אפשר לעזור בפיתוח של מערכת ההפעלה המותקנת ביותר בהיסטוריה של כדור הארץ. כן, הגעת לכאן כדי להתחיל את המסע להפוך למהנדס פלטפורמה של Android.

אמנם הדרך לא מאתגרת, אבל צוות Android שואף לפשט את למסע, לכל השקה. והצוות מבצע שיפורים מדי יום באמצעות לעבוד בפרויקט הקוד הפתוח של Android (AOSP).

אז פשוט שבונים, מפעילים מסוף ועושים היסטוריה.

שערים

המשימה של Codelab זו כפולה:

  1. לתת טעימה קטנה מתהליך העבודה למפתחים כמו מהנדסי Android שעובדים על הפלטפורמה (מערכת ההפעלה).
  2. כדאי לבקש ממך לשלוח משוב לגבי הכלים, התיעוד ותהליך העבודה של המפתחים ב-Android.

דרישות מוקדמות

רשימת הדרישות ל-Codelab הזה נגזרת מהדרישות הכלליות AOSP. כדי לגשת ל-Codelab הזה, להגדיר את הפריטים הבאים:

סביבה

בדרך כלל המשתמשים בונים ומתפתחים בתחנת העבודה באופן ישיר. כי אתם יכולים פועלות במסופים שונים, והרבה מהפקודות שבהן נעשה שימוש הן ספציפיות לטרמינל תצטרכו להפעיל אותם מחדש בכל סשן במסוף. באופן ספציפי, הפקודות האלה כוללות את הפקודות 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

סנכרונים ראשוניים יכולים להימשך שעה או יותר.

כל תשלום במאגר מיוצג על ידי קובץ מניפסט. מותר להשתמש ביותר מ-checkout אחד של מאגר בו-זמנית, כל עוד הם נמצאים בספריות נפרדות. אבל שימו לב שכל תשלום בקופה או גרסת build כ-300GB שימוש (והוא הולך וגדל), כך שלא תצטרכו להגביל את עצמכם ל-2 תשלומים במאגרי תשלומים, או להרחיב את המערכת באמצעות כונן משני.

כתיבת הקוד

כדי ליצור את Android, צריך לבחור יעד סוג המכשיר לבנייה באמצעות הפקודה lunch. יעד הוא תמורה של מכשיר, כמו מודל ספציפי או גורם צורה ספציפי.

היעד aosp_cf_x86_64_phone-userdebug מאפשר ליצור מכשיר Android וירטואלי מסוג Cuttlefish לצורך בדיקה, בלי מכשיר פיזי.

כדי לפתח ולעדכן מכשיר פיזי במקום זאת, יש לבחור יעד אחר ולפעול בהתאם ההוראות למכשירי Flash.

  1. כדי להגדיר את הסביבה לפיתוח מכשירי Android, צריך להריץ את באמצעות הפקודה הבאה מהרמה הבסיסית (root) של תהליך התשלום על קוד המקור:

    source build/envsetup.sh
  2. מעבירים את יעד ה-build לפקודה לארוחת צהריים, כך:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
  3. לפתח את הקוד מכל מקום תשלום באמצעות:

    m

ה-build הראשון צפוי להימשך כמה שעות. גרסאות ה-build הבאות נמשכות באופן משמעותי פחות זמן.

הפעלת דיונון

Cuttlefish הוא אמולטור Android שמשמש לבדיקת גרסאות ה-build שלכם.

  1. אם מעולם לא התקנתם את הדיונון, תצטרכו להתקין את יחסי תלות של דיונון. בחלון הטרמינל, מריצים את הפקודות הבאות כדי להוריד, ליצור ולהתקין את חבילות Debian המארחות:

    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. במכשיר שבניתם עכשיו.

ביצוע שינוי

מעדכנים את קוד המקור לפי הדוגמה Changelist.

  1. מהרמה הבסיסית (root) של דף התשלום (ספריית 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. מעדכנים את ה-build במכשיר:

    adb root
    adb remount
    adb sync
    adb reboot

צריך לוודא שמופיע שינוי צבע במכשיר שבחרת, בדומה לשינוי הצבע באיור 1.

דוגמה לשינוי צבע מוצלח

איור 1. מראה המסך לאחר שינוי הצבע בהצלחה

בדיקת הקוד

בחלק הזה של ה-Codelab נעשה שימוש בבדיקה לדוגמה שנמצאת בעץ המקור ונכשל. הוא משתמש ב-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

העלאת הקוד לבדיקה

המאגר מפשט את השימוש ב-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

השלמה של ה-Codelab לתחילת העבודה לפיתוח פלטפורמת Android. צפייה שליחת תיקונים לקבלת פרטים מלאים על פיתוח Android, מהאתר הזה.

ביטול השינוי

בדרך כלל, לאחר הבדיקה ולאחר בדיקה ואישור, עליך לשלוח את השינוי Gerrit ולמזג אותם למאגר.

במקום זאת, למטרות הקודלאב הזה, צריך לבטל את רשימת השינויים בלחיצה על Abandon ב-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 .

בשלב הזה סיימת! מעולה,

עזרה

אם תיתקלו בשגיאות במהלך ה-Codelab הזה, אפשר לדווח עליהן באמצעות מעקב אחר בעיות בחלק התחתון של כל דף. שולחים שאלות לקבוצה android-building.