blob: 40337d4f458a3dc07932cdd129758eb7d9842cb5 [file] [log] [blame] [edit]
<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=&lt;path-to-your-out-directory&gt;
</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 &lt;new-size-you-want&gt;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>