Como compilar uma ROM com o source CyanogenMod 10.1

51 Comentários

Por Miguel Almeida para o Pplware

Provavelmente todos vocês já viram a quantidade de ROMs que existem para os mais variados equipamentos, mas faz alguma ideia de como estas são criadas? Isto inclui muitos equipamentos e múltiplos projetos, como são o caso da comunidade CyanogenMod, AOKP (Android Open Kang Project), Code Aurora, entre outras…

Este artigo tem como objetivo explicar e ensinar as noções básicas de como configurar um sistema para começar a construir ROMs para Android a partir do código fonte. Para isso é necessário ter uma instalação de raiz ou numa máquina virtual de um sistema operativo baseado em Linux (Debian, pode ser outra versão) 32 ou 64bits.

cm_00

Neste caso específico usei o Ubuntu 12.10 Quantal Quetzal de 64bits, se por acaso usarem o Fedora os comandos utilizados vão ser ligeiramente diferentes. Para a instalação deste sistema operativo podem seguir este guia.

Antes de começarmos as configurações devemos ter em atenção o espaço existente no disco rígido, o código fonte do Android ocupa cerca de 8/9 GB e com a compilação para um dispositivo cerca de 25 a 30 GB.

O desenvolvimento Android tem alguns requisitos, chamados de dependências no Linux, alguns deles o Oracle (Sun) Java Development Kit version 6, Python, Git, GNU Make, entre outros…

Configurações:

CyanogenMod 10.1 – Jellybean

1º Passo: Ter o sistema atualizado, para isso executar na consola (CTRL + ALT + T):

sudo apt-get update

2º Passo: Instalar as dependências

sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev openjdk-6-jre openjdk-6-jdk pngcrush schedtool libxml2-utils

2.1: Só instalar para 64 bits:

sudo apt-get install g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline-gplv2-dev gcc-4.7-multilib g++-4.5-multilib

clip_image002

Se precisarem de ver mais alguma dependência podem consultar o site oficial do Android aqui

3º Passo: Preparar Repo

Esta é uma ferramenta que permite fazer o download do código fonte do Android, automaticamente a partir de centenas de repositórios individuais.

Criar os diretórios/pastas e instalar repo:

mkdir -p ~/bin
mkdir -p ~/cm10.1
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo

clip_image004

Colocar a pasta ~/bin como caminho executável, para permitir a execução do comando repo seja usado fora dessa mesma pasta.

export PATH=${PATH}:~/bin

4º Passo: Iniciar a sincronização com o código fonte da CyanogenMod 10.1

cd ~/cm10.1
repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1

clip_image006

5º Passo: Download do código fonte. Poderá demorar cerca de 2/3h dependendo a velocidade da Internet.

repo sync

Nota: Até este ponto é genérico para todos os equipamentos, mas o próximo passo já é específico para um equipamento.

6º Passo: Neste passo vamos preparar o código específico para um equipamento, Google/LG Nexus 4 que tem a “alcunha” de mako nos repositórios CyanogenMod.

. build/envsetup.sh && breakfast mako

clip_image008

7º Passo: Download ou extração dos Proprietary Files, também chamados de blobs

cd ..
mkdir -p ~/cm10.1/vendor/lge/mako
git clone git://github.com/asm19/vendor_lge_mako.git
rsync -av --delete ~/vendor_lge_mako/ ~/cm10.1/vendor/lge/mako/ --exclude='.git*'

clip_image010

As instruções acima são para o download dos ficheiros que se encontra no meu github, mas como disse estes podem ser extraídos diretamente do equipamento. Para os extraírem terão que ter o adb (Ver onde diz: Configuring USB Access) a funcionar no Ubuntu e depois ir à pasta onde se encontra os ficheiros do Nexus 4, se seguiram os passos acima estes deverão estar em:

cd ~/cm10.1/device/lge/mako

E executar:

./extract-files.sh

Nota: É importante que estes ficheiros sejam devidamente extraídos, pois sem eles vão ter erros na compilação e ter algumas funcionalidades desativadas, como touch, camara, entre outras…

8º Passo: Download das aplicações prebuilt (pré-construídas) necessárias para a compilação, Terminal Emulator:

