Download מבוא ל android

Document related concepts
no text concepts found
Transcript
‫תכנות ב ‪android‬‬
‫אליהו חלסצ'י‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫עד כה נחשפנו לטכנולוגית ה ‪J2ME‬‬
‫מעתה נכיר טכנולוגיות נוספות לתכנות בסלולר‬
‫היום נלמד על ‪android‬‬
‫על סדר היום‪:‬‬
‫‪‬‬
‫הרצאה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫תרגול‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫הקמת תשתית העבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הקדמה‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫רקע‬
‫‪ Android .inc‬נרכשה ע"י ‪ Google‬ב ‪2005‬‬
‫מערכת הפעלה מבוססת לינוקס למכשירים סלולריים‬
‫תכנות אפליקציות באמצעות ‪Java‬‬
‫ב ‪ 2007‬נחשף לציבור‬
‫רובו קוד פתוח תחת רישיון ‪apache‬‬
‫ברבעון הראשון של ‪ 2010‬מכירות של מערכת‬
‫ההפעלה ‪ android‬ל ‪ smart phones‬בארה"ב היו‬
‫‪‬‬
‫‪‬‬
‫במקום השני מכולן‪ ,‬לאחר מעה"פ של ‪black berry‬‬
‫המכירות עקפו את המכירות של ‪( iphone‬הצפי היה ‪)2012‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫ארכיטקטורת ‪android‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫• הארכיטקטורה מבוססת על‬
‫‪Linux Kernel 2.6‬‬
‫• מהווה שכבת אבסטרקציה לחומרה‬
‫• מודל התקנים מוכח כאמין ורובסטי‬
‫• מספק‪:‬‬
‫• ‪memory management‬‬
‫• ‪process management‬‬
‫• ‪networking‬‬
‫ארכיטקטורת ‪android‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫• ה ‪ Native Libraries‬נכתבו ב‬
‫‪C \ C++‬‬
‫• נדבר איתם דרך ממשקי ‪Java‬‬
‫מבט כללי‪:‬‬
‫• ה ‪ surface manager‬אחראי שכל‬
‫הגרפיקה מכל תהליך תוצג במקום‬
‫• ‪ :openGL / SGL‬ניתן להשתמש‬
‫בהאצת חומרה ולשלב ‪ 2D‬ו ‪3D‬‬
‫• ‪ :Media framework‬כל ‪codec‬‬
‫אפשרי של אודיו או וידאו‬
‫• ‪ :Webkit‬מנוע הדפדפן‬
‫ארכיטקטורת ‪android‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫ארכיטקטורת ‪android‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫ארכיטקטורת ‪android‬‬
‫‪Dalvik Virtual Machine‬‬
‫‪ ‬ה ‪ VM‬של ‪ - Android‬מותאם לסביבת ‪embedded‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪ VM‬הן לרוב בארכיטקטורת ‪stack machines‬‬
‫בעוד שה ‪ DVM‬היא ‪register based‬‬
‫‪‬‬
‫‪‬‬
‫השיטה השלטת במעבדים רגילים‬
‫המשמעות היא‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫זיכרון‪ ,‬כוח עיבוד‪ ,‬וחיי סוללה מוגבלים‬
‫יותר קוד כדי לבצע הוראה מהשפה העילית‬
‫אך פחות הוראות ‪ VM‬כדי לבצע את התוכנית‬
‫הוכח אמפירית כיותר יעיל ל ‪interpreter‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫ארכיטקטורת ‪android‬‬
‫‪ - Dalvik Virtual Machine‬המשך‬
‫‪ ‬באמצעות תוכנית בשם ‪ dx‬מתבצעת המרה לקובצי ה‬
‫‪ class‬לקובצי ‪( dex‬מקביל ל ‪)Jar‬‬
‫‪ ‬קובץ ‪ dex‬מהווה ‪byte code‬‬
‫עבור ה ‪)dalvik executable( DVM‬‬
‫‪ ‬כל מידע כפול מופיע רק פעם אחת‬
‫‪ ‬גם כשהוא לא מכווץ הוא קטן יותר מקובץ ‪ Jar‬מכווץ‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫ארכיטקטורת ‪android‬‬
‫‪ - Dalvik Virtual Machine‬המשך‬
‫‪ ‬ה ‪ data structure‬של קובץ ‪ dex‬בנוי בצורה‬
‫שמאפשרת שיתוף מידע בין תהליכים שונים‬
‫‪ ‬זה מתאפשר מכיוון שהמידע לא צמוד‬
‫לאובייקט אלא מנוהל במקום מרוכז‬
‫‪ ‬המשמעות של כל מה שתיארנו‬
‫עד עתה היא שניתן להריץ כמה‬
‫מופעים של ה ‪ VM‬בו זמנית‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫ארכיטקטורת ‪android‬‬
‫‪ - Dalvik Virtual Machine‬המשך‬
‫‪ ‬מנגנון של ‪ JIT‬נמצא בפיתוח‬
‫‪ ‬יש גרסא ניסיונית החל מ ‪Android 2.0‬‬
‫‪ ‬ביצועים מעולים בגרסא ‪ 2.2‬החדשה‬
‫‪Core Libraries‬‬
‫‪ ‬כתובות ב ‪Java‬‬
‫‪ ‬דרכם אנו מדברים עם‬
‫ה ‪Native Libraries‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫ארכיטקטורת ‪android‬‬
‫‪ - Dalvik Virtual Machine‬המשך‬
‫‪ ‬עדיין אין מנגנון של ‪( JIT‬נמצא בפיתוח)‬
‫‪ ‬יש גרסא ניסיונית ב ‪Android 2.0‬‬
‫‪Core Libraries‬‬
‫‪ ‬כתובות ב ‪Java‬‬
‫‪ ‬דרכם אנו מדברים עם‬
‫ה ‪Native Libraries‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫ה ‪:Application Framework‬‬
‫• כתוב כולו ב ‪Java‬‬
‫• מהווה את התשתית לכתיבת‬
‫האפליקציות ב ‪Android‬‬
‫מבט כללי‪:‬‬
‫• ‪ Activity manager‬אחראי‬
‫לניהול מעגל החיים של אפליקציות‬
‫• ‪ Package manager‬אחראי‬
‫לניהול האפליקציות המותקנות‬
‫• ‪ Content providers‬מאפשר‬
‫לכל אפליקציה לשתף מידע עם‬
‫אפליקציות אחרות‬
‫ארכיטקטורת ‪android‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫• בשכבה העליונה נמצאות כמובן‬
‫האפליקציות עצמן‬
‫• ‪ Android‬מגיע עם כמה‬
‫אפליקציות מוכנות‬
‫•בשכבה זו אנו כותבים את‬
‫האפליקציות שלנו‬
‫• בשפת ‪ Java‬תוך כדי שימוש‬
‫בתשתית הקיימת‬
‫ארכיטקטורת ‪android‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫ארכיטקטורת ‪android‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫אבני הבניין של אפליקציה‬
‫הרכיב הכי בסיסי‪ ,‬בד"כ ‪ UI‬שמתאים‬
‫למסך אחד שלם‬
‫‪Activity‬‬
‫מגיב להודעות \ שינויי סטאטוס‪ ,‬יכול‬
‫להעיר תהליך כלשהו‬
‫‪IntentReceiver‬‬
‫משימה ללא ‪ UI‬שרצה ברקע‬
‫מאפשר לאפליקציה לשתף מידע עם‬
‫אפליקציות אחרות‬
‫‪Service‬‬
‫‪ContentProvider‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪‬‬
‫כל אפליקציה רצה בתוך תהליך משלה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫מעגל החיים של אפליקציה‬
‫‪Security, protective memory‬‬
‫אפליקציה שמעמיסה על המעבד לא תחסום תהליכים‬
‫קריטיים אחרים כגון לענות לטלפון‬
‫מערכת ‪ Android‬אחראית להפעלתם ועצירתם של‬
‫תהליכים כנדרש להרצתן של אפליקציות‬
‫יתכן שתהליכים יהרגו (ואח"כ ישוחזרו) על מנת לפנות‬
‫משאבים לתהליכים אחרים‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫מעגל החיים של אפליקציה‬
‫דוגמא‪:‬‬
‫‪ ‬נניח שמאפליקציית ‪ Home‬פתחנו ‪Gmail‬‬
‫‪ ‬בחרנו מכתב‪,‬הצגנו אותו וראינו בתוכו קישור‬
‫‪ ‬לחצנו על הקישור והדפדפן נפתח בעמוד כלשהו‬
‫‪ ‬בעמוד יש קישור למפה שלחצנו עליו‬
‫‪ ‬האפליקציה של תצוגת המפות נפתחה‬
‫‪ ‬כעת אנו רוצים לחזור מסכים אחורה‪...‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫מעגל החיים של אפליקציה‬
‫‪System process‬‬
‫‪Activity Manager‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Home‬‬
‫תחילה קיימים ‪ 2‬תהליכים‪:‬‬
‫• ה ‪ System Process‬שמריץ את ה ‪Activity Manager‬‬
‫שמנהל את מחסנית ה ‪Activities‬‬
‫• תהליך שמריץ את ה ‪Home Activity‬‬
‫• שמאפשרת למשתמש לבחור אפליקציות ולדפדף ביניהן‬
‫‪Home‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫מעגל החיים של אפליקציה‬
‫‪System process‬‬
‫‪Activity Manager‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪S‬‬
‫‪Mail‬‬
‫‪Mail List‬‬
‫כעת המשתמש מפעיל את אפליקציית ‪gmail‬‬
‫• ה ‪ State‬של ‪ Home‬נשמר ב ‪Activity Manager‬‬
‫• נפתח תהליך ‪ Mail‬חדש‬
‫• ובתוכו ה ‪ Activity‬שמציגה את רשימת המכתבים‬
‫• שכעת נראית על כל המסך‬
‫‪Home‬‬
‫‪Mail‬‬
‫‪List‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫מעגל החיים של אפליקציה‬
‫‪System process‬‬
‫‪Activity Manager‬‬
‫‪S‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Mail‬‬
‫‪Message‬‬
‫‪Mail List‬‬
‫‪S‬‬
‫כעת המשתמש בחר מכתב כלשהו‬
‫• ה ‪ State‬של ה ‪ Mail List‬נשמר‬
‫• מתווספת ‪ Activity‬חדשה לתהליך של ‪Mail‬‬
‫• שמציגה את תוכן המכתב‬
‫• שכעת נראה על כל המסך‬
‫‪Home‬‬
‫‪Message‬‬
‫‪Mail‬‬
‫‪List‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫מעגל החיים של אפליקציה‬
‫‪S‬‬
‫‪System process‬‬
‫‪Activity Manager‬‬
‫‪S‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Mail‬‬
‫‪Message‬‬
‫‪S‬‬
‫‪Mail List‬‬
‫‪Browser‬‬
‫‪Browser‬‬
‫כעת המשתמש לחץ על קישור במכתב‬
‫• ה ‪ State‬של ה ‪ Message‬נשמר‬
‫• נוצר תהליך חדש למען ה ‪Browser‬‬
‫• בתוכו ‪ Activity‬של ‪Browser‬‬
‫• שכעת נראה על כל המסך‬
‫‪Home‬‬
‫‪Message‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫מעגל החיים של אפליקציה‬
‫‪S‬‬
‫‪S‬‬
‫‪System process‬‬
‫‪Activity Manager‬‬
‫‪S‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Mail‬‬
‫‪Message‬‬
‫‪Mail List‬‬
‫‪Browser‬‬
‫‪S‬‬
‫‪Browser‬‬
‫כעת המשתמש לחץ על קישור לפתיחת מפה‬
‫• ה ‪ State‬של ה ‪ Browser‬נשמר‬
‫• נרצה לפתוח את אפליקציית ה ‪Maps‬‬
‫• אך אין לנו מקום לעוד תהליך‪...‬‬
‫‪Home‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫מעגל החיים של אפליקציה‬
‫‪S‬‬
‫‪S‬‬
‫‪S‬‬
‫‪System process‬‬
‫‪Activity Manager‬‬
‫‪S‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Mail‬‬
‫‪Message‬‬
‫‪Mail List‬‬
‫‪Browser‬‬
‫‪Browser‬‬
‫• לא נהרוג את תהליך ‪ ,Home‬כי הוא צריך להיות תמיד‬
‫זמין למשתמש לצורך דפדוף בין אפליקציות‬
‫• גם את תהליך ה ‪ Browser‬לא נהרוג‪ ,‬כי הוא האחרון‬
‫• ולכן תהליך ה ‪ Mail‬הוא זה שייהרג כדי לפנות מקום‬
‫‪Home‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫מעגל החיים של אפליקציה‬
‫‪S‬‬
‫‪S‬‬
‫‪S‬‬
‫‪System process‬‬
‫‪Activity Manager‬‬
‫‪S‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Browser‬‬
‫‪Browser‬‬
‫‪Maps‬‬
‫‪Maps‬‬
‫• כעת יש מקום לתהליך חדש – ייפתח עבור ‪Maps‬‬
‫• בתוכו ה ‪ Activity‬של ‪Maps‬‬
‫• שתיראה על כל המסך‬
‫‪Home‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫מעגל החיים של אפליקציה‬
‫‪S‬‬
‫‪S‬‬
‫‪S‬‬
‫‪System process‬‬
‫‪Activity Manager‬‬
‫‪S‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Browser‬‬
‫‪Browser‬‬
‫‪Maps‬‬
‫‪Maps‬‬
‫כעת המשתמש לוחץ ‪ back‬כדי לחזור לאפליקציה האחרונה‬
‫• ה ‪ Activity‬של ‪ Maps‬תיסגר ונחזור לראות את ה ‪Browser‬‬
‫• התהליך היה פעיל אז לא היה צורך לטעון מחדש את ה ‪State‬‬
‫של ה ‪Browser‬‬
‫‪Home‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫מעגל החיים של אפליקציה‬
‫‪S‬‬
‫‪S‬‬
‫‪System process‬‬
‫‪Activity Manager‬‬
‫‪S‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Browser‬‬
‫‪Browser‬‬
‫‪Mail‬‬
‫‪Maps‬‬
‫‪Message‬‬
‫כעת המשתמש שוב לוחץ ‪ back‬כדי לחזור אפליקציה‬
‫• תהליך ‪ Maps‬ייהרג‪ ,‬כדי לאפשר מקום לתהליך ‪Mail‬‬
‫• עותק חדש של ‪ Message‬ייפתח‬
‫• הוא יתעדכן ב ‪ State‬שנשמר עבורו ב ‪Activity Manager‬‬
‫• כעת ה ‪ Activity‬של ‪ Browser‬תיסגר ונראה במסך את ההודעה‬
‫‪Home‬‬
‫‪Message‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫מעגל החיים של אפליקציה‬
‫‪S‬‬
‫‪System process‬‬
‫‪Activity Manager‬‬
‫‪S‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Home‬‬
‫‪Browser‬‬
‫‪Mail‬‬
‫‪Message‬‬
‫‪Mail List‬‬
‫כעת המשתמש שוב לוחץ ‪ back‬כדי לחזור אחורה‬
‫• תתווסף ‪ Activity‬חדשה של ‪Mail List‬‬
‫• ה ‪ State‬שלה יתעדכן מה ‪Activity Manager‬‬
‫• כעת ה ‪ Message‬תיסגר ונראה את רשימת המכתבים במסך‬
‫‪Home‬‬
‫‪Message‬‬
‫‪Mail‬‬
‫‪List‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫הקמת תשתית עבודה‬
‫נוריד את ה ‪ Android SDK‬מהכתובת‬
‫‪http://developer.android.com/sdk/index.html‬‬
‫נחלץ את ה ‪ zip‬לתיקייה כלשהי‬
‫אפשרי להכניס את תת התיקייה ‪ tools‬לתוך ה ‪Path‬‬
‫ניצור ‪ workspace‬חדש ל ‪ eclipse‬בשביל ‪android‬‬
‫דרך התפריט ‪ help‬נוסיף את ה ‪ plug-in‬מהכתובת‬
‫‪https://dl-ssl.google.com/android/eclipse‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫הקמת תשתית עבודה‬
‫בינתיים נתקין את ה ‪ SDK‬ע"י הפעלת‬
‫‪SDK Setup.exe‬‬
‫אם תהיה לו בעיה לגשת ל ‪ repository‬של ‪ google‬נכנס ל‬
‫‪ settings‬ונסמן את ‪ Force https://...‬נסגור ונתקין שוב‬
‫נאשר הכל ונמתין‬
‫עד סיום ההתקנה‬
‫תהליך זה קצת‬
‫ארוך‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫הקמת תשתית עבודה‬
‫בינתיים נתקין את ה ‪ SDK‬ע"י הפעלת‬
‫‪SDK Setup.exe‬‬
‫אם תהיה לו בעיה לגשת ל ‪ repository‬של ‪ google‬נכנס ל‬
‫‪ settings‬ונסמן את ‪ Force https://...‬נסגור ונתקין שוב‬
‫נאשר הכל ונמתין‬
‫עד סיום ההתקנה‬
‫תהליך זה קצת‬
‫ארוך‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫הקמת תשתית עבודה‬
‫לאחר סיום התקנת ה ‪ plug-in‬ה ‪ eclipse‬יופעל‬
‫מחדש‪ ,‬כעת נמתין שתסתיים גם התקנת ה ‪SDK‬‬
‫נכנס לתפריט …‪windows preferences‬‬
‫תחת ‪ Android‬נבחר את התיקייה בה חילצנו קודם‬
‫את ה ‪ zip‬שהורדנו (ה ‪ SDK‬של ‪)Android‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫הקמת תשתית עבודה‬
‫כדי שנוכל לעבוד עם אמולטור עלינו ליצור ‪Android‬‬
‫)‪ = Virtual Device (AVD‬מכשיר נייד‬
‫מתוך סרגל הכלים של ‪ eclipse‬נלחץ על הכפתור של‬
‫‪android‬‬
‫ייפתח לנו חלון ה ‪AVD manager‬‬
‫נבחר ‪Virtual Devices‬‬
‫נלחץ על …‪new‬‬
‫בחלון שייפתח נגדיר מכשיר נייד כרצוננו‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫הקמת תשתית עבודה‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪‬‬
‫הקמת תשתית עבודה‬
‫נוודא שהוא עובד ע"י סימונו ולחיצה על ‪Start‬‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪Hello world‬‬
‫ניצור פרויקט חדש ע"י …‪file  new  project‬‬
‫נבחר ‪Android project‬‬
‫נמלא לאחר מכן את הפרטים הבאים‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫שם הפרויקט ‪HelloAndroid‬‬
‫‪Build target = android 1.1‬‬
‫שם האפליקציה ‪Hello, Android‬‬
‫נבחר שם ל ‪ package‬כרצוננו‬
‫נבחר ליצור ‪ activity‬בשם ‪HelloAndroid‬‬
‫‪Min SDK version = 2‬‬
android ‫ארכיטקטורת‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
Hello World
‫דוגמאות מתקדמות‬
‫הטמעה‬
Hello world
:‫נוצרה לנו התוכנית הבאה‬
package biu89697.example;

‫ היא הישות‬Activity ‫המחלקה‬
.‫הבסיסית להרצת פעולות באפליקציה‬
import android.app.Activity;
import android.os.Bundle;
public class HelloAndroid extends Activity {
‫אפליקציה יכולה להיות מורכבת מכמה‬
‫ אך המשתמש יכול לבצע‬Activities
.‫אינטראקציה רק עם אחת בכל פעם‬
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Android ‫ תופעל ע"י‬Activity ‫כשה‬
.‫ תיקרא‬onCreate(( ‫המתודה‬
‫היא תשמש אותנו לאתחול כללי‬
.UI ‫ובד"כ גם לאתחול ה‬
android ‫ארכיטקטורת‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
Hello World
‫דוגמאות מתקדמות‬
‫הטמעה‬
Hello world
package biu89697.example;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloAndroid extends Activity {
:‫ פשוט‬UI ‫כעת נוסיף לנו‬
‫כשנריץ נתבקש‬
‫לבחור מכשיר‬
my_avd ‫נבחר ב‬
:‫התוצאה‬
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText("Hello, Android");
setContentView(tv);
}
}




‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪‬‬
‫כתיבת ‪ UI‬באופן ישיר דרך הקוד‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪Hello world‬‬
‫תוביל לכך ששינוי קטן ב ‪ layout‬יגרום לכאב ראש גדול‬
‫קל לשכוח לחבר ‪ views‬יחד‪ ,‬ויגרמו טעויות ל ‪layout‬‬
‫זמן ‪...debug‬‬
‫לכן ניתן ליצור ‪ UI‬גם באמצעות קובצי ‪XML‬‬
‫נתבונן בקבצים הנוספים שה ‪ plug-in‬יצר‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪ – main.xml‬מגדיר את ה ‪UI‬‬
‫‪ – strings.xml‬כל המחרוזות הקבועות‬
‫‪ – R.java‬קיצור ל ‪Resource‬‬
android ‫ארכיטקטורת‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
Hello World
‫דוגמאות מתקדמות‬
‫הטמעה‬
Hello world
main.xml
(layout) ‫ מגדיר לנו את אופן פריסת הרכיבים הגרפים‬
‫ וכן את הרכיבים עצמם‬
‫ ניתן לערוך אותו ידנית או באמצעות עורך ויזואלי‬
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="@string/hello"
</LinearLayout>
/>
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪main.xml‬‬
‫‪ ‬עורך ויזואלי‬
‫‪Hello world‬‬
android ‫ארכיטקטורת‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
Hello World
‫דוגמאות מתקדמות‬
‫הטמעה‬
Hello world
strings.xml
UI ‫ כאן נגדיר את כל המחרוזות הקבועות שלנו ב‬
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, HelloAndroid!</string>
<string name="app_name">Hello, Android</string>
</resources>
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪Hello world‬‬
‫כדי שהתוכנית שלנו תשתמש בהגדרות הללו‪ ,‬נחזיר‬
‫;)‪setContentView(R.layout.main‬‬
‫את השורה‬
‫במקום ‪ - tv‬ה ‪ textView‬שיצרנו דרך הקוד‬
‫מתבצעת קריאה סטטית למחלקה ‪R‬‬
‫שתפעיל את ה ‪ layout‬שמוגדר ב ‪main.xml‬‬
‫תפקיד המחלקה – גישה מהירה ל ‪resources‬‬
‫נוצרת אוטומטית עם כל ‪ resource‬שאנו מכניסים‬
‫אין לערוך את המחלקה הזו ידנית (!)‬
Hello world
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}
android ‫ארכיטקטורת‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
Hello World
‫דוגמאות מתקדמות‬
‫הטמעה‬
R.java
‫גישה סטטית‬
‫לכל משאב‬
‫לצורך נוחות‬


‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪‬‬
‫אפליקציה שמראה לנו‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫דוגמאות מתקדמות‬
‫תוך כדי תנועה‬
‫על מפה‬
‫כמה קרובים אנו לכתובות החברים שלנו‬
‫נראה דוגמאות ל‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫הוספה פריט לתפריט‬
‫שימוש במידע ‪GPS‬‬
‫שימוש במידע משותף‬
‫‪Intent / Intent Receiver‬‬
‫קריאה ל ‪map‬‬
‫ביצוע התקשרות‬
‫מקור‪http://blogoscoped.com/archive/2007-11-19-n27.html :‬‬
‫הוספת תפריט‬
android ‫ארכיטקטורת‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
Hello World
‫דוגמאות מתקדמות‬
‫הטמעה‬
/* Creates the menu items */
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, MENU_NEW_GAME, 0, "New Game");
menu.add(0, MENU_QUIT, 0, "Quit");
return true;
}
/* Handles item selections */
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_NEW_GAME:
newGame();
return true;
case MENU_QUIT:
quit();
return true;
}
return false;
}
onCreateOptionsMenu
‫נקראת כאשר מוצר תפריט‬
‫עלינו לדרוס אותה‬
‫ מוסיפה פריט‬manu.add



