Κεφάλαιο 12 ΑΝΑΠΤΥΞΗ ΥΠΗΡΕΣΙΩΝ ΝΕΦΟΥΣ ΚΑΙ ΕΦΑΡΜΟΓΩΝ ΕΥΦΥΩΝ ΚΙΝΗΤΩΝ ΣΥΣΚΕΥΩΝ Σύνοψη Σε αυτό το κεφάλαιο αναλύεται η ενσωµάτωση των νέων τεχνολογιών και των υπηρεσιών νέφους, και δίνονται χαρακτηριστικά παραδείγµατα υλοποίησής τους. Επίσης, εξετάζεται η δηµιουργία εφαρµογών κινητών τηλεφώνων. Γίνεται αναφορά στα πιο δηµοφιλή λειτουργικά συστήµατα για ευφυείς κινητές συσκευές, όπως είναι τα Apple ios, Google Android και Microsoft Windows Phone. Το ενδιαφέρον εστιάζεται στο λειτουργικό Android, και αναλύονται η αρχιτεκτονική και ο τρόπος λειτουργίας του. Τέλος, δίνεται ένα απλό παράδειγµα στο περιβάλλον ανάπτυξης Android Studio. Προαπαιτούµενη γνώση 1) Κεφάλαια 4, 5 και 6 του παρόντος. 2) A. T. Velte, T. J. Velte και R. Elsenpeter (2010), Cloud Computing: Μια πρακτική προσέγγιση, Χ. Γκιούρδας (Κωδικός Βιβλίου στον Εύδοξο: 12250). 3) P. Deitel, H. Deitel και A. Deitel (2014), Android προγραµµατισµός, Χ. Γκιούρδας (Κωδικός Βιβλίου στον Εύδοξο: 41960295). 12.1 Η υπολογιστική νέφους Η υπολογιστική νέφους (cloud computing), όπως είδαµε και στο Κεφάλαιο 4, είναι µια νέα τεχνολογία υποδοµής που παρέχει υπηρεσίες µέσω διαδικτύου. Οι υπηρεσίες υπολογιστικής νέφους επιτρέπουν σε ιδιώτες και επιχειρήσεις να χρησιµοποιήσουν υλικό και λογισµικό που βρίσκονται σε αποµακρυσµένες περιοχές, του οποίου δεν έχουν ούτε την ιδιοκτησία, ούτε τη διαχείριση, καθώς τις έχουν αναλάβει τρίτοι. Παράδειγµα υπηρεσιών υπολογιστικής νέφους είναι οι υπηρεσίες διαδικτυακής αποθήκευσης αρχείων (online file storage), όπως τα icloud της Apple, Dropbox και Google Drive. Στη σύγχρονη εποχή, η υπολογιστική νέφους είναι η γρηγορότερα αναπτυσσόµενη µορφή της τεχνολογίας των υπολογιστών και της πληροφορικής γενικότερα.[1] Αυτό συµβαίνει γιατί βοηθά στη δραστική µείωση του κόστους για: κτιριακές υποδοµές, λειτουργία των ιστότοπων (web sites), υποδοµές πληροφορικής (Information Infrastructure/ΙΤ) και υποστήριξή τους, και λογισµικό και υλικό. Οι τεχνολογίες υπολογιστικής νέφους προσφέρουν: Αυτοεξυπηρέτηση κατ απαίτηση (on-demand self-service): Χρησιµοποιούνται υπηρεσίες που διατίθενται από τους παρόχους νέφους, µόνο όταν αυτές απαιτούνται. Ο χρήστης, αφού αποκτήσει πρόσβαση στις υπηρεσίες αυτές, τις διαχειρίζεται µέσω ενός πίνακα ελέγχου (control panel). Ευρεία δικτυακή πρόσβαση (broad network access): Διατίθενται πόροι του νέφους σε κάθε τύπο συσκευής και πρόσβαση στους πόρους αυτούς από κάθε τοποθεσία που διαθέτει σύνδεση στο διαδίκτυο. Συγκέντρωση πόρων (resource pooling): Παρέχονται πόροι σε πολλούς χρήστες, µέσω προσωρινών και κλιµακούµενων (scalable) υπηρεσιών, οι οποίες προσαρµόζονται στον κάθε χρήστη, χωρίς να φαίνονται οι αλλαγές στον τελικό χρήστη.
Γρήγορη ελαστικότητα (rapid elasticity): Υπάρχει συνεχής ανακατανοµή των πόρων, όταν αυτό είναι απαραίτητο. Μετρήσιµη υπηρεσία (measured service): Ο πάροχος του νέφους µετρά ή ελέγχει την παροχή υπηρεσιών για διάφορους λόγους, όπως για τη δηµιουργία λογαριασµού χρέωσης ή για την επαλήθευση της αποτελεσµατικής χρήσης των πόρων. Πρόσβαση σε API: Παρέχονται διεπαφές προγραµµατισµού εφαρµογών (Application Programming Interfaces/API), για τη δηµιουργία εφαρµογών στην υπολογιστική νέφους. Η διαδικτυακή µορφή της υπολογιστικής νέφους ενέχει κινδύνους όσον αφορά την ακεραιότητα, την ασφάλεια, την ιχνηλασιµότητα και τη διαχειρισιµότητα. Η επιλογή µιας υπηρεσίας υπολογιστικής νέφους εξαρτάται από ορισµένα κριτήρια, εκ των οποίων τα κυριότερα είναι: η δυνατότητα ασφάλειας, η δυνατότητα των προσφερόµενων υπηρεσιών. η ευκολία ανάπτυξης εφαρµογών, η χρήση ίδιων τεχνολογιών, η δυνατότητα επικοινωνίας µε όλους τους τύπους κινητών συσκευών και τηλεφώνων, η ικανότητα για γρήγορη και άµεση αυξοµείωση των πόρων που χρησιµοποιούνται και η αποτελεσµατική και ευέλικτη τιµολόγηση των υπηρεσιών του. Παραδείγµατα διαθέσιµων υπηρεσιών της υπολογιστικής νέφους είναι:[2] η Windows Azure της Microsoft, η Amazon Web Services (AWS) της Amazon, η Apache CloudStack της Apache και η Google Cloud Platform της Google. 12.2 Ασφάλεια και υπολογιστική νέφους Παρ όλο που η υπολογιστική νέφους είναι µια νέα τεχνολογία, έχουν ήδη προκύψει κάποια θέµατα ασφάλειας και ιδιωτικότητας.[2] Η ιδιωτικότητα αποτελεί σηµαντικό θέµα, καθώς αρκετοί χρήστες ή επιχειρήσεις µπορεί να αποθηκεύουν προσωπικές, ευαίσθητες ή κρίσιµες πληροφορίες. Για το λόγο αυτό, η αποθήκευση των δεδοµένων πρέπει να γίνεται µόνο σε παρόχους τους οποίους εµπιστεύεται πλήρως ο χρήστης ή η επιχείρηση. Από την πλευρά τους, οι πάροχοι πρέπει να εφαρµόζουν κρυπτογράφηση των δεδοµένων, για την αντιµετώπιση θεµάτων ιδιωτικότητας. Ωστόσο, η κρυπτογράφηση µπορεί να χρειάζεται πρόσθετους σηµαντικούς πόρους, δηλαδή να επιφέρει πρόσθετο κόστος στον πάροχο για να υλοποιηθεί, ενώ σε κάποιες περιπτώσεις µπορεί να υπάρξει πρόβληµα µε την αποκρυπτογράφηση των δεδοµένων, πρόβληµα που ενδέχεται να τα κάνει µη άµεσα χρησιµοποιήσιµα. Επίσης, τα δεδοµένα µπορεί να βρεθούν σε κίνδυνο στην περίπτωση που ένας χρήστης της υπηρεσίας νέφους αποκτήσει πρόσβαση σε δεδοµένα άλλου χρήστη, σκόπιµα ή µη, όπως κατά τη διαδικασία της πλοήγησής του σε αυτό. Επιπρόσθετα, σε ένα νέφος υπάρχουν θέµατα εξουσιοδότησης. Σε πολλές ιδιωτικές υποδοµές υπολογιστικής νέφους, η χρήση µόνο ενός ονόµατος χρήστη και ενός κωδικού πρόσβασης θεωρείται ότι είναι ένα αρκετά ασθενής µηχανισµός εξουσιοδότησης για πρόσβαση σε αυτές. Δεδοµένου ότι πολλές φορές τα ονόµατα χρήστη είναι παρόµοια, ο µηχανισµός εξουσιοδότησης µπορεί να γίνει ακόµα πιο ασθενής. Η καταχρηστική δέσµευση των πόρων αποτελεί ένα άλλο σηµαντικό θέµα. Για παράδειγµα, όταν µια διεύθυνση IP δεν χρησιµοποιείται πλέον από ένα χρήστη, πρέπει να
παύει να χρησιµοποιείται ή να αποδοθεί σε άλλο χρήστη. Πολλές ενεργές διευθύνσεις IP που δεν χρησιµοποιούνται από κάποιον χρήστη µπορεί να οδηγήσουν σε άρνηση της υπηρεσίας (denial of service) υπολογιστικής νέφους. 12.3 Tο Windows Azure Το Windows Azure[3] είναι µια πλατφόρµα βασισµένη στην τεχνολογία υπολογιστικής νέφους, η οποία φιλοξενείται στα κέντρα δεδοµένων της εταιρείας Microsoft. Παρέχει λειτουργικό σύστηµα, καθώς και ένα σύνολο από υπηρεσίες ανάπτυξης εφαρµογών. Μπορεί να χρησιµοποιηθεί για τη δηµιουργία, διανοµή και επαύξηση των δυνατοτήτων των εφαρµογών που τρέχουν σε διασυνδεδεµένες συσκευές, προσφέροντας το βέλτιστο, χωρίς την ανάγκη συντήρησης ακριβών και συχνά µη χρησιµοποιούµενων πλήρως υπολογιστικών µονάδων. Οι υπηρεσίες ιστού και οι εφαρµογές µπορεί να γραφτούν και να ελεγχθούν για λάθη, και να έχουν πολύ µικρό λειτουργικό κόστος για την επιχείρηση, ενώ νέες δυνατότητες µπορεί να προστεθούν κατ απαίτηση σε ήδη υπάρχουσες εφαρµογές. Το Windows Azure παρέχει υπηρεσίες ασφαλείας, αποθήκευσης δεδοµένων και εικονικοποίησης (virtualization), καθώς και ένα περιβάλλον ανάπτυξης λογισµικού για σταθερούς υπολογιστές, µέσα από ένα πλέγµα υπολογιστικών µηχανών της Microsoft. Η µονάδα αυτοµατοποιηµένης διαχείρισης υπηρεσίας (automated service management module) του Windows Azure επιτρέπει την αναβάθµιση των εφαρµογών χωρίς απώλειες στην επίδοσή τους. Σε αυτές συµπεριλαµβάνονται η εξισορρόπηση φόρτου (load balancing), η χρησιµοποίηση κρυφής µνήµης (caching), η ανοχή σε σφάλµατα και ο πλεονασµός (redundancy), για εγγυηµένη και υψηλή διαθεσιµότητα. Μπορεί να κατασκευαστούν νέες ή να τροποποιηθούν υπάρχουσες εφαρµογές, χρησιµοποιώντας το περιβάλλον ανάπτυξης λογισµικού Visual Studio και το πλαίσιο εργασίας (framework).net. Το Windows Azure υποστηρίζει πολλαπλά διαδικτυακά πρωτόκολλα, συµπεριλαµβανοµένων των HTTP, REST, SOAP και XML, ενώ η κοστολόγηση της χρήσης του εξαρτάται από τους πόρους που θα επιλεχθούν προς χρήση από την εφαρµογή. Όλος ο κώδικας του χρήστη τρέχει στο Windows Azure hypervisor, µε προνόµια απλού χρήστη. Ενέργειες οι οποίες απαιτούν προνόµια διαχειριστή, όπως είναι η εγκατάσταση οδηγών λογισµικού (drivers), η αλλαγή εκτελέσιµων στοιχείων του συστήµατος ή προστατευόµενων περιοχών του µητρώου (registry), αποτυγχάνουν. Από προεπιλογή, όλος ο διαχειριζόµενος κώδικας τρέχει σε ένα περιορισµένο επίπεδο εµπιστοσύνης, το οποίο ονοµάζεται Windows Partial Trust. Επειδή ο λογαριασµός του χρήστη στο εικονικό µηχάνηµα είναι απλός (και όχι ενός διαχειριστή), δηµιουργεί επιπρόσθετους περιορισµούς πέρα από εκείνους που τίθενται στα Windows. Αυτό το επίπεδο εµπιστοσύνης επιβάλλεται από τη µονάδα ασφάλειας πρόσβασης του κώδικα (code access security module) του πλαισίου.net. Ο κώδικας της εφαρµογής επιτρέπεται να συνδεθεί µε εξωτερικές διευθύνσεις IP µέσω του πρωτοκόλλου Transmission Control Protocol (TCP). 12.4 Το Apache Cloudstack To Apache Cloudstack[4] είναι ένα λογισµικό ανοικτού κώδικα, µε άδεια τύπου Apache, σχεδιασµένο για την ανάπτυξη και τη διαχείριση µεγάλων δικτύων εικονικών µηχανών, ως µια υψηλής διαθεσιµότητας και επεκτασιµότητας υποδοµή υπολογιστικής νέφους, Υποδοµής ως Υπηρεσίας (Infrastructure as a Service/IaaS). Χρησιµοποιείται από διάφορους παρόχους υπηρεσιών, για την παροχή δηµόσιων υπηρεσιών υπολογιστικής νέφους, αλλά και από πολλές εταιρείες, για την παροχή ιδιωτικών νεφών. Χρησιµοποιείται και ως µέρος µιας λύσης υβριδικής υπολογιστικής νέφους. Είναι µια ολοκληρωµένη λύση, η οποία περιλαµβάνει το σύνολο των χαρακτηριστικών που οι περισσότεροι οργανισµοί θέλουν από υπολογιστική νέφους IaaS, όπως υπολογιστική ενορχήστρωση, Δίκτυο ως Υπηρεσία (Network as a
Service/NaaS), διαχείριση χρηστών, πλήρες και ανοικτό εσωτερικό προγραµµατιστικό ενδιάµεσο, λογιστική των πόρων και περιβάλλον διεπαφής χρήστη. Τέλος, υποστηρίζει τους πιο δηµοφιλείς υπερεπόπτες (hypervisors), όπως τους VMware, KVM, XenServer και Xen Cloud Platform (XCP), είναι γραµµένο σε γλώσσα Java και διαθέτει µεγάλη κοινότητα χρηστών και παροχών. Ενδεικτικά, τo Apache Cloudstack παρέχει: διαχείριση εικόνων συστήµατος (image management), καθώς οι χρήστες και οι διαχειριστές µπορούν να ανεβάσουν και να διαχειριστούν αρχεία λειτουργικού συστήµατος σε εικονική µορφή (ISO images) στην υποδοµή υπολογιστικής νέφους. εξισορρόπηση φορτίου (load balancing), για να εξασφαλίζεται η κλιµάκωση (scalability) των πόρων. αποθηκευτικό χώρο (storage), για τη δηµιουργία συσκευών αποθήκευσης (storage volumes), στο δίκτυο ή τοπικά, διαχείριση ταυτότητας, τείχη προστασίας (firewalls) και ιδιωτικά εικονικά δίκτυα (Virtual Private Network/VPN), για την παροχή επιπρόσθετης ασφάλειας, NaaS, καθώς παρέχει υπηρεσίες δικτύου υψηλής απόδοσης µε διαφορετικό τρόπο λειτουργίας, δυναµική διαχείριση φόρτου εργασίας, καθώς επιτρέπει την αυτοµατοποίηση της κατανοµής των πόρων κατά µήκος της φυσικής υποδοµής, ενώ συµµορφώνεται µε πολιτικές διαχείρισης φορτίου και ασφάλειας δεδοµένων, διαχείριση από τους ίδιους τους χρήστες της υποδοµής νέφους, µε ένα εύκολο στη χρήση περιβάλλον διεπαφής ιστού, µέσα από ένα πλούσιο σε χαρακτηριστικά προγραµµατιστικό ενδιάµεσο (API) τύπου Restful, ή/και µε εργαλεία γραµµής εντολών (command-line), ένα API συµβατό µε το AWS EC2 και S3 της εταιρείας Amazon, για τους οργανισµούς που επιθυµούν να αναπτύξουν υβριδικά σύννεφα, νέες εκδόσεις ανά τακτά χρονικά διαστήµατα, ώστε να υπάρχουν ενηµερώσεις του λογισµικού. Στην Εικόνα 12.1 παρουσιάζεται η αρχιτεκτονική του Apache Cloudstack.[5]
Εικόνα 12.1 Η αρχιτεκτονική του Cloudstack. O υπερεπόπτης (hypervisor) είναι η βασική µονάδα. Μια συστάδα αποτελείται από έναν ή πολλούς υπερεπόπτες. Όλοι οι ξένιοι υπολογιστές (host computers) σε µια συστάδα έχουν πρόσβαση στην ίδια διαµοιρασµένη µνήµη. Μία ή παραπάνω συστάδες αποτελούν ένα pod. Όσα pod βρίσκονται στη ζώνη διαθεσιµότητας έχουν πρόσβαση στη δευτερεύουσα µνήµη. Μία ή παραπάνω ζώνες αποτελούν ένα σύννεφο.. 12.4.1 Διαχείριση του προγραµµατιστικού ενδιαµέσου του Cloudstack Το προγραµµατιστικό ενδιάµεσο του Cloudstack επιτελεί τους εξής ρόλους:[5] Διαχειριστής µε πλήρη δικαιώµατα πρόσβασης (root admin): Έχει πρόσβαση σε όλες τις λειτουργίες της υποδοµής του νέφους, συµπεριλαµβανοµένης της διαχείρισης των εικονικών και των φυσικών πόρων. Διαχειριστής τοµέα (domain admin): Έχει πρόσβαση σε όλους τους εικονικούς πόρους. Χρήστης (user): Έχει πρόσβαση σε λειτουργίες διαχείρισης των εικονικών µηχανηµάτων του χρήστη (virtual instances), των µονάδων αποθήκευσης και του δικτύου. Το Cloustack API χρησιµοποιεί ένα σύνολο µεθόδων που είναι διαθέσιµες πάνω από τα πρωτόκολλα http ή https, ενώ η αυθεντικοποίηση γίνεται στη θύρα 8080, µέσω κλειδιών του προγραµµατιστικού ενδιαµέσου (API keys). Η αυθεντικοποίηση στη θύρα 8096 είναι απενεργοποιηµένη, από προεπιλογή. Μπορεί να γίνει υπογραφή (sign) των API keys, µέσω της γλώσσας Python. Οι αποκρίσεις του API του Cloudstack παρέχονται σε µορφή XML ή JSON. Στην Εικόνα 12.2 παρουσιάζονται κάποιες από τις εντολές του Cloudstack API [5].
Εικόνα 12.2 Ενδεικτικές εντολές του Cloudstack API. 12.5 Προγραµµατιστικό παράδειγµα σε υπολογιστική νέφους Στη συνέχεια δίνεται ένα προγραµµατιστικό παράδειγµα σε υπολογιστική νέφους, στο οποίο γίνεται χρήση των υπηρεσιών νέφους της εταιρείας Amazon, και συγκεκριµένα των Simple Storage Services (S3) και Elastic Beanstalk.[6] Στόχος είναι η χρήση αυτών των υπηρεσιών ώστε να αναπτυχθεί µια απλή διαδικτυακή εφαρµογή που «τρέχει» στο υπολογιστικό νέφος. Το παράδειγµα εφαρµογής αναπτύχθηκε σε τεχνολογία JSP/Servlets και η λειτουργία της αφορά την εµφάνιση της τρέχουσας ηµεροµηνίας και ώρας στην οθόνη του χρήστη. Ο κώδικας της εφαρµογής αποθηκεύτηκε στην υπηρεσία Amazon Simple Storage Service (Amazon S3). Ο αποθηκευµένος κώδικας εκτελέστηκε µέσω της υπηρεσίας Amazon Elastic Beanstalk. Για την ανάπτυξη της εφαρµογής, χρησιµοποιήθηκαν τα λογισµικά Eclipse Standard και Apache Tomcat. Η υπηρεσία Amazon S3 είναι µια εφαρµογή αποθήκευσης σε υπολογιστικό νέφος. Διευκολύνει τον διαδικτυακό προγραµµατισµό και µπορεί να χρησιµοποιηθεί για να αποθηκευτούν και να ανακτηθούν δεδοµένα οποιαδήποτε στιγµή και από οπουδήποτε µέσω του διαδικτύου. Η αποθήκευση ενός αρχείου στην υπηρεσία Amazon S3 σηµαίνει τη δηµιουργία µιας δέσµης (bucket) αρχείων. Η υπηρεσία Elastic Beanstalk αφορά την ανάπτυξη εφαρµογών σε υπολογιστικό νέφος, χωρίς ο χρήστης να απαιτείται να έχει γνώση της υποδοµής στην οποία εκτελούνται οι υπηρεσίες αυτές. Ο χρήστης ανεβάζει απλώς την εφαρµογή και η υπηρεσία Elastic Beanstalk διαχειρίζεται την παροχή της χωρητικότητας, την εξισορρόπηση φόρτου, την κλιµάκωση και την κατάσταση σωστής εκτέλεσης και λειτουργίας αυτής της εφαρµογής. Για να δηµιουργηθεί µια νέα εφαρµογή µε την υπηρεσία Elastic Beanstalk, αρκεί να πατηθεί το κουµπί Create New Application. Εκεί δίνεται το όνοµα της εφαρµογής και προαιρετικά µια σύντοµη περιγραφή. Στο εξεταζόµενο παράδειγµα, δίνεται το όνοµα «CloudApp», καθώς και µια σύντοµη περιγραφή. Πατώντας το κουµπί Next, επιλέγουµε το περιβάλλον εκτέλεσης (environment tier) της εφαρµογής. Το στρώµα περιβάλλοντος εκτέλεσης είναι ο εξυπηρετητής ιστού (web server), ενώ ο εξυπηρετητής εφαρµογής (application server) είναι ο Tomcat, µε Java έκδοση
7, σε λειτουργικό σύστηµα Linux 64bit. Ως τύπος περιβάλλοντος (environment type) εκτέλεσης χρησιµοποιείται το Load Balancing Autoscaling, όπως φαίνεται στην Εικόνα 12.3. Εικόνα 12.3 Επιλογές για την εφαρµογή. Ο κώδικας της εφαρµογής βρίσκεται στο αρχείο CloudApp.zip, το οποίο αποθηκεύτηκε επιτυχώς στην υπηρεσία Amazon S3 και η πρόσβαση σε αυτό έγινε από τον υπερσύνδεσµο https://s3.amazonaws.com/hellocloud/cloudapp.zip. Στο στρώµα περιβάλλοντος δόθηκε το όνοµα «Cloudaws-Env». Λίγο πριν εκτελεστεί η εφαρµογή µε το κουµπί Launch, η υπηρεσία εµφανίζει συνοπτικά τις ρυθµίσεις που έχουν γίνει για τη συγκεκριµένη εφαρµογή. Πατώντας το κουµπί Launch, η εφαρµογή ξεκινά επιτυχώς. Η πρόσβαση στην εφαρµογή επιτρέπεται από τον υπερσύνδεσµο http://cloudawsenv.elasticbeanstalk.com/cloudapp/webcontent/helloclass.jsp. Στο τέλος, θα εµφανιστεί το µήνυµα που παρουσιάζεται στην Εικόνα 12.4. Εικόνα 12.4 Το αποτέλεσµα εκτέλεσης της εφαρµογής του παραδείγµατος στο Amazon Elastic Beanstalk. 12.6 Κινητές εφαρµογές Υπάρχουν πολλές τεχνολογίες για χρήση σε εφαρµογές κινητής τηλεφωνίας (mobile applications). Οι πιο διαδεδοµένες είναι οι εξής: Ανάπτυξη εφαρµογών σε ios: Το ios είναι ένα λειτουργικό σύστηµα για κινητές συσκευές της εταιρείας Apple, γραµµένο σε γλώσσα Objective C, το οποίο εκτελείται µόνο σε συσκευές της συγκεκριµένης εταιρείας. Ανάπτυξη εφαρµογών σε Android: Το Android είναι ένα λειτουργικό σύστηµα ανοικτού κώδικα για κινητές συσκευές, κατασκευασµένο από την εταιρεία Google, βασισµένο στον πυρήνα του Linux (Linux kernel). Διατίθενται γι αυτό εφαρµογές που γράφονται σε γλώσσα Java. Ανάπτυξη εφαρµογών σε Windows Phone: Το Windows Phone είναι ένα λειτουργικό σύστηµα για κινητές συσκευές της εταιρείας Microsoft, διάδοχος του λειτουργικού Windows Mobile, το οποίο είναι γραµµένο σε γλώσσα C#.
Στη συνέχεια θα εξεταστεί το λειτουργικό σύστηµα Android[7], το οποίο βασίζεται σε µια τροποποιηµένη έκδοση του πυρήνα του λειτουργικού συστήµατος Linux και είναι το πιο γνωστό και διαδεδοµένο λειτουργικό σύστηµα για κινητές συσκευές. 12.6.1 Το λειτουργικό σύστηµα Android Το Android παρουσιάστηκε για πρώτη φορά το 2007 από µια οµάδα εταιρειών µε επικεφαλής την Google, γνωστή ως Open Handset Alliance (ΟΗΑ). Σκοπός της OHA είναι η διάθεση µιας ανοικτής πλατφόρµας την οποία θα χρησιµοποιούν οι κατασκευαστές πρωτότυπων συσκευών (Original Equipment Manufacturer/OEM), οι πάροχοι υπηρεσιών κινητής τηλεφωνίας, καθώς και οι προγραµµατιστές. Ο περισσότερος πηγαίος κώδικας του Android δηµιουργήθηκε µε τη βοήθεια της άδειας ανοικτού κώδικα της Apache, δηλαδή µπορεί να το χρησιµοποιήσει οποιοσδήποτε, µεταφορτώνοντας ολόκληρο τον πηγαίο κώδικά του. Η αρχιτεκτονική του βασίζεται σε συστατικά (components) και διαθέτει πάρα πολλές ενσωµατωµένες υπηρεσίες. Μερικές από αυτές είναι οι υπηρεσίες γεωγραφικής θέσης της κινητής συσκευής, χρησιµοποιώντας τεχνολογίες γεωεντοπισµού (Global Positioning System/GPS) και τριγωνοποίησης (triangulation) του σήµατος από τις κυψέλες. Διαθέτει, επίσης, µια βάση δεδοµένων, τη Structured Query Language (SQL), η οποία µπορεί να χρησιµοποιηθεί για τοπική αποθήκευση δεδοµένων. Επιπλέον, διαθέτει αυτόµατη διαχείριση του κύκλου ζωής των εφαρµογών, δηλαδή ο χρήστης δεν χρειάζεται πλέον να ανησυχεί για το ποιες εφαρµογές είναι ενεργές ή να κλείνει προγράµµατα, προκειµένου να µπορέσει να τρέξει άλλα. Διαθέτει υψηλής ποιότητας γραφικά και ήχο, καθώς και φορητότητα σε ένα ευρύ φάσµα υλικού. 12.6.2 Ανάπτυξη εφαρµογών σε Android Εικόνα 12.5 Η αρχιτεκτονική του Android. Η ανάπτυξη εφαρµογών σε Android πραγµατοποιείται µέσω µιας στοίβας λογισµικού (software stack), για προγραµµατισµό κινητών συσκευών (smartphones, tablets κτλ.). Η στοίβα αποτελείται από τέσσερα επίπεδα αρχιτεκτονικά, όπως φαίνεται και στην Εικόνα 12.5.[11] Τα επίπεδα αυτά περιγράφονται συνοπτικά στις επόµενες υποενότητες.
12.6.2.1 Ο πυρήνας O πυρήνας (kernel) αποτελεί το χαµηλότερο επίπεδο της στοίβας λογισµικού του Android. Παρέχει ένα αφαιρετικό επίπεδο µεταξύ του υλικού της συσκευής και των επόµενων στρωµάτων της στοίβας. Περιέχει τα απαραίτητα µέρη για την εκτέλεση του λογισµικού. Είναι υπεύθυνος για τη διαχείριση των οδηγών λογισµικού για τη συσκευή, της ισχύος και της µνήµης, καθώς και για την ασφάλεια. 12.6.2.2 Οι βιβλιοθήκες Σε αυτό το επίπεδο υπάρχουν δύο συστατικά (modules), οι βιβλιοθήκες (libraries) και το περιβάλλον χρόνου εκτέλεσης (runtime) του Android. Το συστατικό των βιβλιοθηκών περιέχει τις εγγενείς (native) βιβλιοθήκες που χρησιµοποιεί το Android, οι οποίες είναι γραµµένες κυρίως σε C/C++. Το περιβάλλον εκτέλεσης (runtime) περιέχει τις βιβλιοθήκες Java, οι οποίες χρησιµοποιούνται από τους προγραµµατιστές και περιλαµβάνουν τις συνηθισµένες βιβλιοθήκες, όπως τις java.* και javax.*, αλλά και κάποιες που βρίσκονται µόνο στο Android, όπως είναι οι android.*. 12.6.2.3 Η εικονική µηχανή Dalvik Η εικονική µηχανή Dalvik εκτελεί τις εφαρµογές Android στην κινητή συσκευή. Αντίθετα µε τις παραδοσιακές εφαρµογές Java, οι οποίες εκτελούνται από την εικονική µηχανή της Java (Java Virtual Machine), το Android χρησιµοποιεί τη µηχανή Dalvik, γιατί αυτή είναι σχεδιασµένη να εκτελεί εφαρµογές σε περιβάλλον µειωµένων υπολογιστικών πόρων. Στο Android, ο κώδικας των εφαρµογών µεταγλωττίζεται σε ένα σύνολο εντολών ανεξάρτητων από το υλικό, τους ενδιάµεσους κώδικες (bytecodes) και εκτελούνται από την εικονική µηχανή Dalvik. 12.6.2.4 Το πλαίσιο των εφαρµογών Το πλαίσιο εργασίας των εφαρµογών (application framework) του Android περιέχει διάφορους διαχειριστές, οι οποίοι χρησιµοποιούνται για τη διαχείριση και την εκτέλεσή τους. Συγκεκριµένα, οι διαχειριστές αυτοί είναι οι εξής: Διαχειριστής πακέτων (package manager): Διαχειρίζεται τα πακέτα εφαρµογών που βρίσκονται εγκατεστηµένα στη συσκευή. Διαχειριστής παραθύρων (window manager): Διαχειρίζεται τα παράθυρα στα οποία εκτελούνται οι εφαρµογές, µέσα από το σύστηµα απεικόνισης (view system), που παρέχει βασικά στοιχεία της γραφικής διεπαφής. Διαχειριστής πόρων (resource manager): Διαχειρίζεται τα µη µεταγλωττισµένα (non-compiled) δεδοµένα, όπως τις συµβολοσειρές και τα γραφικά. Διαχειριστής δραστηριοτήτων (activity manager): Διαχειρίζεται τον κύκλο ζωής των εφαρµογών. Διαχειριστής τοποθεσίας (location manager): Διαχειρίζεται πληροφορίες τοποθεσίας και µετακίνησης. Διαχειριστής ειδοποιήσεων (notification manager): Τοποθετεί γεγονότα στην εργαλειοθήκη κατάστασης (status bar), όταν αυτά συµβούν. 12.6.2.5 Το επίπεδο εφαρµογών
Το επίπεδο εφαρµογών περιέχει τις συνήθεις εφαρµογές που βρίσκονται σε µια τυπική συσκευή Android, όπως είναι η κεντρική οθόνη, το τηλέφωνο, οι επαφές, ο φυλλοµετρητής και τα ηλεκτρονικά µηνύµατα. Αυτές οι εφαρµογές µπορεί να αντικατασταθούν µε άλλες γραµµένες από το χρήστη ή από τρίτους. Υπάρχει πάντα στο προσκήνιο µια εφαρµογή που καταλαµβάνει όλη την οθόνη της κινητής συσκευής, εκτός από τη γραµµή κατάστασης. Η πρώτη εφαρµογή που εκτελείται όταν ο χρήστης ανοίγει το κινητό του είναι η εφαρµογή αρχικής σελίδας (Home). Στη συνέχεια, ο χρήστης µπορεί να ανοίξει και άλλες εφαρµογές, τις οποίες το λειτουργικό σύστηµα ανοίγει και φέρνει στο προσκήνιο. Αυτές οι εφαρµογές αποθηκεύονται σε µια στοίβα από το διαχειριστή δραστηριοτήτων. Στο πάνω µέρος αυτής της στοίβας βρίσκεται η εφαρµογή του προσκηνίου.[8] Κάθε εφαρµογή αποτελεί έναν διαφορετικό χρήστη, όπως σε ένα πολλαπλών χρηστών σύστηµα Linux. Το σύστηµα αντιστοιχίζει κάθε εφαρµογή σε ένα αναγνωριστικό χρήστη (user ID), το οποίο το γνωρίζει µόνο το σύστηµα και όχι η εφαρµογή. Στη συνέχεια, το λειτουργικό σύστηµα εκχωρεί στο αναγνωριστικό χρήστη που αντιστοιχεί σε µια εφαρµογή τα απαιτούµενα δικαιώµατα σε όλα τα αρχεία της, έτσι ώστε µόνο αυτό να µπορεί να τα επεξεργαστεί. Κάθε εφαρµογή εκτελείται αποµονωµένα από τις άλλες εφαρµογές (στη δική της διεργασία). Με αυτόν τον τρόπο, δηµιουργείται ένα πολύ ασφαλές περιβάλλον, καθώς µια εφαρµογή δεν µπορεί να έχει πρόσβαση σε τµήµατα του συστήµατος για τα οποία δεν έχει σχετικό δικαίωµα. Ένα παράδειγµα της αρχικής οθόνης µιας συσκευής Android δίνεται στην Εικόνα 12.6. Εικόνα 12.6 Αρχική οθόνη µιας συσκευής µε Android. 12.7 Ασφάλεια στο λειτουργικό Android Οι κινητές συσκευές, καθώς και οι εφαρµογές για αυτές εξαπλώνονται µε ραγδαίους ρυθµούς. Tο λειτουργικό σύστηµα Android χαρακτηρίζεται από ένα µοντέλο ασφάλειας που έχει στο κέντρο του το σύστηµα (system-centric). Οι διάφορες εφαρµογές ταυτοποιούν τις άδειες που τις αφορούν στη διάρκεια της εγκατάστασης. Αυτό παρουσιάζει ένα µειονέκτηµα, καθώς η εφαρµογή δεν µπορεί στη συνέχεια να ελέγξει σε ποιον έχουν δοθεί αυτά τα δικαιώµατα και µε ποιον τρόπο εφαρµόζονται. Επειδή κάθε εφαρµογή εκτελείται σε ξεχωριστό διερµηνέα της εικονικής µηχανής Dalvik και έχει µοναδική ταυτότητα, οι εφαρµογές είναι φαινοµενικά αποµονωµένες, µε συνέπεια να δηµιουργείται ένα κενό ασφαλείας, όπως η υπερχείλιση ταµιευτήρα (buffer overflow), όµως στα όρια της εφαρµογής και των δεδοµένων της, και όχι σε ολόκληρο το σύστηµα.
Το πλαίσιο ασφαλείας στο επίπεδο εφαρµογών βασίζεται σε ετικέτες αδειών (permission labels). Οι προγραµµατιστές εφαρµογών Android καθορίζουν την απαιτούµενη από την εφαρµογή λίστα ετικέτας αδειών στα αρχεία package manifest. Οι άδειες αυτές δεν χορηγούνται σε όλες τις περιπτώσεις. Οι ορισµοί ετικετών αδειών κατανέµονται στα αρχεία package manifest και στο πλαίσιο ασφαλείας. Κάθε ορισµός ορίζει ένα επίπεδο προστασίας, το οποίο µπορεί να είναι κανονικό (normal), επικίνδυνο (dangerous), υπογραφής (signature) ή υπογραφής και συστήµατος (signature and system). Μόλις εγκατασταθεί µια εφαρµογή, λαµβάνεται υπόψη το επίπεδο προστασίας. Σε κάθε περίπτωση, χορηγείται µια άδεια µε κανονικό επίπεδο. Μια άδεια µε επικίνδυνο επίπεδο χορηγείται πάντα, εφόσον η εφαρµογή είναι εγκατεστηµένη και ο χρήστης επιβεβαιώσει όλες τις άδειες αυτού του τύπου. Κάθε πακέτο εφαρµογών υπογράφεται από ένα κλειδί προγραµµατιστή (developer key). Όταν υπάρχει επίπεδο προστασίας υπογραφής, δεν λαµβάνεται υπόψη η είσοδος του χρήστη. Άδεια τέτοιου τύπου χορηγείται µόνο αν το κλειδί του προγραµµατιστή, µε το οποίο υπεγράφη το πακέτο που ορίζει τη συγκεκριµένη ετικέτα άδειας, είναι το ίδιο µε αυτό της εφαρµογής που ζητά την άδεια. Τέλος, το επίπεδο υπογραφής και συστήµατος βασίζεται στις αρχές του προηγούµενου, αλλά ζητά επίσης η εφαρµογή να έχει το ίδιο κλειδί που χρησιµοποιήθηκε για την εικόνα του συστήµατος (system image), ώστε να χορηγηθεί άδεια. Η µη αυτόµατη διαχείριση του ελέγχου πρόσβασης πολλών και, πιθανώς, άγνωστων εφαρµογών είναι αδύνατον να υλοποιηθεί. Συνεπώς, το Android απλοποιεί τον έλεγχο πρόσβασης µιας εφαρµογής µε τον ορισµό ετικετών αδειών από τους ίδιους τους προγραµµατιστές. Έτσι, ο προγραµµατιστής δεν χρειάζεται να γνωρίζει όλες τις πιθανές υπάρχουσες εφαρµογές, αλλά, έµµεσα, καθορίζει τις αποφάσεις ασφαλείας.[13] 12.8 Προγραµµατιστικό παράδειγµα σε Android O προγραµµατισµός εφαρµογών για συσκευές Android γίνεται µε τη γλώσσα Java και τη χρήση του Android Software Development Kit (SDK). Για τη συγγραφή του κώδικα, προτείνεται το ολοκληρωµένο περιβάλλον ανάπτυξης (Integrated Development Environment/IDE), το Android Studio.[12] Για τη δηµιουργία µιας νέας εφαρµογής, εγκαθιστούµε αρχικά το Android Studio και το SDK. Έπειτα, αφού τρέξουµε το Android Studio IDE, επιλέγουµε «Start a Νew Android Studio Project» και µπορούµε να δηµιουργήσουµε µια νέα εφαρµογή, όπως φαίνεται στην Εικόνα 12.7. Βάζουµε ένα όνοµα, για παράδειγµα HelloAndroid, και επιλέγουµε στη συνέχεια «Next». Μόλις φτάσουµε στην τελευταία οθόνη, επιλέγουµε «Finish» και το Android Studio δηµιουργεί τις βιβλιοθήκες της εφαρµογής.
Εικόνα 12.7 Δηµιουργία νέας εφαρµογής στο Android Studio. Αφού γίνουν τα παραπάνω, εµφανίζεται η αρχική οθόνη της εφαρµογής που δηµιουργήσαµε, η οποία περιέχει ένα παράδειγµα HelloAndroid. Στη συνέχεια, αναλύεται ο τρόπος µε τον οποίο µπορούµε να δηλώσουµε έναν εξοµοιωτή (emulator), για την εκτέλεση της εφαρµογής. Εάν δεν διαθέτουµε κάποια συσκευή Android, µπορούµε να εκτελέσουµε τις εφαρµογές που γράφουµε σε έναν εξοµοιωτή, ο οποίος περιλαµβάνεται στο Android SDK.[13] Ο εξοµοιωτής είναι χρήσιµος για να δοκιµάζουµε τις εφαρµογές, αλλά δεν υποστηρίζει όλες τις λειτουργίες που µπορεί να παρέχει ένα τηλέφωνο. Από το menu Window επιλέγουµε τον Android Virtual Device Manager. Εκεί επιλέγουµε «Νew». Στην οθόνη που θα εµφανιστεί, επιλέγουµε τον τύπο της συσκευής που θέλουµε να εξοµοιώσουµε και δίνουµε κάποια στοιχεία, όπως µνήµη κτλ. Πατώντας «OK» έχουµε δηµιουργήσει τον εξοµοιωτή. Στη συνέχεια, εκτελούµε την εφαρµογή κάνοντας δεξί κλικ στο όνοµά της και επιλέγοντας «Run as Android Application». Το αποτέλεσµα της εκτέλεσης της εφαρµογής φαίνεται στην Εικόνα 12.8.
Εικόνα 12.8 To αποτέλεσµα της εκτέλεσης του προγράµµατος HelloAndroid. Η οθόνη µιας εφαρµογής Android είναι ένα αρχείο xml, το οποίο περιέχει τις δηλώσεις των γραφικών στοιχείων που το αποτελούν. Στην περίπτωση της εφαρµογής µας, το αρχείο αυτό είναι το activity_main.xml και ο κώδικάς του είναι ο Κώδικας 12.1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an droid" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingleft="@dimen/activity_horizontal_marg in" android:paddingright="@dimen/activity_horizontal_mar gin" android:paddingtop="@dimen/activity_vertical_margin" android:paddingbottom="@dimen/activity_vertical_marg in" tools:context=".mainactivity"> <TextView android:text="@string/hello_android" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> Κώδικας 12.1 Το αρχείο activity_main.xml. To αρχείο xml αποτελείται στην αρχή από κάποιες τυπικές δηλώσεις, όπως το είδος του περιγράµµατος (layout). Στην εφαρµογή αυτή, το µόνο γραφικό στοιχείο που έχουµε δηλώσει είναι ένα στοιχείο τύπου Textview, το οποίο περιέχει το κείµενο «Hello Class from Android!», δηλωµένο ως συµβολοσειρά στο αρχείο strings.xml (βλ. γραµµή 3, στον Κώδικα 12.2). <resources>
<string name="app_name">helloandroid</string> <string name="hello_android">hello Class from Android!</string> <string name="action_settings">settings</string> </resources> Κώδικας 12.2 Το αρχείο strings.xml. Ως ελεγκτής του αρχείου xml, χρησιµοποιείται µια κλάση Java, που είναι στην περίπτωσή µας η MainActivity.java (Κώδικας 12.3). package test.helloandroid; import android.support.v7.app.actionbaractivity; import android.os.bundle; import android.view.menu; import android.view.menuitem; public class MainActivity extends ActionBarActivity { @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); } @Override public boolean oncreateoptionsmenu(menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.menu_main, menu); return true; } @Override public boolean onoptionsitemselected(menuitem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getitemid(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onoptionsitemselected(item);}} Κώδικας 12.3 Η κλάση Java MainActivity. Βασικό κοµµάτι µιας τέτοιας κλάσης είναι η oncreate() function, η οποία δηλώνει τι θα γίνει µόλις δηµιουργηθεί η συγκεκριµένη δραστηριότητα. Στην περίπτωσή µας, θα αρχικοποιηθεί το αρχείο xml που αναλύσαµε στον Κώδικα 12.1. Βασικό κοµµάτι της εφαρµογής είναι το AndroidManifest.xml (Κώδικας12.4), ένα αρχείο µε το οποίο δηλώνονται
οι δραστηριότητες (activities) που θα εκτελεστούν από την εφαρµογή, οι ελεγκτές, καθώς και οι δηλώσεις εγκρίσεων (permissions), όπως η χρήση του διαδικτύου ή της κάµερας. <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/andr oid" package="test.helloandroid" > <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" > <activity android:name=".mainactivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest> Κώδικας 12.4 Το Android Manifest.xml. Στην ιστοσελίδα του Κεφαλαίου 12 του παρόντος συγγράµµατος, στον Ελληνικό Συσσωρευτή Ακαδηµαϊκών Ηλεκτρονικών Βιβλίων (http://repository.kallipos.gr), υπάρχει διαθέσιµο το βίντεο µε τίτλο video12.1_androiddev, στο οποίο εξηγείται το παραπάνω προγραµµατιστικό παράδειγµα. Βιβλιογραφικές αναφορές [1] «Top books you need to read on Cloud Computing», διαθέσιµο στο http://www.amazon.com/books-need-read-cloud- Computing/lm/R2XX5XF9QIN3JT (πρόσβαση: 29-6-2015). [2] S. Carlin και K. Curran (2011), «Cloud Computing Security», International Journal of Ambient Computing and Intelligence, τόµ. 3, τχ. 1, σ. 14-19. [3] R. Brunetti (2011), Windows Azure Step by Step, Microsoft Press. [4] «CloudStack - Open Source Cloud Computing Project», διαθέσιµο στο http://www.slideshare.net/cloudstack (πρόσβαση: 29-6-2015). [5] «Apache CloudStack API Documentation (v.4.5.0)», διαθέσιµο στο http://cloudstack.apache.org/api/apidocs-4.5/toc_root_admin.html (πρόσβαση: 29-6-2015). [6] «Amazon Web Services», διαθέσιµο στο http://aws.amazon.com/ (πρόσβαση: 29-6-2015).
[7] «What is Android: Introduction, Features and Applications», διαθέσιµο στο http://www.engineersgarage.com/articles/what-is-android-introduction (πρόσβαση: 29-6-2015). [8] «Android Developers», διαθέσιµο στο http://developer.android.com/index.html (πρόσβαση: 29-6-2015). [9] «Application Fundamentals: Android Developers», διαθέσιµο στο http://developer.android.com/guide/components/fundamentals.html (πρόσβαση: 29-6-2015). [10] «Managing the Activity Lifecycle, Android Developers», διαθέσιµο στο http://developer.android.com/training/basics/activity-lifecycle/index.html (πρόσβαση: 29-6-2015). [11] M. Ongtang, S. McLaughlin, W. Enck και P. McDaniel (2011), «Semantically Rich Application-centric Security in Android», Security Communication Networks 2012, τόµ. 6, σ. 658-673. [12] «Android Studio and SDK Tools», διαθέσιµο στο https://developer.android.com/sdk/index.html (πρόσβαση: 29-6-2015). [13] «Emulator Networking: Using the Android Emulator», διαθέσιµο στο http://developer.android.com/tools/devices/emulator.html#emulatornetworking (πρόσβαση: 29-6-2015). Κριτήρια αξιολόγησης Ερώτηση 1 Ποια από τα παρακάτω είναι χαρακτηριστικά των υπηρεσιών υπολογιστικού νέφους; Α) Η ελαστικότητα. Β) Η εµπιστευτικότητα. Γ) Η ευρεία πρόσβαση δικτύου. Δ) Η κρυπτογραφία. Ε) Η κατ απαίτηση αυτοεξυπηρέτηση. Ερώτηση 2 Ποιο από τα παρακάτω δεν είναι χαρακτηριστικό του Apache Cloudstack; Α) Είναι γραµµένο σε Java. Β) Είναι πρόγραµµα σχεδίασης. Γ) Διαθέτει ενεργή κοινότητα. Δ) Είναι ανοιχτό λογισµικό. Ερώτηση 3 Ποιο από τα παρακάτω δεν προσφέρεται από το Cloudstack; Α) Οι µεταγλωττιστές. Β) Ο αποθηκευτικός χώρος. Γ) Οι εξισορροπητές φορτίου. Δ) Η υπολογιστική δυνατότητα. Ερώτηση 4 Ποιο από τα παρακάτω δεν αποτελεί στοιχείο τις αρχιτεκτονικής του Cloudstack; Α) Ο Cluster. Β) Ο Pod. Γ) Ο Server. Δ) Ο Hypervisor. Ερώτηση 5
Το Cloudstack µπορεί να επιστρέψει απαντήσεις και σε µορφή JSON. Α) Σωστό. Β) Λάθος. Ερώτηση 6 Ποιο από τα παρακάτω δεν περιέχεται στην πλατφόρµα Android; Α) Η στοίβα λογισµικού. Β) Το SDK. Γ) Οι αναλυτές δικτύου. Δ) Τα έγγραφα τεκµηρίωσης. Ερώτηση 7 Γιατί το Android χρησιµοποιεί τον δικό του πυρήνα Linux και δεν χρησιµοποιεί έναν από τους ήδη υπάρχοντες πυρήνες Linux; Α) Για να υποστηρίζει γραφικά. Β) Για να υποστηρίζει ήχο. Γ) Για να δηµιουργήσει εφαρµογές πυρήνα. Δ) Γιατί χρειάζεται λειτουργίες τις οποίες δεν διαθέτουν οι άλλοι πυρήνες. Ερώτηση 8 Σε ποια γλώσσα είναι γραµµένες οι εγγενείς βιβλιοθήκες του Android; Α) Lisp. Β) C/C++. Γ) Scala. Δ) Java. Ερώτηση 9 Η εικονική µηχανή Dalvik είναι ίδια µε την JVM. Α) Σωστό. Β) Λάθος. Ερώτηση 10 Ποιες πληροφορίες δίνει ο διαχειριστής τοποθεσίας; Α) Θερµοκρασία. Β) Κίνηση του χρήστη. Γ) Θέση του χρήστη. Δ) Μαγνητικό Βορρά. Ερώτηση 11 Η συγγραφή κώδικα Android πρέπει να γίνεται αναγκαστικά στο Eclipse. A) Σωστό. Β) Λάθος. Ερώτηση 12 Σε ποια γλώσσα γίνεται η κατασκευή εφαρµογών Android; A) C. B) Python. Γ) C++. Δ) Java. Ερώτηση 13 Μια συσκευή Android µπορεί να εξοµοιωθεί σε ηλεκτρονικό υπολογιστή. Α) Σωστό. Β) Λάθος.
Ερώτηση 14 Ποιο από τα παρακάτω δεν περιέχεται στη στοίβα λογισµικού του Android; Α) Ο πυρήνας. Β) Ο µεταφραστής. Γ) Οι βιβλιοθήκες. Δ) Το επίπεδο εφαρµογών. Ερώτηση 15 Το αρχείο androidmanifest.xml περιέχει βασικά στοιχεία για την εφαρµογή. Α) Σωστό. Β) Λάθος. Κεφάλαιο 12 1. Α, Γ και Ε 2. Β 3. Α 4. Γ 5. Α 6. Γ 7. Δ 8. Β 9. Β 10. Β και Γ 11. Β 12. Δ 13. Α 14. Β 15. Α