Compilação Cruzada em C – Parte 3
Objetivo
Neste artigo iremos abordar como desenvolver aplicações cruzadas em C que compilam em desktop porem geram binários para Android.
GIT
Repositório da Aplicação
https://github.com/marcelomaurin/croxcompile
Pré requisitos
apt install ncurses-base ncurses-term ncurses-examples ncurses-bin ncurses-doc ncurses-hexedit
sudo apt-get install libncurses5:i386
sudo apt-get install libncurses5
Baixe o compilador
wget http://dl.google.com/android/repository/android-ndk-r12b-linux-x86_64.zip
unzip android-ndk-r12b-linux-x86_64.zip
./android-ndk-r12b/build/tools/make_standalone_toolchain.py –arch arm64 –install-dir ~/arm
./android-ndk-r12b/build/tools/make_standalone_toolchain.py –arch arm –install-dir ~/arm32
Compile o projeto
Aqui apresento o vídeo e depois o processo completo:
/home/mmm/arm/bin/clang -pie crox.c
Para gerar aplicação 64 bits
Ou caso seu hardware não suporte 64 bits, use o seguinte comando.
/home/mmm/arm/bin/clang -pie crox.c
Para gerar aplicação 32 bits
Para automátizar o processo criamos o seguinte Makefile
PROGRAMA=HELLO
PROGRAMA32=HELLO32
PROGRAMAARM=HELLOARM
CC=gcc
CCARM=arm-linux-gnueabi-gcc
CCANDROID=~/arm32/bin/clang
SOURCE= crox.c
all32: clean compile32
all: clean compile
clean:
rm -f *.o
rm -f $(PROGRAMA)
compile32:
$(CC) -m32 $(SOURCE) -o $(PROGRAMA32)
compile:
$(CC) $(SOURCE) -o $(PROGRAMA)
compileARM:
$(CCARM) $(SOURCE) -o $(PROGRAMAARM)
compileANDROID:
$(CCANDROID) -pie $(SOURCE)
Para compilar usando o Makefile digite:
make compileANDROID
Compila 32 bits por padrão.
Transferindo para o Android
Entre no seu equipamento, e ative o modo Duperação USB.
Depois entre liste se o device que esta tentando debugar apareceu em seu sistema:
adb devices -l
Lista de devices ativos
Para nomes apenas:
adb devices
Enviando para device especifico
adb -s <nomedev> push a.out /data/local/tmp/.
Envia para o device especifico o binário criado.
E por fim executamos pela shell, remotamente:
adb -s <nomedev> shell “./data/local/tmp/a.out”
Execução remota da aplicação
Por fim os printes de execução:
Conclusão
No modelo apresentado, conseguimos gerar um aplicativo, que roda em 4 ambientes diferente, todos compilados no Desktop:
- Linux x64
- Linux i386
- Linux ARM
- Android amr
A versatilidade e alta disponíbilidade do C, é peça unica que garante vida longa para esta popular linguagem.
Por fim, concluimos nossa série de artigos sobre compilação cruzada.
Referências
https://adbshell.com/commands/adb-devices
http://nickdesaulniers.github.io/blog/2016/07/01/android-cli/
https://developer.android.com/ndk/guides
https://zoomadmin.com/HowToInstall/UbuntuPackage/gcc-arm-linux-androideabi
https://stackoverflow.com/questions/20093173/adb-shell-and-adb-push-for-specific-avd