Εισαγωγή στην Ανάπτυξη Εφαρμογών Android



Σχετικά έγγραφα
ANDROID Προγραμματισμός Εφαρμογών

Ανάπτυξη Διεπαφών Χρήστη σε Λειτουργικά Συστήματα Κινητών Συσκευών

Ενημέρωση σε Windows 8.1 από τα Windows 8

Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10

ΕΓΧΕΙΡΙΔΙΟ ΜΑΘΗΤΗ. της Πλατφόρμας Τηλεκατάρτισης

Οδηγίες Εγκατάστασης της εφαρμογής Readium και Readium για μαθητές με αμβλυωπία για την ανάγνωση βιβλίων epub σε Υπολογιστή.

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΚΑΙ ΔΙΑΧΕΙΡΙΣΗΣ ΨΗΦΙΑΚΩΝ ΠΙΣΤΟΠΟΙΗΤΙΚΩΝ


Οδηγός Εισαγωγή Χρηστών σε LDAP Server με χρήση. LdapAdmin TEMPLATE

Τεχνολογία Διοίκησης Επιχειρησιακών Διαδικασιών

Οδηγίες για την εγκατάσταση του πακέτου Cygwin

Δημιουργώντας μια εφαρμογή ζωγραφικής. 2 ο Μάθημα

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ

Το νέο Twinspace. Ελληνική Υπηρεσία Υποστήριξης της δράσης etwinning. Ιστότοπος:

Υπηρεσία διαμοιρασμού αρχείων

Εισαγωγή 6. Δημιουργία λογαριασμού 13. Εγκατάσταση και λειτουργία του Skype 28. Βασικές λειτουργίες 32. Επιλογές συνομιλίας 48

Epsilon Net PYLON Platform

2. Για να δημιουργήσουμε το πρώτο ή κάθε νέο Backup set πατάμε στο εικονίδιο και εμφανίζεται ο Wizard του Backup set

Μπορείτε τα δείτε βιντεάκι με τη διαδικασία εδώ:

Περιεχόμενα. Αντί προλόγου Πώς να χρησιμοποιήσετε το βιβλίο Κεφάλαιο 1: Πώς δημιουργώ το Προφίλ μου στο Facebook;...

Εργαστήριο 1-1 η Άσκηση - Ανάλυση

Android Studio για Windows

Ξεκινώντας με το MIT Αρρ Inventor. 1 η Εργασία

Οδηγίες για τη Χρήση του Google Drive

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ LIVETRIP TRAVELLER

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

A3.3 Γραφικά Περιβάλλοντα Επικοινωνίας και Διαχείριση Παραθύρων

Εγκατάσταση αρχείων βιβλιοθήκης VHOPE και VHOPE

Θα αναπτύξουμε μια εφαρμογή που θα λειτουργεί σαν κουμπί πανικού. Η εφαρμογή θα αποτελείται από δύο κουμπιά.

Στο παράθυρο που θα εµφανιστεί πατήστε το κουµπί Unzip.

ΠΡΟΛΟΓΟΣ. Σε ποιους απευθύνεται αυτό το βιβλίο... vi Διάρθρωση του βιβλίου... vi

1 ο ΓΥΜΝΑΣΙΟ ΘΕΡΜΗΣ. Πληροφορική Α' Γυμν. Το Λειτουργικό Σύστημα του Υπολογιστή

Κατανεμημένα Συστήματα

APP INVENTOR ΟΔΗΓΟΣ 8 Οκτωβρίου 2018

Δημιουργία μιας εφαρμογής Java με το NetBeans

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΓΙΑ ΤΟΝ ΕΛΕΓΧΟ ΤΩΝ HX-GO02 & HX-GO1

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

Startup Guide Backup365. Οδηγός γρήγορης εγκατάστασης και εκκίνησης. Για να δοκιμάσετε την υπηρεσία θα πρέπει να ακoλουθήσατε τα παρακάτω βήματα:

Εφαρμογή Skype Μαθησιακά Αποτελέσματα

Αξιολόγηση της επίσημης Moodle Mobile εφαρμογής

2

QEMS TUTORIAL CRM. Οδηγίες για το νέο πρωτοποριακό πρόγραμμα της QEMS.

2

Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy

Οδηγός Σύνδεσης (για Φωτογραφικές Μηχανές D-SLR)

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΤΗ JustAlert SPOTIT. Οδηγίες για την εγκατάσταση της εφαρμογής στο κινητό σας

Συνοπτικός Οδηγός Χρήσης του Moodle για τον Καθηγητή

ΧΡΗΣΗ ΤΗΣ ΠΛΑΤΦΟΡΜΑΣ BLACKBOARD ΑΠΟ ΜΑΘΗΤΗ ΒΑΣΙΚΟΣ ΟΔΗΓΟΣ

2.1 Σύνδεση Εξωτερικής Συσκευής στο IDE

Με την ολοκλήρωση της διαδικασίας μπορούμε αν θέλουμε να επιλέξουμε να ανοίξει ή όχι η εφαρμογή που έχει εγκατασταθεί.

SingularLogic Σεπτέμβριος 2014

Εργασία για το Facility Game Μάθημα: Δομές Δεδομένων Σωτήρης Γυφτόπουλος

Βρίγκας Μιχαήλ Α.Μ.744 Μπράχος Χ. Ευάγγελος Α.Μ.795

HP Workspace. Οδηγός χρήσης

ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ

