blob: e026f5a7e3141581ba3282ed4f00025c02806b5d [file] [log] [blame] [view]
Skyler Kaufman44436912011-04-07 15:11:52 -07001<!--
2 Copyright 2010 The Android Open Source Project
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15-->
16
Skyler Kaufman991ae4d2011-04-07 12:30:41 -070017# Building the System #
18
19The basic sequence of build commands is as follows:
20
21## Initialize ##
22
23Initialize the environment with the `envsetup.sh` script. Note
24that replacing "source" with a single dot saves a few characters,
25and the short form is more commonly used in documentation.
26
27 $ source build/envsetup.sh
28
29or
30
31 $ . build/envsetup.sh
32
33## Choose a Target ##
34
35Choose which target to build with `lunch`. The exact configuration can be passed as
36an argument, e.g.
37
38 $ lunch full-eng
39
Skyler Kaufman44436912011-04-07 15:11:52 -070040The example above refers to a complete build for the emulator, with all debugging enabled.
Skyler Kaufman991ae4d2011-04-07 12:30:41 -070041
42If run with no arguments `lunch` will prompt you to choose a target from the menu.
43
44All build targets take the form DEVICE-BUILDTYPE, where the DEVICE is a codename
45referring to the particular hardware:
46
47Codename | Device
48-----------|-----------
49passion | Nexus One
50crespo | Nexus S
Skyler Kaufman44436912011-04-07 15:11:52 -070051generic | emulator
Skyler Kaufman991ae4d2011-04-07 12:30:41 -070052
53and the BUILDTYPE is one of the following:
54
55Buildtype | Use
56------------|--------------------------------------
57user | limited access; suited for production
58userdebug | like "user" but with `su` access; preferred for debugging
59eng | unrestricted access
60
61## Build the Code ##
62
63Build everything with `make`. GNU make can handle parallel
64tasks with a `-jN` argument, and it's common to use a number of
65tasks N that's between 1 and 2 times the number of hardware
66threads on the computer being used for the build. E.g. on a
67dual-E5520 machine (2 CPUs, 4 cores per CPU, 2 threads per core),
68the fastest builds are made with commands between `make -j16` and
69`make -j32`.
70
71 $ make -j4
72
73## Run It! ##
74
75You can either run your build on an emulator or flash it on a device. Please note that you have already selected your build target with `lunch`, and it is unlikely at best to run on a different target than it was built for.
76
77### Flash a Device ###
78
79To flash a device, you will need to use `fastboot`, which should be included in your path after a successful build. Place the device in fastboot mode either manually by holding the appropriate key combination at boot, or from the shell with
80
81 $ adb reboot bootloader
82
83Once the device is in fastboot mode, run
84
85 $ fastboot flashall -w
86
87The `-w` option wipes the `/data` partition on the device; this is useful for your first time flashing a particular device, but is otherwise unnecessary.
88
89### Emulate an Android Device ###
90
91The emulator is added to your path automatically by the build process. To run the emulator, type
92
93 $ emulator
94
95
96# Troubleshooting Common Build Errors #
97
98## Wrong Java Version ##
99
100If you are attempting to build froyo or earlier with Java 1.6, or gingerbread or later
101with Java 1.5, `make` will abort with a message such as
102
103 ************************************************************
104 You are attempting to build with the incorrect version
105 of java.
106
107 Your version is: WRONG_VERSION.
108 The correct version is: RIGHT_VERSION.
109
110 Please follow the machine setup instructions at
111 http://source.android.com/download
112 ************************************************************
113
114This may be caused by
115
116- failing to install the correct JDK as specified on the [Initializing](initializing.html) page. Building Android requires Sun JDK 5 or 6 depending on which release you are building.
117
118- another JDK that you previously installed appearing in your path. You can remove the offending JDK from your path with:
119
120 $ export PATH=${PATH/\/path\/to\/jdk\/dir:/}
121
122## Python Version 3 ##
123
124Repo is built on particular functionality from Python 2.x and is unfortunately incompatible with Python 3. In order to use repo, please install Python 2.x:
125
126 $ apt-get install python
127
128## Gmake Version 3.82 ##
129
130There is a bug in `make` version 3.82 on Mac OS that prevents building Android.
131
132TODO: what the error looks like with GNU make 3.82 on older builds that don't explicitly detect it.
133
134Follow the instructions on the [Initializing](initializing.html) page for reverting GNU make from 3.82 to 3.81.
135
136## Case Insensitive Filesystem ##
137
138If you are building on an HFS filesystem on Mac OS X, you may encounter an error such as
139
140 ************************************************************
141 You are building on a case-insensitive filesystem.
142 Please move your source tree to a case-sensitive filesystem.
143 ************************************************************
144
145Please follow the instructions on the [Initializing](initializing.html) page for creating a case-sensitive disk image.
146
147## No USB Permission ##
148
Skyler Kaufman44436912011-04-07 15:11:52 -0700149On most Linux systems, unprivileged users cannot access USB ports by default. If you see a permission denied error, follow the instructions on the [Initializing](initializing.html) page for configuring USB access.
Skyler Kaufman991ae4d2011-04-07 12:30:41 -0700150
151If adb was already running and cannot connect to the device after
152getting those rules set up, it can be killed with `adb kill-server`.
153That will cause adb to restart with the new configuration.
154