Application Development Part 1
-
Upload
ieeepatras -
Category
Technology
-
view
413 -
download
4
description
Transcript of Application Development Part 1
Android
Ανάπτυξη εφαρμογών
Dr. Dr. Ανδρέας ΚομνηνόςΑνδρέας ΚομνηνόςΜάρτιος 2014Μάρτιος 2014
Java
• Χρειάζεται η κατανόηση τουλάχιστων των βασικών εννοιών Ο/Κ προγραμματισμού– Exceptions– Inner Class, Interface
• Επιπλέον:– Java IO– Java Thread– Java Socket
Android BasicsAndroid Basics
Εισαγωγή στο Android
• Ανοικτή πλατφόρμα λογισμικού για κινητές συσκευές
• Πλήρες stack – OS, Middleware, Applications
• Αρχικά project του Open Handset Alliance (OHA)
• Βασισμένο στο Linux
• Γρήγορη ανάπτυξη εφαρμογών σε Java
• Open source under the Apache 2 license
Linux Kernel
• Έχει το ρόλο του HAL
• Device drivers
• Memory management
• Process management
• Networking
Βιβλιοθήκες
• Γραμένες σε C/C++
• Διεπαφή μέσω Java
• Surface manager – Handling UI Windows
• 2D and 3D graphics
• Media codecs, SQLite, Browser engine
Android Runtime
• Dalvik VM– Αρχεία Dex (dalvik executable format)– Πιο συμπαγή και αποδοτικά από τα
παραδοσιακά class files– Λόγω περιορισμένης μπαταρίας– Αντικαθίσταται από το 4.4 με την ART
• Core Libraries– Java 5 Std edition– Collections, I/O etc…
Application Framework
• API interface
• Activity manager – διαχειρίζεται τον κύκλο ζωής των εφαρμογών
Applications
• Ενσωματωμένες και εφαρμογές τρίτων
• Μπορούμε να αντικαταστήσουμε τις ενσωματωμένες με δικές μας
Εφαρμογές σε Javapackage com.google.android.helloactivity;
import android.app.Activity;import android.os.Bundle;
public class HelloActivity extends Activity { public HelloActivity() { }@Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.hello_activity); }}
Μεταγλωττίζονται σε Dalvik bytecode
Πηγαίος κώδικας JavaΠηγαίος κώδικας Java
Compiled σε JavaCompiled σε Java
Μεταγλώττιση σε Dalvik bytecodeΜεταγλώττιση σε Dalvik bytecode
Linux OS Linux OS
Μεταφόρτωση σε Dalvik VMΜεταφόρτωση σε Dalvik VM
Dalvik runtime – ειδικό για κινητές εφαρμογές
Ταυτόχρονη και αποδοτική εκτέλεση πολλαπλών VM
Ταυτόχρονη και αποδοτική εκτέλεση πολλαπλών VM
Κάθε εφαρμογή έχει δική της VMΚάθε εφαρμογή έχει δική της VM
Ελάχιστο memory footprintΕλάχιστο memory footprint
Βασικά δομικά υλικά εφαρμογής
• Activity
• IntentReceiver
• Service
• ContentProvider
Activities
• Σαν γενικός κανόνας, αντιστοιχούν σε ένα UI screen
• Όμως μπορούν:– Να μην έχουν UI– Να είναι σε floating window– Να επιστρέφουν τιμές
IntentReceivers
• Ανταποκρίνονται σε εκπεμπόμενα (broadcast) Intents’
• Επιτρέπουν την ανταπόκριση σε εξωτερική ειδοποίηση ή alarms
• Κάθε εφαρμογή μπορεί να ορίσει και να εκπέμψει τα δικά της Intent
Intents
• Σκεφτείτε το σαν ζεύγος από ρήμα – ουσιαστικό: Μια περιγραφή του τι θα θέλατε να συμβεί– Π.χ. VIEW, CALL, PLAY κτλ..
• Το σύστημα ταιριάζει το intent με το activity της ίδιας ή άλλης εφαρμογής, που μπορεί να προσφέρει την επιθυμητή υπηρεσία
• Τα Activities και τα IntentReceivers περιγράφουν τι είδος intent μπορούν να χειριστούν.
Intents
GMail
Contacts
Home
Blogger
Chat
Μια εφαρμογή αιτείται μια λειτουργία
“Pick photo”Το σύστημα βρίσκει το κατάλληλο component άλλης εφαρμογής για τη λειτουργία
Έτσι νέες εφαρμογές μπορούν να χρησιμοποιούν άλλες ήδη εγκατεστημένες
Blogger
Photo Gallery
Services
• Στοιχεία εφαρμογών χωρίς user interface τα οποία τρέχουν στο παρασκήνιο – Π.χ. music player, network download κτλ…
ContentProviders
• Επιτρέπει την πρόσβαση στα δεδομένα της εφαρμογής, σε άλλες εφαρμογές– Π.χ. address book, photo gallery
• Προσφέρει ομοιότυπα APIs για:– επερωτήσεις– διαγραφή, ενημέρωση και εισαγωγή
• Το περιεχόμενο εκπροσωπείται από κάποιο URI και MIME type
Development Tools
• Eclipse
• Android SDK 2.0 or higherdeveloper.android.com
September 2011 [developer.android.com]
Emulator (2.x)
• QEMU-based ARM emulator
• Ή hardware-accelerated x86 emulator
• Περιορισμοί:• Αισθητήρες
Hello World
• Μια καλή αρχή: http://developer.android.com/training/basics/firstapp/index.html
• Δημιουργία UIs– Χρήση ορισμένων Views
• Π.χ. TextView, EditText, Button
– Τοποθετημένα σε Layouts• Π.χ. LinearLayout, TableLayout, AbsoluteLayout
Κύκλος ζωής εφαρμογής
• Οι εφαρμογές τρέχουν σε δικές τους διεργασίες (VM, PID)
• Οι διεργασίες εκκινούν και σταματούν όποτε χρειάζεται, ώστε να τρέξουν τα συστατικά μιας εφαρμογής
• Οι διεργασίες μπορούν να τερματιστούν για να απελευθερωθούν πόροι.
• Συνήθως δε χρειάζεται να κληθεί η onDestroy – το σύστημα αναλαμβάνει τον αυτόματο τερματισμό και την απελευθέρωση μνήμης.
Σύνοψη
Το Android σχεδιάστηκε να επιτρέπει τη χρήση στοιχείων άλλων εφαρμογών από κάθε εφαρμογή
Το Android σχεδιάστηκε να επιτρέπει τη χρήση στοιχείων άλλων εφαρμογών από κάθε εφαρμογή
Κάθε εφαρμογή μπορεί να «διαφημίσει» στις άλλες τις υπηρεσίες που μπορεί να προσφέρει.
Κάθε εφαρμογή μπορεί να «διαφημίσει» στις άλλες τις υπηρεσίες που μπορεί να προσφέρει.
Οι εφαρμογές έχουν κοινή δομή
Views όπως lists, grids, text boxes, buttons
Views όπως lists, grids, text boxes, buttons
Content Providers για την κοινή χρήση δεδομένων από άλλες εφαρμογές ή της δικής μας εφαρμογής
Content Providers για την κοινή χρήση δεδομένων από άλλες εφαρμογές ή της δικής μας εφαρμογής
Resource Manager, που προσφέρει πρόσβαση σε πόρους όπως localized strings, graphics και layout files
Resource Manager, που προσφέρει πρόσβαση σε πόρους όπως localized strings, graphics και layout files
Notification Manager που επιτρέπει την προβολή μηνυμάτων στο notification bar
Notification Manager που επιτρέπει την προβολή μηνυμάτων στο notification bar
Activity Manager που διαχειρίζεται τον κύκλο ζωής
Activity Manager που διαχειρίζεται τον κύκλο ζωής
Views
Views
Notification Manager
Notification Manager
• Ο μόνος τρόπος διεπαφής ενός background app με τους χρήστες
• Κοινή μέθοδος – εμπειρία χρήστη για όλες τις εφαρμογές
Άλλα κοινά στοιχείαBroadcast receivers για την εκκίνηση άλλων εφαρμογών
Broadcast receivers για την εκκίνηση άλλων εφαρμογών
Data storage μέσω βάσεων δεδομένων, αρχείων ή application preferences
Data storage μέσω βάσεων δεδομένων, αρχείων ή application preferences Services για την
εκτέλεση διαδικασιών στο παρασκήνιο
Services για την εκτέλεση διαδικασιών στο παρασκήνιο
Intents που αιτούνται υπηρεσίες από άλλες εφαρμογές ή προσφέρουν υπηρεσίες
Intents που αιτούνται υπηρεσίες από άλλες εφαρμογές ή προσφέρουν υπηρεσίες
Activity που υλοποιεί τις διεπαφές με το χρήστη (γραφικά στοιχεία εφαρμογής)
Activity που υλοποιεί τις διεπαφές με το χρήστη (γραφικά στοιχεία εφαρμογής)
Οι εφαρμογές έχουν μια κοινή δομή
code
images
files
UI layouts
constants
Auto generated resource list
Σημείο Μηδέν: Android Manifest
Όλες οι βασικές πληροφορίες για την εφαρμογή (ΧΜL)
<?xml version="1.0" encoding="utf-8"?><manifest
xmlns:android="http://schemas.android.com/apk/res/android" package="com.my_domain.app.helloactivity"> <application android:label="@string/app_name"> <activity android:name=".HelloActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category
android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application>
Sample Activity Code
UI layouts are in Java and XML
setContentView(R.layout.main); //will load the XML UI file
UI!
Η ασφάλεια στο Android ακολουθεί τις πρακτικές του Linux
Κάθε εφαρμογή δική της διεργασίαΚάθε εφαρμογή δική της διεργασία
Δικαιώματα πρόσβασης για κάθε διεργασία με user & group permissions
Δικαιώματα πρόσβασης για κάθε διεργασία με user & group permissions
Πολλαπλά επίπεδα δικαιωμάτων ανά λειτουργία
Πολλαπλά επίπεδα δικαιωμάτων ανά λειτουργία
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.android.app.myapp" ><uses-permission id="android.permission.RECEIVE_SMS" /></manifest>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.android.app.myapp" ><uses-permission id="android.permission.RECEIVE_SMS" /></manifest>
Τέλος
• Να δούμε ένα πρακτικό παράδειγμα– Hello World!