מזה אנדרואיד? – מדריך טכני


פורסם ב 24/10/2000 ע"י itamarbh

המדריך נכתב ע"י אריה אושרוב מפורום iAndroid

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

שכבות האנדרואיד:

מערכת אנדרואיד שנמצאת בשימוש מכשירי טלפון (אבל לא רק) בנויה במספר שכבות – ראו תמונה מצורפת:

לחצו על התמונה להגדלתה

השכבה הנמוכה ביותר, זאת שנמצאת מעל החומרה – Linux Kernel:
השכבה הזאת מבוססת על מערכת הפעלה לינוקס (גרסה 2.6). בשכבה הזאת נמצאים כל האלמנטים שמטפלים ב:

  • – ניהול הזיכרון
  • – דרייברים: שמדברים עם רכיבי החומרה
  • – ניהול תהליכים (process, multitasking)
  • – ניהול הרשת (network stack)

שפת הפיתוח בשכבה זאת היא שפת c.

השכבה השנייה, שנמצאת מעל ה-Kernel נקראת Libraries:
שכבה זאת מכילה אוסף גדול של ספריות שנמצאות בשימוש מודולים רבים במערכת האנדרואיד. ספריות אלה חשופות למתכנתים דרך שכבה שנמצא מעלייה ונקראת application framework. הספריות בשכבה הזאת מטפלות במגוון גדול של אלמנטים כגון:

  • – ספריות לשפת c למערכת embedded Linux
  • – Media Libraries – ספריות שמטפלות בתכני המולטימדיה במערכת בעיקר בתחום הווידיאו והאודיו כגון: וידאו MPEG4, Jpeg ,AAC וכו'.
  • – 3d libraries – ספריות שמטפלות בנושא התלת מימד. הספריות האלה יודעות להשתמש בחומרה אם היא תומכת בכך או לבצע את הפעולות האלה ברמת התוכנה אם החומרה לא תומכת בכך (במקרה הזה המעבד יעשה את העבודה).
  • – SQLite – ספריה המאפשרות לעבוד מול בסיס נתונים (database). הספריות האלה חשופות לכל מתכנתי האנדרואיד. דבר המאפשר להם להשתמש בבסיסי נתונים באפליקציות שלהם שדורשות זאת .

הספריות בשכבה הזאת נכתבו כולן בשפות ++CC

השכבה השלישית המקבילה לשכבה השנייה (ראו תרשים למעלה) זאת שכבת Android Runtime:
שכבה זאת מכליה שני רכיבים מרכזים:

  • – Dalvik virtual machine (המפורסם) שתפקידו הוא לתרגם את הקוד המקומפל בשפת java (כל האפליקציות במערכת) לשפת מכונה בזמן אמת (זה לא מדויק לגמרי אבל מספיק להסבר). ברכיב הזה נעשה שינוי במערכת האנדרואיד החדשה, ה FroYo (שימוש ב JIT חדש) דבר שהביא לשיפור עצום בביצועי המערכת
  • – Core Libraries אלה ספריות הנחוצות לכל תוכנה שנכתבת בשפת java (כמעט כל האפליקציות במערכת שאנחנו משתמשים בהן)

השכבה רביעית נקראת Application Framework:
שכבה זאת מכילה מספר גדול של ספריות המאפשרות לכל מתכנתי האנדרואיד לבצע בהן שימוש וכך להעשיר את האפליקציות שלהם בלי להתעסק בשכבות נמוכות יותר ובלי הצורך לממש הכול בעצמם (שימוש בכל יכולות המערכת, כולל ממשק משתמש וכו). דוגמה לספריות כאלה הם:

  • – Notification Manager – מאפשר לכתוב alerts ל status bar (כמו זאת שאתם רואים ברגע שמגיע לכם הודעת SMS, או מייל חדש, או עדכון תוכנה חדש וכו).
  • – Content Providers – מאפר גישה לתכנים בין אפליקציות שונות (לדוגמה גישה לרשימת אנשי הקשר במערכת וכו).
  • – אוסף עשיר של רכיבי ממשק משתמש המאפשרים למתכנת להשתמש בהן לצורך יצירת ממשק עשיר (GUI), רכיבים כגון כפתורים, text boxes, רשימות וכו'.

