Descrição geral do Android Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa Pedro Alexandre Pereira ([email protected]) Versões & API • A versão 1.0 foi lançada em Fevereiro de 2009 (API 2) • Cada versão tem novas características: – Para o programador (mantendo compatibilidade) – Para o utilizador Versão Codename nível da API Distribuição Froyo 8 1.2% 2.3.0 – 2.3.7 Gingerbread 9..10 19.0% 3.0 – 3.2 Honeycomb 11..13 0.1% 4.0.0 – 4.0.3 Ice Cream Sandwich 14..15 15.2% 4.1 – 4.3 Jelly Bean 16..18 62.0% KitKat 19 2.5% 2.2 4.4 CCISEL, 2014 Programação Orientada por Objetos 2 O Android é … Stack de software para dispositivos móveis • Aplicações essenciais (Java): – Home; Phone; Contacts; Browser; … • Application Framework (Java): – Gestão dos componentes das aplicações • Runtime (Java & C): – Máquina virtual Java (Dalvik) ; Bibliteca geral (Java) • Biblioteca (C/C++): – Gráficos; Base de Dados; Biblioteca de C; Áudio; Vídeo; Imagens; … • Sistema Operativo (Kernel Linux): – Mecanismo de segurança; Gestão memoria; Gestão de processos; Stack de Rede; Gestão de alimentação; Drivers… • Ambiente de desenvolvimento (Windows; MacOS; Linux) – SDK (Aplicações - Java) ; NDK (Componentes críticos - C/C++) CCISEL, 2014 Programação Orientada por Objetos 3 Arquitetura do Androide CCISEL, 2014 Programação Orientada por Objetos 4 Dalvik • Dalvik é o nome duma vila na Islândia • MV baseada em registos (em vez de stack) – Menos instruções geradas • O código Java depois de compilado é recompilado para a MV Dalvik – Um só ficheiro dex com todo o código da aplicação • A biblioteca Java é baseada na Platform Standard Edition – Hierarquias de classes Swing e AWT substituídas por Views – Acrescentadas novas funcionalidades CCISEL, 2014 Programação Orientada por Objetos 5 Máquina Virtual Dalvik Java source .java ... Java source .java Java Compiler Java Compiler javac javac Java archive Java byte code .jar .class ... Java byte code .class Dex Compiler stack machine dx JVM Resources Resources .xml .xml Dalvik byte code .dex Android Manifest .xml Application package .apk regiter machine Dalvik CCISEL, 2014 Programação Orientada por Objetos 6 Aplicação para Android • As aplicações são desenvolvidas em Java – Usando as ferramentas tradicionais de Java • O código e os recursos de cada aplicação são empacotados num ficheiro, com extensão .apk – Usando o utilitário (android) do SDK • A aplicação é instalada no dispositivo a partir do ficheiro .apk • A aplicação pode ser testada no SDK num dispositivo virtual – Usando o emulador para Android Virtual Device (AVD) • Para cada aplicação é criado um utilizador Linux (user ID) e só esse tem acesso a todos os recursos (ficheiros) da aplicação • Cada aplicação é executada no seu próprio processo Linux com a sua própria instância da máquina virtual Dalvik CCISEL, 2014 Programação Orientada por Objetos 7 Componentes de uma aplicação App A S P A aplicação não é uma classe com um método main(). A aplicação é constituída por componentes que interagem com o sistema. Cada tipo de componente tem objectivos específicos e ciclos de vida distintos: • A • S • P • R Atividades - classe derivada de Activity – Écrans de interacção com o utilizador. Uma delas é lançada no arranque da aplicação (LAUNCHER). – Exemplo: Edição de SMS Serviços - classe derivada de Service – Operações demoradas executadas em segundo plano – Exemplo: Reproduzir uma música Fornecedores de conteúdos - derivada de ContentProvider – Gestor da informação partilhada que reside em qualquer fonte de dados – Exemplo de conteúdo: Lista de contactos Receptores de notificações - derivada de BroadcastReceiver – Captura as notificações originadas pelo sistema ou outras aplicações – Exemplo de notificação: Bateria fraca CCISEL, 2014 Programação Orientada por Objetos 8 R Manifesto da aplicação Cada aplicação tem um ficheiro (AndroidManifest.xml) que descreve as suas características: Os seus componentes; Nível mínimo da API suportada; Recursos de hardware e software necessita; etc. <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="hello" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <application> <activity android:name="FirstAppActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> ... <sevice> ... <receiver> ... <provider> ... <supports-screens android:anyDensity="true"/> </application> </manifest> CCISEL, 2014 Programação Orientada por Objetos 9 Recursos da aplicação As aplicações têm vários tipos de recursos: - Disposição de écrans; Tabelas de strings; Menus; Imagens Normalmente, descritos em XML - xmlns:android="http://schemas.android.com/apk/res/android" Podem ser especializados para várias dimensões de écran e línguas - res/layout/main.xml & res/layout-port/main.xml - res/values/strings.xml & res/values-pt/strings.xml Os recursos e os elementos dos recursos podem ter um ID único (int) que pode ser gerado automaticamente pelo SDK - R.string.app_name = 0x7f040001; CCISEL, 2014 Programação Orientada por Objetos 10