Introdução ao sistema operacional Android

O sistema operacional Android é um sistema de código aberto. Muitas pessoas dizem que é Linux, mas isso não é totalmente verdade. Embora o Android tenha kernels semelhantes aos do Linux, essa é a única coisa semelhante. Hoje, examinaremos mais profundamente o interior do sistema operacional Android, que é o processo, a estrutura e outras estruturas semelhantes. Então, vamos começar do básico e dar uma olhada na raiz interna do sistema operacional Android.

Após o lançamento do iPhone e do Windows Lumia Series, ou seja, os telefones relacionados ao Microsoft Windows, o Google queria fazer o mesmo. Mas eles queriam algo que pudesse ser de código aberto. A principal razão por trás disso foi para que alguém pudesse depurá-lo, modificá-lo conforme necessário. Então veio a ideia do Linux. O Linux é um sistema operacional totalmente de código aberto e é amplamente aceito pela comunidade em todo o mundo. É um daqueles sistemas operacionais que é usado ainda mais que o Windows ou Mac OSX. Além disso, o Linux tem a capacidade de executar quase todas as outras coisas que podem ser executadas no Mac ou no Windows. Assim, o Google decidiu desenvolver um sistema operacional para um telefone celular com o mesmo shell interno básico do Linux, para que ele seja compatível com quase tudo e o shell externo fosse desenvolvido como, quando e também como é necessário.

Sistema operacional Android como um projeto de código aberto (AOSP)

O Android tem a capacidade de modificar, inventar e implementar livremente nossos próprios drivers e recursos de dispositivo. Agora, para falar sobre, existem cinco camadas diferentes de um sistema operacional Android. É o seguinte:

Como você pode ver na imagem acima, a primeira camada é o Application Framework, a segunda é o Binder IPC Proxies, a terceira consiste nos Serviços do Sistema Android, a quarta é a HAL ou a forma completa é a Hardware Abstraction Layer e a última sendo o kernel do Linux. Agora, como eu disse anteriormente, você pode ver que a única parte do Linux em que um sistema operacional Android consiste é o Kernel do Linux. Agora vamos dar uma olhada em todos eles, um por um.

Estrutura de Aplicação Android

Esta estrutura de aplicativos é usada pelos desenvolvedores de aplicativos para Android. Esta parte do Android tem pelo menos algo a ver com a camada de hardware. Os aplicativos Android estão programados na linguagem Java. Após a programação de um aplicativo, as ferramentas do SDK do Android ajudam a compilar os dados e os arquivos de recursos, como os arquivos XML, os arquivos jar, os arquivos de manifesto e outras imagens e itens em um único pacote de arquivo com uma extensão '.apk'. Este arquivo apk pode ser usado para instalar o aplicativo com apenas um clique nos dispositivos Android. Agora, como o sistema operacional Android se comporta como um ambiente Linux, o comportamento do aplicativo também é o mesmo aqui. Cada aplicativo é considerado um usuário separado do outro e é executado em sua própria máquina virtual. Isso torna o código programado do aplicativo isolado e também evita que ele seja infectado por terceiros, a menos que seja explicitamente declarado. Todos os outros aplicativos têm seu próprio ID de USUÁRIO e todos os outros processos têm sua própria Máquina Virtual.

O Android Application Framework funciona com o Princípio do Menor Privilégio. Princípio de Menor Privilégio significa que sempre que um novo aplicativo precisa ser executado, mas não há memória disponível, o sistema Android sai automaticamente do aplicativo antigo, o que não é necessário para ser executado em segundo plano. Esta é uma das melhores partes da segurança do sistema operacional Android. Esse princípio torna possível que cada aplicativo tenha apenas o acesso necessário para realizar seu trabalho. Portanto, um aplicativo não pode obter permissão para o que não se destina a fazer. Isso, por sua vez, cria um ambiente muito seguro no próprio sistema operacional Android.

