אפשר לעזור בפיתוח של מערכת ההפעלה המותקנת ביותר בהיסטוריה של כדור הארץ. כן, הגעת לכאן כדי להתחיל את המסע להפוך למהנדס פלטפורמה של Android.
אמנם הדרך לא מאתגרת, אבל צוות Android שואף לפשט את למסע, לכל השקה. והצוות מבצע שיפורים מדי יום באמצעות לעבוד בפרויקט הקוד הפתוח של Android (AOSP).
אז פשוט שבונים, מפעילים מסוף ועושים היסטוריה.
שערים
המשימה של Codelab זו כפולה:
- לתת טעימה קטנה מתהליך העבודה למפתחים כמו מהנדסי Android שעובדים על הפלטפורמה (מערכת ההפעלה).
- כדאי לבקש ממך לשלוח משוב לגבי הכלים, התיעוד ותהליך העבודה של המפתחים ב-Android.
דרישות מוקדמות
רשימת הדרישות ל-Codelab הזה נגזרת מהדרישות הכלליות AOSP. כדי לגשת ל-Codelab הזה, להגדיר את הפריטים הבאים:
- תחנות עבודה פיזיות עם Linux שעומדות בכל הדרישות הציבוריות.
- המאגר וההגדרות של Git שנדרשות לעריכה את ה-codebase של Android.
סביבה
בדרך כלל המשתמשים בונים ומתפתחים בתחנת העבודה באופן ישיר. כי אתם יכולים
פועלות במסופים שונים, והרבה מהפקודות שבהן נעשה שימוש הן ספציפיות לטרמינל
תצטרכו להפעיל אותם מחדש בכל סשן במסוף. באופן ספציפי, הפקודות האלה כוללות את הפקודות 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
סנכרונים ראשוניים יכולים להימשך שעה או יותר.
כל תשלום במאגר מיוצג על ידי קובץ מניפסט. מותר להשתמש ביותר מ-checkout אחד של מאגר בו-זמנית, כל עוד הם נמצאים בספריות נפרדות. אבל שימו לב שכל תשלום בקופה או גרסת build כ-300GB שימוש (והוא הולך וגדל), כך שלא תצטרכו להגביל את עצמכם ל-2 תשלומים במאגרי תשלומים, או להרחיב את המערכת באמצעות כונן משני.
כתיבת הקוד
כדי ליצור את Android, צריך לבחור יעד
סוג המכשיר לבנייה באמצעות הפקודה lunch
. יעד הוא תמורה של מכשיר,
כמו מודל ספציפי או גורם צורה ספציפי.
היעד aosp_cf_x86_64_phone-userdebug
מאפשר ליצור מכשיר Android וירטואלי מסוג Cuttlefish לצורך בדיקה, בלי מכשיר פיזי.
כדי לפתח ולעדכן מכשיר פיזי במקום זאת, יש לבחור יעד אחר ולפעול בהתאם ההוראות למכשירי Flash.
כדי להגדיר את הסביבה לפיתוח מכשירי Android, צריך להריץ את באמצעות הפקודה הבאה מהרמה הבסיסית (root) של תהליך התשלום על קוד המקור:
source build/envsetup.sh
מעבירים את יעד ה-build לפקודה לארוחת צהריים, כך:
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
לפתח את הקוד מכל מקום תשלום באמצעות:
m
ה-build הראשון צפוי להימשך כמה שעות. גרסאות ה-build הבאות נמשכות באופן משמעותי פחות זמן.
הפעלת דיונון
Cuttlefish הוא אמולטור Android שמשמש לבדיקת גרסאות ה-build שלכם.
אם מעולם לא התקנתם את הדיונון, תצטרכו להתקין את יחסי תלות של דיונון. בחלון הטרמינל, מריצים את הפקודות הבאות כדי להוריד, ליצור ולהתקין את חבילות 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
כללים.מפעילים את הדיונון:
launch_cvd --daemon
כדי להתחבר למכשיר הדיונון, עוברים אל
https://localhost:8443
בעוד בדפדפן האינטרנט שלך. אתם מקבלים את פניכם עם וידאו בסטרימינג של Android. במכשיר שבניתם עכשיו.
ביצוע שינוי
מעדכנים את קוד המקור לפי הדוגמה Changelist.
מהרמה הבסיסית (root) של דף התשלום (ספריית
aosp/
), עוברים אלframeworks/native
פרויקט Git:cd frameworks/native
מתחילים פרויקט זמני באמצעות הפקודה הבאה:
repo start <some-name> .
צריך לערוך את
SurfaceFlinger.cpp
כדי לכלול את העדכונים מרשימת השינויים המיקום הבא:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
מצאו את השורה הזו:
void SurfaceFlinger::updateColorMatrixLocked() {
מוסיפים את שתי השורות הבאות בתחילת הפונקציה 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});
יוצרים את הקוד:
m
מעדכנים את ה-build במכשיר:
adb root
adb remount
adb sync
adb reboot
צריך לוודא שמופיע שינוי צבע במכשיר שבחרת, בדומה לשינוי הצבע באיור 1.
איור 1. מראה המסך לאחר שינוי הצבע בהצלחה
בדיקת הקוד
בחלק הזה של ה-Codelab נעשה שימוש בבדיקה לדוגמה שנמצאת בעץ המקור ונכשל. הוא משתמש ב-Atest בשביל הרצת הבדיקה באופן מקומי ובדיקת הקוד.
כדי להשתמש בבדיקה, יש לפעול לפי ההוראות הבאות:
הפעלה:
atest DevCodelabTest
הבדיקה תיכשל. בודקים את דוח הקריסות של הבדיקה שנכשלה:
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)
לאחר מכן הסתכלו כאן
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
העלאת הקוד לבדיקה
המאגר מפשט את השימוש ב-Git על ידי צירוף פקודות כמו git clone
לעבודה
במספר מאגרים (או פרויקטים) של Git בו-זמנית.
ראו כלים לבקרת מקורות לסקירות כלליות של Git ו-Repo, עם קישורים למסמכי תיעוד מלאים בנושא עבודה עם קוד המקור של Android. לעיון במאגר 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
השלמה של ה-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.