השכבה האחרונה, החמישית, נקראת שכבת האפליקציות (Applications):
זאת השכבה בה נמצאים רוב האפליקציות במערכת. כולל כל התוכנות של גוגל שמגיעות עם המכשיר (תוכנות מייל, לוח שנה, מפות, דפדפן וכו) וכמובן כולל כל התוכנות צד שלישי שאנחנו מורדים כל הזמן מהמרקט
שפת התכנות ביצירת אפליקציית בשכבה זאת היא שפת java (מי שאחראי לתרגם את הקוד ה VM הזה לשפת מערכת הוא ה Dalvik VM שתיארתי בשכבה שלוש)…לכל המתכנתים אני אציין שרק שפת התכנות היא java ותו לא. כלמור ה VM שנכתב לאנדרואיד הוא לא VM סטנדרטי של Java.

היופי של הקוד הפתוח

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

דוגמאות למימוש הקוד הפתוח:

  • – מהקוד הפתוח הזה אנחנו מקבלים את כל ה ROM-ים המשודרגים האלה (כמו אלה של פול, מייצר MoDaCo) שמוספים אין סוף אפשרויות ל ROM המקורים (סטוק).
  • – מהקוד הפתוח הזה אנחנו מקבלים את היכולת החדשה שנוספה לפני מספר ימים במכשיר הנקסוס המאפשרת לבצע הקלטת וידאו ב 720p, וזה למרות שגוגל לא מימשו את זה בעצמם. על מנת להוסיף יכולת זאת מתכנת הלך ושינה את קוד הדרייבר שנקרא 'Camera Driver' והוסיף לו יכולת הקלטה של 720p (הוא שינה עוד מספר מודולים אבל לשם הפשטות זה מספיק).
  • – בגלל זה אנחנו מקבלים יכולות Wi-Fi hotspot באנדרואיד גם בגרסת 2.1 למרות שלמערכת המקורית אין תמיכה בכך.
  • – זאת הסיבה לכך שכך שניתן לבצע Overclocking למעבד.
  • – זאת הסיבה שהתווספה היכולת להתקין את התוכנות על כרטיסי SD בלי צורך להתקין אותן בזיכרון הפנימי המוגבל בשטח (השם שניתן לתוספת הזאת הוא Apps2SD).
  • – זאת הסיבה שהצליחו להוסיף תמיכה ב multitouch במכשיר הנקסוס עוד לפני שגוגל הוסיפו תמיכה ביכולת זאת.
  • – מכאן אפשר להבין גם למה לדוגמה בנקסוס לא יכולים עדיין להוסיף יכולת של רדיו FM כמו שיש ב Desire וזה מכיוון ש HTC עדיין לא שיחררו את קוד המקור ולכן עדיין לא ניתן להעתיק (לעשות Port) ליכולת הזאת למכשיר הנקסוס (בגלל שהחומרה כמעט זהה כנראה שהעתקה תהיה אפשרית).
  • – מכאן אפשר להבין למה עדיין סטיב (Cyanogen) לא מעוניין עדיין לבנות ROM-ים משודרגים (מבושלים) מבוססי FroYo מכיוון שהקוד שלהם עדיין לא שוחרר ע"י גוגל וה ROM-ים שהוא יכול לבנות היום בלי הקוד הם מוגבלים ביחס לאלה שהוא בנה על בסיס אנדרואיד 2.1 (שימו לב ששחרור רשמי של גרסת FroYo ע"י גוגל לא בהכרח תגרום לגוגל לשחרר את הקוד. הם יכולים לשחרר את הקוד מאוחר יותר).
  • – מכאן אפשר להבין למה אין עדיין אפשרות להוסיף תמיכה בנקסוס של 720p למערכת ה FroYo וזאת מכיוון שבחלק מהמודולים באנדרואיד בגרסת FroYo (משכבת הדרייבר והספריות) מוגדר באופן מוקשח (hard codec) שימוש ברזולוציה 480p (רזולוציה של 720×480 פיקסלים). עד שאין יכולת לגשת לקוד המקור עצמו ולהסיר את ההקשחה הזאת (שנכתבה ע"י מתכנתי אנדרואיד של גוגל) ולקמפל גרסה חדשה (של דרייבר, ספרייה וכו) ולהפיץ אותה לכולנו (זה ה-update.zip שאנחנו צורבים כל הזמן) לא נקבל תמיכה ביכולת זאת.

קצת הסבר על שאר הרכיבים באנדרואיד

  • – אני מניח שרובכם שמע על רכיב שנקרא boot loader (הרבה מכם שהתקינו עברית היו צריכים לעבור בדרך את השחרור של הרכיב הזה (unlock) שגרם לאחריות על המכשיר ללכת לאיבוד) אז רק לסבר את האוזן בלי לבלבל יותר מידי. ה-boot loader לא ממש קשור ישירות למערכת ההפעלה של האנדרואיד, אלא זה "רכיב" תוכנה מיוחד שרץ בזמן עליית המערכת (אחרי הדלקת המכשיר) לפני שמערכת האנדרואיד עולה (ה Linux Kernel) ותפקידו הוא לבצע בדיקות ואיחולים לזיכרון ולהעלות את ה OS (את ה Linux Kernel) לזיכרון ה RAM "ולהעביר את המושכות" למערכת ההפעלה (נוהגים להשוות את ה boot loader לתוכנת ה Bios שאנחנו מכירים מעולם ה PC, שם ה Bios הוא בעצם יחידה נפרדת לגמרי ממערכת ההפעלה שעולה בזמן ה boot לפני עליית ה OS).

אזהרה: אם מאיזה שהיא סיבה המכשיר שלכם תקוע ולא מצליח להריץ את תוכנת ה boot loader אז המכשיר שלכם הפך "ללבנה" (brick) והדרך היחידה לתקן אותו הוא להחזיר אותו ליצרן (זה בעיקר מתרחש כאשר התרחשה בעיה בצריבה של הרדיו במכשיר שלכם).

  • – ה-fastboot (שגם דרכו חלק ממם, מחוסר ברירה, היה צריך להתעסק) – הוא סה"כ כלי (פרוטוקול) המאפשר לכם לצרוב אימג'ים (images) מטרמינל מרוחק על מכשיר האנדרואיד שלכם (לדוגמה ממערכת הפעלה חלונות כאשר המכשיר מחובר דרך ה USB למחשב). הכלי הזה בעצם מאפשר לכם לבצע פעולות על מערכת הקבצים במערכת האנדרואיד (filesystem).
  • – גם ה-Recovery הידוע לרובנו הוא בעצם עוד "רכיב" תוכנה נפרד ממערכת ההפעלה (שה-boot loader הוא זה שמריץ אותו) – תפקידו הוא לבצע מגוון משימות מחוץ לOS באופן פשוט ונוח יותר מאשר דרך מנגנון ב-fastboot. דברים כמו התקנת ROM-ים (מערכת OS אחרת), גיבוי ROM-ים (לדוגמה בעזרת Nandroid) וכו'.
  • – Android Debug Bridge (ר"ת ADB) – עוד כלי פיתוחי המאפשר להריץ פקודות מרחוק על מכשיר האנדרואיד שלכם (דרך פקודות בשימוש הכלי הזה אתם ביצעתם את פעולת ה fastboot oem unlock).

רדיו / Baseband

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

מה זה רדיו ולמה לכל הרוחות אני צריך אותו:
הרדיו זאת השכבה הראשונה שנטענת בזמן אתחול המכשיר שלכם (לפני שמערכת ההפעלה ה-Linux Kernel עולה) ותקפידו הוא לקשר בין רכיבי החומרה המשדרים רדיו במערכת שלכם (כגון רכיב שמטפל בנושא התקשורת הסלולארית) לבין שכבת מערכת ההפעלה (לינוקס) שמשתמשת ברכיבי הרדיו האלה (כל שרותי הטלפון וההודעות במכשיר שלכם. שירותים כגון שליחת SMS-ים, שליחת האודיו המפוענח מהמיקרופון של המכשיר דרך שידור הרדיו, ביצוע פעולת החיוג לנמען וכו). לכל אנשי הפיתוח ביניכם (אלה שבעיקר מגיעים מעולם הדרייברים של לינוקס במערכות אנדרואיד) אני אגלה שלשכבה הזאת קוראים Android's Radio Interface Layer.

הסבר טיפה טכני: ברגע שהמכשיר שלכם מאותחל, מי שנכנס לפעולה הוא ה-bootloader (תחשבו עליו כאל bios במחשב, כלומר זאת תוכנה קטנה שתפקידה לבצע מספר בדיקות מערכת ולהעלות את מערכת ההפעלה הראשית שלכם לזיכרון ה-RAM ולהעביר ל-OS הזה שנטען את המושכות). החלק השני בתהליך עליית ה-bootloader נקרא ה-SPL (ראשי תיבות של Secondary Program Loader) והוא זה שאחראי להעלות את שכבת הרדיו. שימו לב שקיים קשר חזק מאוד בין גירסת ה-SPL לבין גירסת הרדיו ולכן חייבת להיות התאמה בין הגרסאות על מנת שהמכשיר יעבוד ולכן בגלל שהשכבה הזאת היא הראשונה לעלות במערכת במקביל ל-bootloader , בעיה ברדיו תגרום למכשיר שלכם לא לעבוד וגרוע מכך לא תהיה לכם יכולת לתקן זאת בעצמכם.

לחצו על התמונה להגדלתה

למה כולם מפחדים ומזהירים אותנו מצריבת רדיו:
הסיבה לחשש היא פשוטה ואמיתית מאוד – התקנה שגויה של רדיו יכולה להפוך את המכשיר שלכם לעציץ (bricked). במידה והמכשיר שלכם הפך לכזה, הדרך היחידה לתקן אותו הוא לשלוח אותו למעבדות החברה המייצרת (לדוגמה HTC). בעיה הנוספת שיש במצב כזה הוא שכל מי שפתח את המכשיר שלו להרשאות root (ביצע unlock bootloader) איבד בעצם את האחריות על המכשיר, דבר שיכול לגרום לכך שתוציאו הרבה כסף לצורך תיקון העציץ שלכם!

איך אתם יודעים שהמכשיר שלכם הפך לעציץ (bricked)? מכשיר briked אחרי הדלקתו לא יצליח להגיע למצב bootloader (לתפריט ה bootloader) ולכן אין לכם שום יכולת לצרוב שום רדיו חלופי על מנת לתקן את הבעיה (בעצם אין לכם יכולת לעשות כלום).

מה הסיבה לכך שצריבת הרדיו תכשל:

  • – אם בחרתם אימג' של רדיו שהוא לא מתאים לגרסת המכשיר שלכם, הצריבה שלו יכולה לגרום למכשיר להיהפך לעציץ (בנקסוס הסיכוי לכך שבחרתם גירסה לא מתאימה הוא נמוך מאוד).
  • – במידה והסוללה שלכם לא טעונה מספיק, הצריבה יכולה להיפסק באמצע הפעולה ולתקוע את המכשיר.
  • – במידה ומאיזה שהיא סיבה הוצאתם את הסוללה מהמכשיר שלכם בזמן הצריבה, המכשיר יכול להיהפך שוב ללבנה (הסבר בפסקה הבאה).

מהן הדרכים לצרוב רדיו במכשיר שלכם?
יש שתי דרכים לצרוב רדיו במכשיר שלכם:

  1. 1. צריבת קובץ zip שמכיל בתוכו את אימג' הרדיו ואז דרך תפריט ב-recovery לבצע את הצריבה (בדיוק באותו האופן שאתם צורבים ROM במכשיר שלכם).
  2. 2. דרך תפריט ה-bootloader, אחרי שחיברתם את המכשיר למחשב, ניתן צרוב את הרדיו (קובץ radio.img) זה נעשה דרך הרצת פקודת fastboot מהמחשב (הפקודה היא fastboot flash radio radio.img). שימו לב שפקודה זאת גורמת למכשיר לאתחל את עצמו ואז פעולת הצריבה מתחילה ונמשכת בין דקה לשתיים (לעיתים גם יותר), לכן יש לחכות כמה דקות עד לסיום התהליך ולא בטעות להוציא את הסוללה (בסוף הצריבה המכשיר מאתחל את עצמו שוב).

הערות נוספות בנושא הרדיו:

  • – יש בלבלול בין צריבה של ROM-ים חדשים לצריבה של רדיו והסיבה לכך היא מאוד פשוטה. חלק מה-ROM-ים שאנחנו פוגשים מכילים כחלק מהצריבה שלהם גם רדיו חדש בתוכם (2 ציפורים במכה אחת) וחלק מה-ROM-ים לא מכיל את הרדיו בתוכם. כדי להבדיל בינם אז כמעט תמיד בשם של ה-ROM יהיה רשום האם הוא כולל או לא כולל רדיו. לכן במידה ואין לכם רצון להחליף את גירסת הרדיו הנוכחית שלכם (או שכבר מותקנת אצלכם אותה גירסת הרדיו שה-ROM מכיל) תמיד אבל תמידתבחרו בגרסת ה-ROM ללא הרדיו. במידה ואתם צורבים ROM ואתם בכל מקרה הולכים לעבור גם לגרסת הרדיו החדשה, אז תבחרו את ה-ROM שמכיל בתוכו גם רדיו (במילים אחרות כל שמתקין ROM של FroYo בפעם הראשונה שיבחר את ה ROM שמכיל גם את הרדיו של FroYo).
  • – אין בעיה להשתמש בגרסת רדיו חדשה של FroYo עם גירסת אנדרואיד ישנה (2.1) אבל בגלל שיש קשר ישיר בין שכבת מערכת ההפעלה (Linux Kernel) לשכבת הרדיו שנמצאת מתחתיה (שכבת ה-Baseband) ייתכנו אי אלו בעיות בתאימות ולכן ייתכן שתצטרכו להחליף במקרה כזה לרדיו ישן יותר, אבל גם אם יהיה חוסר תאימות והמכשיר לא יעבוד כשורה (נניח בעיות בקליטה או חיבור לרשת דור 3) לעולם המכשיר שלכם לא יהפך לעציץ בגלל בעיה כזאת.
  • – במידה ואתם משתמשים בגרסת FroYo, אתם צריכים להשתמש גם בגרסת הרדיו החדשה של FroYo.
  • – תורידו גרסאות רדיו (או ROM שמכיל רדיו) ממקור אמין וידוע ולא מאיזה קישור קיקיוני. יתרה מכך מומלץ לוודא שהקובץ שהורדתם הוא תקין לגמרי ולא פגום (בעיקר אם הצריבה נעשית דרך שימוש ב-bootloader). על מנת לוודא זאת, אפשר לבדוק את תקינות הקובץ בעזרת MD5 Checksum (אני לא אפרט כאן איך עובדים עם זה, רק אומר שזאת תוכנה פשוטה שבודקת האם הקובץ שהורדתם הוא תקין וזאת ע"י מספר שתמיד יהיה מצורף לקובץ שהורדתם, זה ה Checksum).
  • – שימו לב שגיבויי ROM-ים שכולנו מבצעים (בד"כ בעזרת nandroid) לא מגבים ומשחזרים את הרדיו (שמותקן במחיצה שנקראת radio במכשיר שלכם). הסיבה לזה היא שממש לא בא לכם שבכל שיחזור (restore) שאתם עושים ייצרב שוב הרדיו. וגם האמת, אין שום סיבה לגבות את הרדיו מכיוון שאין בעיה להוריד אותו מהרשת ולצרוב אותו שוב (אימג' הרדיו לא מחזיק שום נתון שקשור להגדרות או התקנות שביצעתם במכשיר שלכם, כמו לדוגמא מחיצת ה system שה-nandroid כן מגבה).
  • – אין שום קשר בין Radio FM במכשיר (זה שהנקסוס חומרתית תומך אבל תכונתית לא) לבין שכבת הרדיו שתוארה כאן במדריך.
  • – על מנת לראות את גירסת הרדיו במכשיר שלכם, כנסו בתפריט ההגדרות לשדה שנקרא 'About phone' שום תמצאו את גירסת הרדיו תחת שדה שנקרא 'Baseband version'.

סיכום

השורה התחתונה היא שמעבר להסבר על מערכת ושכבות האנדרואיד, רציתי להציג לכם את הגמישות שיש במערכת ההפעלה הזאת שמבוססת על רישיון הקוד הפתוח. היכולות שניתן להשיג באנדרואיד (ובשאר מערכות פתוחות כגון ה Maemo של נוקיה ואינטל) הן כמעט אינסופיות לעומת הדברים שניתן להשיג במערכות סגורות (כמו חלונות של מיקרוספוט) או במערכות "אטומות" לגמרי כמו האיפון OS (עדיין צריך גם להזכיר שלגמישות הזאת יש מחיר לעומת מערכת סגורה שבנויה בצורה כזאת כך שברגע שאתה מוציא את המוצר מהקופסה אפשר להתחיל לעבוד וליהנות ממנו בלי הצורך להתעסק ב Bite&Bytes).

בואו לשאול שאלות, להגיד תודה, ולהמשיך את הדיון – בפורום שלנו (נושא הארכיטקטורה כאן, נושא הרדיו כאן).

Share

3 Comments

  1. davidfi1
    01/02/2011 בשעה 00:06

    אחלה השקעה והסבר יפיפה. המון תודה.
    רק שאלה קטנה:
    אם הbootloader מעלה את הרדיו
    וגם אם רוצים מעלה את הrecovery
    למה כשה הרדיו לא מותקן טוב
    אי אפשר להכנס לריקברי ישירות בלי לעבור דרך הרדיו?

  2. iAndroid – האנדרואיד של גוגל – בעברית ! » Blog Archive » אפליקציות אנדרואיד גל על מכשירים אחרים
    08/02/2011 בשעה 22:06

    […] ~ הוא סוג של אמולטור, שיקח את שכבת ה-Dalvik שבאפליקציות (הנה המדריך הטכני שלנו, למעוניינים) ויוכל להפעיל את האפליקציה על כל מכשיר אחר […]

  3. iAndroid – האנדרואיד של גוגל – בעברית ! » Blog Archive » Wiki – מדריך למשתמש המתחיל
    29/04/2011 בשעה 10:33

    […] מתעניינים בעוד הדגרות ומושגים, בואו לקרוא את המדריך הטכני לאנדרואיד. […]

השאר תגובה