Documente Academic
Documente Profesional
Documente Cultură
CENTRO DE INFORMÁTICA
SISTEMAS DE INFORMAÇÃO
Recife
5 de Dezembro de 2019
DAVID FRANCISCO DO NASCIMENTO BANDEIRA
Recife
5 de Dezembro de 2019
David Francisco do Nascimento Bandeira
Professor
Convidado 1
Professor
Convidado 2
Recife
5 de Dezembro de 2019
“Dedico a Deus por pela vida que me foi dada e às pessoas a que deram parte
das suas próprias para que puder ser quem sou hoje ”
Agradecimentos
Smartphones have become the means by which most of society has access
to a computer, and for younger generations it is the primary means of access to
computing resources, added to the increasing computational power that smartphones
today are compared to. computers and a growing transformation in the way work is
linked to smartphones we have a conducive environment for using android as a real
alternative to a software development platform, thanks to the similarities of android with
linux based operating systems we have the ability to have software tools and modern
software production processes on Android and this work wants viability of using Android
smartphone environment as standard quality software development environment.
Keywords: Android. Development. Mobile. Desktop
Lista de ilustrações
1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.1 Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2 Desafios, limitações . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2 Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3 Conclusões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1 Resultados Obtidos . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Discussão sobre o android . . . . . . . . . . . . . . . . . . . . . . . 24
3.3 Trabalhos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
ANEXOS 28
10
1 Introdução
1.1 Android
Figura 1 – Dados coletados durante um período de sete dias encerrado em 7 de maio, 2019.
As versões com menos de 0,1% de distribuição não são exibidas.
https://developer.android.com/about/dashboards?hl=pt-br
Por haver uma fragmentação tão alta e a fim de simplificar os testes será
usado como base o tablet Samsung Galaxy Tab A SPen(SM-P205NZKPZTO) para
os experimentos. Foram feitos teste preliminares de aparelhos mais simples como o
Xiaomi Redmi 2 de 512 megabytes de RAM e um Alcatel A3xl de 2 gigabytes de RAM,
com aplicações simuladoras de terminal, será explicado mais à frente destas aplicações,
e apesar de um resultado satisfatório em caso de pequenas tarefas, ser capaz de rodar
múltiplas ferramentas de desenvolvimento e ainda as aplicações desenvolvidas iria
Capítulo 1. Introdução 13
1.3 Metodologia
• Suporte, caso seja uma empresa ou comunidade esta é capaz de dar suporte
para conhecimento, implementação de novas features e correções de bug.
• Ergonômia, evitar o uso de features como super usuário que não é um padrão en-
tregue pelo S.O sem ter que recorrer a recursos não ortodoxos e possivelmente
danosos para o aparelho.
15
2 Desenvolvimento
Aplicativo Descrição
Sim,
Sim, todas as Não, pois
linux deploy Não existe totalmente Nao
versoes usa root
customizavel
Sim,
Complete linux Sim, todas as Não, pois
Não existe totalmente Não
installer versoes usa root
customizavel
Sim, possui
Sim,
Sim, todas as widgets de
Termux Sim, opensource totalmente Sim
versoes UI do
customizavel
android
Não, sem
Sim, todas as acesso
UbuntuForAndroid Não existe Não Não
versoes direto ao
android
Capítulo 2. Desenvolvimento 17
Não, somente
GNURoot Não existe Não Não Sim
as antigas
Sim,
Não,
Não, somente Funciona
Linux on DeX Não existe Não exclusivo do
as novas seamless
samsung
com o Dex
linguagens mais comuns como ruby,javascript,python porém deve-se estar ciente das
limitações do kernel, nas dependência das linguagens que usarem recursos bloquea-
dos elas causarão erros, neste momento foi conseguido instalar todo um ambiente de
desenvolvimento no terminal com ferramentas de como VIM,Tmux e git.
Caso uma interface de usuário mais tradicional seja necessária é possível ser
instalada e acessada através do protocolo remoto VNC, podemos instalar um ambiente
de desktop que pode ser acessado pela gerenciador de pacotes que a distribuição tem
disponível, o XFCE foi o escolhido, depois de instalado será preciso de um servidor
de vnc para que se possa criar o ambiente gráfico pois o Termux não possui meios
de representar um ambiente gráfico, no caso foi usado o servidor TightVnc server e
teremos que configurá-lo para responder a rede local do aparelho, uma vez que o
tenhamos configurado o servidor é possível já instalar um aplicativo de cliente de VNC
disponível na loja do android para que abrir o servidor e acessar o ambiente, com
uma aparelho com memória suficiente se consegue ter acesso a qualquer aplicativo
que como ide populares e browsers de desktop, neste ponto tem-se um ambiente
gráfico e um ambiente linux quase funcional com alguns impedimentos, em termos de
usabilidade dependendo do aparelho teremos problemas de delay caso a memória do
aparelho esteja perto de ser completamente ocupada e renderização de openGL em
alguns aplicativos fica comprometida sem que haja adaptações, esses são problemas
comuns de se usar o protocolo VNC e como para o objetivo deste projeto não foram
usados aplicações que usam demasiadamente recursos gráficos não foram encontrados
empecilhos.
Porém considerações precisam ser feitas enquanto os scripts, a mais contras-
tante e que a variante da arquitetura arm 32 bits está caindo em desuso e o suporte
a vários pacotes pode não existir ou esta com versões antigas e ainda falando dos
aparelhos com arquitetura 32 bits temos problemas com relação às especificações dos
aparelhos que normalmente vem neste arquitetura pois elas normalmente são inferiores
ao requisitos mínimos do escopo deste projeto e o melhor aparelho que usado para
teste neste projeto bate com as especificações mínimas sem muita folga e quando lhe
foi requerido mais processamento como no caso de subir servidores de projeto mais
complexos e manter servidores gráficos a performance foi baixa, não seria possível um
aparelho desta especificações ter um servidor gráfico enquanto o usuário trabalha em
um projeto sem o custo de delay e performance ruim, mas o usuário consiga trabalhar
todo seu fluxo de trabalho dentro de aplicações baseadas em texto para serem usadas
no terminal do Termux seria perfeitamente possível ter um fluxo de trabalho natural
com o aparelhos nas especificações mínimas, outra observação fica com os ambientes
gráficos acessados por VNC pois a usabilidade não substitui a manipulacao nativa
de uma interface gráfica, em aparelho melhores ainda existe um pequeno delay de
interação com os elementos da tela, e o acesso a recursos de som nao e simples de
Capítulo 2. Desenvolvimento 21
ser feito mas com um período de adaptação o autor do deste artigos deixou de sentir
estranheza com essas limitações de uso.
Porém ainda existiam limitações que precisavam ser superadas, pois executar
aplicações como Docker ou o Kubernetes seria impossivel containers no Android não
está disponível mesmo pela simulação de distribuições do Proot, mesmo que consiga
baixar as binário pelo gerenciador de pacotes, para esses tipos de necessidades uma
simulação completa.
Antes de trabalhar em uma solução deve-se lembrar que o Android não possui
diretivas de kernel para uma aceleração de virtualização por padrão, logo tem-se em
mente que a performance da simulação pode não ser satisfatória dependendo da
exigência da aplicação rodando pela simulação. Para ter acesso a um virtualizador
será necessário usar uma distribuição simulada pelo Proot, pois o Termux não possui
pacotes estáveis para um virtualizador e para este projeto será usado o Alpine Linux
em Proot e a ferramenta de virtualização será o Qemu na sua variante de arquitetura
compatível com a versão do aparelho, no casos os aparelhos usados para teste foram
da Arm 64 bits que é chamada de aarch64, a iso do sistema usada na simulação
completa continua sendo a do Alpine Linux, porém neste caso todo o sistema ficará
dentro de uma unidade de disco virtual, a figura 2 abaixo demonstra todas as camadas
da pilha de tecnologia:
Capítulo 2. Desenvolvimento 22
Mas antes uma ISO especial precisara ser feita pois padrão o alpine linux nao
dispoe para arm um de disco unificado com todas as parte do sistema pronto para
execução do virtualizador, no caso ela divide todas os arquivos do S.O em vários
arquivos separados e deve ser papel do desenvolvedor usuário montar o sistema
operacional e customizá-lo dependendo das usar necessidades, logo na primeira vez e
única vez será necessário construir um setup de virtualização onde irá se iniciar uma
máquina para montar uma máquina final básica em uma unidade virtual vazia criada
para esta finalidade, este processo se torna único pois após a criação bem sucedida
da mesma pode-se guardar esta nova unidade e posteriormente usá-la em novas
simulações caso deseje, foram criados scripts de inicialização da primeira vez, eles
baixam o arquivos do kernel e da árvore de pasta do sistema de arquivos, configurações
menores de processador,memória montagem da unidade vazia destino e variáveis de
inicialização do sistema também são feitas.
Após os scripts serem rodados com sucesso a máquina virtual em modo terminal
estará disponível e a fim de acelerar o processo de instalação e simplificá-lo será
necessário usar as as ferramentas padrões de setup e instalação do sistema que já
Capítulo 2. Desenvolvimento 23
estão dentro do alpine linux, porém existe um problema em especifico com a versão do
alpine linux ARM, pois o bootloader padrão da distribuição é extlinux e neste momento
não há versão suportada para ARM, para contornar esse problema deve-se preparar
primeiro o sistema para depois configurar o instalador do alpine a usar o padrão de
instalação com o bootloader para o tipo EFI diferente do padrão legacy usado para
inicializar a máquina virtual, isso será feito mudando algumas variáveis de instalação.
Depois da instalação ter ocorrido é necessário desligar a máquina virtual e iniciar
alguns scripts de configuração para que permita que o qemu reconheça o bootloader do
tipo EFI, neste momento pode-se criar uma variação do script de inicialização padrão
para configurar o qemu a fim de expor alguma porta de rede da máquina virtual para
uma das portas da máquina hospedeira, essa característica é importante caso se
deseje dentro da máquina virtual rodar aplicações web que precisam ser vistas do lado
de fora do ambiente simulado. Após iniciar os scripts que rodam a máquina virtual final
tem-se acesso a uma máquina funcional e operacional e pode-se instalar e executar
aplicações que seriam impossíveis no ambiente normal, no caso foram testados o
Docker com containers do NGINX, e caso ao ligar na porta correta pode-se neste caso
acessá-lo pelo browser do próprio android na porta local e porta de rede especificado
no script de inicialização.
Por fim o motivo que levou a escolha do alpine Linux foi a sua portabilidade, pois
em aparelhos modestros a quantidade de armazenamento acaba sendo pequena e
economizar torna-se prioridade.
3 Conclusões
Sucessos Fracassos
Simulação de distribuição com o Proot não simula features que o kernel não
“Proot” com scripts da possui, Docker por exemplo nao consegue
comunidade rodar
Referências
ANDROID OPEN SOURCE PROJECT. Android Runtime (ART) and Dalvik. 2017.
Disponível em: https://source.android.com/devices/tech/dalvik. Acesso em: 25 nov
2019.
RAHMAN, M. Android Q’s Desktop Mode is real, here’s your first look. 2019.
Disponível em: https://www.xda-developers.com/android-q-desktop-mode/. Acesso
em: 15 out 2019.
Anexo A codigo para instalar o Alpine linux e realizar build inicial trabalhar
com o qemu
Código 1 – Initial.sh
pkg update
pkg install curl
curl - LO https :// raw . githubusercontent . com / Hax4us /
TermuxAlpine / master / TermuxAlpine . sh
sh TermuxAlpine . sh
startalpine
apk update
apk add wget
apk add qemu - img
apk add qemu - system - aarch64
apk add qemu - system - arm
Código 2 – Run.sh
1 ARCH = $ ( uname -m )
2 ALPINELINUXARCH = " "
3 if [ " $ARCH " = " armv7l " ]; then
4 echo " armv7 "
5 ALPINELINUXARCH = " armv7 "
6 elif [ " $ARCH " = " aarch64 " ]; then
7 echo " aarch64 "
8 ALPINELINUXARCH = " aarch64 "
9 else
10 echo " armhf "
11 ALPINELINUXARCH = " armhf "
12 fi
13
14 INITRAMFS = http :// dl - cdn . alpinelinux . org / alpine / v3 .10/ releases
/ $ALPINELINUXARCH / netboot -3.10.3/ initramfs - vanilla
15 VMLINUZ = http :// dl - cdn . alpinelinux . org / alpine / v3 .10/ releases /
$ALPINELINUXARCH / netboot -3.10.3/ vmlinuz - vanilla
16 MODLOOP = http :// dl - cdn . alpinelinux . org / alpine / v3 .10/ releases /
$ALPINELINUXARCH / netboot -3.10.3/ modloop - vanilla
17 if [ ! -f initramfs - vanilla ]; then
18 wget " $INITRAMFS "
19 fi
20
21 if [ ! -f vmlinuz - vanilla ]; then
22 wget " $VMLINUZ "
23 fi
24
25 if [ ! -f vm . qcow2 ]; then
26 qemu - img create -f qcow2 vm . qcow2 4 G
27 fi
28
Referências 30
# ...
Welcome to Alpine Linux 3.11 _ alpha20191114 ( edge )
Kernel 4.19.80 -0 - vanilla on an aarch64 (/ dev / ttyAMA0 )
You can setup the system with the command : setup - alpine
# ...
Select keyboard layout [ none ]:
Enter system hostname ( short form , e . g . ’ foo ’) [ localhost ]:
Available interfaces are : eth0 .
Enter ’? ’ for help on bridges , bonding and vlans .
Which one do you want to initialize ? ( or ’? ’ or ’ done ’) [ eth0
]
Ip address for eth0 ? ( or ’ dhcp ’ , ’ none ’ , ’? ’) [10.0.2.15]
dhcp
Do you want to do any manual network configuration ? [ no ]
udhcpc : started , v1 .31.1
udhcpc : sending discover
udhcpc : sending select for 10.0.2.15
udhcpc : lease of 10.0.2.15 obtained , lease time 86400
Changing password for root
New password :
Bad password : too weak
Retype password :
passwd : password for root changed by root
Which timezone are you in ? ( ’? ’ for list ) [ UTC ]
* WARNING : clock skew detected !
* WARNING : clock skew detected !
* Starting busybox acpid ...
[ ok ]
* Starting busybox crond ...
[ ok ]
HTTP / FTP proxy URL ? ( e . g . ’ http :// proxy :8080 ’ , or ’ none ’) [
none ]
Which NTP client to run ? ( ’ busybox ’ , ’ openntpd ’ , ’ chrony ’ or
’ none ’) [ chrony ] busybo
x
* service ntpd added to runlevel default
* Starting busybox ntpd ...
[ ok ]
Available mirrors :
# ...
r ) Add random from the above list
f ) Detect and add fastest mirror from above list
e ) Edit / etc / apk / repositories with text editor
Código 3 – run2.sh
if [ ! -f QEMU _ EFI . fd ]; then
wget https :// releases . linaro . org / components / kernel /
uefi - linaro / latest / release / qemu64 / QEMU _ EFI . fd
fi