[Powered by Google Translate] [סמינר] [אנדרואיד (עכשיו עם סוכריות ג'לי!)] [ירדן Jozwiak] [אוניברסיטת הרווארד] [זה CS50.] [CS50.TV] שלום לכולם, וברוכים הבאים ליישומי אנדרואיד (עכשיו עם סוכריות ג'לי!) סמינר. זה נקרא עכשיו עם סוכריות ג'לי, כמובן, כי את הגרסה האחרונה של מערכת ההפעלה נקראת שעועית ג'לי. כשדיברתי על אנדרואיד בשנה שעברה ועשיתי את זה בעצם אותו סמינר אני היה מציג את תבניות העיצוב ובחירות סגנוניות לGingerbread, למרות שהגלידה סנדוויץ יצא באותו הזמן, וזה משהו שנדברנו על קדימה קצת. אנדרואיד, כמובן, יש לו כמה בעיות עם פיצול, כך מערכת ההפעלה האחרונה של Google היא בדרך כלל לא ממש הולך להיות נפוצה בקרב המשתמשים לפוטנציאל של עד שנה, למרבה הצער. אבל התעלמות זה, נדבר על הרבה סיבות מדוע אנדרואיד היא הרבה יותר טובה מאשר iOS. אוקיי, נדבר על אנדרואיד לעומת iOS, כמה פרדיגמות עיצוב, כיצד תוכל לקבל להגדיר רק שקופית אחת, וההבדל הגדול בין זה לבין השנה שעברה הוא שאני רק רוצה זום דרך כמה דברים רעיוניים שעובדים עם מערכת ההפעלה ולאחר מכן ללכת לדוגמה באמת בסיסית. למעשה, רק בדוגמא שגוגל מתארת ​​לבניית האפליקציה הראשונה שלך, ואנחנו נעבור את זה ביחד ורק לתאר. אני יודע שהרבים מכם מקודדים רק ב-C, ולכן ג'אווה כבר הולכת להיות נקודת מבט שונה, ודרך זה תוכל לקבל את הרגליים רטובות ולהרגיש קצת יותר בנוח עם זה בתקווה. סיכום מהיר, אנדרואיד לעומת iOS. באנדרואיד יש דמי מפתח חד פעמי של 25 $, אף דבר זה 100 דולרים לשנה מ. אין הגבלות, מה שאומר שאם אני רוצה להגיש אפליקציה, אני רק להגיש אותו, ואין שום תהליך אישור כמו שיש עבור iOS. אתה מקבל לפתח עם Java באמצעות Eclipse, אשר הוא חוצה פלטפורמה, כך שזה לא משנה אם יש לכם מק, Windows, או איזה מכונת לינוקס. כמובן, עם iOS יש לך להשתמש במקינטוש Xcode, ואנדרואיד משמש אנשים רבים יותר, כך שאם אתה רוצה האפליקציה שלך יש איזשהו נראות או אולי לעשות קצת כסף מפרסומות אתה כנראה יותר עשוי ליהנות מאנדרואיד. ודבר אחד שתמיד היה ידוע על אנדרואיד היא הכמות הקיצונית של התאמה אישית, ואילו iOS הוא מאוד מקובע בדרכים שלהם כדי שנוכל לשמור על ביטחון ושליטה על כל היבט קטן של העיצוב בתוך מערכת ההפעלה שלהם ואת היישומים הבודדים. אנדרואיד היא צורה החופשית מאוד, ויש כל כך הרבה יותר אפשרויות. אוקיי, כמה פרדיגמות עיצוב. שימו לב כאן בדיוק כמו iOS יש טבליות וiPhones ונוגע iPod הם צריכים לתמוך בו, אומרים, כמו תריסר מכשירים, אם אתה רוצה לתמוך דברים היסטורי, כמו גם. עם אנדרואיד יש לך כדי לתמוך במאה מכשירים, אז יש כמה דברים שגוגל כבר מנסה ליישם כדי להפוך למשתמש לחוות קצת יותר עקבי, אבל אנחנו גם נדבר על איך זה שאומר שיש בעיות של פיצול כי אתה כל הזמן צריך להיות מודע לתמיכה. פיצול אומר שיש מערכות הפעלה רבות ושונות, טלפונים רבים ושונים עם חומרה שונה פועלים אנדרואיד כולם באותו הזמן, כך הגרף הזה כאן חוזר במשך כ -6 חודשים. כן, 6 חודשים, ואתה יכול לראות איך הלהקה האפלה ביותר בחלקו התחתון הוא ג'לי בין, שיצא בקיץ, ואתה יכול לראות עכשיו כנראה כ -2% מהטלפונים שיש לו. גלידת סנדוויץ יצא לפני למעלה משנה, ורבע מהטלפונים שיש לו. יש עדיין הרבה טלפונים שמשתמשים בגרסת מערכת הפעלה מלפני שנים. דבר אחד שגוגל ניסתה לעשות על מנת להפוך את חוויית המשתמש הרבה יותר עקביים באפליקציות הוא מתחיל עם כוורת, המהווה את גרסת מחשב הלוח, ולאחר מכן כריך גלידה וג'לי בין, הם באמת מנסים להדגיש שימוש בסרגל פעולה זו, וזה מה שאתה יכול לראות בחלק העליון כאן, הכל נכון כאן, כולל כפתור ההגדרות הקטן הזה. זה בחירת העיצוב. עכשיו, בכל פעם שאתה רואה את 3 נקודות זה אומר ללחוץ על זה, ולא יהיה תפריט נפתחת, שבו יש איזשהו הגדרות. זה מראה עד רק משום שאני לוחץ על הכפתור הזה. זה משהו שהם מנסים להשתמש בו כדי להפוך את היישומים קצת יותר עקבי על פני לוח ואז יש למשתמש תחושה של חוויה אחידה יותר טובה. אוקיי, אז במקרה שאתה לא עשית את זה כבר או אם אתה צופה בבית אז אתה יכול לעקוב אחר הצעדים הבאים כדי להגדיר את סביבת הקידוד שלך. זה יהיה כרוך הולכים לאתר כאן. אתה יכול Google התקנת אנדרואיד SDK ואחרי כמה תיאורים שם. הם אומרים לך את הכל. הם יש לך להתקין, גרסת SDK הורדת Eclipse קלסי, למרות, כמובן, שאנחנו קידוד ב-Java. הם ממליצים על זה, ולאחר מכן ADT זה, את כלי פיתוח אנדרואיד, הוא תוסף שאתה מתקין לתוך Eclipse אשר מאפשר לך יש לי ניסיון הרבה יותר יעיל עם אנדרואיד בתוך Eclipse. זה ייתן לך כמה ממשקי משתמש גרפיים לעיצוב הנוף, וזה ייתן לך הרבה יותר תמיכה והיכולת לשגר עם אמולטור וכל דברים מהסוג הזה. במסגרת יישום. אני רוצה לדבר על אופן שבו הפרויקטים בתוך אנדרואיד בנויים, ואז נלך לדוגמה מהירה, ואני מקווה אתה יכול לשאול שאלות בכל נקודה ולהרגיש בנוח עד סוף אותו. יש לנו כמה ז'רגון ראשון. פעילות היא כמו המסך שאתה רואה כשאתה השקת אפליקציה. כל החוויה היא הפעילות עצמה, כך שאתה יכול לחשוב על זה כמסך או נוף, אבל זה בעצם צד קוד המקור שלו. אנחנו עדיין קוראים לחלק הממשק בפועל של אותו נוף. זה קצת כמו באופן pset 7 היה לנו הבקר ולאחר מכן את הנוף. הפעילות היא פחות או יותר את הבקר, והנוף הוא מה שאנחנו עושים במונחים של ה-XML המשויך לפעילות זו. ברים הם משהו שיושם בהולך הגלידה סנדוויץ קדימה. זה רק רעיון של לקחת חלקים מהתצוגה או הפעילות ולחלק אותם לאזורים נפרדים, כך שאנחנו יכולים להפוך את הקוד שלנו יותר שמיש עבור מכשירים רבים ושונים אלה שאנחנו צריכים לתמוך בו, וזה רק דרך לנסות גם גורם נוסף קוד. שירותים הם רקע דברים כמו השמעת מוסיקה או כיווני ניווט פוטנציאלי. ספקי תוכן, אלה APIs בתוך מערכת ההפעלה שיאפשר לך גישה לנתונים משותפים, כגון פרטי קשר, ולאחר מכן כוונה היא משהו שאנו נשתמש כאשר אנו רוצים להשיק פעילות חדשה מהפעילות הנוכחית שלנו. שלום אנדרואיד, זה הולך להיות פרויקט שנדברנו עליו. אני באמת אעשה את זה בשבילך, ואז אנחנו נעשה את דבר שבו אנו לוחצים על לחצן עם קצת טקסט ולהשיק פעילות חדשה. מאוד פשוט, אבל אני רוצה לעבור מה שייכנס לפרויקט כזה. כאשר אתה מבצע את הפרויקט החדש שתראה באקליפס יש הפרויקט הזה שנקרא שלום אנדרואיד. אז יש חבורה שלמה של תיקיות כאן. את אלו שאתה באמת מודאג עימם את תיקיית המקור, תיקיית המשאבים, מיל, ובמידה מסוימת את תיקיית libs ספריות למידה. ורק כדי שאנחנו על אותו הדף עם זה אם היית ליצור פרויקט חדש, אתה יכול לעשות את זה כאן, כך שאם אני רוצה לקרוא לזה HelloAndroid, ואז זה באופן אוטומטי עושה חבורה שלמה של המידע עבורנו. שם החבילה אמור להיות מזהה ייחודי שבדרך כלל קשור לאתר, אם היה לך אחד. לדוגמה, אני אקרא net.cs50.helloandroid זה. ואני כבר עשיתי את הפרויקט הזה פעם אחת. אוקיי, מצטער. בואו נקראים לזה HelloCS50. ואז זה ישאל את הדברים כמו איזה סוג של סמל האם אנחנו רוצים לעשות. כל זה בגלל של ממשק אנדרואיד מפתחי כלים, התוסף שהוספנו לליקוי חם, ולכן אנחנו יכולים לבחור דברים כמו מה שסמל שאנחנו רוצים, ושניכנס לעומק שאם אנחנו רוצים. אבל בסופו של הדבר, רק לעשות את הפרויקט, וכל מה שמופיע כאן. כפי שהראיתי על המסך האחר, יש לנו את תיקיית המקור, ואני אדבר על מה שכל זה אומר שבקרוב, אבל אתה יכול לראות כי מייד זה לוקח אותנו למסך HelloCS50. יש כמה לחצנים לכאן להוספת פריסות שדה טקסט וטקסט. זה כמו סוג של Xcode אך למרבה הצער לא כל כך יעיל. אבל את הסרטונים יהיו חבר שלך וADT בפרט לעושים את זה. אוקיי, את תיקיית המקור בו היא את קבצי Java מתקיימים, ואת זה הוא למעשה השקה של התכנית שלך. זה בעצם כמו הבקרים. תיקיית המשאב או מיל מקום שבו אנחנו נשמור פריסות מסך, תמונות, צלילים, טקסט, אנימציה וכל דבר אחר, LIBS, כמובן, ספריות. ומניפסט, זה אופן שבו מערכת אנדרואיד יודעת איך לתקשר עם האפליקציה שלך. זה אומר לו אודות הרשאות ומה בעצם פעילות תהיה לרוץ. זה כל המידע החיוני שהדבר נדרש כדי להפעיל את היישום שלך. תיקיית המקור היא-אם להרחיב אותו כפי שאתה יכול לראות ממש כאן. ודוגמה שקוד היה נראה זה הוא קוד ברירת המחדל. כפי שקראנו לזה, MainActivity. כברירת מחדל, אנחנו מקבלים onCreate, שהיא פונקציה שנקראת כאשר עומסי פעילות זו, כך שאתה רוצה לקרוא לonCreate (savedInstanceState). זה יהיה לשחזר את כל פיסות המידע במקרה האפליקציה שעצרה. יש תרשים כל מחזור חיים של פעילות שבו אתה יכול להסתכל כאשר אתה מקבל קצת יותר לעומק בזה, אבל השורה החשובה ביותר של קוד יש פונקצית setContentView זה אשר תהיה לטעון את קובץ המשאבים לפריסה. אז מה כאן בעצם onCreate עושה הוא זה אומר כאשר אני יוצר את הפעילות הזו אני רוצה לטעון פריסה זו. ונדבר על מה שהיא בפריסה שנייה. אם היינו להשיק כי כאן זה נראה בדיוק כמו זה, כברירת מחדל, וכי יש לנו ליקוי חמה עושה את זה ועושה את זה בשביל ADT זה כל הקוד המוכן מראש שיצר עבורנו, ואנחנו יכולים להמשיך הלאה ולשנות דברים כמו שאנחנו אוהבים. תיקיית המשאבים, כמו שאמרתי, זה שבו אנו מחזיקים את כל הפריסות, drawables במונחים של כל סוג של תמונות ב הם נקראים drawables-ולאחר מכן קבצי קול, תפריטים. זוהי דרכו של כל חבורה של ה-XML באופנה מסודרים נחמדה. כפי שאתה יכול לראות, יש. Hdpi, ldpi, mdpi ותיקיות xhdpi לdrawables. אלה הם צפיפות מסך שונה, צפיפות פיקסלים גבוהה כל כך לאינץ', צפיפות נמוכה, צפיפות בינונית, צפיפות גבוהה נוספת. זהו, שוב, כדי שנוכל לתמוך בכל ההתקנים שונים אלה, ובאופן אידיאלי, יהיה לך תמונות שונות לכל רזולוציה שונה. פריסות הן שבו אנו כוללים את כל פריסות השונות שישמשו בפעילויות שונות. הם יכולים גם כוללים פריסות עבור ברים, מה שאומר שבעצם פעילות חלקית. אם אתה רוצה לעשות משהו מגניב כמו בכל פעם שאתה לסובב את הטלפון אתה רוצה שיהיה לה פריסה שונה שאתה יכול לעשות פריסה-נוף כתיקייה אחרת, ויש לו באופן אוטומטי אנדרואיד חבורה שלמה של כללים אלה בתוך תיקיית המשאבים, כך תדע להסתכל על תיקיות שונות המבוססות על ההגדרה הנוכחית של הטלפון, איזה סוג של חומרה אתה משתמש. בדומה לכך, זה ערכים-V11 כאן וערכים-v14 ואת ערכי ברירת המחדל עבור תיקייה זו היא, ובכן, ערכים של עצמו, זה יהיו את ערכי ברירת המחדל על פני כל גירסאות של מערכת ההפעלה. מצד השני, מתאים וV11 v14 עם כוורת וגלידת סנדוויץ, בהתאמה. שוב, אלה הם דרכים ש- בתוך תיקיות אלה הן מחרוזות שונות וסגנונות, כך שאתה יכול להתאים אישית את המראה של האפליקציה שלך או אפילו את הפונקציונליות שלו באופן פוטנציאלי, למרות שכנראה יהיה רעיון לא רע, המבוסס על הגרסה של מערכת ההפעלה. ואני דיבר על כל זה כאן. שוב, drawable, גלם, פריסה, ערכים. את ברירות המחדל, אם אנחנו הולכים לשלום או שלום אנדרואיד CS50 עכשיו זה ייראה בדיוק כמו זה. זה יהיה להגיד שלום עולם. כפי שניתן לראות כאן עם טקסט אנדרואיד את הטקסט לתצוגת הטקסט הזה, שהוא בעצם רק תווית, זה מה שאנחנו היינו קוראים לזה בiOS. יש לו סימון זה מצחיק @ מחרוזת / hello_world. זה כל כך שאנחנו יכולים, אנחנו מנסים לחלץ את כל המיתרים, כל המיתרים בקידוד קשיח באנדרואיד לתוך תיקייה נפרדת, אשר קורה להיות בvalues.strings. אם נסתכל כאן, אנו יכולים לראות שיש לנו מחרוזת בקידוד קשיח נשמרה כאן לשלום העולם, וקורא לזה שלום עולם, וזה סוג של החלטת עיצוב נפוצה על פני פלטפורמות רבות שברצונך, המיתרים הם מסוג הדברים שאנחנו רוצים להיות פוטנציאליים נוכל לשנות. אנחנו לא רוצים לשלוט F בקובץ קוד המקור שלנו ב-XML שלנו. אנחנו רוצים להיות מסוגלים לשנות את זה בכל פעם שאנחנו מקבלים את ההזדמנות. קובץ XML זה, strings.xml, הוא דרך של חילוץ מחרוזות בקידוד קשיח שיהיו אחר במשאבי הפריסה שלנו או בקוד המקור שלנו. המניפסט שבו אנו שומרים את המידע הזה חיוני על היישום. זה כולל את שם החבילה. זה חייב להיות מזהה ייחודי. שלא כמו ב-App Store עבור iOS את השמות של היישומים לא צריך להיות ייחודיים, ולמעשה אתה יכול לשנות את שמו של היישום שלך לאחר שתשלח אותו, כך שאם אני מתחיל עם ציפורים כועסת, ולאחר מכן אני עושה את עדכון, ואני לא רוצה לשחרר את גרסה חדשה אני מניח שאפשר לקרוא לזה 2 ציפורים כועסת בזמן שאני על אותו מחזור השחרור. זה פשוט היה מופיע כעדכון. הדבר היחיד שיש לו להיות ייחודיים הוא שם חבילה זו, שלא הרבה אנשים יראו. ובכן, היית רואה רק אם אתה מסתכל על קוד המקור או אם יש איזו שגיאה. הרכיבים כוללים פעילויות, ולכן אנחנו חייבים להכריז כל סוג של פעילות שאנו משתמשים. זוהי מעין רשותו של דבר. בגלל אנדרואיד אין תהליך יישום קפדני זה להגשת אפליקציות במקום שהם פשוט מבוססים כל מה שמחוץ להרשאות ושהכריז דברים במניפסט. גרסת SDK היא גם חשובה. אנו יכולים להגדיר שימוש כSDK משהו גרסה מינימאלית. ברור, אתה רוצה ליצור קוד ועיצוב למערכות ההפעלה החדשות יותר. אולי לא הכי חדש, אולי לא ג'לי בין. אולי אתה רוצה לעצב בעיקר לגלידה סנדוויץ, למרות שהם די דומים במונחים של החלטות עיצוב ואת הספריות וממשקי תכנות יישומים בפועל. אבל במקום שיש לי אנשים של אנדרואיד הגרסה המקורית כמו סופגנייה, כאשר בדרך חזרה, שעדיין יקרה לך להיות באמצעות שמנסה להוריד את היישום שלך, ואז אומרים זה לא עובד על הטלפון שלי אתה יכול להגדיר את הגרסה מינימאלית ויש לו להיות כריך קרם Gingerbread או קרח או מה שאתה מרגיש בנוח הגשת. וזו היא דוגמה למניפסט. אנחנו יכולים להסתכל על עצמו באחד קצת. אוקיי, אנחנו פשוט נלך קדימה עם ההדגמה עכשיו. זוהי ההדגמה אם גוגל אנדרואיד לבנות האפליקציה הראשונה שלך או משהו כזה. נלך דרך כל מה שקורה שם, ואני מצטער, רק בשביל שהתייחסות כאן יודעת ג'אווה במידה כלשהי? אוקיי, אז ג'אווה היא שפת קידוד חדשה עבור רוב האנשים שיוצאים מCS50. בקצרה, ללכת שוב מה שהוא אומר כאן, מה שאנחנו רוצים לעשות הוא לא להתאים את יישום שלום העולם הזה שכל שהיא עושה זה משיק וזה אומר שלום עולם וזה אומר שלום CS50 בראש כי זה שם הפעילות אנחנו הולכים לנסות להפוך את שדה טקסט וכפתור כך שכאשר אנו לוחצים על כפתור זה ייקח את הטקסט משדה הטקסט ולהשיק פעילות חדשה, ואת זה יגיד כל מה שאמר בטקסט את הפעילות, ואת זה הוא פשוט יחסית. זה לא מאוד מעניין. לא היית רוצה לשחרר את כל אפליקציה כזאת. אבל זה מוכיח כמה דברים חשובים לעיצוב. אנחנו נצטרך לקיים אינטראקציה עם המניפסט, עם קבצי הפריסה, עם קוד המקור, ואתה יכול לראות איך להשיק פעילות אחד למשנו. נתחיל עם הפריסה לפעילות הראשונה שלנו, שאני יודע שזה סוג של קטן, אבל כפי שאתה יכול לראות עכשיו, כל מה שזה הוא יש לו את הלוגו שלנו שיצרנו, שם הפעילות, וזה אומר שלום עולם במרכז. במקום זאת, אני ראשון הולך לעשות את זה בפריסה ליניארית, פריסה היחסית, וכל אלה הם הדברים אתה יכול להסתכל למעלה ושווה הולך על בנקודה מסוימת במונחים של הפריסות. זה הרבה כמו HTML. אנחנו אמרו שהוא לא באמת שווה את הידיעה במונחים של תחושת פרוגרמטי, אבל יש פריסות שונות כל כך הרבה שאתה יכול לשלוט, וזה בדיוק כמו CSS במונחים של סגנונות. יש הרבה קורה רק במונחים של האסתטיקה כאן, וכן, זה שווה את הלמידה, אבל זה מסוג הדברים שאתה צריך להסתכל למעלה כמו שאתה הולך ואתה מרגיש שאתה צריך משהו חדש. אני יכול לנצל את היתרון של כמה מהכלים ADT כאן לפחות כדי להתחיל עם. אני אעשה את שדה טקסט, ואני אעשה את כפתור. שים זכותם אחד ליד שני. הם כבר לשנות את הגודל כראוי. מצטער, שוב, חוזר אל את ההבדל בין הפריסה ליניארית ופריסה היחסית, פריסה ליניארית נותנת קצת יותר פונקציונליות במונחים של מילוי החלל ולוודא אנחנו בעמדת דברים אופקי או אנכי. ההבדל הגדול בין פריסה ליניארית ופריסה היחסית הוא פריסת עמדות הכול היחסי ביחס לדעות אחרות, והדבר טוב על זה הוא שזה לוקח פחות זמן לצייר מכיוון שמערכת ההפעלה מסתכלת על כל הקוד ואומרת זה הולך יחסית לזה כאן, כאן. זה אומר שהוא עושה פחות מדידות מחבורה שלמה של פריסות ליניארי מקוננות, שהייתי צריך לעשות אם אני רוצה ללכת דברים אנכי כאן. כבר יש לי כמה דברים הולכים בצורה אופקית, ולכן הייתי זקוק לפריסה שונה ליניארי אל קינם במאונך, אבל אם אני היה עושה את פריסה היחסית שיכולתי לומר לשמור את זה בצד השמאל, זה לימין ואת הדברים האלה בהמשך. אבל בגלל שאני רוצה שהם ממלאים עכשיו אני הולך להשתמש בפריסה ליניארית, ואתה יכול לראות את זה כבר עושה הרבה הדברים האלה בשבילנו. כל התצוגות צריכים רכוש של רוחב וגובה, וזה קורה לי במשקל של 1, ואת זה יש לו משקל של 1 כך שהוא ממלא את כל החלל. אבל את הרוחב והגובה הם חשובים ביותר. שדה מזהה כאן זה לא חשוב בפריסה בפועל אלא אם כן אנו משתמשים בפריסה יחסית ואומרים שאנחנו יכולים התייחסות עמדת תצוגה אחת בהתייחסות למשנו. אם היה לנו פריסה היחסית נוכל לומר עמדה זו מתחת זו אחת או מעל מספר זה, אך זיהוי זה יהיה חשוב כאשר אנו משתמשים בו בקוד שלנו, כי אנחנו יכולים התייחסות צפיות בודדות אלה בדרך זו. ואז אתה יכול לראות requestFocus התג, וזה משהו שאתה בוודאי ראית בpset 7. היה תג פוקוס אוטומטי או משהו לאורך שורות אלה לאחד מהשדות. ועוד דבר אחד, כמובן, שאנחנו יכולים לעשות בדיוק כמו ב-HTML, ושימו לב אחד הדברים היפים בADT הוא שזה autocompletes כאן. אולי לא כמו יפה כפי שעשה בXcode, אבל היא עושה בכל זאת, ונוכל לומר רמז ולאחר מכן לתת לו איזשהו החוט רוצים לכתוב הודעה, ואם אני נותן לו לרגע, גם שם לב שאני מקבל שגיאה קטנה פה אומר שאנחנו צריכים להשתמש במשאב מחרוזת לזה, כך שאם אני נותן לו לעשות חלק מעבודתי קשה אני יכול לבחור במחרוזת זו, לעשות refractor אנדרואיד ומחרוזת אנדרואיד תמצית. אני יכול לתת לו את השם הזה, לכתוב הודעה, ומה שהוא עשה עכשיו זה שהחליף את המחרוזת בקידוד קשיח עם התייחסות למחרוזת בקובץ של המחרוזת. XML, מה שאומר שעכשיו זה כאן. ואני יודע שזה נראה טריוויאלי עבודה נוספת וכמו קטנה, בשלב זה, אבל כאשר יש לך חבורה שלמה של דברים, כל חבורה של מחרוזות, זה באמת חשוב, ובמיוחד ללוקליזציה כי כמו שציינתי קודם לכן, אנדרואיד היא מערכת הפעלה המשמשת ברחבי העולם מאוד שאתה יכול פשוט לעשות ערכים-en-SP או ערכים או משהו לשפות אנגליות או ספרדית או אחרות. ואז אתה כנראה לא היה לי את החוויה הזאת עדיין מכיוון שאנו לא עשינו הרבה JavaScript במונחים של תכנות אינטרנט, אבל אנחנו גם יכולים לעשות את התחום הזה שנקרא onClick לכפתור, וזו דרך של התייחסות בתוך הפריסה שלנו אנחנו רוצים שפונקציה מסוימת להיקרא בקוד המקור שלנו. אני הולך להתקשר sendMessage זה, וכדי לעשות את העבודה הזאת, כי פירושו בפעילות העיקרית כאן אני צריך ליצור פונקציה שהיא הציבור כך שניתן לגשת אליו על ידי הפריסה. זה מבוטל, כי אתה פשוט לא רוצה שזה יחזור כל דבר. אנחנו קוראים לזה sendMessage, וזה לוקח נוף, שהוא סוג של הקשר שאנחנו יכולים לעגן בשיטה זו כדי שתצוגת יחיד כאשר אנחנו מפעילים אותו. ואני לא יודע אם שמת לב היטב, לא היית שם לב, אבל בשלב הזה כאן השקפה זו היא סוג שעדיין לא נכלל, וכמובן, כל מה שאתה יודע מCS50 על לא כולל סוגים. הדבר הנחמד כמו Eclipse IDE שלו כי אם תשכחו לכלול סוג זה יהיה קו תחתון עם קצת אדום משורבט ולאחר מכן לתת לך את האפשרות לייבא את התצוגה. דרך מהירה לעשות זאת היא שינוי השליטה O, וזה יהיה לייבא את כל הקבצים שהוא צריך כדי. עכשיו שיש לנו sendMessage פונקציה זו, שהוא הולך לשלוח מסר מMainActivity לפעילות חדשה, אנחנו הולכים צריכים להשתמש בכוונה להשיק את הפעילות החדשה מזה, אז אנחנו בטח רוצים ליצור קבועים גלובלי או גם ובמיוחד מתמיד ציבור שיעזרו לנו לדעת איך אנחנו הולכים להפנות את המחרוזת משום שכאשר אנחנו יוצרים כוונה אנחנו לא רק קוראים פעילות חדשה, אבל אנחנו גם יכולים לתת לו חבילה של מידע. צרור הוא למעשה המונח שמשתמש באנדרואיד, וזה אומר שדרך של לתת לו נתונים נוספים, שזה לא יכול להיות מסוג נתונים מתוחכם מאוד, אבל אנחנו בהחלט יכולים לכלול booleans או מחרוזות או ints. דברים מהסוג הזה. אל תהסס לשאול על כל מוקדמות האלה כאן, ציבור, סופי, סטטי. הציבור הוא אחד החשוב. זה אומר שאנחנו יכולים לגשת למשתנה זה מקוד מקור קבצים אחרים למשל, כאשר אנו יוצרים פעילות חדשה. אנחנו יכולים להפנות את המחרוזת בתוך קובץ זה. אם זה פרטי, זה אומר שזה מוגבל לקובץ בודד זה כאן. אבל אנחנו קוראים לזה משהו כמו הודעה נוספת. עכשיו יש לנו עשינו את התפקיד הזה, ואם אנחנו לחצו על הכפתור, פונקציה זו תיקרא. אבל אנחנו לא עשינו שום דבר, כמובן, עם הפונקציה. מה שאנחנו רוצים לעשות עכשיו הוא ליצור פעילות חדשה, הפעילות שתושק בפועל. בליקוי החם שאנחנו יכולים לומר פעילות חדשה, אנדרואיד, פעילות ריקה. אנחנו יכולים לתת לו שם. בואו נקראים לזה פעילות התוצאה שלנו. ולאחר מכן ההורה ההיררכי תחום הזה הוא דרך של ציון אופן שבו הפעילויות קשורות זה לזה. כי זה אחד שיושק מהפעילות האחרת אנחנו צריכים לציין שיש לו את הפעילות העיקרית של ההורה. והייתי יכול ללחוץ על השדה הבא שם, מה שהיה אומר לנו כמה שדות אופציונליים שהוא כולל גם, אבל דבר נחמד על ADT, שוב, הוא שאם אני לגלול למטה כאן במניפסט לזכור שכל זה באמת היה כלול כברירת מחדל כשיצרנו את הפרויקט במקור, ועכשיו בגלל שאנחנו השתמשנו בזה ליצור פעילות חדשה ולא רק הוספת קובץ המחלקה שלנו כי אנחנו עברנו GUI עושים את זה זה כבר הוסיף את כל זה כדי להגשים עבורנו, שרק אומר שעכשיו מערכת ההפעלה לא תתלונן כאשר אנו מנסים להשיק את הפעילות הזו. וזה גם, כמובן, נתן לו תווית, שגם מופיעה במחרוזות. הוא עושה הרבה דברים על גב הסוף עבורנו. בכל אופן, עכשיו יש לנו פעילות שהתוצאה זו, כמו גם, קובץ קוד המקור הממשי בתיקיית המקור, ואתה יכול לראות, לגעת בקצרה על זה, בגלל שאנחנו סיפר לה על הורה היררכי זה זה נתן לי android.r.ide.home תחום זה בדבר נבחר onOption זה. מה זה בעצם אומר זה שיש עכשיו כפתור תפריט כי בפינה השמאלית העליונה של המסך אם אני חוזר לPowerPoint שבו דיברנו לראשונה על הבר פעולה בגלל ההורה ההיררכי עכשיו יש חץ קטן נחזור לכאן וזה לחיץ ולכן אנחנו צריכים להיות מסוגלים-אחרי שלמעשה להפעיל את זה App- לחזור לשם, וזו דרך שלנו לחסוך קצת קוד שם. עכשיו בתוך זה היטב, נראה שמתלונן על זה לרגע. בואו להגיב את זה. עכשיו, כדי באמת לקיים אינטראקציה עם 2 פעילויות אלה, אנחנו צריכים ליצור כוונה הכוללת את כל הנתונים הללו. בsendMessage עכשיו אני הולך להפלגה דרך כמה פיסות של קוד ומסביר כי כמו שאני הולך. כוונה, כמו שאמרתי, היא דרך להשקת פעילות אחד למשנו. כוונה היא לסוג. אנו יוצרים myIntent משתנה. ואת זה הוא למעשה אובייקט, וזו הסיבה שיש לנו לשיחה חדשה. זה שימוש בג'אווה נפוצה שם, אשר עשוי לקחת קצת זמן להתרגל אליו. זה אומר שאנחנו משתמשים בפעילות או MainActivity הכיתה, והכוונה שבדרך לוקחת פעילות שזה הולך מ והפעילות זה הולך, שאנו מכנים ResultActivity, וזה בכיתה שלו. כולל את זה. ואז כפי שציינתי בעבר, אנו מזהה שנתנו לשדה טקסט העריכה ותצוגת הטקסט, ולכן על מנת ללכוד תכנותי הטקסט שקיים בeditText אנו משתמשים בפונקציה זו נקראת findViewByID, וזה דומה למשהו שתוכל להשתמש כאשר מנסים להשיג משדות DOM. אולי דוד מדבר על זה בהרצאה. אבל זה רק דרך להגיע אלה-בגלל זה אנחנו לתייג את הדברים האלה בתחומים אלה. Id.editText1. זה כבר autocompleting לי שם. ואז גם זה כולל editText עכשיו שיש לנו בתחום במסגרת התכנית שלנו, כל findViewByID שעשה היה בעצם אתה יכול לחשוב על זה כעל לתת לנו התייחסות לeditText ש. עכשיו אנחנו רוצים לקבל את המחרוזת או ההודעה בתוך editText שבו אנחנו יכולים לעשות על ידי שימוש ב- אתה יכול לחשוב על editText כstruct- אנחנו קוראים לזה אובייקט ב-Java-עם חבורה שלמה של שיטות שונות או שדות ותכונות קשורים אליו. כשאני אומר editText. זה נותן לי את ההזדמנות כדי לגשת שיטה כגון gettext, שתקבל את הטקסט הנוכחי בeditText ושלאחר מכן להמיר את זה באופן מפורש למחרוזת, ויש לנו שמרתי את ההודעה. עכשיו אנחנו באמת רוצים לעשות משהו עם זה כוונתנו נוצרה לפני כמה דקות. אני אשים נוספת כפי שהוא נקרא בכוונה, אשר, שוב, כמו שאמרתי קודם, זו דרך של יצירת החבילה עם חבורה שלמה של נתונים. הודעה נוספת היא התג שלנו ולכן אנחנו יודעים מה אנחנו חוסכים את זה מתחת, ואז אני כולל את ההודעה. ואז אנחנו באמת יכולים להתחיל את פעילותו על ידי מתן myIntent הפרמטר. וזה בעצם ישיק את הפעילות, אז עכשיו מאז ששודרגתי ל-Windows 8 ייתכן שיש כמה טעויות כי להופיע לזמן קצר, אבל תנסה להתעלם מהם. ואת זה הוא אמולטור אנדרואיד. יש לקוות שקוד בעצם יצוץ ברגע. שוב, תוך התעלמות מכל הדברים קטנים האלה. אבל אמולטור אנדרואיד אתה יכול לחקות כל גרסה של מערכת ההפעלה מהמוקדמים אלה, סופגנייה, Gingerbread. זה ג'לי בין 4.1. אבל כפי שאתה יכול לראות עכשיו, זה משהו שעשינו. יש לזה MainActivity, editText, כפתור. אני יכול להקליד כאן משהו, אבל מה שחסרנו לנו בשלב זה? אנחנו עשינו את השדה בMainActivity שהולך לשלוח את ההודעה לפעילות האחרת, אבל בשלב זה לא עשיתי שום דבר בפעילות האחרת, ולכן זה לא הולך לקבל שום דבר. בואו נסיים את החלק שלפני שאנחנו עוברים. פעילות תוצאה זו, מה שנצטרך לעשות היא שאנחנו נצטרך לעשות היא שאנחנו נצטרך- אנחנו יכולים גם להפנות את הכוונה במסגרת פעילות זו, ולכן אנחנו חייבים לתפוס את הכוונה, וזה באמת פשוט. זה פונקציה שנכללה בכיתת הפעילות, ולכן אנחנו יכולים פשוט לומר "קבלו את ההודעה מהכוונה". "MyIntent הכוונה = getIntent". וזה ייתן לנו עכשיו-myIntent הוא אובייקט, אשר היא התייחסות לכוונה שהובילה אותנו לפעילות זו. MainActivity קורא ונותן מידע נוסף כדי לגרום לפעילות. פעילות תוצאה נראית כעת בכוונה שהובילה אותו לכאן, ואנחנו יכולים לגשת להודעה שיצרנו בשנייה אחת, getStringExtra, וזה יהיה השלמה אוטומטית עבורי. ואז לזכור, שהדרך בה אנו מתויגים קצת נתונים היה על ידי מתן אותו תחום זה ממש כאן, מחרוזת ציבור זה, המהווה את התג עבור המחרוזת שאנחנו באמת כלולות. אם אני אומר MainActivity.Extra_Message זה ממש שם, וזה קצת כמו שם הפרמטר כשעברנו את קוד מהבקר לתבנית, כאשר היינו אומרים משהו חץ תואר. זה אותו הסוג של רעיון לשם. עכשיו, זוכר את זה. אנחנו גם יצרנו זה אוטומטי או אוטומטי שנוצר קוד לפעילות תוצאה מכך, הכולל את תצוגת הטקסט באמצע שאומר שלום עולם. אנו עלולים להפוך את זה גדול יותר. בואו נעשה את זה ראשון. אנחנו יכולים לעשות את זה 40 פיקסלים עצמאיים צפיפות. בואו נראה, זה סופר ענק. שיהיה בסדר. ולאחר מכן על מנת להפנות תצוגת טקסט הפרט הזה בקוד שלנו אנחנו נצטרך לתת לו תעודת זהות, וכדי לעשות את זה אנחנו אומרים @ + תעודת זהות, מה שאומר שאנחנו להקצות לו תעודת זהות. אם אנחנו רק אמרו @ id זה הייתי מניח שאנחנו התייחסות מזהה שכבר קיים, ובואו נקראים לresultTextView זה. ושים לב, כי בXML אין צורך בפסיק או כל דבר. כל מה שהוא בתוך תגים אלה. זה דומה מאוד ל-HTML בהרבה מובנים. זה לוקח קצת זמן להתרגל אליו, אבל סופו של דבר אתה מרגיש די נוח עם זה. בואו לעדכן את הטקסט לתצוגת טקסט התוצאה שלנו, וכפי שעשינו בעת שאנחנו מקבלים שדה טקסט העריכה בפעילות האחרת שלנו בMainActivity כאן אנו גם כמו כן, אנחנו תמצאו את התצוגה על ידי תעודת הזהות. ו-R, במקרה לא הזכיר את זה בעבר, הוא ההתייחסות לתיקיית המשאבים שלנו, ולאחר מכן מזהה הוא התייחסות לכל דבר בתיקיית המשאבים, כל תעודות הזהות, וresultTextView. ובדיוק כמו בעבר, resultTextView הוא אובייקט, מה שאומר שיש לו את כל מאפיינים אלה הקשורים אליו. כאשר אנו משתמשים בgettext לעריכת הטקסט לשדה הטקסט או בתצוגת הטקסט אנחנו יכולים להשתמש בפועל setText, ואז אנחנו כבר מצאנו את ההודעה מהכוונה, אז אני יכול לומר הודעה, וזה יהיה ממש להגדיר את ההודעה. זה לקחת רגע לשיגור, ואז נוכל לראות אם הוא מתרסק, אבל שאלות על תהליך שממש שם, זה סוג של אינטראקציה? במובנים רבים, זה ברור. הסיבה שאני עובר משהו פשוט יחסית הוא, שוב, בגלל שאתה מקבל כדי לראות את האינטראקציה בין הפריסה, את קוד המקור, איך אתה התייחסות לדברים ואולי לקבל קצת חשיפה לאיך ג'אווה עובדת שם. אם למעשה אני מקליד משהו בפה, כמו ohai, ולאחר מכן אני לוחץ על הכפתור, היא משיקה פעילות חדשה, ותצוגת הטקסט שאומרת ohai. זה מאוד פשוט, אבל אני מקווה שאחרי דוגמה אתה סוג של אינטראקציה לראות איך זה עובד, ועכשיו שבלגן של קבצים בצד השמאל לכל תיקיות הפרויקטים האלה, אני מקווה שאתה יודע איפה לחפש עכשיו. זה תחום קוד המקור שלך. פריסה היא באמת הדבר היחיד שתוכל להתמודד עם עד שכולל תמונות וdrawables או משהו כזה, והערכים, שיכלול מחרוזות, כפי שהזכרנו, ולאחר מכן סגנונות הוא משהו שהוא בערך כמו ה-CSS. לטפל בו מתי שאתה רוצה, אבל עד שאתה מרגיש בנוח עם הוספת כשרון נוסף ליישום שלך אין צורך לדאוג בקשר לזה יותר מדי. רק כדי לסיים את דבר אחד אתה בהחלט רוצה לכלול- בהנחה שאתה רוצה לשלב תכונות מגניבים ויחסוך לעצמך כמה נוסף קידוד יהיה לכלול ספריות צד 3. הנה בחור אנדרואיד הקטן עם הכובע שרלוק הולמס. זוהי פעולה שרלוק בר ספרייה, אשר בעצם אומר שבר הפעולה שראית קודם לכן, הנמצא כעת סטנדרטי בסנדוויץ' גלידה וג'לי בין, אם אתה רוצה להביא את זה סוג של חווית משתמש למשתמשים בגירסאות ישנות יותר ולהציל את עצמך מלדאוג איך המשתמש הוא הולך לניווט בגירסאות ישנות יותר, כאשר דבר שהוא לא שם אתה יכול לכלול ספרייה זו ואז אתה רק צריך הפניה ולא ברירת המחדל של אנדרואיד ספריות עבור בר הפעולה, ספריית עיון תמיכה זו. דברים כמו Scoreloop, זה נהדר אם אתה הולך לכולל משחק. זה מאפשר לך להוסיף לוחות מנהיג והישגים למשחקים. AdMob הוא דרך של לשים מודעות לתוך היישומים שלך במקרה שאתה רוצה לעשות קצת כסף משלו. כמובן, יש פייסבוק וטוויטר לשילוב יש אם ברצונך לשתף את הדברים בקלות, וכולי. Dropbox, כמו כן, ו-Google Analytics הוא שהתרשים מחפש אחד שם. זה יהיה חשוב מאוד אם אתה באמת רוצה לראות מי אינטראקציה עם האפליקציה שלך, או מי הוא, כיצד הם פועלים, וכולי. גוגל, כברירת מחדל, אומרת לך הרבה נתונים סטטיסטיים על מי שהתקין את האפליקציה שלך ומה יש להם טלפונים, אילו גירסאות של מערכת הפעלה יש להם. אבל אם אתה רוצה לראות שהוא משתמש בו על בסיס יומי וכיצד הם משתמשים בו אז אתה רוצה לכלול סוג כלשהו של מערכת מעקב כזה. כאשר אתה מוכן להפצת האפליקציה שלך אני לא צריך להיכנס לזה יותר מדי עומק. לחץ על הקישור כאן, שחק גוגל. זה היה אמור להיות בשוק אנדרואיד. הם rebranded הכל עם Google Play, אז עכשיו שאתה שולח לזה. זה מאוד פשוט. אתה חייב לכלול תיאור, כמה צילומי מסך. כמו שאמרתי, אין שום תהליך אישור כמו iOS. ולאן ללכת מכאן? הראיתי לך דוגמה פשוטה מאוד. אני מקווה שאם זה נראה נורא פשוט אז זה כנראה סימן טוב. אם אתה בכלל הרגיש קצת מבולבל או לא בטוח בדיוק מה שאני מקליד זה גם בסדר, אבל מכאן וללכת לגוגל מדריכים. זהו מקום מצוין להתחיל. זה ידבר אותך דרך מה שהם מצפים במונחים של עיצוב היישום, אופן שבו בדרך כלל המשתמשים לקיים אינטראקציה עם אותו. זה הרבה יותר בצורה החופשית יותר מאשר iOS, הייתי אומר, נראה שזה כמו נופי שולחנם, אני לא יודעים, זה הלחם והחמאה שלהם. כל מה שהוא תצוגת טבלה הזזה מעלה ומטה. עם אנדרואיד הם בהחלט לעודד אנשים להסתכל על זה מ חבורה שלמה של נקודות מבט שונות. כאשר אתה כולל את ערכת פיתוח התוכנה בADT זה כברירת מחדל יש לך חבורה שלמה של פרויקטים לדוגמה באנדרואיד. ממש כאן, אנדרואיד, לדוגמא פרויקט אנדרואיד. אם אני לוחץ על זה, אז אני יכול לבחור עבורו גרסה של מדגם פרויקטים ליישם. יש חבורה שלמה של דברים שונים כאן. זה מתחיל עם תאימות בר פעולה, מחזה תאוצה, גיבוי ושחזור, Bluetooth, בונה מחווה. JetBoy הוא משחק מדגם הם נותנים לך, כפי שהוא LunarLander. יש חבורה שלמה של יישומים לדוגמה כאן, ומיקוד שלהן בכל היבטים של ה-API של אנדרואיד שונים, והרעיון הוא שכפי שאתה עושה את הבקשה שלך אתה לא צריך ללמוד הכל על אנדרואיד כדי להפוך את היישום ל-Android. אתה רק צריך ללמוד על החלקים שאתה באמת הולך להשתמש בו. תראה לדוגמה אלה ספריות. תרגיש חופשי להעתיק ולהדביק את הקוד והחל אותו מחדש. זה דבר גדול להסתכל על קוד קשה יותר ולנסות להבין אותו, וזה כמובן במה CS50 לעתים קרובות אנו נותנים לך כמויות גדולות של קוד מקור. תראה כמה מאלה, אם אתה הולך להשתמש בספריות דומות ולאחר מכן להחיל אותו על הקוד שלך. וכמובן, יש הדרכות. לחפש את הדרכות. מצאתי הרבה דברים טובים באינטרנט שיכול להביא לך עד מהירות עם מה שברים הם באמת ואיך אתה יכול להשתמש בם. חלק מאותם הדברים עיצוב החדשים, כמו שברים, באמת אין לך מה להיות מודאג, אלא אם אתה עושה די גדול ובהיקף פרויקט. הם דברים שגוגל מנסה לשלב פנימה Stackoverflow הוא כמובן חבר שלך. אני מקווה שאני מכרתי לך קצת על אנדרואיד, הבין שזה הרבה יותר קל להתקרב במונחים של רק שפת הקידוד. ג'אווה היא הייתי אומר שהרבה יותר קל להבין מאשר Objective-C. אנדרואיד גדל אני חושב שהרבה יותר מאשר iOS. אני מתכוון, הנתונים הוא גם שם, מלבד מה שאני חושב. זה הולך להיות בסביבה במשך זמן מה, והם כמה שנים מאחור במונחים של מחזורי התכנון שלהם, כך שזה סוג של מובן שהם עדיין עובדים על חלק מאלה שאלות עקביות, כמו בר פעולה זה דבר חדש עבורם עדיין, סוג של יצירת חוויית משתמש דומה בכל האפליקציות שלהם. אני מקווה שאתה יכול ללכת קדימה עכשיו ולפתוח אקליפס ולהפוך את יישומי אנדרואיד משלך. למישהו יש שאלות לפני שעוטפים את כל דבר? אני יכול להגיד לך שהתשובה היא 42. ובכן, שמח קידוד כולם, ומזל טוב. [CS50.TV]