המפה עוזרת למצוא שיעור לפי הרעיון שרוצים ללמוד, ולא רק לפי שם הפרויקט. אם זו הפעם הראשונה שלכם באתר, התחילו באחד מחמשת מסלולי הלמידה; אם כבר יש לכם פרויקט, עברו ישירות לטבלת הנושא הדרוש.
איך קוראים את המפה?
| סימון עומק | מה תמצאו בקישור |
|---|---|
| שיעור מעשי | בנייה מודרכת של תוצר עובד, עם קוד ושלבי בדיקה. |
| העמקה | הסבר של הרעיון, השוואה או ניתוח שעוזרים להבין למה הקוד בנוי כך. |
| משלים | אזכור קצר, תרגול, שאלות חזרה או שער למצגת/קובץ נוסף. זה אינו תחליף לשיעור מלא. |
לעיתים אותו נושא מופיע בכמה פרויקטים. כדאי לבחור תחילה את הקישור ששייך לפרויקט שלכם, ואחר כך לקרוא קישור נוסף כדי לראות שימוש אחר באותו רעיון.
מעבדות נושאי Android מתחילות מפרויקט Java/XML קטן עם View Binding, וכל מעבדה מבודדת נושא בענף קוד משלה. אפשר להשתמש בהן גם כהשלמה למסלולי הפרויקטים שלמטה. בכל 26 המעבדות נוספו הסבר עקרוני של מה/איך/למה, תרשים זרימה או אחריות, Javadoc והערות שמסבירות החלטות בקוד. הקוד המשלים המקושר הוא חלק מן השיעור; אפשר לקרוא אותו ישירות גם בלי אתר שפורסם. עומק ההסבר אינו מחליף את בדיקות התוצאה או את גבולות הראיה המפורטים בכל מעבדה.
חמישה מסלולי למידה מרכזיים
TicTacMenu — ממסכים ותפריטים למשחק רשת
מפת מסלול TicTacMenu מרכזת את שלבי הפרויקט ואת נקודות הכניסה.
המסלול מתאים למי שרוצה להכיר בהדרגה ניווט, הפרדת מודל, תקשורת, התחברות ו־Firebase:
- 013 — Activities ותפריט Overflow
- 014a — יצירת תפריט מגירה מבוסס Fragments
- 014b — הוספת Fragments לתפריט
- 015a — יצירת מודל Tic-Tac-Toe
- 015b — חיבור המסך למודל
- 016 — משחק מרובה משתתפים עם SignalR
- 017 — שכפול Activity והוספתו למגירה
- 018a — יצירת מסך Login והגדרתו כ־Launcher
- 018b — הקמת Firebase, RTDB ו־Authentication
- 018c — התחברות במייל ובסיסמה
- 018d — התחברות Google ו־SHA-1
- 019a — מעבר ל־View Binding
- 019b — Binding ב־MainActivity
- 019c — Binding ב־Fragments ובתפריט
- 021a — לובי וחדרי משחק ב־RTDB
- 021b — מצב משחק והאזנה בזמן אמת ב־RTDB
CollectCircles — ציור, משחק, שמירה ועבודה ברקע
מפת מסלול CollectCircles מציגה את התחנות ואת מפות ההמשך. המסלול זמין גם ב־English edition, עם אותם פרקים וקוד.
ארבעת הפרקים הראשונים בונים משחק קצר ובוחנים את התכנון שלו:
ההמשך מחולק לשתי מפות קצרות:
Requery — מסד SQLite מקומי בארבעה תוצרים עובדים
מפת מסלול Requery מסבירה את רצף ארבעת התוצרים ואת מצב ההתחלה.
- 01 — Entity ראשון: Student מקצה לקצה
- 02 — קשר רבים־לרבים עם דירוג ושדרוג סכימה
- 03 — INNER JOIN typed ושלושה טפסי הוספה
- 04 — RecyclerView ומחיקה לפי מפתח מורכב
Hex — מלוח משושים למשחק אופליין מול מחשב
תשעת פרקי Hex מתחילים ב־Empty Views Activity עם View Binding. התלמיד בונה Canvas, מגע, חוקיות, חיפוש חיבור, משחק מקומי וחיבור מודל ערך מסופק שעובד ברקע. אימון ה־RL והמודלים המאומנים נמסרים על ידי המורה.
| נושא | עומק | שיעור |
|---|---|---|
| הפרדת אחריות וזרימת מהלך: מסך, חוקים, בוחר מהלך ומודל ערך | העמקה עם תרשימים ושאלות הבנה | מפת אחריות 02 — מנגיעה למהלך 06 — בחירת מהלך לפי ערך |
| ציור משושים, גודל לוח ממודל וגאומטריית מגע | שיעור מעשי עם בדיקות תור ואבחון חיבור המסך למשחק | 01 — לוח 02 — מהלכים בדיקת מהלכים ואבחון תקלות |
| מודל מצב וחיפוש גרפי לזיהוי ניצחון | שיעור מעשי | 02 — תורות 03 — ניצחון |
| העתקי מצב, מהלכים חוקיים וקידוד למודל ערך | שיעור מעשי ודוגמת קידוד משתי נקודות מבט | 05 — הכנת המחשב |
| Executor, פסילת תשובה ישנה ומודל ערך מסופק | שיעור מעשי עם עריכות ממוקמות לפי מתודה ובדיקות משחק | 06 — חיבור המחשב ב־MainActivity 06 — בדיקות המשחק 07 — בחירת מודל 08 — רמז למהלך |
| ערכות נושא ליום וללילה, משאבי צבע ו־Material 3 | שיעור מעשי | 09 — ערכות נושא ב־Hex |
Connect4 — ממנוע משחק מקומי למשחק רשת
מפת 13 הפרקים מתחילה ב־Empty Views Activity עם View Binding, ומתקדמת לפי תלויות למידה:
| נושא | עומק | שיעור |
|---|---|---|
| Canvas, מגע וגאומטריית לוח | שיעור מעשי | 01 — לוח |
| מנוע, snapshots, כוח כבידה, ניצחון ותיקו | שיעור מעשי | 02 — תורות 03 — תוצאות |
| ViewModel, SharedPreferences ושחזור באמצעות replay | שיעור מעשי | 04 — שמירה ושחזור |
| ממשק שחקן, heuristic, Executor וביטול תוצאה ישנה | שיעור מעשי | 05 — יוריסטיקה 06 — חישוב ברקע |
| שילוב מודל מסופק ו־fallback | שיעור מעשי באינטגרציה בלבד | 07 — חבילת המורה — MCTS, קידוד ומודלים מסופקים; אין לימוד מימושם או אימון |
| Firebase Authentication ו־Credential Manager | שיעור מעשי | 08 — דוא״ל 09 — Google |
| transactions, UID, צופים וכללים תחומים | שיעור מעשי | 10 — חדרים 11 — משחק רשת |
| Repository, זהות פעולה, ניתוק ושחזור listeners | שיעור מעשי | 12 — התאוששות |
| משאבי כיוון/לילה, insets ואנימציה | שיעור מעשי | 13 — הצגה סופית |
בדיקות JVM, Android ו־Firebase emulator מסופקות למורה ב־תיעוד האימות. נוכחותן אינה טענה שהתלמיד כותב את כל סוויטת הבדיקות; כניסת Google אינטראקטיבית ובדיקת שרת חי עדיין דורשות סביבת חשבון מתאימה.
Android Studio, מבנה הפרויקט ותהליך העבודה
Activities, Intents וניווט
| נושא | עומק | איפה לומדים |
|---|---|---|
מעבר בין Activities בעזרת Intent מפורש |
שיעור מעשי | 013 — Activities בתפריט Overflow 017 — שכפול Activity וניתוב מן המגירה |
| תפריט Overflow וקובץ menu XML | שיעור מעשי | 013 — הוספת Activities לתפריט |
Navigation Drawer, DrawerLayout ו־NavigationView |
שיעור מעשי | 014a — יצירת תפריט מגירה 014b — הוספת יעדים למגירה |
| Fragments וניווט בתוך Activity יחיד | שיעור מעשי | 014b — Fragments בתוך תפריט מגירה 15b — שלושה Fragments ו־Bottom Navigation 01 — הרחבה: יצירה מ־XML לעומת החלפה בקוד ו־Back |
onCreateView לעומת onViewCreated |
העמקה | 15b — מדריך Fragments 01 — הרחבה: יצירת binding לעומת פריסה בבנאי Fragment |
קבלת תוצאה מפעולה חיצונית עם ActivityResultLauncher |
שיעור מעשי | 15 — הרשאה, Photo Picker, מסמך ותמונת מצלמה משלים: מפגשי אנדרואיד |
מעבר מושהה עם Handler ו־Looper |
שיעור מעשי | 018a — LoginActivity לפני חיבור Authentication |
מחזור חיים, מצב ושמירה קלה
| נושא | עומק | איפה לומדים |
|---|---|---|
מחזור החיים של Activity |
שיעור מעשי | 01 — מעבדת שחזור: סיבוב, Bundle ושמירה מתמשכת 03 — עצירת עדכוני זמן ב־ onStop13 — חישוב התקדמות ב־ onStart וב־onStopמשלים: מצגת מחזור החיים |
SharedPreferences לקריאה וכתיבה |
שיעור מעשי | 03 — שמירת שיא 08 — מצב משחק מתמשך 018a — שמירת בחירת “הישאר מחובר” |
| מצב בזיכרון לעומת מצב שנשמר במכשיר | העמקה | 08 — כלכלה מתמשכת ב־CollectCircles |
שמירת מצב מסך ב־Bundle |
שיעור מעשי | 01 — שלושה מונים: שדה, Bundle ו־SharedPreferences Full English tutorial הרחבה — מי קורא לשמירה ואיך ה־Bundle מגיע ל־Activity ול־Fragment משלים: מצגת מחזור החיים |
מחזור חיי View של Fragment וניקוי binding |
שיעור מעשי | 01 — ניתוק ה־View וחזרה לאותו Fragment הרחבה — כיצד Back הופך detach ומתי המונה שורד |
| זמן מונוטוני לעומת שעון קיר | העמקה | 03 — SystemClock למדידת משחק 13 — בחירת שעון להתקדמות אופליין |
Callback פשוט באמצעות Runnable |
שיעור מעשי | 03 — הודעה מן ה־View ל־Activity על סיום משחק 08 — אירוע איסוף עיגול |
XML, רכיבי UI ו־View Binding
Canvas, מגע, גאומטריה ואנימציה
| נושא | עומק | איפה לומדים |
|---|---|---|
יצירת View מותאם אישית ו־onDraw |
שיעור מעשי | 01 — ציור עיגולים ב־Canvas |
Canvas, Paint ומערכת הצירים |
שיעור מעשי | 01 — הלוח הראשון 11 — ציור דמות Pusher |
אירועי מגע, תפיסה, גרירה ושחרור עם MotionEvent |
שיעור מעשי | 02 — מצב משחק וגרירת עיגולים |
| מרחק בין מרכזים, חפיפה והכלה של עיגולים | העמקה | 01 — שלוש בדיקות גאומטריות 02 — יצירת עיגולים חוקיים וגרירה למטרה |
לולאת ציור ו־postInvalidateOnAnimation |
שיעור מעשי | 09 — מצב משחק אוטונומי 11 — אנימציית Pusher |
הפרדת update מ־draw ותנועה לפי זמן |
העמקה | 11 — Pusher הולך — זמן, פריימים ותנועה מחזורית |
| חיישנים | משלים | מפגשי אנדרואיד — Sensors |
| קול, וידאו ואנימציות משאבים | משלים | 001 — אינדקס חומרי AppSchool |
OOP, Java וארכיטקטורה
| נושא | עומק | איפה לומדים |
|---|---|---|
| הפרדת מצב המשחק מן המסך | שיעור מעשי | 015a — יצירת TicTacToeModel 015b — חיבור המודל ל־Activity 02 — מחלקת Game ב־CollectCircles |
| ViewModel, Repository ו־LiveData ב־Java | שיעור מעשי של refactoring | 04 — מעבדת מקור אמת וזרימת מידע חד־כיוונית |
| מחלקות, בנאים, שדות, getters ומתודות | שיעור מעשי | 01 — Circle ו־Target 01 — Entity ראשון ב־Requery |
ירושה (extends) ו־super |
שיעור מעשי | 01 — Target יורש מ־Circle |
| Composition לעומת ירושה, ו־View לעומת אובייקט מודל | העמקה | 04 — מחשבה ביקורתית על עצמים, Views וירושה |
| MVC לעומת MVP | העמקה | 05 — השוואה ודוגמאות Java |
| פונקציות טהורות והפרדת חישוב מ־Android | שיעור מעשי | 13 — מחשבון התקדמות אופליין 10 — חישוב מחיר ובדיקת יחידה |
| Lambda ו־listeners ב־Java | שיעור מעשי | 015b — אירועי לוח Tic-Tac-Toe משלים: 001 — אינדקס AppSchool |
| חוזה interface, מחלקה מופשטת ו־generics | שיעור מעשי עם בדיקות JVM | 13 — שני קטלוגים, אותו חוזה |
equals/hashCode, חריגות ומחיר חיפוש ב־List/Set |
שיעור מעשי עם תוצאה נצפית | 13 — השוואת ArrayList ו־HashSet |
נתונים מקומיים: SQLite ו־Requery
| נושא | עומק | איפה לומדים |
|---|---|---|
| Entity, annotations וקוד שנוצר | שיעור מעשי | 01 — Student מקצה לקצה |
| פתיחת מסד, insert ו־select typed | שיעור מעשי | 01 — Student מקצה לקצה |
| קשר רבים־לרבים עם נתון נוסף | שיעור מעשי | 02 — Student–Watching–Movie עם rating |
| שדרוג סכימה בלי למחוק נתונים | שיעור מעשי | 02 — Migration מגרסה 1 לגרסה 2 |
INNER JOIN typed ו־Tuple |
שיעור מעשי | 03 — JOIN והוספות |
| מחיקה לפי מפתח מורכב ורענון UI | שיעור מעשי | 04 — RecyclerView ומחיקת Watching |
SQLite ישיר עם SQLiteOpenHelper ו־Cursor |
שיעור מעשי חלופי | 5 — מדריך SQLite בסיסי |
| Room, DAO, עבודה ברקע, transaction ובדיקת migration | שיעור מעשי עם שתי גרסאות מסד | 12 — Favorite שנשמר ושדרוג מ־v1 ל־v2 |
Firebase, התחברות ונתונים בזמן אמת
| נושא | עומק | איפה לומדים |
|---|---|---|
| יצירת פרויקט Firebase וחיבור אפליקציית Android | שיעור מעשי | 018b — Firebase Project + RTDB + Authentication |
google-services.json, package name ותקלות התאמה |
שיעור מעשי | 018b — בדיקות ותיקון No matching client 191 — שינוי שם פרויקט מחובר לשירות |
| Firebase Authentication במייל ובסיסמה | שיעור מעשי | 018c — Login ו־FBRef |
| Google Sign-In, OAuth, SHA-1 ו־Firebase credential | שיעור מעשי | 018d — Google OAuth Login |
| זהות ב־Authentication לעומת פרופיל משתמש ב־RTDB | העמקה השוואתית עם קוד מקור | 021a — למה Presence משתמשת ב־User וב־TicTacMenu מספיק UID? |
DatabaseReference, כתיבה וקריאה מ־RTDB |
שיעור מעשי | 021a — פרסום חדרי משחק |
ValueEventListener ועדכונים בזמן אמת |
שיעור מעשי והעמקה | 021a — רשימת חדרים חיה 021b — תרשימי זרימה בין שני מכשירים: הצטרפות, מהלך ואישור כתיבה |
| הסרת listener והתאמה למחזור החיים | שיעור מעשי | 021a — ניקוי מאזין החדרים |
| מבנה נתונים ב־RTDB והמרת אובייקט Java לעץ JSON | העמקה עם קוד השוואתי ושאלות בדיקה | 021a — GameRoom מול Presence: POJO/DTO, Map ו־JSONObject 021a — serialization ו־deserialization ותפקיד הבנאי הריק |
| בחירת היקף כתיבה, שדות חסרים ותחרות בין לקוחות | העמקה עיונית; ללא מעבדת transactions | 021a — setValue לעומת updateChildren, מחיקה, שינוי סכימה וגבולות המיפוי |
| כללי RTDB וגבול האמון | העמקה ראשונית | 021a — כללי כיתה והסיכון שבכללים פתוחים 07 — תשתית הענן של CollectCircles |
רשת, API וענן
| נושא | עומק | איפה לומדים |
|---|---|---|
| לקוח SignalR, חיבור לשרת ושליחת אירועים | שיעור מעשי | 016 — Tic-Tac-Toe מרובה משתתפים |
| זרימת הודעה בין UI, Service, שרת ולקוח אחר | העמקה | 016 — תרשים הרצף של SignalR |
| קריאת API ושליחת JSON מ־Android | שיעור מעשי | Interactions API ו־LLM ב־Java |
| Firebase Cloud Functions ופריסה | שיעור מעשי מתקדם | 07 — תשתית ענן ל־FCM |
| הפרדת סודות וערכי סביבה מן הקוד | שיעור מעשי | 06 — הגדרות מקומיות ל־FCM |
| JSON כמבנה נתונים מקומי | שיעור מעשי | 16 — מערכת שעות ב־JSON |
הרשאות, התראות ועבודה ברקע
| נושא | עומק | איפה לומדים |
|---|---|---|
| הרשאות רגילות, מסוכנות ומיוחדות | שיעור מעשי | 13 — מדריך הרשאות |
| בקשת הרשאה בזמן ריצה | שיעור מעשי | 13 — מדריך הרשאות 05 — הרשאת התראות ב־Android 13+ |
| מחיקת נתון מקומי, מדיניות backup וגבול סודות ב־APK | שיעור מעשי עם בדיקת מחיקה ושחזור | 16 — מעבדת פרטיות: Favorite, גיבוי ו־HTTPS |
| סירוב, rationale, הגדרות והמשך שימוש בלי הרשאה | שיעור מעשי עם בדיקת אמולטור | 15 — הרשאת התראות וארבעה contracts |
| צילום מלא, Photo Picker, FileProvider ו־EXIF | שיעור מעשי עם בדיקת restart | 19 — מעבדת צילום ואחסון תחום |
| מיקום מקורב/מדויק ומעבר למפה | שיעור מעשי עם בדיקת אמולטור | 20 — מעבדת מיקום והרשאות מדורגות |
| חיישן תאוצה: צירים, יחידות, סינון וקצב | שיעור מעשי עם חיישן וירטואלי | 21 — מעבדת הטיה ו־lifecycle |
| Text-to-Speech, הכתבה, audio focus ומחזור חיים | שיעור מעשי עם TTS ו־RecognizerIntent | 22 — מעבדת דיבור ומדיה |
| NFC: קריאת תג NDEF ותיקוף קלט | שיעור מעשי עם בדיקות parser; חומרה טרם אומתה | 23 — מעבדת תג תחנת כיתה |
| Compose: state, ניווט, interop ובדיקת UI | שיעור מעשי עם בדיקת אמולטור | 24 — מעבדת קטלוג Compose |
| פגינציה ידנית, cache מקומי ו־offline-first | שיעור מעשי עם בדיקת HTTP 503 | 25 — מעבדת API ו־Room כ־cache |
| SurfaceView מול ContentProvider לפי צורך | שיעור מעשי ל־SurfaceView, בחירת תכנון ל־ContentProvider | 26 — לולאת משחק ומחזור חיי Surface |
| Notification Channel ובניית התראה מקומית | שיעור מעשי | 05 — CollectCircles 5 — התראה מקומית |
| FCM, topics, data message ו־notification message | שיעור מעשי | 06 — CollectCircles 6 — התראות דרך FCM |
FirebaseMessagingService ורישום Service ב־Manifest |
שיעור מעשי | 06 — CollectCircles 6 — שירות ההודעות |
WorkManager ו־OneTimeWorkRequest |
שיעור מעשי | 14 — Worker ראשון ובדיקת זכאות |
PeriodicWorkRequest, אילוצי סוללה ועבודה ייחודית |
שיעור מעשי | 15 — עבודה מחזורית |
| תזמון מתוך JSON והעברת input ל־Worker | שיעור מעשי | 16 — מערכת שעות ב־JSON |
| תיאום כתיבה בין UI ל־Worker | שיעור מעשי מתקדם | 17 — כתיבה בטוחה מן ה־Worker |
| מסלול WorkManager קצר המתמקד בהתראה | שיעור מעשי חלופי | 15b — התראה מחזורית ו־Brag |
Thread, UI thread ו־runOnUiThread |
משלים | מפגשי אנדרואיד — Thread |
| Service, AlarmManager ו־BroadcastReceiver | משלים | מפגשי אנדרואיד עם זאב |
בדיקות, תקלות ואיכות
| נושא | עומק | איפה לומדים |
|---|---|---|
| בדיקת יחידה לפונקציית Java טהורה | שיעור מעשי | 10 — בדיקת מחיר Pusher 13 — בדיקת מחשבון אופליין |
| בדיקת UI על אמולטור ורגרסיה למחזור חיים | שיעור מעשי | 05 — בדיקה שמגלה נסיגה ב־Bundle וב־Fragment |
| אבחון שיטתי ב־Logcat, debugger ו־Inspectors | שיעור מעשי עם תקלות מכוונות | 06 — מעבדת אבחון Build, קריסה, קיפאון, Layout ורשת |
| כללי הרשאה בצד השרת ובדיקת משתמש מורשה מול תוקף | שיעור מעשי עם Firebase Emulator | 07 — כללי RTDB לפי בעלות ובדיקות שלושה משתמשים |
| HTTP, לקוח API ו־JSON למודל טיפוסי | שיעור מעשי ובדיקות שרת מקומי | 08 — מבקשת GET ל־Todo עם Retrofit |
| עבודה אסינכרונית, תוצאה ישנה וביטול | שיעור מעשי עם בדיקות UI | 09 — תחרות בין שתי בקשות ב־ViewModel |
| bound Service, AlarmManager ו־BroadcastReceiver | שיעור מעשי עם בדיקה במערכת | 14 — שעון שירות ואירוע alarm שנמסר ל־Receiver |
| Navigation Component, Back/Up ו־deep link | שיעור מעשי עם בדיקות UI | 10 — מעבר בין קטלוג לפריט ותוצאת Activity |
| RecyclerView, DiffUtil, זהות ושני סוגי שורות | שיעור מעשי עם בדיקת UI | 11 — רשימת ספרים ממוחזרת עם Favorite |
ההבדל בין test ל־androidTest |
שיעור מעשי והשוואה | 05 — בדיקות JVM מול בדיקות UI על אמולטור 10 — בדיקת מחיר Pusher |
| בדיקות ידניות ותוצאה נצפית | שיעור מעשי | 01 — רשימת הבדיקה של Requery 1 021a — בדיקת RTDB בשני מכשירים 06 — בדיקות FCM |
| אבחון Firebase, SHA-1 ו־Google Sign-In | שיעור מעשי | 018d — פתרון תקלות OAuth |
| אבחון Gradle, AGP ו־AAR Metadata | שיעור מעשי | 027 — תיקון בעיית גרסאות |
| גרסת release, R8, חתימה, versionCode ובדיקת APK | שיעור מעשי עם release מותקן | 17 — בדיקת גרסת release ושמירת Favorite |
| שאלות שמוודאות הבנה לקראת בחינת פרויקט | תרגול משלים | שאלות שבוחן עשוי לשאול |
| אפיון, תרשים אחריות, ראיות בדיקה והדגמת פרויקט | שיעור מעשי עם תיק דוגמה | 18 — הצגת פרויקט לפי דרישה, קוד וראיה |
מקורות רוחביים ומשלימים
- 001 — אינדקס חומרי AppSchool מפנה לפרקי עזר בנושאים כמו layouts, listeners, Intents, קבצים, מדיה, אנימציה, Threads, Services, חיישנים ו־SQLite. חלק מן החומר נמצא בקובצי PDF, ולכן הוא מסומן במפה כמקור משלים ולא כשיעור Markdown מלא.
- מפגשי אנדרואיד עם זאב מרכז מצגות והקלטות על WorkManager, חיישנים, Services, התראות, Fragments, מחזור חיים, Threads, BroadcastReceiver, JSON API, תפריטים ו־ActivityResultLauncher.
- שאלות שבוחן עשוי לשאול מתאימות לחזרה אחרי שהיישום כבר עובד: תפריטים, קלט, קבצים, מסדי נתונים, תקשורת, Intents, תכנות וחוויית משתמש.
למורים ולמתכנני מסלול: מפת היעד והפערים בלימודי Android מפרידה בין נושאים חסרים, מקורות משלימים ונושאים שכבר נלמדים אך ראויים להעמקה.