אפשר לעזור בפיתוח של מערכת ההפעלה המותקנת ביותר בהיסטוריה של כדור הארץ. כן, אתם מוכנים להתחיל את מסע היצירה של Android מהנדסי פלטפורמה.
אמנם הדרך לא מאתגרת, אבל צוות Android שואף לפשט את למסע, לכל השקה. בנוסף, הצוות מבצע שיפורים מדי יום באמצעות עבודה ישירה בפרויקט Android Open Source Project (AOSP).
אז פשוט שבונים, מפעילים מסוף ועושים היסטוריה.
שערים
מטרת ה-Codelab הזה היא כפולה:
- כדי לתת לכם טעימה קטנה מהתהליך של מפתחים מהנדסי Android שעובדים בפלטפורמה (מערכת ההפעלה).
- אנחנו מעודדים אתכם לשלוח משוב על הכלים, המסמכים ותהליך העבודה של המפתחים ב-Android.
דרישות מוקדמות
רשימת הדרישות של סדנת הקוד הזו מבוססת על הדרישות לפיתוח פלטפורמה כללית (AOSP). כדי להשתתף בקודלאב הזה, צריך לבצע את ההגדרות הבאות:
- תחנת עבודה פיזית עם Linux שעומדת בכל הדרישות הציבוריות.
- ה-repo וההגדרות של Git הנדרשים לעריכת קוד הבסיס של 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
סנכרונים ראשוניים יכולים להימשך שעה או יותר.
כל תשלום במאגר מיוצג על ידי קובץ מניפסט. מותר לנהל יותר מקופה אחת במאגר אחד בכל פעם, כל עוד קיימות בספריות נפרדות. עם זאת, חשוב לזכור שכל יצירת גרסת build ובדיקת גרסת build צורכות כ-300GB (והנפח הזה הולך וגדל), לכן מומלץ להגביל את עצמכם ל-2 בדיקות גרסת build במאגרים, או להוסיף למערכת כונן משני.
כתיבת הקוד
כדי ליצור את Android, צריך לבחור יעד
סוג המכשיר לבנייה באמצעות הפקודה lunch
. יעד הוא תמורה של מכשיר,
כמו מודל ספציפי או גורם צורה ספציפי.
היעד aosp_cf_x86_64_phone-userdebug
מאפשר ליצור מכשיר Android וירטואלי מסוג Cuttlefish לצורך בדיקה, בלי מכשיר פיזי.
כדי לפתח ולעדכן מכשיר פיזי במקום זאת, יש לבחור יעד אחר ולפעול בהתאם ההוראות למכשירי Flash.
כדי להגדיר את הסביבה ליצירת גרסאות build למכשירי Android, מריצים את הפקודה הבאה מהשורש של ה-checkout של קוד המקור:
source build/envsetup.sh
מעבירים את יעד ה-build לפקודה lunch, כך:
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
מפתחים את הקוד מכל מקום ב-checkout באמצעות:
m
תהליך ה-build הראשון צפוי להימשך שעות. יצירת גרסאות build נוספות אורכת זמן קצר יותר.
הפעלת Cuttlefish
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
כללים.הפעלת Cuttlefish:
launch_cvd --daemon
כדי להתחבר למכשיר Cuttlefish, עוברים אל
https://localhost:8443
בדפדפן האינטרנט. יוצג לכם סטרימינג של וידאו מהמכשיר המבוסס על Android שיצרתם.
ביצוע שינוי
מעדכנים את קוד המקור לפי רשימת השינויים לדוגמה.
מהרמה הבסיסית (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
הבדיקה תיכשל. בודקים את נתיב הקריאה ב-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)
לאחר מכן הסתכלו כאן
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, עם קישורים למסמכי תיעוד מלאים בנושא עבודה עם קוד המקור של 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 וממזגים אותו למאגר.
במקום זאת, לצורך ה-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 קבוצה.