296 lines
12 KiB
HTML
296 lines
12 KiB
HTML
<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="developing.html">Developing</a> section.
|
|
</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 > ~/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="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 the <a href="developing.html">Developing</a> section.
|
|
</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://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port></code>
|
|
<code class="devsite-terminal">export HTTPS_PROXY=http://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port></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#ccache">set up ccache</a> yet, now would be a good
|
|
time to do it.
|
|
</p>
|
|
|
|
</body>
|
|
</html>
|