תכנות ב android אליהו חלסצ'י.

Slides:



Advertisements
Similar presentations
Android Application Development A Tutorial Driven Course.
Advertisements

Introduction.  Professor  Adam Porter 
Delrieu Marjorie Loiseau Pierre
David Angulo Rubio ANDROID OS Open Software Platform for Mobile Devices.
Android Development Tutorial Yi Huang. Contents 2  What’s Android  Android architecture  Android software development  ‘Hello World’ on Android 
Android architecture overview
Android Terminology Component: Activities, content providers, broadcast receivers, and services that together make up an application Activity: A single.
Android Aims to bring Internet-style innovation and openness to mobile phones.
Application Fundamentals. See: developer.android.com/guide/developing/building/index.html.
The Android Development Environment.  Getting started on the Android Platform  Installing required libraries  Programming Android using the Eclipse.
User Interface Android Applications. Activities An activity presents a visual user interface. Each activity is given a default window to draw in. The.
1 CSCE 4013: Mobile Systems Programming Nilanjan Banerjee Mobile Systems Programming University of Arkansas Fayetteville, AR
Mobile Application Development
Client / Server Programming in Android Eclipse IDE Android Development Tools (ADT) Android SDK
Basic, Basic, Basic Android. What are Packages? Page 346 in text Package statement goes before any import statements Indicates that the class declared.
Android GUI Project John Hurley CS 454. Android 1. Android Basics 2. Android Development 3. Android UI 4. Hello, World 5. My Project.
App Development for Android Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,
Android Application Development with Java UPenn CS4HS 2011 Chris Murphy
Layout and Control in UI The user interface (UI) is the graphical interface user can see and interact with your app comprising UI controls like textbox,
@2011 Mihail L. Sichitiu1 Android Introduction Hello World.
Android Programming. Outline Preparation Create new project Build and Run a project Debug a project Deploy on devices.
1 Mobile Software Development Framework: Android Activity, View/ViewGroup, External Resources, Listener 10/9/2012 Y. Richard Yang.
Android Introduction Platform Overview.
Mobile Programming Lecture 1 Getting Started. Today's Agenda About the Eclipse IDE Hello, World! Project Android Project Structure Intro to Activities,
Introduction to Android Programming Content Basic environmental structure Building a simple app Debugging.
Mobile Application Development with ANDROID Tejas Lagvankar UMBC 29 April 2009.
Mobile Application Development with ANDROID. Agenda Mobile Application Development (MAD) Intro to Android platform Platform architecture Application building.
About me Yichuan Wang Android Basics Credit goes to Google and UMBC.
Android Programming By Mohsen Biglari Android Programming, Part1: Introduction 1 Part1: Introduction By Mohsen Biglari.
Mobile Computing Lecture#08 IntentFilters & BroadcastReceivers.
Copyright© Jeffrey Jongko, Ateneo de Manila University Android.
01. Introduction to Android Prof. Oum Saokosal Master of Engineering in Information Systems, South Korea
DUE Hello World on the Android Platform.
Social Media Apps Programming Min-Yuh Day, Ph.D. Assistant Professor Department of Information Management Tamkang University
CE Applied Communications Technology Android lecture 2 - Structures Android File structure Resources Drawables Layout Values R Class Manifest Running.
ANDROID L. Grewe Components  Java Standard Development Kit (JDK) (download) (latest version)  AndroidStudio.
1 Introducing Activity and Intent. 2 Memory LinearLayout, weight=2 LinearLayout, weight=1 TextView ListView.
Announcements Homework #2 will be posted after class due Thursday Feb 7, 1:30pm you may work with one other person No office hours tonight (sorry!) I will.
Android Using Menus Notes are based on: The Busy Coder's Guide to Android Development by Mark L. Murphy Copyright © CommonsWare, LLC. ISBN:
ANDROID – A FIRST PROGRAM L. Grewe Using AndroidStudio –basic Android  Lets do a “Hello World Project”  Start up AndroidStudio (assume you have installed.
Copyright© Jeffrey Jongko, Ateneo de Manila University Deconstructing HelloWorld.
Android Application Lifecycle and Menus
1 Android Workshop Platform Overview. 2 What is Android?  Android is a software stack for mobile devices that includes an operating system, middleware.
Android operating system N. Sravani M. Tech(CSE) (09251D5804)
Android 基本 I/O. 基本 I/O 介面元件 在此節中主要介紹常見的 I/O 使用者介 面元件 – Button, TextView, 以及 EditText , 學習者可以學會: – Android 的視窗表單設計 res/layout/main.xml – Android SDK –
CS499 – Mobile Application Development Fall 2013 Location & Maps.
Android Programming.
Android Mobile Application Development
Lab7 – Appendix.
Android Application Development
Android Application -Architecture.
Introduction to ANDROID
Android Programming - Features
Lecture 3 Zablon Ochomo Android Layouts Lecture 3 Zablon Ochomo
Android Introduction Hello World
Android Application Development 1 6 May 2018
Android N Amanquah.
GUI Programming Fundamentals
Android Introduction Hello World.
ITEC535 – Mobile Programming
CMPE419 Mobile Application Development
Android GUI Project John Hurley CS 454.
MultiUni Trần Vũ Tất Bình
Application Development A Tutorial Driven Course
Android GUI Project John Hurley CS 454.
CMPE419 Mobile Application Development
BMI Android Application will take weight and height from the users to calculate Body Mass Index (BMI) with the information, whether user is underweight,
CMPE419 Mobile Application Development
CMPE419 Mobile Application Development
Android Sensor Programming
Presentation transcript:

תכנות ב android אליהו חלסצ'י

הקדמה עד כה נחשפנו לטכנולוגית ה J2ME מעתה נכיר טכנולוגיות נוספות לתכנות בסלולר היום נלמד על android על סדר היום: הרצאה ארכיטקטורת android מעגל החיים של אפליקציה תרגול הקמת תשתית העבודה Hello World דוגמאות מתקדמות

רקע Android .incנרכשה ע"י Google ב 2005 מערכת הפעלה מבוססת לינוקס למכשירים סלולריים תכנות אפליקציות באמצעות Java ב 2007 נחשף לציבור רובו קוד פתוח תחת רישיון apache ברבעון הראשון של 2010 מכירות של מערכת ההפעלה android ל smart phones בארה"ב היו במקום השני מכולן, לאחר מעה"פ של black berry המכירות עקפו את המכירות של iphone (הצפי היה 2012)

ארכיטקטורת android

ארכיטקטורת android הארכיטקטורה מבוססת על Linux Kernel 2.6 מהווה שכבת אבסטרקציה לחומרה מודל התקנים מוכח כאמין ורובסטי מספק: memory management process management networking

ארכיטקטורת android ה Native Libraries נכתבו ב ++C \ C נדבר איתם דרך ממשקי Java מבט כללי: ה surface manager אחראי שכל הגרפיקה מכל תהליך תוצג במקום openGL / SGL: ניתן להשתמש בהאצת חומרה ולשלב D2 ו D3 Media framework: כל codec אפשרי של אודיו או וידאו Webkit: מנוע הדפדפן Web kit בשימוש כרום ספארי אייפון ונוקיה S60

ארכיטקטורת android

ארכיטקטורת android Dalvik Virtual Machine ה VM של Android - מותאם לסביבת embedded זיכרון, כוח עיבוד, וחיי סוללה מוגבלים VM הן לרוב בארכיטקטורת stack machines בעוד שה DVM היא register based השיטה השלטת במעבדים רגילים המשמעות היא: יותר קוד כדי לבצע הוראה מהשפה העילית אך פחות הוראות VM כדי לבצע את התוכנית הוכח אמפירית כיותר יעיל ל interpreter

ארכיטקטורת android Dalvik Virtual Machine - המשך באמצעות תוכנית בשם dx מתבצעת המרה לקובצי ה class לקובצי dex (מקביל ל Jar) קובץ dex מהווה byte code עבור ה DVM (dalvik executable) כל מידע כפול מופיע רק פעם אחת גם כשהוא לא מכווץ הוא קטן יותר מקובץ Jar מכווץ

ארכיטקטורת android Dalvik Virtual Machine - המשך ה data structure של קובץ dex בנוי בצורה שמאפשרת שיתוף מידע בין תהליכים שונים זה מתאפשר מכיוון שהמידע לא צמוד לאובייקט אלא מנוהל במקום מרוכז המשמעות של כל מה שתיארנו עד עתה היא שניתן להריץ כמה מופעים של ה VM בו זמנית

ארכיטקטורת android Dalvik Virtual Machine - המשך מנגנון של JIT נמצא בפיתוח יש גרסא ניסיונית החל מ Android 2.0 ביצועים מעולים בגרסא 2.2 החדשה Core Libraries כתובות ב Java דרכם אנו מדברים עם ה Native Libraries

ארכיטקטורת android Dalvik Virtual Machine - המשך עדיין אין מנגנון של JIT (נמצא בפיתוח) יש גרסא ניסיונית ב Android 2.0 Core Libraries כתובות ב Java דרכם אנו מדברים עם ה Native Libraries

ארכיטקטורת android ה Application Framework: כתוב כולו ב Java מבט כללי: Activity manager אחראי לניהול מעגל החיים של אפליקציות Package manager אחראי לניהול האפליקציות המותקנות Content providers מאפשר לכל אפליקציה לשתף מידע עם אפליקציות אחרות

ארכיטקטורת android בשכבה העליונה נמצאות כמובן האפליקציות עצמן בשכבה זו אנו כותבים את האפליקציות שלנו בשפת Java תוך כדי שימוש בתשתית הקיימת

ארכיטקטורת android

אבני הבניין של אפליקציה הרכיב הכי בסיסי, בד"כ UI שמתאים למסך אחד שלם Activity מגיב להודעות \ שינויי סטאטוס, יכול להעיר תהליך כלשהו IntentReceiver משימה ללא UI שרצה ברקע Service מאפשר לאפליקציה לשתף מידע עם אפליקציות אחרות ContentProvider

מעגל החיים של אפליקציה כל אפליקציה רצה בתוך תהליך משלה Security, protective memory אפליקציה שמעמיסה על המעבד לא תחסום תהליכים קריטיים אחרים כגון לענות לטלפון מערכת Android אחראית להפעלתם ועצירתם של תהליכים כנדרש להרצתן של אפליקציות יתכן שתהליכים יהרגו (ואח"כ ישוחזרו) על מנת לפנות משאבים לתהליכים אחרים

מעגל החיים של אפליקציה דוגמא: נניח שמאפליקציית Home פתחנו Gmail בחרנו מכתב,הצגנו אותו וראינו בתוכו קישור לחצנו על הקישור והדפדפן נפתח בעמוד כלשהו בעמוד יש קישור למפה שלחצנו עליו האפליקציה של תצוגת המפות נפתחה כעת אנו רוצים לחזור מסכים אחורה...

מעגל החיים של אפליקציה Home תחילה קיימים 2 תהליכים: System process Activity Manager Home Home Home תחילה קיימים 2 תהליכים: ה System Process שמריץ את ה Activity Manager שמנהל את מחסנית ה Activities תהליך שמריץ את ה Home Activity שמאפשרת למשתמש לבחור אפליקציות ולדפדף ביניהן Home

מעגל החיים של אפליקציה Home Mail כעת המשתמש מפעיל את אפליקציית gmail System process Activity Manager Home Home Home S Mail Mail List כעת המשתמש מפעיל את אפליקציית gmail ה State של Home נשמר ב Activity Manager נפתח תהליך Mail חדש ובתוכו ה Activity שמציגה את רשימת המכתבים שכעת נראית על כל המסך Home Mail List

מעגל החיים של אפליקציה Home Mail כעת המשתמש בחר מכתב כלשהו System process Activity Manager Home S Home Home Mail Mail List Message S כעת המשתמש בחר מכתב כלשהו ה State של ה Mail List נשמר מתווספת Activity חדשה לתהליך של Mail שמציגה את תוכן המכתב שכעת נראה על כל המסך Home Mail List Message

מעגל החיים של אפליקציה Home Mail Browser כעת המשתמש לחץ על קישור במכתב System process Activity Manager Home S S Home Home Mail Mail List Message S Browser Browser כעת המשתמש לחץ על קישור במכתב ה State של הMessage נשמר נוצר תהליך חדש למען ה Browser בתוכוActivity של Browser שכעת נראה על כל המסך Home Message

מעגל החיים של אפליקציה Home Mail Browser System process Activity Manager Home S S S Home Home Mail Mail List Message Browser Browser S כעת המשתמש לחץ על קישור לפתיחת מפה ה State של הBrowser נשמר נרצה לפתוח את אפליקציית ה Maps אך אין לנו מקום לעוד תהליך... Home

מעגל החיים של אפליקציה Home Mail Browser System process Activity Manager Home S S S S Home Home Mail Mail List Message Browser לא נהרוג את תהליך Home, כי הוא צריך להיות תמיד זמין למשתמש לצורך דפדוף בין אפליקציות גם את תהליך ה Browser לא נהרוג, כי הוא האחרון ולכן תהליך ה Mail הוא זה שייהרג כדי לפנות מקום Home

מעגל החיים של אפליקציה Home Browser Maps System process Activity Manager Home S S S S Home Home Browser Maps Maps כעת יש מקום לתהליך חדש – ייפתח עבור Maps בתוכו ה Activity של Maps שתיראה על כל המסך Home

מעגל החיים של אפליקציה Home Browser Maps System process Activity Manager Home S S S S Home Home Browser Maps Maps כעת המשתמש לוחץ back כדי לחזור לאפליקציה האחרונה ה Activity של Maps תיסגר ונחזור לראות את ה Browser התהליך היה פעיל אז לא היה צורך לטעון מחדש את ה State של ה Browser Home

מעגל החיים של אפליקציה Home Browser Maps Mail System process Activity Manager Home S S S Home Home Browser Browser Mail Maps Message כעת המשתמש שוב לוחץ back כדי לחזור אפליקציה תהליך Maps ייהרג, כדי לאפשר מקום לתהליך Mail עותק חדש של Message ייפתח הוא יתעדכן ב State שנשמר עבורו ב Activity Manager כעת ה Activity של Browser תיסגר ונראה במסך את ההודעה Home Message

מעגל החיים של אפליקציה Home Browser Mail System process Activity Manager Home S S Home Home Browser Mail Mail List Message כעת המשתמש שוב לוחץ back כדי לחזור אחורה תתווסף Activity חדשה של Mail List ה State שלה יתעדכן מה Activity Manager כעת ה Message תיסגר ונראה את רשימת המכתבים במסך Home Mail List Message

הקמת תשתית עבודה נוריד את ה 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

הקמת תשתית עבודה בינתיים נתקין את ה SDK ע"י הפעלת SDK Setup.exe אם תהיה לו בעיה לגשת ל repository של google נכנס ל settings ונסמן את Force https://... נסגור ונתקין שוב נאשר הכל ונמתין עד סיום ההתקנה תהליך זה קצת ארוך

הקמת תשתית עבודה בינתיים נתקין את ה SDK ע"י הפעלת SDK Setup.exe אם תהיה לו בעיה לגשת ל repository של google נכנס ל settings ונסמן את Force https://... נסגור ונתקין שוב נאשר הכל ונמתין עד סיום ההתקנה תהליך זה קצת ארוך

הקמת תשתית עבודה לאחר סיום התקנת ה plug-in ה eclipse יופעל מחדש, כעת נמתין שתסתיים גם התקנת ה SDK נכנס לתפריט windows preferences… תחת Android נבחר את התיקייה בה חילצנו קודם את ה zip שהורדנו (ה SDK של Android)

הקמת תשתית עבודה כדי שנוכל לעבוד עם אמולטור עלינו ליצור Android Virtual Device (AVD) = מכשיר נייד מתוך סרגל הכלים של eclipse נלחץ על הכפתור של android ייפתח לנו חלון ה AVD manager נבחר Virtual Devices נלחץ על new… בחלון שייפתח נגדיר מכשיר נייד כרצוננו

הקמת תשתית עבודה

הקמת תשתית עבודה נוודא שהוא עובד ע"י סימונו ולחיצה על Start

Hello world ניצור פרויקט חדש ע"י file  new  project… נבחר Android project נמלא לאחר מכן את הפרטים הבאים: שם הפרויקט HelloAndroid Build target = android 1.1 שם האפליקציה Hello, Android נבחר שם ל package כרצוננו נבחר ליצור activity בשם HelloAndroid Min SDK version = 2

Hello world נוצרה לנו התוכנית הבאה: המחלקה Activity היא הישות הבסיסית להרצת פעולות באפליקציה. אפליקציה יכולה להיות מורכבת מכמה Activities אך המשתמש יכול לבצע אינטראקציה רק עם אחת בכל פעם. package biu89697.example; import android.app.Activity; import android.os.Bundle; public class HelloAndroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } כשה Activity תופעל ע"י Android המתודה (onCreate( תיקרא. היא תשמש אותנו לאתחול כללי ובד"כ גם לאתחול ה UI.

Hello world כעת נוסיף לנו UI פשוט: כשנריץ נתבקש לבחור מכשיר נבחר ב my_avd התוצאה: package biu89697.example; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class HelloAndroid extends Activity { /** 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); }

Hello world כתיבת UI באופן ישיר דרך הקוד תוביל לכך ששינוי קטן ב layout יגרום לכאב ראש גדול קל לשכוח לחבר views יחד, ויגרמו טעויות ל layout זמן debug... לכן ניתן ליצור UI גם באמצעות קובצי XML נתבונן בקבצים הנוספים שה plug-in יצר main.xml – מגדיר את ה UI strings.xml – כל המחרוזות הקבועות R.java – קיצור ל Resource

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>

Hello world main.xml עורך ויזואלי

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>

Hello world כדי שהתוכנית שלנו תשתמש בהגדרות הללו, נחזיר את השורה במקום tv - ה textView שיצרנו דרך הקוד מתבצעת קריאה סטטית למחלקה R שתפעיל את ה layout שמוגדר ב main.xml תפקיד המחלקה – גישה מהירה ל resources נוצרת אוטומטית עם כל resource שאנו מכניסים אין לערוך את המחלקה הזו ידנית (!) setContentView(R.layout.main);

Hello world R.java גישה סטטית לכל משאב לצורך נוחות 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;

דוגמאות מתקדמות אפליקציה שמראה לנו נראה דוגמאות ל תוך כדי תנועה על מפה כמה קרובים אנו לכתובות החברים שלנו נראה דוגמאות ל הוספה פריט לתפריט שימוש במידע GPS שימוש במידע משותף Intent / Intent Receiver קריאה ל map ביצוע התקשרות מקור: http://blogoscoped.com/archive/2007-11-19-n27.html

הוספת תפריט onCreateOptionsMenu כשתיבחר אופציה /* 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(); case MENU_QUIT: quit(); return false; onCreateOptionsMenu נקראת כאשר מוצר תפריט עלינו לדרוס אותה manu.add מוסיפה פריט כשתיבחר אופציה onOptionsItemSelected תופעל נזהה את האופציה לפי int item.getItemId() לפרטים נוספים: http://developer.android.com/guide/topics/ui/menus.html

- Location Based Service GPS ה location based services של android מספקים לאפליקציות הקשר גיאוגרפי דרך location providers כגון GPS android מגיע עם provider בשם ‘gps’ לצורכי פיתוח הוא ממפה את סאן-פרנסיסקו, ניתן ליצור עוד ע"י 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()); ContentResolver יכול לשלוח שאילתא למידע משותף של Content Providers נקבל חזרה cursor המצביע על תחילת התשובה שחזרה נשתמש ב People לרשימת החברים

Intent / Intent Receiver המקבילים ל Event / Event handler ניזום Intent חדש בכל פעם שהמכשיר יזוז... ניצור מחלקה פנימית שתתפוס את ה Intent נקשר את השניים ב onCreate() או תחת תפריט כגון start / stop 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(); } filter = new IntentFilter(LOCATION_CHANGED); receiver = new myIntentReceiver(); registerReceiver(receiver, filter);

קריאה ל map נצטרך להרחיב את MapActivity כדי להשתמש ב MapView למופע של MapView יש מופע של MapController באמצעותו ניתן לשלוט על המפה למשל למרכז אותה מסביב לנק' שלנו באמצעות overlayController נצייר על ה canvas של המפה public class MyMapViewActivity extends MapActivity{ Point point = new Point(lat.intValue(), lng.intValue()); mapController.centerMapTo(point, false); protected class MyLocationOverlay extends Overlay { @Override public void draw(Canvas canvas, PixelCalculator calculator, boolean shadow) { //... [ draw things here ] ... }

ביצוע התקשרות נרצה אולי להתקשר לחבר על המפה ה activity של ההתקשרות מאזינה ל intent מסוג DIAL_ACTION ניזום אותה כך: Intent i = new Intent(); i.setAction(DIAL_ACTION); i.setData(new ContentURI(numbers.get(position))); startActivity(i);

הטמעה מנה 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

תודה רבה על ההקשבה מקורות: 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