בעקבות שאלה שנשאלתי בפורום הנקסוס 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). הספריות האלה חשופות לכל מתכנתי האנדרואיד. דבר המאפשר להם להשתמש בבסיסי נתונים באפליקציות שלהם שדורשות זאת
הספריות בשכבה הזאת נכתבו כולן בשפות ++C\C
השכבה השלישית המקבילה לשכבה השנייה (ראו תרשים) זאת שכבת 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 (רזולוציה של 720x480 פיקסלים). עד שאין יכולת לגשת לקוד המקור עצמו ולהסיר את ההקשחה הזאת (שנכתבה ע"י מתכנתי אנדרואיד של גוגל) ולקמפל גרסה חדשה (של דרייבר, ספרייה וכו) ולהפיץ אותה לכולנו (זה ה 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)
*את הרדיו, הידועה לשמצה, וכל שכבות ה SPL/IPL אני לא אתאר כאן (אולי בפעם הבאה)
לסיכום,
השורה התחתונה היא שמעבר להסבר על מערכת ושכבות האנדרואיד, רציתי להציג לכם את הגמישות שיש במערכת ההפעלה הזאת שמבוססת על רישיון הקוד הפתוח. היכולות שניתן להשיג באנדרואיד (ובשאר מערכות פתוחות כגון ה Maemo של נוקיה ואינטל) הן כמעט אינסופיות לעומת הדברים שניתן להשיג במערכות סגורות (כמו חלונות של מיקרוספוט) או במערכות "אטומות" לגמרי כמו האיפון OS (עדיין צריך גם להזכיר שלגמישות הזאת יש מחיר לעומת מערכת סגורה שבנויה בצורה כזאת כך שברגע שאתה מוציא את המוצר מהקופסה אפשר להתחיל לעבוד וליהנות ממנו בלי הצורך להתעסק ב Bite&Bytes)



