אתה יכול לעזור בפיתוח מערכת ההפעלה המותקנת ביותר בהיסטוריה של כדור הארץ. כן, אתה כאן כדי לצאת למסע להיות מהנדס פלטפורמת אנדרואיד.
למרות שהדרך מאתגרת, צוות אנדרואיד שואף לפשט את המסע שלך, בכל מהדורה. והצוות מבצע שיפורים מדי יום באמצעות עבודה ישירה בפרויקט הקוד הפתוח של אנדרואיד (AOSP).
אז שבו, הפעילו מסוף, ובואו נעשה היסטוריה.
מטרות
המשימה של מעבדת קוד זה כפולה:
- לתת לכם טעימה קטנה מאיך זרימת העבודה של המפתחים עבור מהנדסי אנדרואיד העובדים על הפלטפורמה (מערכת ההפעלה).
- עודד אותך לספק משוב על הכלים, התיעוד וזרימת העבודה של המפתחים של אנדרואיד.
דרישות מוקדמות
רשימת הדרישות עבור מעבדת קוד זה נגזרת מאלה לפיתוח פלטפורמה כללית ( AOSP ). כדי לקחת מעבדת קוד זה, הגדר את הדברים הבאים:
- תחנת עבודה פיזית של לינוקס העומדת בכל הדרישות הציבוריות .
- Repo ותצורת Git הנדרשת כדי לערוך את בסיס הקוד של אנדרואיד.
סביבה
בדרך כלל, משתמשים בונים ומפתחים ישירות בתחנת העבודה. מכיוון שייתכן שאתה עובד במסופים שונים, ורבות מהפקודות בהן נעשה שימוש הן ספציפיות למסוף, תצטרך להפעיל אותן מחדש בכל הפעלת מסוף. באופן ספציפי, אלה כוללים את source build/envsetup.sh
ואת פקודות lunch
.
הגדר תחנת עבודה
- התקן את החבילות הדרושות בתחנת העבודה שלך.
- בזמן שאתה עדיין במסוף, התקן את Repo והשיג אישורים לכל מאגרי Git.
אתחול וסנכרן את הקוד
נווט אל ספריית הבית שלך:
cd ~
צור בתוכו תת-ספריית עבודה מקומית:
mkdir aosp
נווט לתוך הספרייה:
cd aosp
אתחל את הענף הראשי של קוד המקור של מאגר AOSP (ברירת המחדל):
repo init -u https://android.googlesource.com/platform/manifest
הזן או קבל את אישורי Git שלך (שם, כתובת אימייל).
סנכרן את קוד המקור:
repo sync -j8
סנכרון ראשוני יכול להימשך שעה או יותר.
כל קופה של ריפו מיוצגת על ידי קובץ מניפסט . מותר להחזיק יותר מ-repo checkout אחד בכל פעם, כל עוד הם קיימים בספריות נפרדות. אבל שים לב שכל קופה ובנייה מסתכמת בשימוש של בערך 300 GB (וגדל), אז או שתגביל את עצמך ל-2 תשלומים של ריפו, או הגדל את המערכת שלך עם כונן משני.
בנה את הקוד
כדי לבנות אנדרואיד, עליך לבחור סוג מכשיר יעד לבנות עם פקודת lunch
. יעד הוא תמורה במכשיר, כגון דגם ספציפי או גורם צורה.
יעד המכשיר הכלול להלן, aosp_cf_x86_64_phone-userdebug
, מאפשר לך לבנות את מכשיר האנדרואיד הווירטואלי של Cuttlefish לבדיקה ללא מכשיר פיזי.
כדי לבנות ולעדכן מכשיר פיזי במקום זאת, בחר יעד אחר ופעל לפי ההוראות למכשירים מהבהבים .
הגדר את הסביבה שלך לבניית מכשירי אנדרואיד על ידי הפעלת הפקודה הבאה מהשורש של בדיקת קוד המקור שלך:
source build/envsetup.sh
העבר את יעד הבנייה לפקודת ארוחת הצהריים, כך:
lunch aosp_cf_x86_64_phone-userdebug
בנה את הקוד מכל מקום בקופה שלך עם:
m
צפו שהבנייה הראשונה תארך שעות. בנייה שלאחר מכן לוקחת פחות זמן משמעותית.
צור מופע של Acloud
Acloud הוא כלי שורת פקודה ב-AOSP המסייע למשתמשים ביצירת מכשירי אנדרואיד וירטואליים, במקרה זה Cuttlefish.
אם אתה נמצא באותה סשן מסוף המשמש לבניית הקוד , המשך. אחרת, הפעל מחדש את הסקריפט envsetup.sh
ואת אותה פקודת lunch
שבה השתמשת שם תחילה. לאחר מכן
צור מופע מקומי של Acloud עם:
acloud create --local-image --local-instance
קבל עדכונים לחבילות הנדרשות.
אם תתבקש, הפעל מחדש את תחנת העבודה שלך כדי שכל השינויים ייכנסו לתוקף.
בחר את מכשיר הדיונון.
צריך לקבל את פניכם עם סשן VNC המכיל מכשיר אנדרואיד!
אתה יכול ליצור אינטראקציה עם המכשיר הוירטואלי בתחנת העבודה שלך באמצעות העכבר והמקלדת. אתה יכול גם לעקוב אחר הפעילות ביומנים בזמן שאתה משתמש במכשיר שלך על ידי שימוש בפקודת logcat
של Android Debug Bridge (adb):
adb logcat
עשה שינוי
עדכן את קוד המקור בעקבות רשימת שינויים לדוגמה זו.
מהשורש של התשלום שלך (
aosp/
directory), נווט לפרויקטframeworks/native
Git:cd frameworks/native
התחל פרויקט זמני עם הפקודה הזו:
repo start <some-name> .
ערוך את
SurfaceFlinger.cpp
כדי לכלול את העדכונים מרשימת השינויים במיקום הבא:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
מצא את השורה הזו:
postComposition();
החלף את שתי השורות האלה בשורות הבאות:
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();
בנה את הקוד:
m
עדכן את ה-build במכשיר:
adb root
adb remount
adb sync
adb reboot
acloud reconnect
אם תתבקש לבחור מכשיר, בחר את זה שמציג את הזמן הקצר ביותר שחלף. (זה כנראה האחרון ברשימה שאתה רואה.) כדי לראות את כל מופעי ההתקן הווירטואליים, השתמש בפקודות
acloud list
ו-acloud list -v
.
ודא שאתה רואה שינוי צבע במכשיר שבחרת בדומה למה שמוצג באיור 1.
איור 1. מראה מסך לאחר שינוי צבע מוצלח
בדוק את הקוד שלך
חלק זה של מעבדת הקוד משתמש במבחן לדוגמה שנמצא בעץ המקור ונכשל. זה משתמש ב-Atest להפעלת הבדיקה מקומית ובדיקת הקוד.
כדי להשתמש בבדיקה, בצע את ההוראות הבאות:
לָרוּץ:
atest DevCodelabTest
המבחן ייכשל. כדי לתקן את זה, מצא את קוד המקור של הבדיקה הכושלת:
atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
אז תסתכל כאן
platform_testing/tests/example/devcodelab
כדי לגרום לקובץ לערוך, קח את שם הבדיקה ב-
android.test.example.devcodelab.DevCodelabTest
והחלף את ה-.
עם/
, כדי לקבל תוצאה זו:src/android/test/example/devcodelab/DevCodelabTest.java
לאחר מכן ערוך
platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
להחליף
Assert.assertTrue(false)
עם
Assert.assertTrue(true)
הרץ את הבדיקה שוב כדי לוודא שתיקנת את הבעיה:
atest DevCodelabTest
העלה את הקוד שלך לבדיקה
Repo מפשט את השימוש ב-Git על ידי צירוף פקודות כגון git clone
לעבודה על פני מספר מאגרי Git (או פרויקטים) בו-זמנית.
ראה כלי בקרת מקור לסקירות כלליות של Git ו-Repo, עם קישורים לתיעוד מלא על עבודה עם קוד מקור אנדרואיד. עיין במאגר AOSP לרשימה המלאה של פרויקטי Git והפרוייקטים (נתיבים) בודדים עבור סניפים הקשורים לכל פרויקט.
עבור סקירת קוד של הפרויקטים שלך ב-Git, תשתמש במערכת סקירת קוד מבוססת אינטרנט של Gerrit .
בהנחה שביצעת את השינויים שלך
frameworks/native
, הפעל את הפקודות הבאות כדי להעלות אותן:cd frameworks/native
repo start codelab .
git add .
git commit
להודעת ההתחייבות שלך, הזן את הפרטים הבאים:
Android codelab change Test: manual atest
העלה את השינוי שלך:
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 .
בשלב זה, סיימת! עבודה נחמדה!
תקבל עזרה
אם אתה נתקל בשגיאות במהלך מעבדת קוד זה, אנא דווח עליהן באמצעות הקישור 'מעקב אחר בעיות' בתחתית כל עמוד. שלח שאלות לקבוצת בניית אנדרואיד .