cd ~/cm10.1/vendor/cm
./get-prebuilts

clip_image012

9º Passo: Ativar cache (para a compilação ser mais rápida) e iniciar a compilação.

cd ~/cm10.1/
export USE_CCACHE=1
. build/envsetup.sh && croot && brunch mako

clip_image014

Se tiver feito todos os passos sem erros, a ROM vai começar a ser compilada. O tempo de compilação varia de computador para computador, no meu com um i7 3610QM de 2.3 – 3.3Ghz, 12GB de RAM demora cerca de 1h.

10º Passo: Após a compilação terminar vão ter a vossa ROM compilada num .zip e este é apresentado com o md5 correspondente, que se encontra em:

~/cm10.1/out/target/product/mako

clip_image016

clip_image018

Está assim finalizado o processo de compilação e já têm a vossa ROM criada, podem flashar o vosso equipamento através do ClockworkMod.

Considerações finais:

  • Sempre que quiserem compilar basta repetir o 9º Passo;
  • Neste caso específico o kernel é compilado no decorrer da compilação da ROM, o mesmo não precisa de ser compilado à parte;
  • Sempre que quiserem ver se há novas alterações ao código fonte que é desenvolvido pela comunidade CyanogenMod basta consultarem o Code Review da CyangonMod.
  • Se pretenderem atualizar os ficheiros do código fonte já existentes no vosso computador, de modo a obter estas atualizações, é só irem ao vosso diretório através da consola e voltar atualizar a repo com o comando:
repo sync
  • Se o vosso dispositivo não for oficialmente suportado pela comunidade têm que ter as configurações básicas do mesmo, bem como os Proprietary Files, sendo necessário alguns ajustes. Esta fase já requer alguns conhecimentos sobre o código fonte do Android.

É desta que se vai aventurar no desenvolvimento de ROMs Android?

“O Pplware e o autor deste artigo, Miguel Almeida, não se responsabilizam por quaisquer danos causados por instruções, inerentes ao artigo ou aos comentários, que possam resultar na perda da garantia do equipamento.”

Comentários

