Codelab למפתחי Android

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

אמנם הדרך לא מאתגרת, אבל צוות Android שואף לפשט את למסע, לכל השקה. בנוסף, הצוות מבצע שיפורים מדי יום באמצעות עבודה ישירה בפרויקט Android Open Source Project‏ (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

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

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

כתיבת הקוד

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

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

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

  1. כדי להגדיר את הסביבה ליצירת גרסאות build למכשירי Android, מריצים את הפקודה הבאה מהשורש של ה-checkout של קוד המקור:

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

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

    m

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

הפעלת Cuttlefish

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. הפעלת Cuttlefish:

    launch_cvd --daemon
    
  3. כדי להתחבר למכשיר Cuttlefish, עוברים אל https://localhost:8443 בדפדפן האינטרנט. יוצג לכם סטרימינג של וידאו מהמכשיר המבוסס על Android שיצרתם.

ביצוע שינוי

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

  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. הבדיקה תיכשל. בודקים את נתיב הקריאה ב-stack של הבדיקה שנכשלה:

    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

זהו סוף ה-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 קבוצה.