| <html devsite><head> |
| <title>Como estabelecer um ambiente de criação</title> |
| <meta name="project_path" value="/_project.yaml"/> |
| <meta name="book_path" value="/_book.yaml"/> |
| </head> |
| <body> |
| <!-- |
| Copyright 2017 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <p> |
| Esta seção descreve como configurar seu ambiente de trabalho local para criar os arquivos de origem do Android. É preciso usar o Linux ou o Mac OS. No momento, não é possível realizar a criação no Windows. |
| </p> |
| <p> |
| Para ter uma visão geral de todo o processo de revisão e atualização de código, consulte <a href="../contribute/life-of-a-patch.html">O ciclo de um patch</a>. |
| </p> |
| <aside class="note"><strong>Observação</strong>: todos os comandos neste site são precedidos por um sinal cifrão ($) para diferenciá-los da saída ou das entradas nos arquivos. Você pode usar o recurso <em>Clique para copiar</em> no canto superior direito de cada caixa de comando para copiar todas as linhas sem os cifrões ou clicar três vezes em cada linha para copiá-la individualmente sem o cifrão. |
| </aside> |
| |
| <h2 id="choosing-a-branch">Como escolher um branch</h2> |
| <p> |
| Alguns requisitos para o ambiente de criação são determinados pela versão do código-fonte que você planeja compilar. Para ver uma lista completa dos branches disponíveis, consulte <a href="../start/build-numbers.html">Números de versão</a>. Você também pode optar por fazer o download e criar o código-fonte mais recente (chamado <code>master</code>), caso em que simplesmente omitirá a especificação do branch ao inicializar o repositório. |
| </p> |
| <p> |
| Depois de selecionar um branch, siga as instruções apropriadas abaixo para configurar seu ambiente de criação. |
| </p> |
| |
| <h2 id="setting-up-a-linux-build-environment">Como configurar um ambiente de criação do Linux</h2> |
| <p> |
| Estas instruções se aplicam a todos branches, incluindo o <code>master</code>. |
| </p> |
| <p>A criação do Android é testada internamente com frequência em versões recentes do Ubuntu LTS (14.04) e testes do Debian. A maioria das outras distribuições precisa ter as ferramentas de criação necessárias disponíveis. |
| </p> |
| <p> |
| Para o Gingerbread (2.3.x) e versões mais recentes, incluindo o branch <code>master</code>, é necessário ter um ambiente de 64 bits. Versões mais antigas podem ser compiladas em sistemas de 32 bits. |
| </p> |
| <aside class="note"><strong>Observação</strong>: consulte <a href="requirements.html">Requisitos</a> para ver a lista completa dos requisitos de hardware e software e siga as instruções detalhadas para o Ubuntu e Mac OS abaixo. |
| </aside> |
| |
| <h3 id="installing-the-jdk">Como instalar o JDK</h3> |
| <p> |
| O branch <code>master</code> do Android no <a href="https://android.googlesource.com/" class="external">Android Open Source Project (AOSP)</a> vem com versões pré-criadas do OpenJDK abaixo de <code>prebuilts/jdk/</code>, então nenhuma outra instalação é necessária. |
| </p> |
| <p> |
| As versões mais antigas do Android exigem uma instalação separada do JDK. No Ubuntu, use o <a href="http://openjdk.java.net/install/" class="external">OpenJDK</a>. Consulte os <a href="requirements.html#jdk">Requisitos do JDK</a> para as versões exatas e as seções abaixo para ver instruções. |
| </p> |
| <h4 id="for-ubuntu-15-04">Para o Ubuntu 15.04 e versões posteriores</h4> |
| <p> |
| Execute o comando a seguir: |
| </p> |
| <pre class="devsite-click-to-copy"> |
| <code class="devsite-terminal">sudo apt-get update</code> |
| <code class="devsite-terminal">sudo apt-get install openjdk-8-jdk</code> |
| </pre> |
| |
| <h4 id="for-ubuntu-14-04">Para o Ubuntu LTS 14.04</h4> |
| <p> |
| Não há pacotes OpenJDK 8 compatíveis disponíveis para o Ubuntu 14.04. Os pacotes do <strong>Ubuntu 15.04 OpenJDK 8</strong> foram usados com êxito com o Ubuntu 14.04. <em>Versões de pacote mais recentes (por exemplo, aquelas para o 15.10 e o 16.04) não funcionaram no 14.04 com as instruções abaixo.</em> |
| </p> |
| <ol> |
| <li>Faça o download dos pacotes <code>.deb</code> para a arquitetura de 64 bits em <a href="http://old-releases.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/">old-releases.ubuntu.com</a>: |
| <ul> |
| <li><a href="http://old-releases.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre-headless_8u45-b14-1_amd64.deb">openjdk-8-jre-headless_8u45-b14-1_amd64.deb</a> com SHA256 <code>0f5aba8db39088283b51e00054813063173a4d8809f70033976f83e214ab56c0</code> |
| </li> |
| <li><a href="http://old-releases.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jre_8u45-b14-1_amd64.deb">openjdk-8-jre_8u45-b14-1_amd64.deb</a> com SHA256 <code>9ef76c4562d39432b69baf6c18f199707c5c56a5b4566847df908b7d74e15849</code> |
| </li> |
| <li><a href="http://old-releases.ubuntu.com/ubuntu/pool/universe/o/openjdk-8/openjdk-8-jdk_8u45-b14-1_amd64.deb">openjdk-8-jdk_8u45-b14-1_amd64.deb</a> com SHA256 <code>6e47215cf6205aa829e6a0a64985075bd29d1f428a4006a80c9db371c2fc3c4c</code> |
| </li> |
| </ul> |
| </li> |
| <li>Outra opção é confirmar as somas de verificação dos arquivos transferidos por download em relação à string SHA256 listada em cada pacote acima. Por exemplo, com a ferramenta <code>sha256sum</code>: |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| sha256sum {downloaded.deb file}</pre> |
| </li> |
| <li>Instale os pacotes: |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| sudo apt-get update</pre> |
| Execute <code>dpkg</code> para cada um dos arquivos .deb que você transferiu por download. Podem ocorrer erros devido à ausência de dependências: |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| sudo dpkg -i {downloaded.deb file}</pre> |
| Para corrigir as dependências ausentes: |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| sudo apt-get -f install</pre> |
| </li> |
| </ol> |
| |
| <h4 id="default-java-version">Atualizar a versão padrão do Java (opcional)</h4> |
| <p> |
| Opcionalmente, para as versões do Ubuntu acima, atualize a versão padrão do Java executando: |
| </p> |
| <pre class="devsite-click-to-copy"> |
| <code class="devsite-terminal">sudo update-alternatives --config java</code> |
| <code class="devsite-terminal">sudo update-alternatives --config javac</code> |
| </pre> |
| <aside class="note"> |
| <b>Observação</b>: se, durante uma criação, você encontrar erros de versão para Java, consulte <a href="building.html#wrong-java-version">Versão incorreta do Java</a> para ver as prováveis causas e soluções. |
| </aside> |
| |
| <h3 id="installing-required-packages-ubuntu-1404">Como instalar os pacotes necessários (Ubuntu 14.04)</h3> |
| <p> |
| Você precisará de uma versão de 64 bits do Ubuntu. O Ubuntu 14.04 é recomendado. |
| </p> |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip |
| </pre> |
| <aside class="note"><strong>Observação</strong>: para usar as ferramentas do SELinux para análise de políticas, instale também o pacote <code>python-networkx</code>. |
| </aside> |
| <aside class="note"><strong>Observação</strong>: se você está usando o LDAP e quer executar testes de host do ART, instale também o pacote <code>libnss-sss:i386</code>. |
| </aside> |
| |
| <h3 id="installing-required-packages-ubuntu-1204">Como instalar os pacotes necessários (Ubuntu 12.04) |
| </h3> |
| <p> |
| Você pode usar o Ubuntu 12.04 para criar versões mais antigas do Android. A versão 12.04 não é compatível com as versões recentes ou master. |
| </p> |
| <pre class="devsite-click-to-copy"> |
| <code class="devsite-terminal">sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386</code> |
| <code class="devsite-terminal">sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so</code> |
| </pre> |
| |
| <h3 id="installing-required-packages-ubuntu-1004-1110">Como instalar os pacotes necessários (Ubuntu 10.04 a 11.10) |
| </h3> |
| <p> |
| A criação no Ubuntu 10.04 a 11.10 não é mais compatível, mas pode ser útil para criar versões mais antigas do AOSP. |
| </p> |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| sudo apt-get install git gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc |
| </pre> |
| <p> |
| No Ubuntu 10.10: |
| </p> |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so |
| </pre> |
| <p> |
| No Ubuntu 11.10: |
| </p> |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| sudo apt-get install libx11-dev:i386 |
| </pre> |
| |
| <h3 id="configuring-usb-access">Como configurar o acesso por USB</h3> |
| <p> |
| Instale um conjunto padrão de regras <code>udev</code> mantido pela comunidade para todos os dispositivos Android seguindo as instruções para <a href="https://developer.android.com/studio/run/device.html#setting-up" class="external">Configurar um dispositivo para desenvolvimento</a>. |
| </p> |
| |
| <h3 id="using-a-separate-output-directory">Como usar um diretório de saída separado</h3> |
| <p> |
| Por padrão, a saída de cada versão é armazenada no subdiretório <code>out/</code> da árvore de origem correspondente. |
| </p> |
| <p> |
| Em alguns computadores com vários dispositivos de armazenamento, as versões são mais rápidas ao armazenar os arquivos de origem e a saída em volumes separados. Para ter melhor desempenho, a saída pode ser armazenada em um sistema de arquivos otimizado para velocidade em vez de resistência contra falhas, já que todos os arquivos podem ser gerados novamente caso o sistema de arquivos seja corrompido. |
| </p> |
| <p> |
| Para configurar isso, exporte a variável <code>OUT_DIR_COMMON_BASE</code> para apontar para o local onde os diretórios de saída serão armazenados. |
| </p> |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| export OUT_DIR_COMMON_BASE=<path-to-your-out-directory> |
| </pre> |
| <p> |
| O diretório de saída para cada árvore de origem separada será nomeado de acordo com o diretório que contém a árvore de origem. Por exemplo, se você tem árvores de origem como <code>/source/master1</code> e <code>/source/master2</code>, e <code>OUT_DIR_COMMON_BASE</code> está definido como <code>/output</code>, os diretórios de saída serão <code>/output/master1</code> e <code>/output/master2</code>. |
| </p> |
| <p> |
| Nesse caso, é importante não ter várias árvores de origem armazenadas em diretórios com o mesmo nome, porque elas acabariam compartilhando um diretório de saída, com resultados imprevisíveis. Isso só é compatível com o Jelly Bean (4.1) e versões mais recentes, incluindo o branch <code>master</code>. |
| </p> |
| <h2 id="setting-up-a-mac-os-x-build-environment">Como configurar um ambiente de criação do Mac OS |
| </h2> |
| <p> |
| Em uma instalação padrão, o Mac OS é executado em um sistema de arquivos que é indiferente a maiúsculas, mas que as preserva. Esse tipo de sistema de arquivos não é compatível com o git e fará com que alguns comandos git (como <code>git status</code>) se comportem de maneira anormal. Por isso, recomendamos que você sempre trabalhe com os arquivos de origem do AOSP em um sistema de arquivos com distinção entre maiúsculas e minúsculas. Isso pode ser feito com bastante facilidade, utilizando uma imagem de disco, conforme discutido abaixo. |
| </p> |
| <p> |
| Depois que o sistema de arquivos adequado estiver disponível, é muito simples criar o branch <code>master</code> em um ambiente Mac OS moderno. Branches anteriores exigem algumas outras ferramentas e SDKs. |
| </p> |
| |
| <h3 id="creating-a-case-sensitive-disk-image">Como criar uma imagem de disco com diferenciação entre maiúsculas e minúsculas</h3> |
| <p> |
| Você pode criar um sistema de arquivos com distinção entre maiúsculas e minúsculas no seu ambiente Mac OS atual usando uma imagem de disco. Para criar a imagem, abra o Utilitário de Disco e selecione <strong>Nova imagem</strong>. O tamanho de 25 GB é o mínimo para concluir a criação. Quanto maior o número, melhor será a compatibilidade futura. Usar imagens esparsas economiza espaço, permitindo futuras ampliações de acordo com a necessidade. Selecione <strong>Distinção de maiúsculas, Journaling</strong> como o formato de volume. |
| </p> |
| <p> |
| Você também pode criá-lo com base no seguinte comando: |
| </p> |
| <pre class="devsite-click-to-copy devsite-terminal" data-terminal-prefix="# "> |
| hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg |
| </pre> |
| <p> |
| Isso criará um arquivo <code>.dmg</code> (ou possivelmente um arquivo <code>.dmg.sparseimage</code>) que, depois de montado, atuará como uma unidade com a formatação necessária para o desenvolvimento do Android. |
| </p> |
| <p> |
| Se você precisar posteriormente de um volume maior, também será possível redimensionar a imagem esparsa com o seguinte comando: |
| </p> |
| <pre class="devsite-click-to-copy devsite-terminal" data-terminal-prefix="# ">hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage |
| </pre> |
| <p> |
| Para uma imagem de disco chamada <code>android.dmg</code> armazenada no seu diretório inicial, adicione as funções auxiliares ao seu <code>~/.bash_profile</code>: |
| </p> |
| <ul> |
| <li>Para ativar a imagem ao executar <code>mountAndroid</code>: |
| <pre class="devsite-click-to-copy"> |
| # mount the android file image |
| mountAndroid() { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }</pre> |
| <aside class="note"><strong>Observação</strong>: se seu sistema criou um arquivo <code>.dmg.sparseimage</code>, substitua <code>~/android.dmg</code> por <code>~/android.dmg.sparseimage</code>. |
| </aside> |
| </li> |
| <li>Para desconectá-la ao executar <code>umountAndroid</code>: |
| <pre class="devsite-click-to-copy"> |
| # unmount the android file image |
| umountAndroid() { hdiutil detach /Volumes/android; }</pre> |
| </li> |
| </ul> |
| <p> |
| Depois de ativar o volume <code>android</code>, você fará todo o seu trabalho lá. Será possível ejetá-lo (desconectá-lo) exatamente como você faria com um disco externo. |
| </p> |
| |
| <h3 id="installing-the-mac-jdk">Como instalar o JDK</h3> |
| <p> |
| Consulte <a href="requirements.html">Requisitos</a> para a versão do Java a ser usada ao desenvolver várias versões do Android. |
| </p> |
| |
| <h4 id="installing-required-packages">Como instalar os pacotes necessários</h4> |
| <ol> |
| <li>Instale as ferramentas de linha de comando do Xcode com: |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| xcode-select --install</pre> |
| Para versões mais antigas do Mac OS (10.8 ou anteriores), é necessário instalar o Xcode no <a href="http://developer.apple.com/" class="external">site da Apple para desenvolvedores</a>. Se você ainda não está registrado como desenvolvedor da Apple, crie um ID Apple para fazer o download. |
| </li> |
| <li>Instale o MacPorts em <a href="http://www.macports.org/install.php">macports.org</a>. Verifique se <code>/opt/local/bin</code> aparece no seu caminho <strong>antes de</strong> <code>/usr/bin</code>. Caso contrário, adicione o seguinte ao seu arquivo <code>~/.bash_profile</code>: |
| <pre class="devsite-click-to-copy"> |
| export PATH=/opt/local/bin:$PATH</pre> |
| <aside class="note"><strong>Observação</strong>: se você não tem um arquivo <code>.bash_profile</code> no seu diretório inicial, crie um. |
| </aside> |
| </li> |
| <li>Adquira pacotes make, git e GPG do MacPorts: |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg</pre> |
| Se estiver usando o Mac OS X v10.4, instale também o bison: |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| POSIXLY_CORRECT=1 sudo port install bison</pre> |
| </li> |
| </ol> |
| |
| <h4 id="reverting-from-make-382">Como reverter do make 3.82</h4> |
| <p> |
| No Android 4.0.x (Ice Cream Sandwich) e versões anteriores, há um bug no gmake 3.82 que impede a criação do Android. Você pode instalar a versão 3.81 usando o MacPorts com estas etapas: |
| </p> |
| <ol> |
| <li>Edite <code>/opt/local/etc/macports/sources.conf</code> e adicione uma linha contendo: |
| <pre class="devsite-click-to-copy"> |
| file:///Users/Shared/dports</pre> |
| acima da linha rsync. Em seguida, crie este diretório: |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| mkdir /Users/Shared/dports</pre> |
| </li> |
| <li>No novo diretório <code>dports</code>, execute: |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/</pre> |
| </li> |
| <li>Crie um índice de porta para seu novo repositório local: |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| portindex /Users/Shared/dports</pre> |
| </li> |
| <li>Instale a versão antiga do gmake com: |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| sudo port install gmake @3.81</pre> |
| </li> |
| </ol> |
| |
| <h4 id="setting-a-file-descriptor-limit">Como definir um limite de descritor de arquivo</h4> |
| <p> |
| No Mac OS, o limite padrão do número de descritores de arquivos simultâneos abertos é muito baixo, e um processo de criação altamente paralelo pode exceder esse limite. Para aumentar o limite, adicione as seguintes linhas ao seu <code>~/.bash_profile</code>: |
| </p> |
| <pre class="devsite-click-to-copy"> |
| # set the number of open files to be 1024 |
| ulimit -S -n 1024</pre> |
| |
| <h2 id="next-download-the-source">Fazer o download da origem</h2> |
| <p> |
| Seu ambiente de criação está pronto. Prossiga para <a href="downloading.html">Como fazer o download da origem</a>. |
| </p> |
| |
| </body></html> |