Compilando o Android da Linaro

- por Sergio Prado

Categorias: Android Tags: ,

A Linaro é uma organização sem fins lucrativos que tem o objetivo de manter e melhorar o suporte do ecossistema Linux para a plataforma ARM. Isso inclui, além do kernel, melhorias no suporte do GCC e versões customizadas do Ubuntu e do Android para ARM.

linaro-logo-web

O Android da Linaro é a versão que acompanha mais de perto o AOSP do Google, com algumas customizações e suporte para algumas placas ARM de referência.

Caso você precise portar o Android para uma plataforma ARM, o Android da Linaro é provavelmente a sua melhor opção de ponto de partida.

Sempre que precisei compilar o Android da Linaro passei por dificuldades, porque a documentação deles é ruim e desatualizada. Por este motivo, resolvi documentar o procedimento aqui.

PREPARANDO O AMBIENTE

Os testes foram realizados em uma máquina de 64 bits com o Ubuntu 12.04 instalado.

Antes de começar, execute os procedimentos de preparação do host descritos no site da Linaro.

BAIXANDO O CÓDIGO-FONTE

Para testar, iremos compilar o Android 4.4.4 para a Pandaboard.

Crie um diretório para armazenar o código-fonte:

$ mkdir -p ~/linaro/4.4.4 && cd ~/linaro/4.4.4

Configure algumas variáveis de ambiente com as informações do código-fonte que será baixado:

$ export MANIFEST_REPO=git://android.git.linaro.org/platform/manifest.git
$ export MANIFEST_BRANCH=linaro_android_4.4.4
$ export MANIFEST_FILENAME=default.xml
$ export REPO_GROUPS="common,pandaboard,devel"

A variável REPO_GROUPS permite definir quais grupos de projeto o comando “repo sync” irá baixar. No nosso teste, serão baixados apenas os projetos comuns à todas as placas (common), os projetos da Pandaboard (pandaboard) e os projetos com ferramentas de desenvolvimento e testes (devel).

Caso você queira baixar o branch master do código-fonte, altere a variável MANIFEST_BRANCH para o conteúdo abaixo:

$ export MANIFEST_BRANCH=linaro_android_master

Agora é só baixar o código-fonte:

$ repo init -u ${MANIFEST_REPO} -b ${MANIFEST_BRANCH} -m ${MANIFEST_FILENAME} -g ${REPO_GROUPS}
$ repo sync

Ao final do processo, verifique se o código-fonte foi baixado corretamente:

$ ls
abi       cts          docs        libcore           packages   tools
art       dalvik       external    libnativehelper   pdk        u-boot
bionic    developers   frameworks  Makefile          prebuilts
bootable  development  hardware    native-toolchain  sdk
build     device       kernel      ndk               system

COMPILANDO

Para compilar para a Pandaboard, basta executar o comando abaixo:

$ make TARGET_PRODUCT=pandaboard boottarball systemtarball userdatatarball -j8

No final da compilação, as imagens estarão disponíveis no diretório de saída do produto da pandaboard:

$ ls out/target/product/pandaboard/
boot            HOWTO_getsourceandbuild.txt  root            u-boot.bin
boot.tar.bz2    HOWTO_install.txt            symbols         u-boot.img
clean_steps.mk  MLO                          system          uImage
data            obj                          system.tar.bz2  uInitrd
fake_packages   previous_build_config.mk     test            userdata.tar.bz2

Durante a compilação, tive o seguinte problema:

art/dalvikvm/dalvikvm.cc: In function 'int art::InvokeMain(JNIEnv*, char**)':
art/dalvikvm/dalvikvm.cc:72:3: error: 'replace' is not a member of 'std'

Para corrigir, foi necessário definir a variável de ambiente WITH_HOST_DALVIK e reiniciar a compilação.

$ export WITH_HOST_DALVIK=false

A Linaro possui um servidor de build que mantém imagens pré-compiladas para os targets de referência. Alguns tutoriais também estão disponíveis para quem quiser trabalhar com o Android da Linaro e colaborar com o desenvolvimento.

Um abraço,

Sergio Prado

Faça um Comentário

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.