מעבד קוד למפתחי אנדרואיד

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

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

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

מטרות

המשימה של מעבדת קוד זה כפולה:

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

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

רשימת הדרישות עבור מעבדת קוד זה נגזרת מאלה לפיתוח פלטפורמה כללית ( 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
    

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

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

בנה את הקוד

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

יעד המכשיר aosp_cf_x86_64_phone-userdebug מאפשר לך לבנות את מכשיר האנדרואיד הווירטואלי Cuttlefish לבדיקה ללא מכשיר פיזי.

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

  1. הגדר את הסביבה שלך לבניית מכשירי אנדרואיד על ידי הפעלת הפקודה הבאה מהשורש של בדיקת קוד המקור שלך:

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

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

    m
    

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

צור מופע של Acloud

Acloud הוא כלי שורת פקודה ב-AOSP המסייע למשתמשים ביצירת מכשירי אנדרואיד וירטואליים, במקרה זה Cuttlefish.

אם אתה נמצא באותה סשן מסוף המשמש לבניית הקוד , המשך. אחרת, הפעל מחדש את הסקריפט envsetup.sh ואת אותה פקודת lunch שבה השתמשת שם תחילה. לאחר מכן

  1. התקן את התלות להפעלת מכשיר וירטואלי של Cuttlefish באופן מקומי עם:

    acloud setup
    
  2. אם תתבקש, הפעל מחדש את תחנת העבודה שלך כדי שכל השינויים ייכנסו לתוקף.

  3. צור מופע מקומי acloud עם:

    acloud create --local-image --local-instance
    
  4. בחר את מכשיר הדיונון.

צריך לקבל את פניכם עם סשן VNC המכיל מכשיר אנדרואיד!

אתה יכול ליצור אינטראקציה עם המכשיר הוירטואלי בתחנת העבודה שלך באמצעות העכבר והמקלדת. אתה יכול גם לעקוב אחר הפעילות ביומנים בזמן שאתה משתמש במכשיר שלך על ידי שימוש בפקודת logcat של Android Debug Bridge (adb):

adb logcat

עשה שינוי

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

  1. מהשורש של התשלום שלך ( aosp/ directory), נווט לפרויקט frameworks/native Git:

    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. עדכן את ה-build במכשיר:

    adb root
    adb remount
    adb sync
    adb reboot
    acloud reconnect
    
  8. אם תתבקש לבחור מכשיר, בחר את זה שמציג את הזמן הקצר ביותר שחלף. (זה כנראה האחרון ברשימה שאתה רואה.) כדי לראות את כל מופעי ההתקן הווירטואליים, השתמש בפקודות acloud list ו- acloud list -v .

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

Example of a successful color change

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

בדוק את הקוד שלך

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

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

החזר את השינוי שלך

בדרך כלל, לאחר בדיקה ולאחר סקירה ואישור, אתה מגיש את השינוי שלך ב-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 .

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

תקבל עזרה

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