51

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Blizard

    Bom artigo!
    E ainda bem que aqui foi colocado porque tenho algumas questoes… as tags breakfast, brunch, lunch e outras… o que significam?

    Obrigado

    1. Avatar de Hélder Ferreira

      MKA é uma derivação melhorada do comando make. O make é lento então foi adicionado o SCHED_BATCH para melhorar a performance do comando. Mka serve para executar a compilação.

      Breakfast: é o comando para configurar o build da rom, para que equipamento a rom é destinada.

      Brunch: É simples, brunch é equivalente a breakfast [device name] && mka bacon

      Bacon: é um termo usado pela CyanogenMod, este termo quer dizer compilar a ROM para o equipamento escolhido.

      Lunch: O lunch é exactamente o mesmo que o breakfast, no entanto, com este podes escolher uma build não oficiais, por exemplo versões especiais.

    2. Avatar de Miguel Almeida
      Miguel Almeida

      Blizard,

      Podes ver a explicação que o Hélder Ferreira deu porque está correcta. No entanto se quiseres ver algumas “derivações” dos mesmos e ficares a saber mais alguns comandos podes dar uma vista de olhos aqui: http://goo.gl/RJ9hu
      Normalmente só uso o lunch, brunch ou o make bacon.
      Concluindo a explicação do lunch, este comando permite escolher qual a versão da CM que queres compilar, Nightly, Stable, Experimental, Official, Unofficial… Isto basicamente só são tags, porque o conteúdo vai ser o mesmo.
      Dando um exemplo rápido: lunch cm_blade-NIGHTLY
      Sendo que isto pode ser chamado antes com o:
      export CM_NIGHTLY=1
      Em que já não necessitas de o colocar no lunch.

      1. Avatar de lmx
        lmx

        Boas…
        não é preciso compilar codigo para a architectura ARM??
        Sei que o java não, mas…e o resto…li assim por alto e vi a integração das bibliotecas, o que me fez sentido, mas não vi o processo normal de um cross compilar tool chain…

        Atenção neste assunto do android sou “jogador de bancada”, ja andei a “curtir” noutras arquitecturas com crosscompilers, e pode ser um Horror configurar aquilo e compilar toda a cadeia de aplicativos para crosscompiling, não sei se é o caso aqui?

        Os meus Parabéns ao Miguel Almeida pelo Artigo e ao Pedro Pinto pela Publicação.

        cmps

        1. Avatar de lmx
          lmx

          boas…
          acho que encontrei qualquer coisa 😀 no passo 6 e em diante penso eu…
          mas esta muito simplificado, com scripts a fazer muita coisa pelo que percebi…?!

          cmps

  2. Avatar de PauloJCP
    PauloJCP

    Bom artigo!!

    Sendo curioso como sou ..é desta que o telemovel vai à viola 😉

  3. Avatar de p.

    Bom artigo! Mas ao ler «i7 3610QM de 2.3 – 3.3Ghz, 12GB de RAM demora cerca de 1h», fiquei logo a pensar que o Core2 Duo T7200 com 2 GB de ram deve ir lá para as 8 horas…

    1. Avatar de Pedro Pinto

      eh eh eh, Não é propriamente rendering…mas é uma questão de experimentares e depois contares a tua aventura 🙂

    2. Avatar de Miguel Almeida
      Miguel Almeida

      Varia muito de máquina para máquina, mas é capaz de demorar cerca de 3h. 😀

    3. Avatar de Pedro Veloso
      Pedro Veloso

      Depois da primeira build as seguintes são feitas em meros minutos, uma vez que só têm em conta as partes que foram modificadas. Também é preciso ver que isto tem mais a ver com disco e RAM do que CPU na verdade, num core-2-duo compilo em menos de 1h mas tenho um SSD por debaixo e 8GB de RAM. Se compilar no TTY com DirectFB também acelera o processo porque a verbosidade de texto atrasa o processo 😉

  4. Avatar de António

    O melhor artigo de todos os tempo!

    Repito: o MELHOR!

    1. Avatar de Miguel Almeida
      Miguel Almeida

      Obrigado! 🙂

  5. Avatar de Tiago André
    Tiago André

    ai que o meu android ta quase a chegar 😛

  6. Avatar de Tiago André
    Tiago André

    Tens um erro no 4º passo
    diz cd ~/cm10.
    é cd ~/cm10.1

    1. Avatar de Miguel Almeida
      Miguel Almeida

      Foi ao passar para o artigo do wordpress, também já tinha reparado. O Pedro já compõe assim que chegar.
      Obrigado

  7. Avatar de ricardo mais
    ricardo mais

    Eu bem que gostava de tentar isto pa minha tablet, mas n tem suporte da comunidade, é uma growing gt712…
    pena—

    1. Avatar de Hélder Ferreira

      Se a marca disponibilizar o código dos proprietary libs, kernel e drivers, sempre podes tentar compilar uma unofficial build.

      Mas aqui requer bons conhecimentos do sistema Android e da linguagem usada pelo Android.

      1. Avatar de diogo
        diogo

        pois, eu queria saber fazer isso, para por o android 4.2 no meu bq edison 😀

    2. Avatar de Miguel Almeida
      Miguel Almeida

      Tal como explico no passo 7, consegues ter esses ficheiros com o: ./extract-files.sh
      Mas tens que ter este ficheiro construído e veres quais as libs que precisas, ou seja, pré-compiladas.

  8. Avatar de João Pedro
    João Pedro

    Excelente artigo!

    Se eu soubesse onde podia encontrar os Proprietary Files para o meu companheiro (Huawei U8510), aventurava-me, pois já o tentei fazer, mas como não sei onde os encontrar, vai ter de ficar para uma próxima 🙁

    1. Avatar de Miguel Almeida
      Miguel Almeida

      João Pedro,

      Vê aqui: http://goo.gl/yF0wS
      Esses ficheiros não são meus, não garanto que funcionem.

      1. Avatar de João Pedro
        João Pedro

        Assim que puder testo. Obrigado

  9. Avatar de Rafael Tomás
    Rafael Tomás

    “…vamos preparar o código específico para um equipamento, Google/LG Nexus 4 que tem a “alcunha” de mako nos repositórios CyanogenMod.”

    Como saber a “alcunha” do meu equipamento…e outros, existe alguma lista? Eu tenho um TMN Smart A7 aka ZTE V875, e nao existem custom roms pra ele, estava interessado em aventurar-me, abradesso todas as sujestoes…

    1. Avatar de Miguel Almeida
      Miguel Almeida

      Todos os equipamentos oficias suportados pela comunidade CyanogenMod têm uma “alcunha”, os restantes não a têm porque nem sequer existem na comunidade. Podes sempre ser tu a montar a árvore dos ficheiros e dares a “alcunha” que quiseres. 😉

      1. Avatar de Tiago André
        Tiago André

        já agora por exemplo é possivel eu pegar no codigo de um device parecido com o meu sony xperia miro e modificar os files de maneira a conseguir correr o 10.1 lá?
        Eu tenho alguma experiencia em programação mas onde posso aprender mais sobre a cyanogen mod e como criar um mod para o meu device?

  10. Avatar de José Fonseca
    José Fonseca

    xiiii…lá vou eu perder umas horas para tentar compilar a minha própria ROM

  11. Avatar de Android
    Android

    Acho que este artigo está muito bom, agora deveriam fazer um segundo a explicar como personalizar as ROM’s como por exemplo mais básico como tirar e por aplicações que já vem na própria ROM, temas e essas coisas …

    1. Avatar de Miguel Almeida
      Miguel Almeida

      Android,

      Estás te a referir às stock ROMs das operadoras que vêem nos equipamentos?
      Se assim for em primeiro lugar terás que ter:
      root

      2º Poderás ligar o equipamento ao PC e por adb consegues remover as aplicações, ou então instalar uma aplicação que te permita aceder ao sistema de ficheiros (Root Explorer, por exemplo).

      3º As aplicações de sistema encontram-se na pasta app:

      /system/app/

      Aqui já as podes remover, mas cuidado com o que vais remover, pois são aplicações de sistema.

      Se te estavas a referir à personalização das ROMs antes da compilação, no que toca a temas, toques, imagens, da CM que são adicionadas, a maior parte do conteúdo encontra-se em:
      /vendor/cm/
      Explora esses ficheiros e retiras ou metes em comentário o que não desejas que seja adicionado à ROM.

  12. Avatar de nome
    nome

    Bom artigo, disse que foi necessário 1h para compilar a rom, o disco usado foi um ssd?

    1. Avatar de Miguel Almeida
      Miguel Almeida

      Não, de momento não tenho aqui nenhum ssd. Em principio reduzirá o tempo, mas não muito.

      1. Avatar de Marco Silva
        Marco Silva

        Boas, lamento mas um ssd torna o processo bastante mais rápido…eu consigo compilar em menos de 15 minutos.

  13. Avatar de stuck
    stuck

    Excelente artigo mesmo, acho que também me vou aventurar com note… um pequeno aparte… visto esta comunidade estar a abarrotar de pessoal culto, empreendedor e visionário… que tal a construção de uma costum rom android com o carimbo pplware? hein? uma ideia a ponderar não?

  14. Avatar de Cláudio Esperança
    Cláudio Esperança

    Parabéns pelo artigo Miguel… Quando tiver entediado tentarei replicar este tutorial para o meu Nexus 4.

    É engraçado verificar a dimensão do código-fonte e o tempo necessário para compilar e linkar cada um dos componentes que compõem um sistema deste género. Muitas vezes damos as coisas como adquiridas e reclamamos quando encontramos um ou outro bug, mas esquecemos da complexidade inerente a um projeto deste tipo com milhares de linhas de código e imensas particularidades. Depois de olharmos para o código fonte e assistirmos a um processo de compilação como este, é que ficamos com uma pequena ideia do pequeno milagre que é isto tudo funcionar.

    A primeira vez que tive este noção foi nos tempos em que utilizava o Gentoo, em que o OpenOffice demorava 12 horas a compilar no hardware que tinha na altura…

  15. Avatar de André Silva
    André Silva

    A maneira mais fácil de adicionar/trocar repositórios é usar um local manifest, fazer checkout de cada um individualmente é bastante trabalhoso. Com um local_manifest configurado correctamente basta um repo sync e fica logo tudo perfeito 😛

    Eu utilizo o Mac OS 10.8.2 para compilar e é preciso alguns truques para conseguir montar o ambiente, se alguém estiver interressado posso fornecer uns links para alguns artigos.

  16. Avatar de João Mendes
    João Mendes

    Se quiser instalar o CyanogenMod 10.1 num Sony Xperia S desbloqueado por onde é que começo?

  17. Avatar de Bernardo Miguel
    Bernardo Miguel

    Boas, eu tenho um lg maximo pro mas e da tmn dá para faser o root e por um sistema mais avançado??

  18. Avatar de Pedro
    Pedro

    um guide para desenvolvimento de drivers para android 4 é que era bom para estes lados 😡 quem conseguir algum site ou coisa parecida por favor que aposte aqui. brg. pref. desenvolvimento em java

  19. Avatar de Artur Mendes
    Artur Mendes

    Ora aqui está exactamente o que andava à procura!

    Caro Miguel Almeida permita-me a questão e se eu quiser juntar partes de AOKP?

    Fazer algo como uma rom Híbrida CM / AOKP?

  20. Avatar de sideshow
    sideshow

    já ficava feliz que houvesse uma nightly build para o galaxy S duos…

  21. Avatar de Bernardo Miguel
    Bernardo Miguel

    Boas, eu tenho um lg maximo pro mas e da tmn dá para faser o root e por um sistema android mais avançado??

  22. Avatar de Bernardo Miguel
    Bernardo Miguel

    Aguem ME PODE AJUDAR eu tenho um lg C660 mas e da tmn dá para UM SISTEMA ANDROID MAIS AVANÇADO ??

  23. Avatar de Manoel Anjos
    Manoel Anjos

    Ola, primeiramente gostaria de parabenizar pelo site e artigo, ambos perfeitos.
    Agora gostaria de saber se poderia me ajudar, como foi dito no artigo existe uma parte especifica para o dispositivo da LG, eu tenho um GAlaxy S Advance – GT-I9070, e gostaria de configurar um repositório não oficial para ele, neste caso o repositorio seria configurado.
    NO XDA tem um tópico de DEV da rom: http://forum.xda-developers.com/showthread.php?t=2108362 e no d-h.st
    http://d-h.st/users/diego-ch/?fld_id=9947#files
    no GIT HUB: https://github.com/diego-ch
    Bem quero configurar esses repos mas não consigo..
    Gostaria de ajuda obg

  24. Avatar de Rherison Ribeiro
    Rherison Ribeiro

    Muito bom o seu post. Queria te pedir pra vc criar uma ROM cyanogenmod para RAZR d3 xt920 pois já fucei em tudo da web mas não existe nenhuma rom custom pra ele. Ajude aí cara. Não só eu mais uns 500mil usuários vão te agradecer

  25. Avatar de Virgilio
    Virgilio

    Recompilando o android e possivel, por exemplo, ao plugar o carregado o celular ligue? Normalmente ele mostra carregando. Preciso que ele ligue o aparelho.

  26. Avatar de jonatas
    jonatas

    tenho um tablet e quero compilar uma versao cyano nele mas nao enconteri nenhuma disponivel preciso de ajuda para extrai oas arquivos dele com adb e etc sou muito noob me ajudem

  27. Avatar de tom lochaider
    tom lochaider

    o código específico para um equipamento,esse caso como seria feito para um outro aparelho
    samsug,HTC ,e outros

  28. Avatar de elison
    elison

    estou usando o ubuntu 14.04 e quando instalo g++-4.5-multilib, me apresenta um erro.
    E: Impossível encontrar o pacote g++-4.5-multilib
    E: Não foi possível encontrar o pacote através da expressão regular ‘g++-4.5-multilib’

    como corrigir isso???

    1. Avatar de Odair Carlos
      Odair Carlos

      Olá, digite:
      gcc -v
      g++ -v

      Observe que versão irá aparecer… no meu caso:
      gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1)

      Então substitua na linha de comando:
      …. gcc-4.5-multilib g++-4.5-multilib

      Por:
      …. gcc-4.8-multilib g++-4.8-multilib

      Observe que no meu caso a versão gcc e g++ era 4.8!!!!