O IPC do fichário é conhecido como Comunicação entre processos do fichário. Essa interface permite que um programador crie um aplicativo para se comunicar com outros aplicativos. Mais frequentemente, não são os aplicativos que se comunicam, são os processos. O IPC do fichário ajuda a executar vários processos ao mesmo tempo em um nível simultâneo. Essa implementação do fichário é originada no Kernel do sistema operacional Android. Agora, foram levantadas questões sobre por que o fichário precisa permanecer no kernel e por que não pode ser executado a partir dos mecanismos IPC do Linux? A principal razão para isso é porque o fichário evita o uso de alocação desnecessária de espaço, diferentemente de outros mecanismos IPC no sistema Linux. Se você já ouviu falar do termo 'magia em python', é assim que um IPC do Binder seria para um desenvolvedor de aplicativos, pois está totalmente oculto a eles e simplesmente parece funcionar, diferentemente da estrutura de alto nível em que você precisa fazê-lo funcionar explicitamente. Na verdade, isso permite que a estrutura de alto nível se comunique com os serviços do sistema operacional Android.

Serviços de sistema do sistema operacional Android

Um serviço é um trecho de código compilado que é executado por um longo período no segundo plano de um sistema operacional Android sem fornecer nenhuma interface. Qualquer aplicativo, seja usuário ou sistema, pode iniciar um serviço, mas ele continuará sendo executado em segundo plano, mesmo que o aplicativo esteja fechado. No entanto, existem dois tipos de serviços:

Serviços Iniciados

Os serviços iniciados geralmente iniciam quando um aplicativo solicita. No entanto, um tipo de serviço Iniciado geralmente realiza apenas uma única operação e não retorna nada.

Serviços vinculados

Serviços limitados oferecem uma interface de relação cliente-servidor. O serviço vinculado é executado até que o aplicativo em primeiro plano seja executado e, em seguida, é interrompido quando a atividade do aplicativo é destruída.

Os serviços do sistema do Android fornecem as informações necessárias para os aplicativos do usuário para que funcionem corretamente. E essas comunicações entre os serviços do sistema e os aplicativos do usuário são feitas com a ajuda do Binder IPC do Kernel. Agora pode surpreender, mas nem todos os aplicativos em um Android são escritos em Java. Alguns deles são escritos em C e C ++. Os aplicativos que precisam estar em contato próximo com o hardware são escritos em C e C ++. A principal razão para isso é que, na maioria das vezes, os serviços do sistema precisam estar em constante contato com o hardware. Isso torna importante que o trecho de código compilado seja extremamente rápido. E quando se trata de aceleração de hardware e alto desempenho, o C é muito mais rápido que Java ou qualquer outra linguagem existente.

Serviços de hardware que estão em uso constante, por exemplo: Sensores de proximidade, acelerômetro ou tela sensível ao toque precisam ser escritos em C. Outro hardware, como a câmera ou o som, utiliza principalmente as chamadas JNI. Portanto, se você notar, as telas sensíveis ao toque sempre serão mais rápidas do que iniciar uma câmera ou tocar uma música através de um music player.

Ao criar um serviço do sistema, observe que os serviços tendem a ser executados no processo principal e não criam um processo separado. Em resumo, se o seu código realizar um trabalho intensivo de CPU e GPU, por exemplo, jogos de alta definição, você deve preferir criar novos threads no mesmo serviço; caso contrário, sempre haverá uma grande chance de ter a caixa de diálogo "O aplicativo não está respondendo".

Cursos recomendados

  • Treinamento de certificação de segurança de TI
  • Curso completo de Ruby on Rails
  • Treinamento profissional em CSS
  • Programa em HTML5 e CSS3

Camada de abstração de hardware

O HAL ou a camada de abstração de hardware foi projetada especificamente para fornecedores. Os desenvolvedores de aplicativos têm pouco ou quase nada a fazer aqui. Essa camada ajuda a inserir a funcionalidade sem fazer nenhuma modificação no sistema. Todos os outros sistemas possuem um HAL de design diferente, pois são específicos para cada dispositivo. O HAL consiste em duas estruturas típicas: Módulo e Dispositivo.

A estrutura do módulo no HAL é armazenada como uma biblioteca compartilhada no formato .so, que consiste em metadados básicos, como o número da versão, autor que projetou o módulo e coisas semelhantes. A estrutura do dispositivo é o hardware real do produto. Semelhante à do módulo, mas a estrutura do dispositivo define uma versão mais abrangente das informações genéricas de hardware, que contém ponteiros e outras coisas semelhantes que são especiais para cada hardware.

No Linux, os aplicativos se comunicam com o hardware subjacente por meio de chamadas do sistema. Mas em um sistema operacional Android, os aplicativos se comunicam com o hardware por meio de APIs Java.