Δραστηριότητα 3: Ρυθμίσεις Oικιακής Ομάδας Τοπικού Δικτύου Η/Υ σε WINDOWS 7 & 8

Java & Java EE 3o Μέρος: Διασφάλιση ασφάλειας σε εφαρμογές Java Enterprise Edition. Κακαρόντζας Γεώργιος

Ελεύθερο Λογισμικό. Γιάννης Γαϊδαρτζής ΠΕ19 Υπεύθυνος ΚΕ.ΠΛΗ.ΝΕ.Τ. Ρεθύμνου

Εισαγωγή στο περιβάλλον Code::Blocks

Διπλωματική Εργασία. Μουσικές Εφαρμογές σε Περιβάλλον Κινητών Συσκευών Android με Χαρακτηριστικά Εξατομίκευσης

Ενηµερώσεις λογισµικού Οδηγός χρήσης

ΓΝΩΡΙΣΤΕ ΤΗΝ BLACKBOARD ΜΕΣΑ ΑΠΟ ΤΟΝ ΣΥΝΤΟΜΟ ΑΥΤΟ ΟΔΗΓΟ

Οδηγός Χρήσης Microsoft Office365 & OneDrive for Business Πανεπιστημίου Κύπρου

Ξεκινώντας NSZ-GS7. Network Media Player. Οι εικόνες επί της οθόνης, οι λειτουργίες και οι προδιαγραφές μπορεί να αλλάξουν χωρίς προειδοποίηση.

SAP Οδηγός για τους Υπογράφοντες του DocuSign

Δομή. 1 Πλήκτρα αυξομείωσης έντασης ήχου 7 Ηχεία 2 Θύρα Φόρτιση. 8 Πλήκτρο Home 3 Θύρα MicroUSB. 9 Είσοδος Κάρτας SD. 6 Μπροστινή κάμερα

Βασική εγκατάσταση Asterisk σε Linux

Δημιουργώντας μια εφαρμογή ζωγραφικής. 2 η Εργασία

Εγκατάσταση της έκδοσης 5.30

Εγχειρίδιο Χρήσης Εφαρμογής TRS Client

Σύντομη περιγραφή 5. Για να ξεκινήσετε 6. Οι οθόνες του προγράμματος 8. Εγκατάσταση προγράμματος 6 Δημιουργία κωδικών χρήστη 7

Δημιουργία ιστοσελίδας με Wordpress - Βασικές λειτουργίες

Νέα Υπηρεσία My Home e-bill. Νέες δυνατότητες και αλλαγές στην διαδικασία ηλεκτρονικού λογαριασμού σταθερής My Home e-bill

Περιεχόμενα. Μέρος 1: Βασικές έννοιες της πληροφορικής Πρόλογος... 11

Ανάπτυξη διαδικτυακής εφαρμογής σε περιβάλλον κινητών συσκευών με λειτουργικό σύστημα Android

Εγχειρίδιο Λειτουργίας Τράπεζας Χρόνου

Οδηγίες Χρήσης Ασύρματης Φορητής WiFi Κάμερας

ΓΡΑΦΕΙΟ ΤΗΛΕΔΙΑΣΚΕΨΗΣ ΚΑΙ ΠΟΛΥΜΕΣΩΝ

Οδηγός Χρήσης Microsoft Office365 & OneDrive for Business Πανεπιστημίου Κύπρου

Ενημερώσεις λογισμικού Οδηγός χρήσης

Open Discovery Space. ODS Portal Manual

Google Family Link. Οδηγός για Γονείς

ΟΔΗΓΟΣ ΧΡΗΣΗΣ(ΜΑΝUΑL) ΔΙΑΧΕΙΡΙΣΤΗ-ΧΡΗΣΤΗ.

Αναπαραγωγή με αρχεία ήχου

4.1 Άνοιγμα υπάρχοντος βιβλίου εργασίας

Εισαγωγή 6 Gmail 8. Υαhoo! Mail 58. Δημιουργία λογαριασμού 58 Αλλαγή κωδικού 68 Επισύναψη αρχείων 69 Φίλτρα 71

ΕΓΚΑΤΑΣΤΑΣΗ ΕΦΑΡΜΟΓΩΝ ΓΙΑ TABLET Η SMART PHONES (ANDROID, IOS)

Οδηγός σύνδεσης στο δίκτυο του ΤΕΠΑΚ μέσα από την υπηρεσία απομακρυσμένης πρόσβασης VPN Τεχνολογικό Πανεπιστήμιο Κύπρου

ΣΧΕΔΙΑΣΜΟΣ ΙΣΤΟΣΕΛΙΔΑΣ ΜΕ ΤΗ ΧΡΗΣΗ "ΠΡΟΤΥΠΟΥ ΙΣΤΟΣΕΛΙΔΑΣ" (TEMPLATE) ΣΤΟ ΠΡΟΓΡΑΜΜΑ MICROSOFT OFFICE SHAREPOINT DESIGNER 2007

Διαχείριση Επιλογών Διαμόρφωσης

Χρήσιμες Ρυθμίσεις του Windows 7 στον Η/Υ σας

Οδηγός γρήγορης εκκίνησης

ΤΕΧΝΟΛΟΓΙΚΟ ΠΑΝΕΠΙΣΤΉΜΙΟ ΚYΠΡΟΥ

6 Εισαγωγή στο Wordpress 3.x

Οδηγίες Χρήσης Υπηρεσίας Τηλεδιασκέψεων

