Εισαγωγή σε Android Δομή αρχείων σε Android Projects Διάλεξη 8 Εισαγωγή σε Android Δομή αρχείων σε Android Projects Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 1
Τμήμα Πληροφορικής και Τηλεπικοινωνιών Εισαγωγή σε Android Δομή αρχείων σε Android Projects Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 2
Τμήμα Πληροφορικής και Τηλεπικοινωνιών Τι είναι το Android Μια στοίβα λογισμικού για κινητές συσκευές που περιλαμβάνει Λειτουργικό σύστημα Middleware Βασικές εφαρμογές Χρησιμοποιεί Linux για να παρέχει υπηρεσίες συστήματος Ασφάλεια Διαχείριση μνήμης Διαχείριση διεργασιών Διαχείριση ενέργειας Drivers υλικού Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 3
Αρχιτεκτονική Android Εφαρμογές που αλληλεπιδρούν με τον χρήστη APIs used for Android development Android Native Libraries written in C/C++ Android Runtime Environment hardware drivers, process and memory management, network and power management Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 4
Dalvik Virtual Machine Μεταγλώττιση κώδικα σε machine-independent εντολές (bytecodes) executed by the Dalvik VM on the mobile device. Βελτιστοποιημένο JVM με χαμηλές απαιτήσεις μνήμης Βασισμένο στο Linux Kernel για Threading Low-level διαχείριση μνήμης Δυνατότητα πολλαπλών VM στιγμιοτύπων που επωφελούνται από το Linux OS για απομόνωση ασφάλειας και διεργασιών Dalvik VM Compile time .class files Executable files .dex files .jar files Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 5
Αρχιτεκτονική Android Κάθε εφαρμογή τρέχει στη δική της διαδικασία Linux Κάθε διαδικασία έχει τη δική της Dalvik VM Σε κάθε εφαρμογή δίνεται ένα μοναδικό Linux ID Τα Permissions καθορίζονται ώστε μια εφαρμογή να έχει πρόσβαση σε συγκεκριμένα αρχεία Διάλεξη 8
Βασικά Δομικά Συστατικά Android Activity Το στρώμα παρουσίασης της εφαρμογής Μια εφαρμογή μπορεί να έχει περισσότερα του ενός activities για διαχείριση διαφορετικών φάσεων του προγράμματος Κάθε activity είναι υπεύθυνο να αποθηκεύει την δική του κατάσταση Intent Μηχανισμός που καθορίζει ποια συγκεκριμένη ενέργεια (action) πρέπει να εκτελεστεί Σε android σχεδόν ΟΛΕΣ οι αλληλοεπιδράσεις γίνονται μέσω intents Service Διεργασία που τρέχει στο παρασκήνιο χωρίς τη παρέμβαση του χρήστη. Δεν παρέχει UI στο χρήστη Παρόμοιο με Unix daemon Υπάρχουν πολλά built-in services σε Android Content Providers Επιτρέπουν σε μια εφαρμογή να έχει πρόσβαση σε δεδομένα άλλων εφαρμογών (π.χ. Contacts) Επιτρέπουν σε μια εφαρμογή να διαμοιράζει τα δεδομένα που παράγει σε άλλες εφαρμογές Πριν πούμε για activities, intents κλπ. Πρέπει να πούμε ότι σε android έχουμε διαφορετική φιλοσοφία από standard Linux ή Windows όπου μπορούμε να έχουμε πολλές εφαρμογές να τρέχουν ταυτόχρονα (και έχουμε πολλά παράθυρα). Σε android υπάρχει μία εφαρμογή στο προσκήνιο (η οποία καταλαμβάνει και όλο το display συνήθως) . Καθώς ο χρήστης ανοίγει εφαρμογές ή καθώς μεταβαίνει από μία οθόνη μίας εφαμογής σε επόμενη, οι προηγούμενες (εφαρμογές και οθόνες) μπαίνουν στο application stack και πατώντας πίσω επιστρέφουμε στη προηγούμενη οθόνη ή εφαρμογή Παράδειγμα service: Music player: H μουσική ξεκινάει από κάποιο activity, αλλά θέλουμε να συνεχίσει να παίζει ακόμα και όταν μεταβούμε σε άλλο πρόγραμμα, άρα ο κώδικας που υλοποιεί τη λειτουργία να παίζει η μουσική πρέπει να είναι σε service Παράδειγμα Content Provider: H Google παρέχει ένα Content Provider για τα Contacts οπότε αν κάποια εφαρμογή θέλει να χρησιμοποιήσει τις πληροφορίες που βρίσκονται εκεί αρκεί να χρησιμοποιήσει το αντίστοιχο API Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 7
Βασικά Δομικά Συστατικά Android Views Lists, grids, text boxes, buttons ακόμα και ένας embeddable web browser Activity Manager Διαχειρίζεται τον κύκλο ζωής (life cycle) των εφαρμογών και παρέχει ένα κοινό τρόπο προσπέλασης Notification Manager Επιτρέπει στις εφαρμογές να παρουσιάζουν μηνύματα συναγερμών (alerts) στην γραμμή κατάστασης (status bar) Resource Manager Παρέχει στην εφαρμογή πρόσβαση σε αρχεία εκτός των αρχείων κώδικα, π.χ. localized strings, graphics, layout files Data storage Παρέχει τα δεδομένα στην εφαρμογή και μπορεί να διαμοιραστεί μεταξύ διαφορετικών εφαρμογών. Βάσεις δεδομένων, αρχεία και preferences (hash map) μπορούν να προσπελαστούν από ομάδες εφαρμογών Broadcast receivers Προκαλούν την δημιουργία intents που μπορούν προκαλέσουν την εκτέλεση κώδικα Πριν πούμε για activities, intents κλπ. Πρέπει να πούμε ότι σε android έχουμε διαφορετική φιλοσοφία από standard Linux ή Windows όπου μπορούμε να έχουμε πολλές εφαρμογές να τρέχουν ταυτόχρονα (και έχουμε πολλά παράθυρα). Σε android υπάρχει μία εφαρμογή στο προσκήνιο (η οποία καταλαμβάνει και όλο το display συνήθως) . Καθώς ο χρήστης ανοίγει εφαρμογές ή καθώς μεταβαίνει από μία οθόνη μίας εφαμογής σε επόμενη, οι προηγούμενες (εφαρμογές και οθόνες) μπαίνουν στο application stack και πατώντας πίσω επιστρέφουμε στη προηγούμενη οθόνη ή εφαρμογή Παράδειγμα service: Music player: H μουσική ξεκινάει από κάποιο activity, αλλά θέλουμε να συνεχίσει να παίζει ακόμα και όταν μεταβούμε σε άλλο πρόγραμμα, άρα ο κώδικας που υλοποιεί τη λειτουργία να παίζει η μουσική πρέπει να είναι σε service Παράδειγμα Content Provider: H Google παρέχει ένα Content Provider για τα Contacts οπότε αν κάποια εφαρμογή θέλει να χρησιμοποιήσει τις πληροφορίες που βρίσκονται εκεί αρκεί να χρησιμοποιήσει το αντίστοιχο API Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 8
Εγκατάσταση Android SDK Εγκατάσταση plugin ανάλογα με το περιβάλλον IDE ADT plugin για Eclipse NBAndroid plugin για Netbeans Λήψη SDK tools and platforms μέσω του SDK Manager. Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 9
Τμήμα Πληροφορικής και Τηλεπικοινωνιών Εισαγωγή σε Android Δομή αρχείων σε Android Projects Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 10
Δομή αρχείων σε Android Projects Source code Auto-generated code Files Images UI layout String constants Configuration Διάλεξη 8
Android manifest file (1/2) Κάθε εφαρμογή έχει ένα αρχείο AndroidManifest.xml που παρέχει σημαντικές πληροφορίες για την εφαρμογή στο OS Δίνει όνομα στο Java πακέτο για την εφαρμογή το οποίο αποτελεί μοναδικό αναγνωριστικό για την εφαρμογή Περιγράφει τα components της εφαρμογής (activities, services, content providers κλπ.) Καθορίζει τα δικαιώματα που πρέπει να έχει η εφαρμογή για να έχει πρόσβαση σε προστατευόμενα κομμάτια του API και να αλληλεπιδρά με άλλες εφαρμογές καθώς επίσης και τα δικαιώματα που πρέπει να έχουν άλλες εφαρμογές για να αλληλεπιδρούν με αυτή Κατά την ανάπτυξη και τον έλεγχο της εφαρμογής το αρχείο αυτό περιέχει τις Instrumentation κλάσεις που παρέχουν δυνατότητα monitoring των αλληλεπιδράσεων του συστήματος με την εφαρμογή. Όταν δημοσιοποιείται η εφαρμογή τότε αφαιρούνται αυτές από το αρχείο. Καθορίζει το ελάχιστο επίπεδο Android API που απαιτείται από την εφαρμογή Περιέχει λίστα με τις βιβλιοθήκες με τις οποίες πρέπει να συνδεθεί η εφαρμογή. Περισσότερες πληροφορίες: http://developer.android.com/guide/topics/manifest/manifest-intro.html Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 12
Android manifest file (2) SDK versions Application permissions Activities Intents Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 13
Τμήμα Πληροφορικής και Τηλεπικοινωνιών Κλάση Activity Κάθε διεπαφή χρήστη αναπαρίσταται από μία κλάση Activity Κάθε activity έχει το δικό του κύκλο ζωής Μία εφαρμογή έχει ένα ή περισσότερα activities και μία διεργασία Linux που τα περιέχει Διεργασία != Εφαρμογή Μία εφαρμογή μπορεί να είναι «ζωντανή» ακόμα και αν δεν ισχύει το ίδιο για τη διεργασία της extends Activity override onCreate Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 14
Τμήμα Πληροφορικής και Τηλεπικοινωνιών Απλή Κλάση Activity /src/gr/uoa/di/helloandroid/MainActivity.java UI Layout activity_main.xml Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 15
Τμήμα Πληροφορικής και Τηλεπικοινωνιών Απλό UI Layout XML /res/layout/activity_main.xml TextView Component String hello_word Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 16
Απλό αρχείο string resources /res/values/strings.xml String hello_word Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 17
Κλάση Activity (Παράδειγμα) UI Layout activity_main.xml References to components of activity_main.xml Μέθοδος που καλείται όταν πατηθεί το κουμπί Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 18
UI Layout XML (Παράδειγμα) TextView Component EditText Component Κουμπί button_hello String button_hello Όνομα μεθόδου που θα κληθεί όταν πατηθεί το κουμπί Διάλεξη 8
Αρχείο string resources (Παράδειγμα) Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 20
Εκτέλεση στον Emulator (Παράδειγμα) Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 21
Τμήμα Πληροφορικής και Τηλεπικοινωνιών Activity Lifecycle Εκτελείται όταν το activity είναι έτοιμο να πάει στο παρασκήνιο (background), συνήθως επειδή ένα άλλο activity ξεκινάει. Εδώ πρέπει να αποθηκεύονται όποιες αλλαγές έχει κάνει το πρόγραμμα. Καλείται όταν το activity δεν είναι ορατό πλέον στο χρήστη Καλείται όταν το activity είναι έτοιμο να αλληλεπιδρά με τον χρήστη. Το activity είναι έτοιμο για εμφάνιση προς το χρήστη Καλείται όταν το activity καταστρέφεται Καλείται όταν το activity πρωτοξεκινά. Μπορεί να χρησιμοποιηθεί για αρχικοποίηση της διεπαφής χρήστη. Παίρνει μία παράμετρο null ή πληροφορίες κατάστασης που είχαν αποθηκευτεί από την μέθοδο onSaveInstanceState() Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 22
Τμήμα Πληροφορικής και Τηλεπικοινωνιών Αναφορές Android Official Training: http://developer.android.com/training/ Android Documentation: http://developer.android.com/reference/packages.html Android Permissions http://developer.android.com/guide/topics/security/permissions.html Διάλεξη 8 Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ανάπτυξη Λογισμικού Χειμερινό Εξάμηνο 2014-2015 23