שו"ב על גבי אנדרואיד

‫שו"ב על גבי אנדרואיד‬
‫‪A True Story‬‬
‫אפקה – מי אנחנו?‬
‫מכללה אקדמית להנדסה בתל אביב – הוקמה ‪1996‬‬
‫‪ 2200‬סטודנטים‬
‫‪ 5‬מחלקות תואר ראשון – תוכנה‪ ,‬חשמל‪ ,‬מכונות‪ ,‬תעשיה וניהול‪,‬‬
‫ורפואית‬
‫‪ 2‬מסלולים לתואר שני – מערכות‪ ,‬אנרגיה (עוד בדרך‪)...‬‬
‫אפקה – מי אנחנו?‬
‫‪ - ACMiX‬מרכז פיתוח ויעוץ לתעשיה לחוויית משתמש חכמה‬
‫במערכות ניידות ‪ -‬הוקם ‪ – 2012‬ערן אהרונסון וד"ר טליה‬
‫פורת‬
‫מסלול לתואר ראשון בהנדסת תוכנה עם התמחות במערכות‬
‫ניידות – ‪ – 2012‬ערן אהרונסון‬
‫יחיד מסוגו בארץ‬
‫אולי בעולם‪...‬‬
‫צעדים ראשונים‬
‫הצעת פרויקט – מר‪ .‬אורי ברקן ‪ -‬אלישרא‬
‫שו"ב על גבי אנדרואיד‬
‫(קוד פתוח)‬
‫צעדים ראשונים‬
‫הצעת פרויקט – מר‪ .‬אורי ברקן ‪ -‬אלישרא‬
‫שו"ב‬
‫אנדרואיד‬
‫מערכת הפעלה ניידת‬
‫מבוססת לינוקס‬
‫‪JAVA‬‬
‫‪SDK‬‬
‫‪Activity‬‬
‫‪Emulator‬‬
‫‪...‬‬
‫‪......‬‬
‫צעדים ראשונים‬
‫הצעת פרויקט – מר‪ .‬אורי ברקן ‪ -‬אלישרא‬
‫שו"ב‬
‫?‬
‫אנדרואיד‬
‫מערכת הפעלה ניידת‬
‫מבוססת לינוקס‬
‫‪JAVA‬‬
‫‪SDK‬‬
‫‪Activity‬‬
‫‪Emulator‬‬
‫‪...‬‬
‫‪......‬‬
‫צעדים ראשונים‬
‫זה מה יש ועם זה ננצח!‬
‫תקציב – ‪ + ₪ 0‬טאבלט ( ‪)~ ₪ 1200‬‬
‫צוות פיתוח ‪-‬‬
‫סטודנט שנה שלישית להנדסת תוכנה – שגיא מסר‬
‫~‪ 1‬שנה‬
‫ניסיון ב ‪– JAVA‬‬
‫ניסיון ב ‪ 1~ – Android‬חודש‬
‫מנחה – ערן אהרונסון ‪ -‬רקע עשיר (תעשיה) במערכות ניידות‬
‫לו"ז ‪-‬‬
‫התחלה‪:‬‬
‫סיום‪:‬‬
‫‪1.3.2012‬‬
‫‪( 1.5.2013‬אתמול)‬
‫זמן מוקצב של צוות פיתוח ‪ -‬שליש משרה‬
‫בעיקר בשעות עבודה קונבנציונליות (‪)1:00am – 5:00am‬‬
‫פגישת עבודה ראשונה – ‪29.3.2012‬‬
‫דרישות – או "מה זה בעצם שו"ב‪"...‬‬
‫מערכת שליטה ובקרה מבוססת קוד פתוח או אמצעים חינמיים‬
‫הצגת מטרות אויב ועמית על מפה (תצ"א)‪.‬‬
‫דיווחים על מטרות מגיעות מחיישנים הפרושים בשטח‪.‬‬
‫חיישנים מדווחים כל אינטרוול זמן מסוים על מצבם ועל מטרות בטווח‬
‫הגילוי שלהם‪.‬‬
‫תצוגת‬
‫דיווחים ע"ג‬
‫טאבלט‬
‫דיווח על‬
‫מטרות ומצב‬
‫החיישן‬
‫גילוי מטרה‬
‫ע"י חיישן‬
‫דרישות – או "מה זה בעצם שו"ב‪"...‬‬
‫מערכת שליטה ובקרה מבוססת קוד פתוח או אמצעים חינמיים‬
‫על מפה‪:‬‬
‫מטרות אויב ועמית‬
‫מיקום‬
‫סוג‬
‫מסלול‬
‫כיוון תנועה‬
‫סטיית חיישן (אליפסה ‪ /‬כוון)‬
‫חיישנים‬
‫מיקום‬
‫טווח גילוי‬
‫מצב החיישן (‪)online, offline, cal‬‬
‫דרישות – או "מה זה בעצם שו"ב‪"...‬‬
‫מערכת שליטה ובקרה מבוססת קוד פתוח או אמצעים חינמיים‬
‫תצוגה אלפאנומרית‪:‬‬
‫מטרות אויב ועמית‬
‫מיקום‬
‫סוג‬
‫זמן איתור ראשון‪ ,‬זמן איתור אחרון‬
‫חיישן מזהה‬
‫דיווחים אחרונים‬
‫חיישנים‬
‫מיקום‬
‫שם‬
‫סוג ‪ ,‬סוג תוצר (אליפסה ‪ /‬כוון)‬
‫סטטוס‬
‫זמן דיווח אחרון‬
‫רשימת מטרות‬
‫דרישות – או "מה זה בעצם שו"ב‪"...‬‬
‫מערכת שליטה ובקרה מבוססת קוד פתוח או אמצעים חינמיים‬
‫תכונות נוספות‬
‫קבלת תמונת מצב עדכנית בעת החיבור‬
‫אפשרות למחיקה טוטלית של כל המידע בטאבלט‬
‫הגדרת גבול גזרה – מלבני – סינון מידע לפי גבול גזרה‬
‫סינון תצוגות על המפה‬
‫ועוד‪...‬‬
‫דרישות – או "מה זה בעצם שו"ב‪"...‬‬
‫מערכת שליטה ובקרה מבוססת קוד פתוח או אמצעים חינמיים‬
‫המערכת תרוץ על טאבלט – ‪Samsung Galaxy Tab 10.1‬‬
‫‪Android HoneyComb 3.0 +‬‬
‫ממשק משתמש "עתידני" מוכוון מגע‬
‫חוויית משתמש חדשנית ופשוטה – אפליקציה ביטחונית עם חווית‬
‫משתמש של אפליקציה אזרחית‬
‫המערכת תהיה בלמ"ס‬
‫דרישות – או "מה זה בעצם שו"ב‪"...‬‬
‫פיתוח תוכנת שרת מדמה ‪ -‬סימולטור‬
‫מבוסס קוד פתוח או אמצעים חינמיים‬
‫יאפשר יצירת סימולציות של חיישנים ומטרות‬
‫יאפשר הרצת סימולציות והעברת דיווחים‪ ,‬בזמן אמת‪ ,‬של‬
‫חיישנים מדומים‪.‬‬
‫תקשורת אלחוטית – ‪ WIFI‬ומאובטחת (‪)SSL protocol‬‬
‫ישמש פלטפורמת בדיקה‬
‫דרישות – או "מה זה בעצם שו"ב‪"...‬‬
‫עיצוב קונספט ראשוני ‪1.5.12 -‬‬
‫מפה‪ ,‬מטרות‪ ,‬חיישנים‪,‬‬
‫סטיות ומיקום הטאבלט‬
‫מצבי‬
‫חיישנים‬
‫תצוגות‬
‫אלפאנומריות‬
‫נתוני מיקום‬
‫וכיוון הטאבלט‬
‫למה?‬
‫למה לפתח מערכת כזו‪ ,‬מבוססת קוד פתוח?‬
‫עלות אפסית ‪ -‬יחסית למערכות קיימות‬
‫עלות פיתוח‬
‫עלות תחזוקה‬
‫קוד פתוח ‪ -‬שימוש בקוד ואמצעים קיימים‬
‫קיצור זמן פיתוח – ‪TTM‬‬
‫שימוש ברכיבים קיימים‬
‫התאמת המערכת לצרכים שלנו במקום להתאים את הצרכים‬
‫למערכת‬
‫קהילה ‪-‬‬
‫יצירת פרויקט קוד פתוח חדש – עידוד יצירתיות וקדמה!!‬
‫למה?‬
‫תכנון ראשוני – או "ועכשיו לבעיות‪"...‬‬
‫תצורת ‪ Client - Server‬מבוססת תקשורת ‪ WIFI‬מאובטחת‬
‫נתונים?‬
‫אנדרואיד‬
‫אפליקציית שו"ב‬
‫‪PC‬‬
‫תוכנת שרת‬
‫תכנון ראשוני – או "ועכשיו לבעיות‪"...‬‬
‫אתגרים‪:‬‬
‫הפרויקט בלמ"ס ‪ -‬לא ראינו מערכת אמיתית! – תמונות מהרשת‬
‫מראות מערכות שולחניות שעברו הסבה לניידות‪.‬‬
‫סטיילוס?! באמת?!‬
‫איך נמציא חוויית שימוש חדשה למוצר שלא נגענו בו?‬
‫חיפשנו תשובות במערכות לא אמיתיות (משחקים)‬
‫‪ , FPS‬משחקי אסטרטגיה‪.‬‬
‫תכנון ראשוני – או "ועכשיו לבעיות‪"...‬‬
‫אתגרים‪:‬‬
‫מפות מורכבות מתצלומי אויר‪ ,‬קוד פתוח או חינמי?‬
‫לא קוד פתוח ‪ ,‬אבל קרוב ‪ -‬חינמי על אנדרואיד‬
‫לא ממש בנוי למידע משתנה ‪ /‬דינאמי‬
‫איך הופכים ‪ Point of Interest‬ל ‪?Area of Interest‬‬
‫איך נכתוב שרת עם מפות? ‪ Google Maps‬מגיע בשני "טעמים"‪:‬‬
‫אנדרואיד ו ‪JavaScript‬‬
‫תכנון ראשוני – או "ועכשיו לבעיות‪"...‬‬
‫אתגרים‪:‬‬
‫איך להעביר מידע מהשרת לטאבלט?‬
‫אפשרות להתממשק למערכת אמיתית בעתיד (אולי‪)?..‬‬
‫אפשרות להתממשק למערכות אחרות – לא ידוע אילו?‬
‫פשוט לשינויים‬
‫קל ליצר ולפרסר‪.‬‬
‫?‪JSON‬‬
‫?‪Serialized Objects‬‬
‫!>‪!<XML‬‬
"...‫תכנון ראשוני – או "ועכשיו לבעיות‬
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<simulationReport reportTime="01/01/2013 00:00:05">
<SensorReport lastOnline="01/01/2013 00:00:05" onlineSince="01/01/2013 00:00:00" range="10000.0" reportTime="01/01/2013
00:00:05" sensorId="Sen5222" sensorName="" sensorProductType="ELLIPTIC" sensorStatus="ONLINE"
sensorType="OBSERVATION">
<sensorPosition latitude="32.761871730333105" longitude="35.79002380371094"/>
<TargetReport firstTimeSeen="01/01/2013 00:00:00" lastTimeSeen="01/01/2013 00:00:05" targetId="Tar4631"
targetTypeIdentifier="Tank">
<Detections>
<Detection xsi:type="ellipseDetectionReport" detectionTime="01/01/2013 00:00:05"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<center latitude="32.75044772327267" longitude="35.76931473703411"/>
<new>true</new>
<ellipticSensorDeviation halfHeight="231.6013083908268" halfWidth="154.4008722605512"
brg="236.74266480489237"/>
</Detection>
</Detections>
<mobile>true</mobile>
<new>false</new>
</TargetReport>
</SensorReport>
<SensorReport lastOnline="01/01/2013 00:00:05" onlineSince="01/01/2013 00:00:00" range="1.7976931348623157E308"
reportTime="01/01/2013 00:00:05" sensorId="BLUEFORCE" sensorName="" sensorProductType="EXACT"
sensorStatus="ONLINE" sensorType="BLUEFORCE">
<sensorPosition latitude="0.0" longitude="0.0"/>
</SensorReport>
</simulationReport>
One way data flow – ‫ארכיטקטורה‬
‫ארכיטקטורת סימולטור‬
‫ארכיטקטורת אפליקציית שו"ב‬
Google Maps
for Android
SQLite
JaxB
SSLSocket
SSLSocket
JavaFX
Android OS
‫ בשידור‬XML
‫מאובטח‬
WIFI + SSL
...‫ללכלך את הידיים‬
‫פיתוח לאנדרואיד‬
ADT(Android development Tools) Eclipse Plugin
:‫אינטגרציה מלאה וחלקה כוללת‬
‫ לתוך סביבת העבודה‬Android SDK ‫אינטגרציית כלים מ‬
‫עורכי קוד‬
‫עורכי ממשקי משתמש‬
DDMS – Dalvik Debug Monitor Server
Logcat
Thread & heap information
...‫ועוד הרבה‬
+XML
Android SDK
‫ללכלך את הידיים‪...‬‬
‫‪ 3‬קליקים ‪ ,‬ומוכנים לעבודה‬
‫‪File->New Project-> Android Project‬‬
‫היררכיית פרויקט מסודרת‬
‫ומוכנה לעבודה!‬
‫ללכלך את הידיים‪...‬‬
‫‪ 3‬קליקים ‪ ,‬ומוכנים לעבודה‬
‫‪File->New Project-> Android Project‬‬
‫היררכיית פרויקט מסודרת‬
‫ומוכנה לעבודה!‬
...‫ללכלך את הידיים‬
‫ מבנה פרויקט‬- ‫ ומוכנים לעבודה‬, ‫ קליקים‬3
‫ קוד‬- ‫קבצי סורס‬
Dependencies
Resources – Images,
sounds, Layouts
Values – strings
(locality - easy)
‫ללכלך את הידיים‪...‬‬
‫חיי אפליקציית אנדרואיד ‪ -‬או "התורה"‬
‫ללכלך את הידיים‪...‬‬
‫חיי אפליקציית אנדרואיד ‪ -‬או "התורה"‬
‫תמונת מצב עדכנית‬
‫בהתחברות הטאבלט‬
...‫ללכלך את הידיים‬
...‫ או לא‬, XML - ‫יצירת מבנה מסך‬
!‫ על החיים מקל‬XML
...‫או‬
public RelativeLayout createSimpleView(){
RelativeLayout rl = new RelativeLayout(context);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams
(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
TextView tc = new TextView(context);
tc.setLayoutParams(params);
tc.setTextAlignment(TextView.TEXT_ALIGNMENT_CENTER);
tc.setText(R.string.hello_world);
rl.addView(tc);
return rl;
}
‫ללכלך את הידיים‪...‬‬
‫דברים שלמדנו בדרך או "איך ללכלך את הידיים פחות"‬
‫‪ Logcat‬יכול להציל חיים!‬
‫;)”‪Log.e(“MyObject”,”'did a no no‬‬
‫‪Allocation Tracker‬‬
‫)שים לב ל‪(DDMS) (Heap-‬‬
‫ללכלך את הידיים‪...‬‬
‫דברים שלמדנו בדרך או "איך ללכלך את הידיים פחות"‬
‫‪Eclipse MAT (Memory Analyzer Tool) plugin‬‬
‫פרויקט קוד פתוח ‪http://www.eclipse.org/mat/‬‬
‫מאתר זליגות זיכרון‪.‬‬
‫מזכיר את האובייקט הזמני שייצרת בלולאה שעושה ‪ 1000‬איטרציות‬
‫בשניה‪...‬‬
‫ללכלך את הידיים‪...‬‬
‫דברים שלמדנו בדרך או "איך ללכלך את הידיים פחות"‬
‫מפתח מובייל אמיתי מפתח ומדבג על‬
‫המכשיר!!!‬
‫אמולטור טוב – אבל לא יותר מזה‪...‬‬
‫מובייל זה לא ‪!!!!PC‬‬
‫צריך להרגיש בידיים – להתעסק‪ ,‬לשחק‪...‬‬
‫חוויית משתמש (‪ )UX‬זה הכל!‬
‫ללכלך את הידיים‪...‬‬
‫דברים שלמדנו בדרך או "איך ללכלך את הידיים פחות"‬
‫‪Wireless‬‬
‫‪Device‬‬
‫‪Debugging‬‬
‫!!‪The Bomb‬‬
‫כן ‪,‬זה כל כך פשוט‪...‬‬
‫‪Device‬‬
‫‪Debugging‬‬
‫מפתח מובייל‬
‫אמיתי‬
‫‪Emulator‬‬
‫)‪(AVD‬‬
‫לא מומלץ‬
‫לאפליקציות‬
‫מורכבות‬
‫‪ 3‬דרכים לעשות‬
‫‪DEBUG‬‬
‫ללכלך את הידיים‪...‬‬
‫פיתוח על אנדרואיד – יתרונות‬
‫מערכת פתוחה – אפשרויות בלתי מוגבלות! (ממש)‬
‫קלות פיתוח – מי שיודע ‪ , JAVA‬יודע ‪ANDROID‬‬
‫עדכונים – עדכוני ‪ SDK‬שוטפים‬
‫אינטגרציה טובה מאוד ל ‪Eclipse‬‬
‫‪ - Eclipse‬כלי טוב!‬
‫הכל חינם!!‬
‫הרבה אוטומציה – פרויקט אנדרואיד – הכל מסודר מראש‬
‫עזרים – ‪ MAT, DDMS, ADT, LogCat‬עובדים לטובת המפתח‬
‫יצירת מסכים – ‪ XML‬פשוט מאוד! – עורכי מסכים ‪ ,‬עוד יותר!‬
‫הרבה דוגמאות וספריות עזר ‪ -‬גם רשמיים וגם לא רשמיים‬
‫ללכלך את הידיים‪...‬‬
‫פיתוח על אנדרואיד – חסרונות‬
‫ריבוי מכשירים‬
‫ריבוי מסכים – גדלים ‪ ,‬רזולוציות – יגרור בעיות ‪Layout‬‬
‫יעבוד על מכשיר אחד ‪ ,‬אולי לא יעבוד על אחר‬
‫ריבוי גרסאות תוכנה‬
‫זיכרון‬
‫במכשירים מסוימים ( ‪ Galaxy‬ראשונים) – יכול להיות אסון!‬
‫אחריות ניהול זיכרון – ‪ Garbage Collector‬זה לא תירוץ לבזבז!‬
‫‪ Heap‬מוגבל – שימוש לא זהיר בזיכרון יגרור בעיות ‪ UX‬ו ‪!Performance‬‬
‫תמיד לזכור שהאפליקציה שלנו לא לבד! – אולי תעבור לרקע‪ ,‬אולי תיהרג!‬
‫תהליכי רישום מורכבים – בעיקר המוצרים נלווים של ‪Google‬‬
‫רישום ל ‪( API‬למשל מפות)‬
‫חתימת אפליקציה‬
‫‪ – AndShobY‬שו"ב טקטי מבוסס אנדרואיד‬
‫מסקנות‪...‬‬
‫היתרונות עולים בהרבה על החסרונות!‬
‫‪ Eclipse + Android SDK + ADT plugin‬חבילה מעולה!‬
‫כוללת כל מה שצריך על מנת לפתח מערכות פשוטות וכן מורכבות!‬
‫אנדרואיד משתפר כל הזמן – בלתי ניתן לעצירה!‬
‫פיתוח על פלטפורמה בעלת קהילה גדולה – יתרון ענק!‬
‫הדבר הכי חשוב שלמדנו‪...‬‬