Ξεκινώντας με το MIT Αρρ Inventor. 1 η Εργασία

Οδηγίες Χρήσης EAP Controller Software

Βιοϊατρική τεχνολογία

Interfox.gr. Κωδικοποίηση Κάμερας

Transcript:

Εισαγωγή στην Ανάπτυξη Εφαρμογών Android Σημειώσεις σεμιναρίου Επιμέλεια: Βασίλης Κόλιας Ενότητα 2 Εισαγωγή στις εφαρμογές Graphical User Interfaces

Πίνακας Περιεχομένων 4 Εισαγωγή στις εφαρμογές... 2 4.1 Κατηγορίες εφαρμογών... 2 4.2 Συστατικά εφαρμογών... 3 4.3 Τα Android Projects... 5 4.3.1 Δημιουργία ενός Android Project με το Eclipse... 5 4.3.2 Η αρχειακή δομή ενός android project... 7 4.3.3 Εκτέλεση της εφαρμογής...10 4.4 Ο κύκλος ζωής μιας εφαρμογής Android...11 4.4.1 Προτεραιότητα εφαρμογών...11 4.5 Η κλάση android.app.application...12 4.6 Εισαγωγή στα Activities...15 4.6.1 Δημιουργία ενός Activity...15 4.6.2 Ο κύκλος ζωής ενός Activity...17 4.7 Εισαγωγή στα Intents...20 4.7.1 Χρήση των Intents για την έναρξη των Activities...21 4.8 Εισαγωγή στα Resources...21 5 Graphical User Interfaces Μέρος 1 ο...23 5.1 Layouts...23 5.1.1 Βασικά attributes των αρχείων layout...24 5.2 Input Controls...25 5.2.1 Button...25 5.2.2 EditText...26 5.3 Layout Managers...27 5.3.1 Linear Layout...27 5.3.2 Relative Layout...28 5.3.3 ListView...29 5.3.4 Grid View...29 1

4 Εισαγωγή στις εφαρμογές Οι εφαρμογές στο Android γράφονται στη γλώσσα προγραμματισμού Java. Τα εργαλεία του SDK μεταγλωττίζουν τον κώδικα μαζί με δεδομένα και αρχεία πόρων σε ένα Android package, που είναι ένα συμπιεσμένο αρχείο με την κατάληξη.apk. Ο κώδικας σε ένα.apk θεωρείται ως μια εφαρμογή και είναι το αρχείο που χρησιμοποιεί μια συσκευή για να εγκαταστήσει την εφαρμογή. Μόλις εγκατασταθεί σε κάποια συσκευή, μια εφαρμογή τρέχει στο δικό της sandbox, ένα περιορισμένο για λόγους ασφάλειας περιβάλλον εκτέλεσης: Το λειτουργικό σύστημα δημιουργεί έναν χρήστη συστήματος για κάθε μια εφαρμογή. Προεπιλεγμένα το σύστημα θέτει σε κάθε εφαρμογή ένα μοναδικό ID χρήστη, το οποίο είναι άγνωστο στην εφαρμογή. Το σύστημα θέτει τα δικαιώματα για όλα τα αρχεία σε μια εφαρμογή, έτσι ώστε να μπορούν να προσπελαστούν μόνο από το ID που τίθεται στην εφαρμογή. Κάθε διεργασία τρέχει στη δική της VM έτσι ώστε ο κώδικας της να τρέχει απομονωμένος από τις άλλες εφαρμογές. Προεπιλεγμένα κάθε εφαρμογή τρέχει στη δική της διεργασία. Το Android εκκινεί αυτή τη διεργασία όταν οποιοδήποτε συστατικό της εφαρμογής πρέπει να εκτελεστεί και την παύει όταν δεν χρειάζεται ή όταν το σύστημα πρέπει να απελευθερώσει πόρους για άλλες εφαρμογές. Με αυτόν τον τρόπο το Android υλοποιεί την αρχή του ελάχιστου προνομίου (least privilege) κατά την οποία κάθε εφαρμογή προεπιλεγμένα έχει πρόσβαση μόνο στα συστατικά που χρειάζεται για να πετύχει το σκοπό της και τίποτα περισσότερο. Αυτό δημιουργεί ένα αρκετά ασφαλές περιβάλλον στο οποίο μια εφαρμογή δεν μπορεί να προσπελάσει κομμάτια του συστήματος για τα οποία δεν έχει δικαιώματα. Ωστόσο υπάρχουν τρόποι για να μοιραστεί μια εφαρμογή δεδομένα με άλλες εφαρμογές ή να προσπελάσει υπηρεσίες του συστήματος: Είναι δυνατό δυο εφαρμογές να μοιραστούν το ίδιο Linux user ID, οπότε θα μπορούν να προσπελάσει η μια τα αρχεία της άλλης. Επίσης μπορούν να τρέξουν ακόμα και στην ίδια VM. Μια εφαρμογή μπορεί να αιτηθεί δικαιώματα για να προσπελάσει τα δεδομένα μιας συσκευής όπως τις επαφές, τα μηνύματα SMS, την κάρτα μνήμης, την κάμερα, το Bluetooth και τα υπόλοιπα. Όλα αυτά τα δικαιώματα δίνονται στο χρήστη κατά την εγκατάσταση της εφαρμογής. Για να γράψουμε ποιοτικές εφαρμογές, είναι σημαντικό να κατανοήσουμε τα ήδη των εφαρμογών που μπορούμε να φτιάξουμε και τα συστατικά από τα οποία θα αποτελούνται. Σε αυτή την ενότητα κάνουμε μια εισαγωγή σε αυτά τα συστατικά, δίνοντας περισσότερη έμφαση στα Activities. 4.1 Κατηγορίες εφαρμογών Οι περισσότερες από τις εφαρμογές που αναπτύσσουμε στο Android εμπίπτουν σε μια από τις ακόλουθες κατηγορίες: Εφαρμογές προσκηνίου Μια εφαρμογή που χρησιμοποιείται μόνο όταν είναι στο προσκήνιο και αναστέλλεται όταν δεν είναι ορατή ανήκει σε αυτήν την κατηγορία. Όταν αναπτύσσουμε εφαρμογές προσκηνίου (Foreground applications) πρέπει να έχουμε κατά νου τον κύκλο ζωής ενός Activity έτσι ώστε ένα Activity να μπορεί να εναλλάσσεται μεταξύ του παρασκηνίου και του προσκηνίου. Οι εφαρμογές αυτού του είδους δεν έχουν τον έλεγχο του κύκλου ζωής τους κάτι που σημαίνει ότι πρέπει να αποθηκεύσουμε την κατάσταση της εφαρμογής όταν αυτή απομακρυνθεί 2

