בדף הזה מתואר התהליך המלא לשליחת שינוי קוד לפרויקט Android Open Source Project (AOSP), כולל איך לבקש בדיקה ולעקוב אחרי השינויים.
AOSP מסתמך על Gerrit, מערכת מבוססת-אינטרנט לבדיקת קוד בפרויקטים שמשתמשים ב-Git.
חתימה על הסכמי הרישיון של שותפי התוכן
לפני שתורמים שינויים בקוד ל-AOSP, עליכם לקרוא את הסכמי הרישיון והכותרות של שותפי התוכן ולחתום על אחד מההסכמים הבאים:
- אם אתם תורמים שמוסיפים תוכן רק בשמכם, עליכם לחתום על הסכם הרישיון לתורם פרטי.
- אם אתם עובדים בחברה, עליכם לוודא שהחברה חתמה על הסכם הרישיון של שותף תורם ארגוני שמתיר לכם לתרום בשמה.
התחלת הסתעפות
לכל שינוי בקוד שאתם מתכוונים לבצע, מבצעים את השלבים הבאים:
מתחילים להשתמש בהסתעפות חדשה במאגר Git הרלוונטי. ההסתעפות היא לא עותק של הקבצים המקוריים, אלא הפניה להתחייבות ספציפית. כך אפשר ליצור הסתעפויות מקומיות ולעבור ביניהן בקלות. באמצעות ההסתעפויות תוכלו לזהות את השינויים. מריצים את הפקודה הבאה כדי ליצור הסתעפות:
repo start BRANCH_NAME
אפשר להתחיל כמה הסתעפויות עצמאיות בו-זמנית באותו מאגר. ההסתעפות BRANCH_NAME היא מקומית בסביבת העבודה שלכם, והיא לא נכללת ב-Gerrit או בעץ המקור הסופי. ההסתעפויות הן גם ספציפיות לפרויקט שבו אתם נמצאים, כך שאם אתם צריכים לשנות קובצי פרויקטים שונים כחלק מאותו שינוי, תצטרכו להשתמש בהסתעפות בכל פרויקט שבו אתם משנים קובצי.
(אופציונלי) מוודאים שההסתעפות נוצרה:
repo status .
ההסתעפות החדשה אמורה להופיע. לדוגמה:
project frameworks/native/ branch mynewbranch
ביצוע שינוי ובדיקה שלו
כדי לבצע את השינוי ולבדוק אותו:
כדי לוודא שאתם עובדים עם קוד המקור העדכני ביותר, מבצעים סנכרון של כל קוד המקור:
repo sync
אם תיתקלו בהתנגשויות במהלך הסנכרון, תוכלו להיעזר בשלבים 2-4 במאמר פתרון התנגשויות בסנכרון.
מאתרים את הקוד שרוצים לשנות. כדי למצוא קוד, כדאי להשתמש ב-Android Code Search. אתם יכולים להשתמש בחיפוש הקוד של Android כדי להציג את קוד המקור של AOSP כפי שהוא מופיע כשאתם משתמשים בו בפועל. מידע נוסף זמין במאמר תחילת העבודה עם חיפוש קוד. כדי להציג את כל הקוד בהסתעפות
main
בחיפוש הקוד של Android, עוברים אלhttps://cs.android.com/android/platform/superproject/main
.שינוי או הוספה של קובצי מקור. בכל שינוי שביצעתם:
קובעים אם צריך להשתמש בדגלים להשקת תכונות, ואם כן, מטמיעים אותם בקוד החדש.
פועלים לפי השיטות המומלצות שמפורטות בקטע הכללת כותרות רישיון.
בקוד Java, צריך לפעול לפי סגנון הקוד של AOSP ל-Java לתורמים.
חלקים מסוימים ב-AOSP נכתבים ב-Kotlin (
.kt
), ואפשר להשתמש ב-Kotlin באזורים בפלטפורמה שכבר נכתבו ב-Kotlin. מידע נוסף על Kotlin ב-Android זמין במדריך הסגנון של Kotlin למפתחי Android ובמדריך לפעולה הדדית בין Kotlin ל-Java. הנחיות מפורטות יותר בנושא Kotlin זמינות באתר של שפת Kotlin.כשכותבים ממשקי API, צריך לפעול בהתאם להנחיות ל-Android API. ההנחיות האלה יעזרו לכם להבין את ההקשר של ההחלטות לגבי ממשקי ה-API של Android. התוספות והשינויים בממשקי ה-API של הפלטפורמה מאומתים על ידי Metalava.
שלב ושמירה של השינוי
שמירת קוד היא היחידה הבסיסית של בקרת הגרסאות ב-Git, והיא מורכבת ממצגת של מבנה הספרייה ותוכן הקבצים של הפרויקט כולו. כדי לשמור את השינוי:
כברירת מחדל, Git רושם את השינויים שביצעתם, אבל לא עוקב אחריהם. כדי להורות ל-Git לעקוב אחרי השינויים, צריך לסמן אותם או להעביר אותם לשלב ההכנה (stage) כדי לכלול אותם ב-commit. מריצים את הפקודה הבאה כדי להעביר את השינוי לשלב ההכנה:
git add -A
הפקודה הזו עוקבת אחרי השינויים שביצעתם בקבצים.
מעבירים את הקבצים מאזור העברה ל-commit או לאחסון במסד הנתונים המקומי:
git commit -s
כברירת מחדל, ייפתח עורך טקסט ותתבקשו להזין הודעת אישור.
כותבים הודעת השמירה בפורמט הבא:
שורה 1: כותרת. כותבים סיכום של השינויים בשורה אחת (עד 50 תווים). מומלץ להשתמש בתחילית כדי לתאר את האזור שבו ביצעתם את השינוי, ואז לתאר את השינוי שביצעתם ב-commit הזה. לדוגמה, הנה דוגמה שמכילה שינוי בממשק המשתמש:
ui: Removes deprecated widget
שורה 2: שורה ריקה. אחרי הכותרת, מוסיפים שורה ריקה.
שורה 3: גוף ההודעה. מוסיפים תיאור ארוך שמסתובב ב-72 תווים לכל היותר. מתארים את הבעיה שהשינוי פותר ואת האופן שבו הוא עושה זאת. הגוף הוא אופציונלי, אבל הוא שימושי לאנשים שצריכים לחזור לשינוי. חשוב לכלול הערה קצרה לגבי הנחות או מידע רקע שעשויים להיות חשובים כשתורם אחר יעבד על התכונה הזו.
בפוסט בבלוג איך כותבים הודעות על השמירה ב-Git מוסבר איך לכתוב תיאורים טובים של השמירות (עם דוגמאות).
שומרים את השמירה.
מזהה שינוי ייחודי, השם וכתובת האימייל שלכם, שסיפקתם במהלך repo init
, מתווספים אוטומטית להודעת ה-commit.
העלאת השינוי לבדיקה
אחרי שמחויבים את השינוי בהיסטוריית Git האישית, מעלים אותו ל-Gerrit:
מריצים את הפקודה הבאה כדי להעלות את כל השמירות בכל הפרויקטים:
repo upload
כל השינויים בכל הפרויקטים כלולים בהעלאה.
תתבקשו להריץ סקריפטים של הוק.
מקישים על a ואז על Enter.
תוצג בקשה לאשר את ההעלאה:
Upload project frameworks/native/ to remote branch main: branch BRANCH_NAME ( 1 commit, Wed Aug 7 09:32:33 2019 -0700): ff46b36d android codelab change to https://android-review.googlesource.com/ (y/N)?
מקישים על y ואז על Enter כדי לאשר את ההעלאה.
אמורה להופיע הודעה דומה לזו: remote: SUCCESS
.
בקשת בדיקה
אחרי העלאה מוצלחת, Repo מספק קישור לשינויים ב-Gerrit. לוחצים על הקישור כדי להציג את השינויים בשרת הבדיקה, להוסיף תגובות או לבקש בודקים ספציפיים לשינוי. כל השינויים בקוד צריכים לעבור בדיקה על ידי בעלי הקוד המתאימים. כדי לבקש בדיקה:
ב-Gerrit, לוחצים על SUGGEST OWNERS:
איור 1. הקישור Suggest owners ב-Gerrit.
תיבת הדו-שיח של הבודק מופיעה. תיפתח תיבת דו-שיח עם רשימה של בעלי הקוד שיכולים לבדוק את השינוי.
לוחצים על אחד מבעלי הקוד כדי להוסיף אותו לבדיקה.
הלחצן שליחה מופעל.
(אופציונלי) מקלידים את כתובת האימייל של כל מי שרוצים שיבדוק את השינוי.
(אופציונלי) לוחצים על +1 לצד 'שליחת בקשה אוטומטית' כדי לשלוח את השינוי באופן אוטומטי אחרי שתקבלו אישורים. אם לא תלחצו על הלחצן הזה, עובד Google יצטרך לשלוח את השינוי בשבילכם.
לוחצים על שליחה כדי לשלוח את השינוי לבדיקה.
בעלי הקוד בודקים את השינויים בקוד ומספקים משוב כדי לטפל בהם או לאשר אותם.
בדיקת סטטוס השינוי
כדי לבדוק את הסטטוס של הקבצים בשינוי, מחפשים את הסמלים הבאים לצד הקבצים בשינוי:
- (סמל של סימן וי): אושר על ידי בעלי הקוד
- (סמל X): הקוד לא אושר על ידי הבעלים שלו
- (סמל שעון): בהמתנה לאישור של בעלי הקוד
באיור הבא מוצגים סמלי הסטטוס האלה שמופעלים על קבצים בשינוי:
איור 2. דוגמה לקבצים עם סמלים שמציגים אישור של בעלי הקוד.
פתרון המשוב והעלאת שינוי חלופי
אם בודק מבקש לשנות את העדכון, תוכלו לשנות את השמירה ב-Git, וכתוצאה מכך תיווצר קבוצת תיקונים חדשה לאותו שינוי.
כדי לטפל במשוב ולשנות את השינוי:
פועלים לפי השלבים 2-4 בקטע ביצוע שינוי ובדיקה שלו.
מריצים את הפקודות הבאות כדי לשנות את השינוי:
git add -A git commit --amend
כשאתם מעלים את השינוי המתוקן, הוא מחליף את השינוי המקורי גם ב-Gerrit וגם בהיסטוריית Git המקומית.
פתרון התנגשויות בסנכרון
אם שינויים אחרים נשלחים לעץ המקור ויש להם התנגשות עם השינויים שלכם, תופיע הודעה על כך שיש לכם התנגשויות. כדי לפתור את ההתנגשויות:
מוודאים שאתם עובדים עם הקוד העדכני ביותר:
repo sync .
הפקודה
repo sync
מאחזרת את העדכונים משרת המקור, ואז מנסה לבצע באופן אוטומטי שינוי בסיס (rebase) שלHEAD
ל-HEAD
החדש מרחוק.אם ההעברה האוטומטית לא מצליחה, מבצעים העברה ידנית:
repo rebase .
פתרון קונפליקטים במיזוג. אם אין לכם שיטה מועדפת לפתרון התנגשויות במיזוג, תוכלו להשתמש ב-
git mergetool
כדי לפתור ידנית את ההתנגשויות בין הקבצים.אחרי שמתקנים את הקבצים שנמצאים בקונפליקט, מריצים את הפקודה הבאה כדי להחיל את השינויים החדשים:
git rebase --continue
שליחת השינוי
אחרי שהבקשה עוברת את תהליך הבדיקה והאימות, בודק של Google צריך לשלוח את הקוד בשבילכם. משתמשים אחרים יכולים להריץ את הפקודה repo sync
כדי למשוך את העדכון ללקוחות המקומיים שלהם.
אחרי שהקוד שלכם ימוזג, תוכלו להיכנס למרכז הבקרה של Android Continuous Integration כדי לעקוב אחרי השילוב של הקוד שלכם בעץ.