Uma ideia que o Ubuntu devia apoiar: Um emulador Android

Iniciado por Nosferatu Arucard, 13 de Maio de 2012, 21:40

tópico anterior - próximo tópico

Nosferatu Arucard

Apesar da própria Canonical ter apresentado em 2008  :P um projecto para implementar um sub-sistema Android para que fosse possível correr aplicações Android directamente no Desktop Ubuntu, e isso não deu grande desenvolvimento, eu creio que é uma boa altura para desenterrar este importante projecto.
Uma empresa desenvolveu um projecto de software similar para Windows designado Bluestacks App Player que permite instalar e correr a esmagadora maioria das aplicações Android (desde que não contenham programas Linux compilados em ARM) num vulgar computador com o Windows 7 e futuramente optimizado para o Windows 8. (O programa não corre no Wine devido à falta de API por implementar)
O programa já têm uma relativa aceitação, e melhorou assim que passou a incluir lojas de aplicações para os programas pagos.  :)

A minha ideia seria convencer a comunidade a juntar-se para criar um software similar para o Ubuntu. (o problema é que eu não tenho recursos e capacidades para embarcar num projecto desses !)
Mesmo com a minha reduzida experiência de programação (somente Análise Numérica), eu até esbocei a estrutura da aplicação que seria conhecida internamente como Ubuntu's Android Application Execution Environment  :P
O Android é basicamente uma distribuição Linux especializada contendo um middleware baseado em bibliotecas em Java que são open-source que é conhecido por Dalvik Virtual Machine, mas usa um sistema gráfico que não é baseado no X Window Server.
A esmagadora maioria das aplicações são programas em Java, pelo que correriam pelo Dalvik independentemente da arquitectura do processador. O Android suporta a execução de programas Linux nativos, e verifica-se por motivos óbvios que certos programas que usam DRM ou programas de código-fechado acabaram por usar programas nativos em ARM que num computador x86-64 não seriam compatíveis a não ser que existisse algum emulador pelo caminho.  ::)

Em linhas gerais o AAEE era constituído pelos seguintes módulos que permitiriam a execução de programas Android no Ubuntu de forma transparente da mesma forma que o Wine permite a execução de programas Windows.
  Era necessário criar uma versão do Dalvik que fosse compatível com o sistema Ubuntu e era aí que existiria a maior dificuldade, dado a necessidade de implementar um framebuffer para o X ou o Wayland de modo que as aplicações que usassem gráficos acedessem à janela do ambiente Android virtual sem provocar a falha da sua execução. Outra ideia era o uso do SDL acelerado por OpenGL para criar uma implementação independente do X (visto que o Wayland já está à espreita) para que as aplicações gráficas funcionassem correctamente.
Depois era necessário um servidor Android (era a aplicação mestra) que faria a ponte entre o sistema Linux e o sub-sistema Android do qual trataria do acesso aos ficheiros, processos e aplicações. A configuração padrão seria o uso da pasta de utilizador como se fosse o cartão de memória dos ficheiros de utilizador de dispositivo Android real. (Um sistema Android espera que exista um /mnt/sdcard/ no sistema, e a pasta de utilizador era montada como tal)
Eventualmente o servidor do sub-sistema montaria pen-drives, discos ópticos e cartões de memória (era o Ubuntu que faria na realidade) para uso directo pelas aplicações Android, mas com as restrições óbvias que podiam ser personalizadas.

O servidor do sub-sistema Android permitiria o acesso à consola Linux (visto que o Android é um sistema Linux), dado que certas aplicações necessitam dos comandos e de correr programas Linux nativos, especialmente se a aplicação os instalar.
Verifica-se que a esmagadora maioria dos dispositivos Android são máquinas ARM SoC contendo um CPU ARM e uma GPU OpenGL ES/H.264, e salvo algumas excepções certos programas são vão funcionar em máquinas ARM.  :(
E no meu esboço de projecto, para destacar do Bluestacks, incluiria um emulador ARM feito de raiz que permitia emular as instruções ARM v6/v7 em máquinas x86 (de preferência 64 bits), mais o codec H.264 por hardware e ainda as instruções OpenGL pela GPU do computador.
Era um componente opcional que exigiria pelo menos uma CPU de 64 bits, uma placa gráfica compatível com OpenGL 2.0 e 3.0 e suporte de vídeo por hardware H.264 que já é bastante vulgar (até as últimas placas integradas Intel HD já suportam H.264 por hardware).
O funcionamento deste emulador era correr os programas Linux ARM num mini-sistema virtual que podia incluir as run-times glibc ARM e traduzir as instruções ARM nas x86-64 equivalentes e apanhar as chamadas de sistema para as re-encaminhar para o kernel Linux x86.
Mas para correr uma aplicação ARM exigente (como acontece com os Tegra) era necessário uma boa CPU tipo Intel i5/i7 com 4 ou 8 núcleos e uma gráfica potente para poder emular um ARM tipo Tegra. Mas o mínimo era a emulação de uma ARM v6 e uma GPU H.264 do qual bastava um computador mais modesto...  :P

Acima deste aparato todo, estavam as bibliotecas do Android e o projecto pretendia suportar até à versão Ice Cream Sandwich (4.0) que é a última e seria o padrão emulado, de modo a poder até experimentar os programas mais recentes.
O programa permitiria correr as aplicações dentro de uma janela contendo um mini-Desktop Android contendo as aplicações e os programas de configuração (configurar rede, aplicações, instalar APK, lojas de aplicações livres, sem esquecer da configuração do emulador ARM caso o computador fosse adequado), e a integração com o Ubuntu, permitindo adicionar na Dock os ícones das aplicações favoritas. Desta forma era possível correr a aplicação Android dentro de uma janela própria e comportaria literalmente como uma aplicação tradicional.  ;)

Com este projecto o Ubuntu correria de forma nativa aplicações de 3 sistemas operativos num só: o Linux, Windows e Android.
Como o Android é open-source a compatibilidade seria superior a 90% mesmo nas primeiras versões deste programa, e o suporte ao ARM poderia permitir o uso de programas como o Netflix que por fim poderiam ser usadas em máquinas Linux, mesmo que o DRM obrigasse a uma elevada carga da CPU.
Espero que tenham gostado desta ideia...  :)

eliseu_carvalho

Pensando bem... Tem Android... Tem Ubuntu... Ambos são Linux... Deveria ser até uma "obrigação" os programas serem compatíveis, não?