από το προσκήνιο και στη συνέχεια όταν επανέλθει σε αυτό να την επαναφέρουμε στην ίδια κατάσταση. Επίσης είναι πολύ σημαντικό, οι εφαρμογές που ανήκουν σε αυτή την κατηγορία να παρουσιάζουν μια αρκετά καλή διεπαφή χρήστη. Παραδείγματα εφαρμογών που ανήκουν σε αυτήν την κατηγορία είναι τα παιχνίδια. Εφαρμογές παρασκηνίου Οι εφαρμογές που ανήκουν σε αυτήν την κατηγορία έχουν ελάχιστη ή και καθόλου αλληλεπίδραση με το χρήστη και πέραν της ρύθμισής τους τον περισσότερο χρόνο εκτέλεσής τους παραμένουν κρυφές. Τις περισσότερες φορές παρακολουθούν για μηνύματα ή ενέργειες που προκαλούνται από το υλικό, το σύστημα ή άλλες εφαρμογές αντί να βασίζονται στην αλληλεπίδραση με το χρήστη. Μπορούμε να δημιουργήσουμε εντελώς αόρατες υπηρεσίες, αλλά στην πράξη είναι καλό να παρέχουμε ένα βασικό επίπεδο ελέγχου στο χρήστη. Κατ ελάχιστον λοιπόν είναι καλό να επιτρέπουμε στους χρήστες να επιβεβαιώσουν ότι η υπηρεσία τρέχει και να τους αφήνουμε να ρυθμίζουν, να παύουν ή να την τερματίζουν όποτε επιθυμούν. Διακοπτόμενες εφαρμογές Υπάρχουν περιπτώσεις που χρειάζεται μια εφαρμογή να δέχεται εισόδους από το χρήστη αλλά και να αντιδρά σε γεγονότα όταν δεν είναι στο προσκήνιο. Οι εφαρμογές της κατηγορίας αυτής λοιπόν είναι μια ένωση ορατών Activities και αόρατων υπηρεσιών παρασκηνίου ή broadcast receivers. Τέτοιες εφαρμογές πρέπει να γνωρίζουν ανά πάσα στιγμή την κατάστασή τους όταν αλληλεπιδρούν με το χρήστη. Για παράδειγμα θα πρέπει να ενημερώνουν το UI όταν είναι ορατό και να στέλνουν notifications για να ενημερώνουν το χρήστη όταν είναι στο παρασκήνιο. Παραδείγματα τέτοιων εφαρμογών είναι αυτές για email ή για τη λήψη ειδήσεων. Widgets και Live Wallpapers Μερικές εφαρμογές αναπαρίστανται μόνο σαν ένα widget για το home-screen της συσκευής ή σαν live wallpapers. Δημιουργώντας μια τέτοια εφαρμογή, παρέχουμε διαδραστικά εικονικά στοιχεία με τα οποία μπορούμε να προσθέσουμε λειτουργικότητα στα home screens. Οι εφαρμογές μόνο με widgets είναι χρήσιμες στην παροχή δυναμικής πληροφορίας όπως για παράδειγμα τη στάθμη της μπαταρίας ή την πρόβλεψη του καιρού. 4.2 Συστατικά εφαρμογών Οι εφαρμογές στο Android αποτελούνται από χαλαρά συνδεδεμένα (loosely coupled) συστατικά που συνδέονται μεταξύ τους από το manifest της εφαρμογής το οποίο περιγράφει καθένα συστατικό αλλά και πώς όλα τα συστατικά αλληλεπιδρούν μεταξύ τους. Το manifest επίσης χρησιμοποιείται για να προσδιορίσει τα μεταδεδομένα της εφαρμογής, τις απαιτήσεις του σε υλικό και σε χαρακτηριστικά της πλατφόρμας, εξωτερικές βιβλιοθήκες και δικαιώματα. Επειδή τα συστατικά αυτά είναι συνδεδεμένα χαλαρά, μπορούν να χρησιμοποιηθούν και ανεξάρτητα ή να διαμοιραστούν μεταξύ των εφαρμογών. Activities Ένα Activity αποτελεί τον θεμέλιο λίθο ενός User Interface. Κατ' αναλογία, ένα Activity είναι για μια Android εφαρμογή ό,τι ένα παράθυρο ή ένας διάλογος για μία desktop παραθυρική εφαρμογή. Κάθε εφαρμογή λοιπόν αποτελείται από τουλάχιστον ένα Activity ή και περισσότερα, αν η εφαρμογή χρησιμοποιεί περισσότερες της μίας οθόνες διάδρασης. Τα activities χρησιμοποιούν views και fragments για να τοποθετήσουν στο επίπεδο και να εμφανίσουν πληροφορία, αλλά και να αποκριθούν σε ενέργειες του χρήστη. Intents Τα Intents είναι από τα πιο σημαντικά συστατικά της πλατφόρμας και περιγράφουν ένα μήνυμα συστήματος. Τα μηνύματα αυτά παράγονται και 'κυκλοφορούν' στο σύστημα καθ' όλη τη χρονική περίοδο κατά την οποία η συσκευή είναι σε λειτουργία και ενημερώνουν τις εφαρμογές για κάθε είδους συμβάν που λαμβάνει χώρα ανά πάσα χρονική στιγμή. Ένα τέτοιο 3

