top of page

compilação de uma custom ROM Android – PARTE 2

Agora, iremos aos passos finais.


Instale as dependências requeridas para a compilação, a partir de agora, faremos tudo em modo de superusuário, menos a sincronização de repositório e a compilação, para isso basta digitar “sudo su” no terminal e ele pedirá sua senha para executar os comandos como root.


-Instalar as depências que faltam para a compilação:


apt-get install bison build-essential curl flex git gnupg libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libxml2 libxml2-utils lzop maven pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev bc ccache automake lzop gperf zlib1g-dev g++-multilib gcc-multilib lib32ncurses5-dev lib32readline6-dev lib32z1-dev python-networkx libxml2-utils bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools schedtool dpkg-dev liblz4-tool make optipng libwxgtk3.0-dev openjdk-8-jdk


Depois de instaladas, basta dar um “exit” no terminal e ele sairá do modo superusuário, reinicie o computador e siga.


-Preparando o ambiente:


Agora, certifique-se que no seu terminal encontra-se o segunte escrito: nomedeusuario@nomedomicro, no meu caso:




Agora basta executar os seguintes comandos para criar os diretórios de compilação:


mkdir -p ~/bin → cria nosso diretório onde algumas funções


mkdir -p ~/android/system → cria nosso diretório de compilação

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo → baixa alguns tools de repositório para que a source do android e do nosso sistema com as modificações de framework sejam baixadas corretamente.


chmod a+x ~/bin/repo → permite o comando de repositório a ser executado


Agora, você precisará criar uma conta no github, para isso entre no site:


http://github.com/ e crie seu usuário.


Após criar a conta, volte ao terminal execute os comandos:


git config --global user.name nomedeusuariocadastrado git config --global user.email emailcadastrado@emailcadastrado

Exemplo:


git config --global user.name AzazelCSGO git config --global user.email azazelcsgo2016@gmail.com

Depois de feitos os comandos, vamos entrar em nosso diretório de compilção:


cd ~/android/system/


Agora, vamos inicializar o repositório da CyanogenMod 14, aqui você precisará ter atenção, pois precisará não só certificar-se que seu aparelho ou o aparelho o qual realizará a compilação é compatível com o sistema mas também precisará de três coisas que podem ser encontradas no github:


Device Tree; Vendor Tree; Kernel Source.


Ao realizar a compilação, a Kernel Source será reduzida a mízeros 10MB, como no meu caso, originalmente a source pode variar de 100MB a 2GB, ao compilar os drivers e utilitários específicos ao seu hardware, o tamanho torna-se mínimo.


Certificado que seu aparelho ou aparelho destino atende a todos esses requisitos, continuemos:


repo init -u https://github.com/CyanogenMod/android.git -b cm-14.1 → inicializa o repositório da CyanogenMod 14.1 (Android 7.1), aqui você pode escolher entre cm13 (6.0.1 Marshmallow) ou cm14.1 (7.1 Nougat), isso vai variar de acordo com as sources disponíveis para seu dispositivo, ou seja, se elas são feitas pra android 6.0.1 você poderá somente utilizar o repositório da cm13.0 e assim por diante.


Pressione “Y” quando solicitado, para exibir saída em cores ou “N” para saída monocromática.


Agora para inicializar a sincronização de repositório, basta executar o comando:


repo sync

Esta etapa é extremamente demorada, ela irá baixar as source do android e da cyanogenmod, ao todo são aproximadamente 15GB de download, então, vá tomar um café, ler um livro, estudar ou viver enquanto o processo de sincronização é feito. Caso dê erro de conexão, dê o comando novamente, ele continua a sincronização de onde parou.


Agora, vamos para a preparação do nosso ambiente de compilação, para isso alguns comandos são feitos:


. build/envsetup.sh → isso irá preparar todo ambiente de compilação e chamar algumas aplicações necessárias;

export USE_CCACHE=1 → usar cache de compilação para aumentar a performance e diminuir o tempo de compilação nas próximas compilações que forem feitas nesse mesmo repositório;


prebuilts/misc/linux-x86/ccache/ccache -M 50G → define o tamanho máximo do ccache, aqui costumo usar entre 10 e 20GB para não ocupar muito espaço, porém, se você tem um disco dedicado a isso ou espaço de sobra, basta aumentar os 50G ali selecionados, ou diminuir, vai de você;


