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