συμβάν μπορεί να είναι μια αλλαγή στην κατάσταση μιας hardware συσκευής (π.χ. ο χρήστης ενεργοποίησε το Bluetooth), η εισροή δεδομένων (π.χ. μόλις παραλήφθηκε ένα SMS), ή ένα συμβάν που προκλήθηκε από μία εφαρμογή μετά από χειρισμό του χρήστη (π.χ. ο χρήστης έκανε κλικ σε ένα link και πρέπει να ανοίξει ο web browser και να προβληθεί η αντίστοιχη ιστοσελίδα). Ως προγραμματιστές, όχι μόνο μπορούμε να εκτελέσουμε μια ενέργεια ανταποκρινόμενοι σε ένα τέτοιο συμβάν, αλλά έχουμε και τη δυνατότητα να δημιουργήσουμε τα δικά μας ούτως ώστε να λανσάρουμε κάποιο Activity ή για να ενημερωθούμε για μία συνθήκη που επαληθεύεται (π.χ. πυροδότησε ένα Intent όταν η ταχύτητα κίνησης του χρήστη υπερβεί τα 5Km/h). Content Providers Οι Content Providers αποτελούν ένα μέσο μόνιμης αποθήκευσης και συνήθως αλληλοεπιδρούν με SQL βάσεις δεδομένων. Αποτελούν επίσης και τον προτιμώμενο τρόπο διαμοιρασμού δεδομένων πέραν των ορίων μιας εφαρμογής. Μπορούμε να ρυθμίσουμε τον content provider της εφαρμογής μας να επιτρέπει την πρόσβαση στα δεδομένα του από άλλες εφαρμογές και όμοια η εφαρμογή μας, μπορεί να χρησιμοποιεί τους content providers που παρέχουν οι άλλες εφαρμογές. Για παράδειγμα, μία εφαρμογή που θέλει να έχει πρόσβαση στις επαφές του τηλεφώνου π.χ. για να πραγματοποιήσει μία κλήση, θα πρέπει να κάνει χρήση του αντίστοιχου Content Provider. Οι συσκευές Android περιλαμβάνουν πολλαπλούς native content providers που κοινοποιούν χρήσιμες βάσεις δεδομένων όπως το media store και οι επαφές. Εκτός από τους ήδη υπάρχοντες, μπορούμε να δημιουργήσουμε και τους δικούς μας Content Providers ώστε να δίνουμε πρόσβαση με ελεγχόμενο τρόπο σε δεδομένα που θέλουμε να θέσουμε ως κοινόχρηστα σε άλλες εφαρμογές. Services Τα Activities, οι Content Providers και τα Intents έχουν τυπικά μικρή διάρκεια ζωής και μπορούν να τερματίσουν από το λειτουργικό σύστημα ανά πάσα χρονική στιγμή. Τα services τρέχουν χωρίς κάποιο γραφικό περιβάλλον στο παρασκήνιο και επιτελούν εργασίες όπως να ενημερώνουν τις πηγές δεδομένων και τα Activities, προκαλούν ειδοποιήσεις και μεταδίδουν intents. Χρησιμοποιούνται για να υλοποιούν εφαρμογές που χρειάζεται να τρέχουν συνεχώς ή εφαρμογές που δεν χρειάζονται αλληλεπίδραση με το χρήστη. Θα μπορούσαμε δηλαδή να γράψουμε κάποιο Service το οποίο παίζει διαρκώς μουσική, ακόμη κι αν το Activity που το ελέγχει έχει τερματίσει. Τα Android Services δηλαδή είναι κάτι αντίστοιχο των Windows Services του λειτουργικού των Windows ή των daemons του Linux. Κάθε εφαρμογή απαρτίζεται από ένα ή περισσότερα από τα προαναφερθέντα συστατικά, τα οποία αρχικοποιούνται από το Android όταν χρειαστεί. Οι υπόλοιπες εφαρμογές που εκτελούνται μπορούν να τα χρησιμοποιήσουν, ανάλογα με τα καθορισμένα δικαιώματα πρόσβασης. Καθώς διάφορες λειτουργίες λαμβάνουν χώρα κατά τη χρήση της συσκευής (οι οποίες μάλιστα δε συσχετίζονται μεταξύ τους, όπως π.χ. μια εισερχόμενη κλήση), κάθε συστατικό περνάει από διάφορες φάσεις του κύκλου ζωής του όπως να δημιουργηθεί, να βρεθεί στο προσκήνιο, να μεταβεί στο παρασκήνιο και τέλος να καταστραφεί. Ένα μοναδικό χαρακτηριστικό του Android είναι ότι κάθε εφαρμογή μπορεί να ξεκινήσει κάποιο συστατικό μιας άλλης εφαρμογής. Για παράδειγμα για τη λήψη μιας φωτογραφίας μπορούμε να χρησιμοποιήσουμε την έτοιμη εφαρμογή που έχει η συσκευή αντί να φτιάξουμε μια από την αρχή. Δεν χρειάζεται να ενσωματώσουμε τον κώδικα τις εφαρμογής για φωτογράφηση ούτε καν να τη συνδέσουμε με την εφαρμογή μας. Αντίθετα μπορούμε απλώς να ξεκινήσουμε ένα activity στην εφαρμογή που λαμβάνει φωτογραφίες. Όταν ολοκληρώνεται η φωτογραφία επιστρέφει στην εφαρμογή για να μπορέσουμε να τη χρησιμοποιήσουμε. Στο χρήστη θα φαίνεται ότι η κάμερα είναι κομμάτι της εφαρμογής ενώ στην πραγματικότητα είναι μια ξεχωριστή εφαρμογή. Όταν το σύστημα ξεκινά ένα συστατικό, ξεκινά τη διεργασία για αυτή την εφαρμογή (αν δεν τρέχει ήδη) και αρχικοποιεί τις κλάσεις που χρειάζονται για το συστατικό. Για παράδειγμα αν η εφαρμογή ξεκινά ένα activity της εφαρμογής λήψεων φωτογραφιών, το activity αυτό τρέχει στη διεργασία που τρέχει η εφαρμογή της κάμερας, όχι στη διεργασία της εφαρμογής μας. Συνεπώς 4