export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8g" → define o tamanho máximo de RAM a ser alocada ao serivdor de compilação java, tenha cuidadado, caso tenha 4GB de RAM, recomendo que use Xmx4g, porém, se estiver tentando compilar cm14.1 com 4GB de RAM terá problemas, por isso a partição de swap é interessante.


Depois de setados os tamanhos, reinicie o jack server com os comandos:


./prebuilts/sdk/tools/jack-admin kill-server ./prebuilts/sdk/tools/jack-admin start-server

OPÇÃO 1: CASO SEU APARELHO SEJA SUPORTADO OFICIALMENTE PELA CYANOGENMOD:


breakfast → será exibida uma lista de codenames de dispositivos compatíveis oficialmente com a CyanogenMOD em questão (13.0, 14.1, etc), são os dispositivos oficialmente suportados, caso o seu esteja na lista, basta colocar o número dele na lista e seguir o processo. A janela ficará como na imagem:



Depois de completado, basta dar um último comando:


brunch → a lista será exibida novamente, coloque novamente o numero do seu dispositivo e ele agora compilará automaticamente todo o android e ao fim do processo criará um arquivo zip flashável via CWM Recovery ou TWRP Recovery. O tempo do processo dependerá do seu poder de processamento, em meu velho Phenom, levam 6 horas, já num pc melhor, 3 a 4 horas, um i3 2100.

O Diretório de saída fica localizado em “/home/nomedousuario/android/system/out/target/product/”, lá você poderá achar com o codename do seu dispositivo os arquivos de saída da compilação.

OPÇÃO 2: CASO SEU DISPOSITIVO NÃO SEJA OFICIALMENTE SUPORTADO PELA CYANOGENMOD MAS VOCÊ TENHA DEVICE TREE / KERNEL SOURCE / VENDOR TREE NO GITHUB.


Vá para o diretório: /home/usuário/android/system/ lá, habilite a visualização de arquivos ocultos e procure pela pasta “.repo”, nela, crie a pasta local_manifests e dentro dessa local_manifests, um arquivo com o nome “roomservice.xml”, um exemplo desse arquivo pode ser visto pelo que usei para meu dispositivo:


<manifest> <project name="boulzordev/android_device_lenovo_A6020" path="device/lenovo/A6020" remote="github" revision="cm-14.1"/><project name="boulzordev/android_vendor_lenovo_A6020" path="vendor/lenovo/A6020" remote="github" revision="cm-14.1"/><project name="boulzordev/android_kernel_lenovo_msm8929" path="kernel/lenovo/msm8929" remote="github" revision="cm-14.1"/><project name="CyanogenMod/android_external_bson" path="external/bson" remote="github" revision="cm-13.0"/><project name="CyanogenMod/android_device_qcom_common" path="device/qcom/common" remote="github" revision="cm-14.1"/><project name="CyanogenMod/android_external_stlport" path="external/stlport" remote="github" revision="cm-14.1"/><project name="CyanogenMod/android_external_sony_boringssl-compat" path="external/sony/boringssl/compat" remote="github" revision="cm-14.1"/><project name="CyanogenMod/android_device_cyanogen_msm8916-common" path="device/qcom/msm8916" remote="github" revision="cm-14.1"/> </manifest>


A configuração deve ficar parecida com a figura:




Este é o roomservice.xml para o Lenovo A6020 (Vibe K5 Plus) que servirá para compilar uma Cyanogenmod 13.0 (Android 6.0.1), no caso deste dispositivo há possibilidade de compilar a cm14.1, estas linhas acima são somente exemplos.


Salve o arquivo, volte ao diretório de compilação /home/usuario/system/ e dê mais um repo sync, agora ele irá sincronizar a Kernel Source, Device Tree e Vendor Tree específicos do seu dispositivo, no meu caso, A6020. Feita sincronização, basta digitar no terminal:


breakfast codename → Exemplo: breakfast A6020;


e depois,


brunch codename → Exemplo: brunch A6020.


Agora é só esperar o fim do processo, ao terminar uma tela indicando a correta conclusão do processo deve ser mostrada, como na figura abaixo:


bottom of page