C3SL - Centro de Computação Científica e Software Livre Estudo sobre Android Relatório que apraaesenta o estudo realizado pelo C3SL analisando os aspectos gerais do Android e de outros sistemas similares Fevereiro 2013 1
Sumário 1 Introdução 3 2 Android 4 2.1 Arquitetura................................. 5 2.2 Kernel.................................... 6 2.3 Bibliotecas & Runtime........................... 6 2.3.1 Máquina Virtual Dalvik...................... 6 2.3.2 Extensão.Dex............................ 7 2.3.3 Pacote APK............................. 8 2.4 Framework.................................. 8 2.5 Aplicações.................................. 9 2.5.1 Componentes da Aplicação..................... 9 2.6 O Sistema de Arquivos........................... 11 3 Alternativas 11 3.1 Tizen..................................... 12 3.2 Firefox OS.................................. 13 3.3 Mer..................................... 14 3.4 Ubuntu Touch OS.............................. 15 3.4.1 Informações............................. 15 3.4.2 Lançamento............................. 16 2
1 Introdução Este relatório apresenta os aspectos gerais do sistema operacional Android, além de analisar outros sistemas semelhantes. Em relação ao Android, são analisados diversos pontos importantes deste sistema, tais como quais camadas o compõem, e para que servem, o funcionamento das aplicações e o sistema de arquivos. Dentre as alternativas ao Android, foram analisados o Tizen, o Fifefox OS, o Mer e o Ubuntu Touch OS. 3
2 Android Android é um sistema operacional baseado no núcleo do Linux para dispositivos móveis, desenvolvido pela Open Handset Alliance, liderada pela Google e várias outras empresas, tais como: Intel, Nvidia, Samsung, LG, entre outras. O projeto se iniciou em outubro de 2003, em Palo Alto na California, com uma empresa chamada Android Inc. Os fundadores foram Andy Rubin, Rich Miner, Nick Sears e Chris White. Esta empresa foi adquirida pela Google em 2005, e a primeira versão do Android foi disponibilizada para o público em 22 de outubro de 2008. Desde o seu lançamento, o Android passou por várias modificações, e com isso várias versões foram lançadas. Abaixo está a lista com todas as versões existentes: 1.5: Cupcake 1.6: Donut 2.0-2.1: Eclair 2.2: FroYo 2.3: Gingerbread 3.0-3.2: Honeycomb 4.0: Ice Cream Sandwich 4.1-4.2: Jelly Bean 4
2.1 Arquitetura O android é um sistema operacional formado por cinco camadas: o kernel, as bibliotecas, o runtime, o framework e as aplicações. Para um melhor aproveitamento da capacidade que o sistema tem a oferecer, é vital o entendimento do que são, de como funcionam e de como interagem estas camadas. Figura 1: Arquitetura Figura 2: Diagrama demonstrando a arquitetura interna do Android 5
2.2 Kernel O Android utiliza uma versão modificada do kernel do Linux, em que foram adicionados vários serviços considerados essenciais para dispositivos móveis, tais como: gerenciamento de energia, um novo mecanismo para a comunicação entre processos (IPC - Inter process Communication) chamado Binder, depuração de erros (Android Debug Bridge), Alarm (Driver que tem a função de fornecer algumas funções básicas de alarme e temporizadores), etc. 2.3 Bibliotecas & Runtime Bibliotecas Depois da camada do Kernel temos as bibliotecas básicas do sistema, sendo que a maior parte foi desenvolvida em C/C++. Dentras as bibliotecas temos, por exemplo, a Bionic que é a libc otimizada para uso embarcado. Temos também a OpenGL/ES para se trabalhar com gráficos, e a SQLite, para a manipulação de banco de dados, entre outras. Runtime O Runtime é composto pela máquina virtual Dalvik, que serve para a execução de aplicações, e pelas Bibliotecas do Núcleo (Core Libraries), que são um conjunto de bibliotecas que foram reescritas para prover as mesmas funcionalidades disponíveis na linguagem Java. A função do Runtime é de permitir rodar programas complexos em ambientes com memória limitada, bateria limitada, processamento limitado, entre outros. 2.3.1 Máquina Virtual Dalvik A Dalvik virtual machine foi desenvolvida pela Google como parte da plataforma Android. Ela é uma máquina virtual baseada em registradores. Ela é otimizada para requerer pouca memória e rodar em um CPU lento. 6
Foi projetada para permitir que múltiplas instâncias da máquina virtual rodem ao mesmo tempo. O sistema operacional é responsável pelo o isolamento de processos, pelo gerenciamento de memória e o suporte a threading. Ela executa arquivos no formato.dex(dalvik Executable). Por que não usar J2ME? J2ME é a plataforma Java para sistemas embarcados, a qual está sob a especificação JSR (Java Specification Request) que é um processo bastante burocrático e necessário para que sejam inseridos novos recursos na plataforma. Usando a Dalvik, a Google tem total liberdade para evoluir o Android e adicionar novas funcionalidades de uma forma mais rápida e simples. 2.3.2 Extensão.Dex Quando se trabalha com J2EE, ou seja, quando é compilada uma Classe.java, a JVM (Java Virtual Machine) interpreta o código.java e gera o código.class. Isto siginifica que cada classe Java resulta em um arquivo. Na plataforma Android os arquivos.java também são convertidos para.class e através de uma ferramenta chamada dx, todos os arquivos.class relacionados à uma aplicação são convertidos para um único arquivo, com a extensão.dex, que é interpretada pela DVM (Dalvik Virtual Machine). Considerando que um arquivo.class contém apenas uma classe, o arquivo.dex contém várias classes, de modo a reduzir o tamanho do arquivo e operações de I/O (entrada e saída) e acelerar a velocidade de busca. Outra vantagem do arquivo.dex é que ele foi otimizado para o uso de memória e o designer principal é impulsionado para o compartilhamento de dados. O diagrama abaixo compara o formato de arquivo.class interpretado pela JVM e o.dex interpretado pela DVM (Dalvik Virtual Machine). 7
2.3.3 Pacote APK O Android Package Tool (APT) compacta os arquivos.dex e o AndroidManifest.xml 1 como binário e cria uma extensão.apk. Após a geração do arquivo.apk, que já pode ser disponibilizado para os dispositivos com Android, os arquivos.dex são otimizados antes da execução. Os arquivos são salvos em uma região de cache onde são convertidos para um tipo de extensão customizada chamada de.dey. Uma vez compilado, se a estrutura de pacotes da aplicação não mudar, a DVM (Dalvik Virtual Machine) executa diretamente o arquivo.dey. 2.4 Framework Esta Camada tem o objetivo de fornecer todas as funcionalidades necessárias para a construção de aplicativos, visando o reaproveitamento de código e o aumento da produtividade. Sendo que todas as aplicações desenvolvidas para Android têm acesso ao mesmo framework e as mesmas API s. Abaixo alguns dos frameworks mais importantes: Activity Manager: Responsável por gerenciar o ciclo de vida das aplicações. Além de todas as tarefas relativas a troca de contexto e gerenciamento de processos. Package Manager: Gerencia a instalação e atualização da aplicações. Telephony Manager: Fornece acesso a informações sobre os serviços de telefonia no dispositivo. Content Provider: Provê o compartilhamento de dados entre aplicações. 1 O AndroidManifest.xml apresenta informações essenciais sobre o aplicativo para o sistema Android, informações que o sistema deve ter antes de executar qualquer código do aplicativo. 8
2.5 Aplicações As aplicações são escritas utlizando-se a liguagem de programação Java. Encontramse nesta camada, aplicações tais como: navegador, e-mail, calendário, etc. 2.5.1 Componentes da Aplicação Componentes da Aplicação são blocos essenciais de uma aplicação do Android, alguns destes componentes dependem um do outro, mas cada tipo tem seu próprio objetivo e ciclo de vida. O sistema lida com cada componente de maneira diferente e cada um deles possui sua própria entidade e sua própria maneira de ser construida. As aplicações podem ser compostas de quatro tipos de componentes: Brodcast Receiver: que responde a algum evento do sistema ou de uma aplicação, por exemplo, tela desligada, bateria está baixa, o download de um arquivo acabou. Tipicamente, um brodcast receiver não deve realizar muito trabalho, ele deve iniciar um service ou uma activity. Content Providers: que são responsáveis por gerenciar o acesso a um conjunto estruturado de dados. O content provider é um modo de compartilhar dados entre aplicações e a interface para o acesso a estes dados é feita em SQL. Activity: que fornece uma tela com a qual os usuários podem interagir, a fim de fazer algo, como discar o telefone, tirar uma foto, enviar um e-mail ou visualizar um mapa. 9
Service: que pode executar operações de longa duração em segundo plano e não fornece uma interface para o usuário. 10
2.6 O Sistema de Arquivos Podemos ver como é a estrutura da árvore de diretórios do Android abaixo: Os principais diretórios são o data que é responsável por armazenar dados das aplicações, e o system que contêm as bibliotecas, os serviços e as aplicações Java. 3 Alternativas A seguir serão apresentados alguns sistemas operacionais que têm a mesma plataforma alvo do Android. 11
3.1 Tizen Tizen é um sistema open source, baseado no Linux, desenvolvido a partir de um consórcio, conhecido como Tizen Association 1, que inclui empresas como a Samsung, a Intel e a Linux Foundation. Este sistema está sendo projetado para rodar em smartphones, tablets, netbooks, smart TVs, centrais multimídia para veículos, e outros tipos de sistemas embarcados. Por enquanto o único meio para se conhecer este sistema, é através da utilização do SDK (Software Development Kit), disponibilizado no site oficial. Empresa/Desenvolvedor Linux Foundation, Samsung, Tizen Association Família do Sistema Operacional Linux Modelo de Código Open souce e proprietário Lançamento 5 de Janeiro de 2012 Linguagem de Programação HTML5, C++,C e Java(Android) Plataformas Suportadas ARM e x86 Licença Apache License, BSD, LGPL, Flora License e proprietária. Site Oficial https://www.tizen.org/ 1 https://www.tizenassociation.org/ 12
3.2 Firefox OS O Firefox OS (anteriormente Boot to Gecko) é um sistema de código-aberto que foi totalmente desenvolvido baseado em HTML5. Tendo como objetivo oferecer todos os benefícios de um smartphone com um valor mais acessível. Ainda não foram disponibilizados modelos para o público, mas existe a opção de se utilizar o Firefox OS Simulator 1 para testar o sistema. Empresa/Desenvolvedor Mozilla Corporation Família do Sistema Operacional Linux Modelo de Código Open souce 2 Lançamento 5 de Janeiro de 2012 Linguagem de Programação HTML5, CSS, JavaScript, C++ Plataformas Suportadas ARM Site Oficial http://www.mozilla.org/firefoxos/ 1 https://addons.mozilla.org/pt-br/firefox/addon/firefox-os-simulator/ 2 Mozilla Licensing Policies 13
3.3 Mer Em outubro de 2011 o projeto Mer foi anunciado, focado em ser um Linux para plataformas móveis de código aberto, ultra-portátil, incluindo as bases tecnológicas do HTML5, QML(Qt Meta Language) e JS(JavaScript), para a construção de produtos que seriam derivados do código base do MeeGo (um linux para portáteis descontinuado em 2011, o Mer é seu sucessor). Em meados de 2011, David Greaves e Carsen Munk discutiram novas direções para o projeto MeeGo, a idéia apresentada foi de reconstruir o projeto de cima para baixo, de modo a reacender o projeto e corrigir problemas com o gerenciamento, falta de transparência, direção e flexibilidade. Essas discussões foram feitas numa série de postagens em um blog 1, onde uma diferente abordagem para um código de plataformas móveis foi apresentado e a partir deste código, o projeto foi iniciado. Empresa/Desenvolvedor Família do Sistema Operacional Modelo de Código Linguagem de Programação Plataformas Suportadas Site Oficial The Mer Project Linux Open souce HTML5, Qt e EFL ARM, x86 e MIPS http://merproject.org/ 1 http://mer-l-in.blogspot.com.br/2011/08/restructure-meego-by-installments.html 14
3.4 Ubuntu Touch OS É um projeto que tem por objetivo desenvolver um sistema operacional para dispositivos móveis (no caso, tablets e smartphones), com o uso da interface Unity do Ubuntu OS. O projeto está sendo desenvolvido pela canonical, foi anunciado em 2 de janeiro de 2013, mas na época ainda não tendo um nome específico, apenas Ubuntu for phones, em 19 de fevereiro de 2013 foi dado o nome de Ubuntu Touch OS. O Ubuntu Touch OS possui características muito semelhantes ao Ubuntu para desktops, algumas de suas características são: Open Source Multilingual As plataformas suportadas incluem ARM e i386 Usa o Kernel do Linux (Usado pelo Android OS) Inclui a GNU GLP dentre outras licenças de código aberto Da mesma forma que o projeto Mer, o Ubuntu Touch OS é baseado em QML e HTML5, podendo suportar facilmente aplicações desenvolvidas com tecnologia web. 3.4.1 Informações Dispositivos que têm a opção de ser acoplados em uma docking station 1, obtendo assim recursos extras, podem se transformar num computador completo, o Ubuntu Touch OS oferece suporte para esses recursos (se disponíveis), deixando-o muito semelhante ao Ubuntu para desktops, com a diferença de ser portátil. O Ubuntu Touch OS também possui uma dash bar, semelhante ao do Unity no Ubuntu para desktops, o que oferece ao usuário a possibilidade de acessar seus aplicativos, arquivos e contatos de maneira mais rápida. As aplicações padrão do Ubuntu Touch OS incluem: Facebook, Twitter, Google Calendar, o navegador Chromium, reprodutor de vídeo VLC Player, Ubuntu Music Player, calculadora, dentre outros. 1 Hardware à parte do tablet, geralmente com entradas USB, teclado, saídas de áudio e vídeo, dentre outros recursos 15
3.4.2 Lançamento O Ubuntu Touch OS ainda não esta disponível para download, e ainda não há informações sobre quando isto irá ocorrer, o que sabemos até agora é que o SO deve ser lançado por volta de outubro de 2013. Versões anteriores do SO estão disponíveis para a instalação em apenas alguns tablets, o que inclui alguns dispositivos da Nexus (linha de dispositivos móveis fabricados pela Google em conjunto com um parceiro da OEM (Original Equipment Manufacturer), como por exemplo o Asus Nexus 7, LG Nexus 4 e o Samsung Galaxy Nexus são dispositivos compatíveis com o Ubuntu Touch OS. Atualmente os desenvolvedores podem ter acesso ao código fonte do projeto, podendo modificá-lo e testá-lo livremente. Empresa/Desenvolvedor Canonical Família do Sistema Operacional Linux Modelo de Código Open souce Lançamento 21 de fevereiro de 2013 Linguagem de Programação HTML5, Qt, entre outras Plataformas Suportadas ARM e x86 Licença GNU Site Oficial http://www.ubuntu.com/devices/phone http://www.ubuntu.com/devices/tablet 16