αντίθετα με τις εφαρμογές στα περισσότερα συστήματα, οι εφαρμογές στο Android δεν έχουν ένα μοναδικό σημείο εκκίνησης (δεν υπάρχει μέθοδος main όπως σε ένα Java πρόγραμμα). Επειδή το σύστημα τρέχει κάθε εφαρμογή σε διαφορετική διεργασία με τα κατάλληλα δικαιώματα που περιορίζουν την πρόσβαση σε άλλες εφαρμογές, η εφαρμογή μας δεν μπορεί να ενεργοποιήσει άμεσα ένα συστατικό μιας άλλης εφαρμογής. Ωστόσο το σύστημα μπορεί. Οπότε για να ενεργοποιήσουμε ένα συστατικό μιας άλλης εφαρμογής θα πρέπει να στείλουμε ένα μήνυμα στο σύστημα που ορίζει την πρόθεσή (intent) να ξεκινήσουμε ένα συγκεκριμένο συστατικό. Το σύστημα τότε ενεργοποιεί το συστατικό. 4.3 Τα Android Projects Το πρώτο πράγμα που χρειάζεται για την ανάπτυξη μιας εφαρμογής είναι η δημιουργία ενός project στο Eclipse. Για το λόγο αυτό δημιουργούμε ένα workspace, στο οποίο θα αποθηκεύουμε όλα τα android projects μας. Στη συνέχεια ακολουθώντας τον οδηγό δημιουργίας Android Project (Android Project Wizard) δημιουργούμε ένα νέο project. Ο οδηγός αυτός δημιουργεί όλα τα απαραίτητα αρχεία για μια εφαρμογή. 4.3.1 Δημιουργία ενός Android Project με το Eclipse Για να δημιουργήσουμε λοιπόν ένα νέο project ακολουθούμε τα ακόλουθα βήματα από το Eclipse: 1. Επιλέγουμε File, New, Android Project ή πατάμε το εικονίδιο δημιουργίας νέων project ( ) στην μπάρα εργαλείων του Eclipse, ανοίγουμε το φάκελο Android και επιλέγουμε Android Application. 2. Συμπληρώνουμε τη φόρμα που εμφανίζεται: Το πεδίο Application Name είναι το όνομα της εφαρμογής που θα εμφανίζεται στους χρήστες. Για το παράδειγμα αυτό, θα χρησιμοποιήσουμε το My First App. Το πεδίο Project Name είναι το όνομα για το directory του project και το όνομα που είναι ορατό στο Eclipse. Το πεδίο Package Name είναι ο ονοματοχώρος τον κλάσεων της ε- φαρμογής. Ακολουθεί τους ίδιους κανόνες με τα πακέτα στη Java. Το όνομα του πακέτου πρέπει να είναι μοναδικό ανάμεσα σε όλα τα πακέτα που είναι εγκατεστημένα στο σύστημα. Για το λόγο αυτό είναι προτιμότερο να χρησιμοποιούμε ένα όνομα που ξεκινά με το αντίστοφο domain name του οργανισμού ή της ιστοσελίδας μας. Για το project αυτό μπορούμε να χρησιμοποιήσουμε το com.example.myfirstapp που συμπλήρωσε αυτόματα το Eclipse, ω- στόσο αν θέλουμε να δημοσιεύσουμε την εφαρμογή αυτή στο Google Play θα πρέπει να δώσουμε στο πακέτο ένα πραγματικό ό- νομα. Το minimum Required SDK είναι η χαμηλότερη έκδοση του Android που υποστηρίζει η εφαρμογή μας και μπορεί να λάβει σαν τιμή κάποιο από τα API Levels. Για να υποστηρίξουμε όσο το δυνατό περισσότερες συσκευές, θα πρέπει να ορίσουμε το μικρότερο API Level που υποστηρίζει τις δυνατότητες της εφαρμογής μας. Αν οποιοδήποτε χαρακτηριστικό της εφαρμογής μας υποστηρίζεται μόνο σε κάποιο από τα πιο πρόσφατα levels και δεν είναι σημαντικό για την όλη εφαρμογή, μπορούμε να το ενεργοποιούμε μόνο στις εκδόσεις που το υποστηρίζουν. Το πεδίο Target SDK ορίζει το υψηλότερο επίπεδο με το οποίο δοκιμάσαμε την εφαρμογή μας. Καθώς διατίθενται οι νέες εκδόσεις του Android, θα πρέπει να δοκιμάζουμε την εφαρμογή στη νέα έκδοση 5