Kernel do Linux

Compilar um kernel Linux para um sistema operacional Android é semelhante ao de compilar um sistema operacional Linux básico. A única diferença é que a versão do Android é um pouco mais avançada que a do Linux. O principal motivo é o kernel do Android consistir em recursos adicionais, como os wakelocks, toque duas vezes para desbloquear e outros recursos similares incorporados ao dispositivo operacional móvel. Recursos como o wakelock são importantes, pois o kernel funcionará em um dispositivo portátil e precisa ser um pouco mais agressivo no gerenciamento de memória e bateria; diferente do Linux básico, onde o gerenciamento de energia não é um problema. Esses requisitos adicionais são induzidos no kernel e não no sistema, pois essas coisas não devem afetar os drivers internos.

Sempre que você ouve uma pessoa dizendo 'seu Linux', ela geralmente significa o kernel, pois é a parte mais básica e ainda a mais importante de qualquer sistema operacional. A principal razão pela qual o Android é baseado no kernel Linux é o seu código aberto. Qualquer um pode prosseguir e modificar o kernel do Linux sem qualquer limitação de hardware ou até mesmo problemas de royalties.

Diferença entre Linux e Android

Então agora chegamos finalmente à fase mais confusa deste blog: Linux vs Android. As pessoas geralmente consideram o android como uma distribuição Linux, mas eu diria que eles têm apenas 50% de razão. Sempre que o sistema operacional Android é inicializado, ele basicamente carrega o kernel como qualquer outra distribuição Linux, mas o restante do software é totalmente diferente do Linux. Os aplicativos Linux não são executados no Android e também vice-versa, a menos que sejam compilados em um ambiente chroot. As bibliotecas presentes em uma distribuição Linux típica e no Android são totalmente diferentes uma da outra. Basicamente, você não pode obter acesso ao terminal raiz no Android como no caso do Linux. Essa é a principal razão pela qual as pessoas geralmente instalam o Busybox, o SuperSU e seus binários após o enraizamento, para que tenham acesso à linha de comando mais detalhado do kernel e do shell. Não há shell padrão no Android, mas você pode obter um instalando um emulador de terminal na loja do Google Play. O Emulador de Terminal fica assim:

O tempo de execução do Android funciona em uma máquina virtual Dalvik. Esta VM Dalvik é na verdade um intérprete para a linguagem de programação Java. Todo o tempo de execução do Android é escrito em Java no Android e, como todos os aplicativos do Android são escritos em Java, fica muito mais fácil e suave a execução dos aplicativos no ambiente virtual. E como todos os aplicativos e até mesmo o tempo de execução são escritos em Java, fica muito mais fácil para qualquer desenvolvedor personalizar todos os bits do sistema operacional Android. O androide geralmente era projetado para ser um sistema operacional de usuário único (ao contrário do pirulito e do marshmallow, onde pode haver vários usuários). Para tornar isso mais simples, deixe-me colocá-lo desta forma. Os aplicativos Android nada mais são do que processos Linux no final e é assim que eles tendem a funcionar. E como afirmei acima que todo aplicativo tem seu próprio processo, fica mais fácil para o kernel criar um UID separado para cada processo e manipular os arquivos e a memória do aplicativo sem nenhum esforço extra.

Na verdade, há mais do que os princípios básicos do sistema operacional Android que mencionei acima. O Android tem um processo central conhecido como 'Zigoto' e é excelente no que faz. Na verdade, esse processo inicia com os comandos de inicialização quando o android é inicializado. Não vou entrar em muitos detalhes aqui, mas acho que os conceitos básicos do sistema operacional Android são suficientes para você começar com o Android. Para obter mais informações, você pode realmente visitar o source.android.com e developers.android.com, que é o site oficial do google para qualquer atualização no Android.

Artigos recomendados

Aqui estão alguns artigos que ajudarão você a obter mais detalhes sobre o sistema operacional Android, basta acessar o link.

  1. HTML5 vs Flash - como são diferentes
  2. Os 8 aplicativos úteis do Office Suite para o seu Android
  3. Os 5 melhores emuladores Android gratuitos para PC
  4. Perguntas da entrevista para Android - As 10 principais perguntas úteis
  5. Carreiras em Desenvolvimento Android
  6. As 33 principais diferenças entre iPhone e Android