‫כשתיבחר אופציה‬
onOptionsItemSelected
‫תופעל‬
‫נזהה את האופציה לפי‬
int item.getItemId()




:‫לפרטים נוספים‬
http://developer.android.com/guide/topics/ui/menus.html

GPS - Location Based Service
android ‫ארכיטקטורת‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
Hello World
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫ מספקים‬android ‫ של‬location based services ‫ה‬
‫ כגון‬location providers ‫לאפליקציות הקשר גיאוגרפי דרך‬
GPS
‫‘ לצורכי פיתוח‬gps’ ‫ בשם‬provider ‫ מגיע עם‬android
XML ‫ ניתן ליצור עוד ע"י‬,‫פרנסיסקו‬-‫הוא ממפה את סאן‬
LocationManager locationManager =
(LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location =
locationManager.getCurrentLocation("gps");



‫שימוש במידע משותף‬
Cursor c = getContentResolver().query(People.CONTENT_URI, null,
null, null, null);
startManagingCursor(c);
int coordIdx = c.getColumnIndex(People.NOTES);
int phoneIdx = c.getColumnIndex(People.PhonesColumns.NUMBER);
int nameIdx = c.getColumnIndex(People.NAME);
List listItems = new ArrayList();
c.first();
do {
String name = c.getString(nameIdx);
String coords = c.getString(coordIdx);
String phone = c.getString(phoneIdx);
//... [ Process the lat/long from the coordinates ] ...
//... [ Storing their location under variable loc ] ...
String distStr = String.valueOf(location.distanceTo(loc)/1000);
name = name + " (" + distStr + "km)";
listItems.add(name);
numbers.add("tel:" + phone);
} while(c.next());
android ‫ארכיטקטורת‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
Hello World
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫ יכול‬ContentResolver
‫לשלוח שאילתא למידע‬
‫משותף של‬
Content Providers
cursor ‫נקבל חזרה‬
‫המצביע על תחילת‬
‫התשובה שחזרה‬
People ‫נשתמש ב‬
‫לרשימת החברים‬



Intent / Intent Receiver
android ‫ארכיטקטורת‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
Hello World
‫דוגמאות מתקדמות‬
‫הטמעה‬
Event / Event handler ‫המקבילים ל‬
‫ חדש בכל‬Intent ‫ניזום‬
...‫פעם שהמכשיר יזוז‬
List providers = locationManager.getProviders();
LocationProvider provider = providers.get(0);
Intent intent = new Intent(LOCATION_CHANGED);


locationManager.requestUpdates(provider, minTime, minDistance, intent);
public class myIntentReceiver extends IntentReceiver {
@Override
public void onReceiveIntent(Context context, Intent intent){
updateList();
‫ניצור מחלקה פנימית‬
Intent ‫שתתפוס את ה‬

‫נקשר את השניים ב‬
‫ או תחת‬onCreate()
start / stop ‫תפריט כגון‬

}
}
filter = new IntentFilter(LOCATION_CHANGED);
receiver = new myIntentReceiver();
registerReceiver(receiver, filter);
android ‫ארכיטקטורת‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
Hello World
‫דוגמאות מתקדמות‬
‫הטמעה‬
map ‫קריאה ל‬
MapView ‫ כדי להשתמש ב‬MapActivity ‫נצטרך להרחיב את‬

public class MyMapViewActivity extends MapActivity{
MapController ‫ יש מופע של‬MapView ‫למופע של‬
‫באמצעותו ניתן לשלוט על המפה‬
Point point = new Point(lat.intValue(), lng.intValue());
mapController.centerMapTo(point, false);
‫למשל למרכז אותה מסביב לנק' שלנו‬
@Override
public void draw(Canvas canvas, PixelCalculator calculator,
boolean shadow) {
//... [ draw things here ] ...
}
}


‫ של המפה‬canvas ‫ נצייר על ה‬overlayController ‫באמצעות‬
protected class MyLocationOverlay extends Overlay {


‫ביצוע התקשרות‬
android ‫ארכיטקטורת‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
Hello World
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫נרצה אולי להתקשר לחבר על המפה‬
‫ מסוג‬intent ‫ של ההתקשרות מאזינה ל‬activity ‫ה‬
DIAL_ACTION
:‫ניזום אותה כך‬
Intent i = new Intent();
i.setAction(DIAL_ACTION);
i.setData(new ContentURI(numbers.get(position)));
startActivity(i);



‫ארכיטקטורת ‪android‬‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
‫‪Hello World‬‬
‫דוגמאות מתקדמות‬
‫הטמעה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫מנה ‪ 3‬הבדלים בין ‪ JVM‬סטנדארטי ל ‪DVM‬‬
‫כיצד מתמודד ‪ android‬עם מעבד חלש שיכול להריץ רק‬
‫מספר קטן של תהליכים במקביל? (קטן יחסית ל ‪)PC‬‬
‫מהם ‪? Intents / Intent Receivers‬‬
‫למה עדיף שה ‪ layout‬של ה ‪ UI‬יוגדר מחוץ לקוד ע"י ‪?XML‬‬
‫תבקרו בבלוג של ‪ android – developer‬ללמוד עוד‬
‫‪‬‬
‫‪‬‬
‫הטמעה‬
‫‪http://android-developers.blogspot.com/index.html‬‬
‫תוכלו לראות גם אפשרויות שלא קימות ב ‪J2ME‬‬
‫‪‬‬
‫‪‬‬
‫כגון הוספת ‪ widgets‬ישירות למסך הראשי‬
‫‪http://android-developers.blogspot.com/2009/04/introducing‬‬‫‪home-screen-widgets-and.html‬‬
android ‫ארכיטקטורת‬
‫מעגל החיים של אפליקציה‬
‫הקמת תשתית עבודה‬
Hello World
‫דוגמאות מתקדמות‬
‫הטמעה‬
:‫מקורות‬
http://developer.android.com/index.html •
http://blogoscoped.com/archive/2007-11-19-n27.html
•
http://www.youtube.com/watch?v=Mm6Ju0xhUW8 •
http://www.youtube.com/watch?v=ITfRuRkf2TM•
http://www.youtube.com/watch?v=iiD4fGjjXcc
•