και να ενημερώσουμε αυτή την τιμή για να ταυτίζεται με την τελευταία έκδοση ή να εκμεταλλεύεται τα νέα χαρακτηριστικά της πλατφόρμας. Το πεδίο Compile With είναι η έκδοση της πλατφόρμας με βάση την οποία πρόκειται η εφαρμογή μας να μεταγλωττιστεί της οποίας μεταγλωττίζουμε την εφαρμογή. Προεπιλεγμένα τίθεται στην τελευταία διαθέσιμη έκδοση του SDK. Αν δεν υπάρχει κάποια έκδοση κατεβασμένη, χρειάζεται να κατεβάσουμε. Το πεδίο Theme ορίζει το στυλ του user interface του Android που θα εφαρμοστεί στο app. 3. Στο επόμενο παράθυρο με τις ρυθμίσεις, αφήνουμε τις προεπιλεγμένες τιμές και πατάμε Next. 4. Το επόμενο παράθυρο μας βοηθάει να δημιουργήσουμε ένα εικονίδιο εκκίνησης της εφαρμογής μας. Μπορούμε να προσαρμόσουμε το εικονίδιο ανάλογα με τις απαιτήσεις μας, ενώ το εργαλείο παράγει ένα εικονίδιο για διάφορες πυκνότητες οθονών. Πριν όμως δημοσιεύσουμε την εφαρμογή μας 6

θα πρέπει να βεβαιωθούμε ότι το εικονίδιο τηρεί τους κανόνες που ορίζονται στον οδηγό σχεδίασης εικονιδίων 1. Στη συνέχεια πατάμε Next. 5. Τώρα μπορούμε να επιλέξουμε ένα activity template από το οποίο μπορούμε να ξεκινήσουμε την ανάπτυξη της εφαρμογής μας. 6. Αφήνουμε όλες τις λεπτομέρειες του Activity στις προεπιλεγμένες τιμές τους και πατάμε Finish. Το project είναι έτοιμο με τα προεπιλεγμένα αρχεία δημιουργημένα. Είμαστε σε θέση να ξεκινήσουμε την ανάπτυξη της εφαρμογής. 4.3.2 Η αρχειακή δομή ενός android project Παρόλο που το μέγεθος και η πολυπλοκότητα ενός android project ποικίλλει, η δομή τους είναι κοινή. Στην εικόνα 4-1 μπορούμε να δούμε τη δομή των αρχείων του project που μόλις δημιουργήσαμε. Οι android εφαρμογές έχουν μερικά απαραίτητα και μερικά προαιρετικά στοιχεία. Τα στοιχεία αυτά φαίνονται στον πίνακα 4-1. Όπως μπορούμε να δούμε στον πίνακα αυτόν, μια εφαρμογή αποτελείται κυρίως από τρία κομμάτια: α) το κομμάτι που περιγράφει την εφαρμογή, β) μια συλλογή από διάφορους πόρους και γ) τον πηγαίο κώδικα της εφαρμογής. Αν εξαιρέσουμε το αρχείο AndroidManifest.xml μπορούμε να δούμε μια εφαρμογή Android πολύ απλά σαν την λογική της εφαρμογής μας (υλοποιημένη μέσα στον κώδικα) και τους πόρους. Η 1 http://developer.android.com/design/style/iconography.html 7

βασική δομή μιας android εφαρμογής μοιάζει λίγο με τη βασική δομή μιας J2EE εφαρμογής, όπου οι πόροι αντιστοιχεί στις JSPs, η λογική της εφαρμογής αντιστοιχεί στα servlets και το AndroidManifest.xml με το αρχείο web.xml. Εικόνα 4-1 Η αρχειακή δομή της εφαρμογής MyFirstProject Πίνακας 4-1 Περιγραφή της δομής μιας εφαρμογής Στοιχείο Περιγραφή Προεραιτικό AndroidManifest.xml Το αρχείο ρυθμίσεων της εφαρμογής. Ορίζει τα Όχι activities, τους content providers και τους intent receivers της εφαρμογής. Εδώ μπορούμε να ορίσουμε τα permissions που ζητά αλλά και δίνει η εφαρμογή σε άλλες εφρμογές που θέλουν να τη χρησιμοποιήσουν. src Ο φάκελος που περιέχει τον πηγαίο κώδικα της Όχι εφαρμογής gen Φάκελος που περιέχει πόρους που δημιουργήθηκαν Όχι αυτόματα assets Μια αυθαίρετη συλλογή από αρχεία και φακέλους Ναι res Ένας φάκελος που περιέχει τους πόρους της Όχι εφαρμογής. Είναι ο φάκελος γονέας των drawable, anim, layout, menu, value, xml και raw drawable- Φάκελοι που περιέχουν τις εικόνες που Ναι [h/l/m/xh]dpi χρησιμοποιούνται στην εφαρμογή ή αρχεία που τις περιγράφουν για διάφορα μεγέθη οθονών layout Φάκελος με αρχεία για τον ορισμό του UI της Ναι εφαρμογής menu Φάκελος που περιέχει αρχεία XML που περιγράφουν τα μενού της εφαρμογής Ναι 8

