Application Development Part 1

Post on 19-Jun-2015

413 views 4 download

description

Dr. Ανδρέας Κομνηνός

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!