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
    

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

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

    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
    

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

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

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