values Φάκελος που περιέχει άλλους πόρους που χρησιμοποιεί η εφαρμογή όπως strings, ή χρώματα Ναι Μερικές παρατηρήσεις που πρέπει να κάνουμε για την αρχειακή δομή ενός project είναι οι εξής: Το Android υποστηρίζει μόνο μια γραμμική λίστα αρχείων μέσα στους προκαθορισμένους φακέλους κάτω από το φάκελο res. Για παράδειγμα, δεν υποστηρίζει φωλιασμένους φακέλος κάτω από το φάκελο layout (ή άλλους φακέλους κάτω από τον res). Επίσης υπάρχουν διάφορες ομοιότητες μεταξύ του φακέλου assets και του φακέλου raw κάτω από το res. Και οι δυο φάκελοι περιέχουν raw αρχεία, ωστόσο τα αρχεία στο φάκελο raw θεωρούνται πόροι σε αντίθεση με τα αρχεία στο φάκελο assets που δεν θεωρούνται. Κατά συνέπεια τα αρχεία στο raw μπορούν να προσπελαστούν με IDs πόρων κλπ. Αλλά τα περιοχόμενα του φακέλου assets θεωρούνται γενικού σκοπού και χρησιμοποιούνται χωρίς περιορισμούς και μπορούμε να εισάγουμε μια οποιαδήποτε άλλη αρχειακή δομή επιθυμούμε. Το αρχείο Android Manifest Κάθε Android project περιλαμβάνει ένα αρχείο manifest, το AndroidManifest.xml, που αποθηκεύεται στην κορυφή της ιεραρχίας των αρχείων στο project. Το manifest ορίζει τη δομή και τα μεταδεδομένα της εφαρμογής, τα συστατικά της και τις απαιτήσεις της. Περιλαμβάνει κόμβους για κάθε μια από τις Activities, Services, Content Providers και Broadcast Receivers που αποτελούν μια εφαρμογή και χρησιμοποιώντας τα Intent Filters και τα Permissions καθορίζει πως θα αλληλεπιδρούν μεταξύ τους και με άλλες εφαρμογές. Το manifest μπορεί επίσης να καθορίσει τα μεταδεδομένα της εφαρμογής (όπως τα icons, τον αριθμό της έκδοσης ή το theme) και επιπρόσθετους κόμβους στο top-level που ορίζουν τα απαιτούμενα permissions, τα unit tests ενώ ορίζονται και τις απαιτήσεις ως προς το υλικό, την οθόνη και την πλατφόρμα. Το manifest αποτελείται από το root tag manifest το οποίο περιέχει ένα package attribute που ορίζεται στο πακέτο του project. Περιλαμβάνει επίσης και ένα xmlns:android attribute που παρέχει διάφορα attributes συστήματος που χρησιμοποιούνται μέσα στο αρχείο. Χρησιμοποιούμε το attribute versioncode για να ορίσουμε την τρέχουσα έκδοση της εφαρμογής σαν έναν ακέραιο που αυξάνει με κάθε σημαντική αλλαγή στην εφαρμογή και χρησιμοποιούμε το versionname attribute για να καθορίσουμε το όνομα της έκδοσης που θα είναι ορατή στους χρήστες. Μπορούμε επίσης να ορίσουμε αν θα επιτρέπεται ή αν είναι επιθυμητό να εγκαθίσταται η εφαρμογή σε εξωτερικό αποθηκευτικό μέσο (συνήθως μια κάρτα SD) αντί μιας εσωτερικής πηγής χρησιμοποιώντας το attribute installlocation, θέτοντας την τιμή preferexternal ή auto, όπου η πρώτη εγκαθιστά την εφαρμογή σε εξωτερικό μέσο όποτε είναι δυνατό και η δεύτερη αφήνει την απόφαση στο σύστημα. Αν δεν ορίσουμε το attribute αυτό, η εφαρμογή θα εγκατασταθεί στην εσωτερική μνήμη και οι χρήστες δεν θα μπορούν να τη μεταφέρουν σε κάποια εξωτερική. Επειδή η εσωτερική μνήμη είναι περιορισμένη, είναι καλό όποτε αυτό είναι δυνατό να εγκαθιστούμε την εφαρμογή στην εξωτερική μνήμη. Ένα από τα πιο σημαντικά elements του manifest είναι το <uses-sdk>, το οποίο ορίζει τη συμβατότητα της εφαρμογής με διάφορες εκδόσεις του Android χρησιμοποιώντας τα attributes android:minsdkversion και android:targetsdkversion. Για την εφαρμογή μας αυτά μοιάζουν με τον ακόλουθο κώδικα: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myfirstproject" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="8" android:targetsdkversion="17" /> </manifest> 9