<html devsite>
  <head>
    <title>Downloading the Source</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>
  The Android source tree is located in a Git repository hosted by Google. The Git repository
  includes metadata for the Android source, including those related to changes to the source
  and the date they were made. This document describes how to download the source tree for a
  specific Android code-line.
</p>
<p>
 To instead start with a factory image for a specific device, see
 <a href="running.html#selecting-device-build">Selecting a device build</a>.
</p>
<h2 id="installing-repo">
  Installing Repo
</h2>
<p>
  Repo is a tool that makes it easier to work with Git in the context of Android. For more
  information about Repo, see the <a href="../develop/repo.html">Repo Command Reference</a>.
</p>
<p>
  To install Repo:
</p>
<ol>
  <li>
    <p>
      Make sure you have a bin/ directory in your home directory and that it is included in
      your path:
    </p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">mkdir ~/bin</code>
<code class="devsite-terminal">PATH=~/bin:$PATH</code>
</pre>
  </li>
  <li>
    <p>
      Download the Repo tool and ensure that it is executable:
    </p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">curl https://storage.googleapis.com/git-repo-downloads/repo &gt; ~/bin/repo</code>
<code class="devsite-terminal">chmod a+x ~/bin/repo</code>
</pre>
  </li>
</ol>
<p>
  For version 1.21, the SHA-1 checksum for repo is b8bd1804f432ecf1bab730949c82b93b0fc5fede
</p>
<p>
  For version 1.22, the SHA-1 checksum for repo is da0514e484f74648a890c0467d61ca415379f791
</p>
<p>
  For version 1.23, the SHA-256 checksum for repo is e147f0392686c40cfd7d5e6f332c6ee74c4eab4d24e2694b3b0a0c037bf51dc5
</p>
<h2 id="initializing-a-repo-client">
  Initializing a Repo client
</h2>
<p>
  After installing Repo, set up your client to access the Android source repository:
</p>
<ol>
  <li>
    <p>
      Create an empty directory to hold your working files. If you're using MacOS, this has to
      be on a case-sensitive filesystem. Give it any name you like:
    </p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">mkdir WORKING_DIRECTORY</code>
<code class="devsite-terminal">cd WORKING_DIRECTORY</code>
</pre>
  </li>
  <li>
    <p>
      Configure git with your real name and email address. To use the Gerrit code-review tool,
      you will need an email address that is connected with a <a href=
      "https://www.google.com/accounts">registered Google account</a>. Make sure this is a live
      address at which you can receive messages. The name that you provide here will show up in
      attributions for your code submissions.
    </p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">git config --global user.name "Your Name"</code>
<code class="devsite-terminal">git config --global user.email "you@example.com"</code>
</pre>
  </li>
  <li>
    <p>
      Run <code>repo init</code> to bring down the latest version of Repo with all its most
      recent bug fixes. You must specify a URL for the manifest, which specifies where the
      various repositories included in the Android source will be placed within your working
      directory.
    </p>
<pre class="devsite-terminal devsite-click-to-copy">
repo init -u https://android.googlesource.com/platform/manifest
</pre>
    <p>
      To check out a branch other than "master", specify it with <code>-b</code>. For a list of branches, see
      <a href="../start/build-numbers.html#source-code-tags-and-builds">Source Code Tags and Builds</a>.
    </p>
<pre class="devsite-terminal devsite-click-to-copy">
repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
</pre>
  </li>
</ol>
<p>
  A successful initialization will end with a message stating that Repo is initialized in your
  working directory. Your client directory should now contain a <code>.repo</code> directory
  where files such as the manifest will be kept.
</p>
<h2 id="getting-the-files">
  Downloading the Android source tree
</h2>
<p>
  To pull down the Android source tree to your working directory from the repositories as
  specified in the default manifest, run
</p>
<pre class="devsite-terminal devsite-click-to-copy">repo sync</pre>
<p>
  The Android source files will be located in your working directory under their project names.
  The initial sync operation will take an hour or more to complete. For more about <code>repo
  sync</code> and other Repo commands, see <a href="../develop/index.html">Developing</a>.
</p>
<h2 id="using-authentication">
  Using Authentication
</h2>
<p>
  By default, access to the Android source code is anonymous. To protect the servers against
  excessive usage, each IP address is associated with a quota.
</p>
<p>
  When sharing an IP address with other users (e.g. when accessing the source repositories from
  beyond a NAT firewall), the quotas can trigger even for regular usage patterns (e.g. if many
  users sync new clients from the same IP address within a short period).
</p>
<p>
  In that case, it is possible to use authenticated access, which then uses a separate quota
  for each user, regardless of the IP address.
</p>
<p>
  The first step is to create a password with <a href=
  "https://android.googlesource.com/new-password">the password generator</a>
  and follow the instructions on the password generator page.
</p>
<p>
  The second step is to force authenticated access, by using the following manifest URI:
  <code>https://android.googlesource.com/a/platform/manifest</code>. Notice how the
  <code>/a/</code> directory prefix triggers mandatory authentication. You can convert an
  existing client to use mandatory authentication with the following command:
</p>
<pre class="devsite-terminal devsite-click-to-copy">
repo init -u https://android.googlesource.com/a/platform/manifest
</pre>
<h2 id="troubleshooting-network-issues">
  Troubleshooting network issues
</h2>
<p>
  When downloading from behind a proxy (which is common in some corporate environments), it
  might be necessary to explicitly specify the proxy that is then used by repo:
</p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">export HTTP_PROXY=http://&lt;proxy_user_id&gt;:&lt;proxy_password&gt;@&lt;proxy_server&gt;:&lt;proxy_port&gt;</code>
<code class="devsite-terminal">export HTTPS_PROXY=http://&lt;proxy_user_id&gt;:&lt;proxy_password&gt;@&lt;proxy_server&gt;:&lt;proxy_port&gt;</code>
</pre>
<p>
  More rarely, Linux clients experience connectivity issues, getting stuck in the middle of
  downloads (typically during "Receiving objects"). It has been reported that tweaking the
  settings of the TCP/IP stack and using non-parallel commands can improve the situation. You
  need root access to modify the TCP setting:
</p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">sudo sysctl -w net.ipv4.tcp_window_scaling=0</code>
<code class="devsite-terminal">repo sync -j1</code>
</pre>
<h2 id="using-a-local-mirror">
  Using a local mirror
</h2>
<p>
  When using several clients, especially in situations where bandwidth is scarce, it is better
  to create a local mirror of the entire server content, and to sync clients from that mirror
  (which requires no network access). The download for a full mirror is smaller than the
  download of two clients, while containing more information.
</p>
<p>
  These instructions assume that the mirror is created in <code>/usr/local/aosp/mirror</code>.
  The first step is to create and sync the mirror itself. Notice the <code>--mirror</code> flag, which
  can be specified only when creating a new client:
</p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">mkdir -p /usr/local/aosp/mirror</code>
<code class="devsite-terminal">cd /usr/local/aosp/mirror</code>
<code class="devsite-terminal">repo init -u https://android.googlesource.com/mirror/manifest --mirror</code>
<code class="devsite-terminal">repo sync</code>
</pre>
<p>
  Once the mirror is synced, new clients can be created from it. Note that it's important to
  specify an absolute path:
</p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">mkdir -p /usr/local/aosp/master</code>
<code class="devsite-terminal">cd /usr/local/aosp/master</code>
<code class="devsite-terminal">repo init -u /usr/local/aosp/mirror/platform/manifest.git</code>
<code class="devsite-terminal">repo sync</code>
</pre>
<p>
  Finally, to sync a client against the server, the mirror needs to be synced against the
  server, then the client against the mirror:
</p>
<pre class="devsite-click-to-copy">
<code class="devsite-terminal">cd /usr/local/aosp/mirror</code>
<code class="devsite-terminal">repo sync</code>
<code class="devsite-terminal">cd /usr/local/aosp/master</code>
<code class="devsite-terminal">repo sync</code>
</pre>
<p>
  It's possible to store the mirror on a LAN server and to access it over NFS, SSH or Git. It's
  also possible to store it on a removable drive and to pass that drive around between users or
  between machines.
</p>
<h2 id="verifying-git-tags">
  Verifying Git tags
</h2>
<p>
  Load the following public key into your GnuPG key database. The key is used to sign annotated
  tags that represent releases.
</p>
<pre class="devsite-terminal devsite-click-to-copy">
gpg --import
</pre>
<p>
  Copy and paste the key below, then enter EOF (Ctrl-D) to end the input and process the
  keys.
</p>
<pre class="devsite-click-to-copy">
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.2.2 (GNU/Linux)

mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV
lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7
8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD
u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z
wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq
/HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9/I1S5
jU5SA/9WwIps4SC84ielIXiGWEqq6i6/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4
MGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9
b/aF/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv
aWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k
cm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX
gAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI
2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV/0Bo9WiByJ9WJ5swMN36/vAl
QN4mWRhfzDOk/Rosdb0csAO/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up
hisyEmmHv6U8gUb/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L/KvP5x+oCJIDbk
C2b1TvVk9PryzmE4BPIQL/NtgR1oLWm/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX
LWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5+
OgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf/8AAwUIAJPWsB/M
pK+KMs/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s
KZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c/KsjADtAuKW9/d8phb
N8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA
vUXRwm/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo
G1S8fXgE0Lq3cdDM/GJ4QXP/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ
hN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l
EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM=
=Wi5D
-----END PGP PUBLIC KEY BLOCK-----
</pre>
<p>
  After importing the keys, you can verify any tag with
</p>
<pre class="devsite-terminal devsite-click-to-copy">
git tag -v TAG_NAME
</pre>
<p>
  If you haven't <a href="initializing.html#optimizing-a-build-environment">set
  up ccache</a> yet, now would be a good time to do it.
</p>

  </body>
</html>
