Home | History | Annotate | Download | only in docs
      1 Copyright (C) 2009 The Android Open Source Project
      2 
      3 Licensed under the Apache License, Version 2.0 (the "License");
      4 you may not use this file except in compliance with the License.
      5 You may obtain a copy of the License at
      6 
      7      http://www.apache.org/licenses/LICENSE-2.0
      8 
      9 Unless required by applicable law or agreed to in writing, software
     10 distributed under the License is distributed on an "AS IS" BASIS,
     11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 See the License for the specific language governing permissions and
     13 limitations under the License.
     14 
     15 
     16 Subject: How to build an Android SDK & ADT Eclipse plugin.
     17 Date:    2009/03/27
     18 Updated: 2010/03/30
     19 
     20 
     21 Table of content:
     22   0- License
     23   1- Foreword
     24   2- Building an SDK for MacOS and Linux
     25   3- Building an SDK for Windows
     26   4- Building an ADT plugin for Eclipse
     27   5- Conclusion
     28 
     29 
     30 
     31 ----------
     32 0- License
     33 ----------
     34 
     35  Copyright (C) 2009 The Android Open Source Project
     36 
     37  Licensed under the Apache License, Version 2.0 (the "License");
     38  you may not use this file except in compliance with the License.
     39  You may obtain a copy of the License at
     40 
     41       http://www.apache.org/licenses/LICENSE-2.0
     42 
     43  Unless required by applicable law or agreed to in writing, software
     44  distributed under the License is distributed on an "AS IS" BASIS,
     45  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     46  See the License for the specific language governing permissions and
     47  limitations under the License.
     48 
     49 
     50 
     51 -----------
     52 1- Foreword
     53 -----------
     54 
     55 This document explains how to build the Android SDK and the ADT Eclipse plugin.
     56 
     57 It is designed for advanced users which are proficient with command-line
     58 operations and know how to setup the pre-required software.
     59 
     60 Basically it's not trivial yet when done right it's not that complicated.
     61 
     62 
     63 
     64 --------------------------------------
     65 2- Building an SDK for MacOS and Linux
     66 --------------------------------------
     67 
     68 First, setup your development environment and get the Android source code from
     69 git as explained here:
     70 
     71   http://source.android.com/source/download.html
     72 
     73 For example for the cupcake branch:
     74 
     75   $ mkdir ~/my-android-git
     76   $ cd ~/my-android-git
     77   $ repo init -u https://android.googlesource.com/platform/manifest -b master
     78   $ repo sync
     79 
     80 Then once you have all the source, simply build the SDK using:
     81 
     82   $ cd ~/my-android-git
     83   $ . build/envsetup.sh
     84   $ lunch sdk-eng
     85   $ make sdk
     86 
     87 This will take a while, maybe between 20 minutes and several hours depending on
     88 your machine. After a while you'll see this in the output:
     89 
     90   Package SDK: out/host/darwin-x86/sdk/android-sdk_eng.<build-id>_mac-x86.zip
     91 
     92 Some options:
     93 
     94 - Depending on your machine you can tell 'make' to build more things in
     95   parallel, e.g. if you have a dual core, use "make -j4 sdk" to build faster.
     96 
     97 - You can define "BUILD_NUMBER" to control the build identifier that gets
     98   incorporated in the resulting archive. The default is to use your username.
     99   One suggestion is to include the date, e.g.:
    100 
    101   $ export BUILD_NUMBER=${USER}-`date +%Y%m%d-%H%M%S`
    102 
    103   There are certain characters you should avoid in the build number, typically
    104   everything that might confuse 'make' or your shell. So for example avoid
    105   punctuation and characters like $ & : / \ < > , and .
    106 
    107 
    108 
    109 ------------------------------
    110 3- Building an SDK for Windows
    111 ------------------------------
    112 
    113 Full Windows SDK builds are now only supported on Linux -- most of the framework is
    114 not designed to be built on Windows so technically the Windows SDK is build on top
    115 of a Linux SDK where a few binaries are replaced. So it cannot be built on Windows,
    116 and it cannot be built on Mac, only on Linux.
    117 
    118 I'll repeat this again because it's important:
    119 
    120   To build the Android SDK for Windows, you need to use a *Linux* box.
    121 
    122 A- Pre-requisites
    123 -----------------
    124 
    125 Before you can even think of building the Android SDK for Windows, you need to
    126 perform the steps from section "2- Building an SDK for MacOS and Linux" above:
    127 setup and build a regular Linux SDK. Once this working, please continue here.
    128 
    129 Under Ubuntu, you will need the following extra packages: 
    130 
    131 $ sudo apt-get install mingw32 tofrodos
    132 
    133 mingw32 is the cross-compiler, tofrodos adds a unix2dos command
    134 
    135 
    136 B- Building
    137 -----------
    138 
    139 To build, perform the following steps:
    140 
    141 $ . build/envsetup.sh
    142 $ lunch sdk-eng
    143 $ make win_sdk
    144 
    145 Note that this will build both a Linux SDK then a Windows SDK. The result is located at
    146    out/host/windows/sdk/android-sdk_eng.${USER}_windows/
    147 
    148 
    149 
    150 ----------------------------
    151 4- Partial SDK Windows Tools
    152 ----------------------------
    153 
    154 As explained above, you can only build a *full* SDK for Windows using Linux.
    155 However sometimes you need to develop one specific tools, e.g. adb.exe or
    156 aapt.exe, and it's just more convenient to do it on the same platform where
    157 you can actually test it. This is what this section explains.
    158 
    159    
    160 A- Cygwin pre-requisite & code checkout
    161 ---------------------------------------
    162 
    163 You must have Cygwin installed. You can use the latest Cygwin 1.7 or the
    164 the "legacy Cygwin 1.5" from:
    165 
    166   http://cygwin.org/
    167 
    168 Now configure it:
    169 - When installing Cygwin, set Default Text File Type to Unix/binary, not DOS/text.
    170   This is really important, otherwise you will get errors when trying to
    171   checkout code using git.
    172 - Packages that you must install or not:
    173   - Required packages: autoconf, bison, curl, flex, gcc, g++, git, gnupg, make,
    174                        mingw-zlib, python, zip, unzip.
    175   - Suggested extra packages: diffutils, emacs, openssh, rsync, vim, wget.
    176   - Packages that must not be installed: readline.
    177 
    178 Once you installed Cygwin properly, checkout the code from git as you did
    179 for MacOS or Linux (see section 2 above.)
    180 
    181 
    182 
    183 C- Building the Windows Tools
    184 -----------------------------
    185 
    186 This is the easy part: run make on the tool you want.
    187 How do you know which tools you can build? Well obviously all the ones
    188 that come in an installed SDK/tools or SDK/platform-tools folder!
    189 
    190 Example, to build adb:
    191 
    192   $ cd ~/my-android-git
    193   $ . build/envsetup.sh
    194   $ lunch sdk-eng
    195   $ make adb
    196 
    197 The result will be somewhere in out/host/windows-x86/bin/. Just look at
    198 the output from make to get the exact path. Since you are building this
    199 under cygwin, you get an unstripped binary that you can happily feed to
    200 gdb to get debugger symbols:
    201 
    202   $ gdb --args out/host/windows-x86/bin/adb.exe <adb arguments>
    203 
    204 
    205 And before you ask, msys is not supported, nor is MSVC or windbg.
    206 
    207 So you can build a lot of little parts of the SDK on Windows, one tool
    208 at a time, but not the full thing because basically building the whole
    209 platform is not supported. This means you cannot build "android.jar"
    210 nor "layoutlib.jar" under Windows. For this you want Linux.
    211 
    212 
    213 
    214 D- Building the Windows Tools on Linux
    215 --------------------------------------
    216 
    217 You can also build isolated windows tools directly on Linux.
    218 Again, it requires a checkout of the full android code and the usual
    219 setup like described above to build an SDK.
    220 
    221 Then to build an isolated Windows binary, you'd do something like this:
    222   
    223   $ cd ~/my-android-git
    224   $ . build/envsetup.sh
    225   $ lunch sdk-eng
    226   $ USE_MINGW=1 make adb
    227 
    228 The special environment variable "USE_MINGW" must be set to 1. This is
    229 the clue to switch the make logic to cross-compiling to Windows under
    230 Linux.
    231 
    232 
    233 
    234 -------------------------------------
    235 4- Building an ADT plugin for Eclipse
    236 -------------------------------------
    237 
    238 Requirements:
    239 - You can currently only build an ADT plugin for Eclipse under Linux.
    240 - You must have a working version of Eclipse 3.6 "helios" RCP installed.
    241 - You need X11 to run Eclipse at least once.
    242 - You need a lot of patience. The trick is to do the initial setup correctly
    243   once, after it's a piece of cake.
    244 
    245 
    246 
    247 A- Pre-requisites
    248 -----------------
    249 
    250 Note for Ubuntu or Debian users: your apt repository probably only has Eclipse
    251 3.2 available and it's probably not suitable to build plugins in the first
    252 place. Forget that and install a working 3.6 manually as described below.
    253 
    254 - Visit http://www.eclipse.org/downloads/ to grab the
    255   "Eclipse for RCP/Plug-in Developers (176 MB)" download for Linux.
    256   32-bit and 64-bit versions are available, depending on your Linux installation.
    257 
    258   Note: Eclipse comes in various editions. Do yourself a favor and just stick
    259   to the RCP for building this plugin. For example the J2EE contains too many
    260   useless features that will get in the way, and the "Java" version lacks some
    261   plugins you need to build other plugins. Please just use the RCP one.
    262 
    263   Note: You will need the CDT plugin but don't take a "CDT" flavor build as it
    264   will lack the RCP tools. Instead take an RCP and then add CDT.
    265   
    266 - Unpack "eclipse-rcp-*-linux-gtk.tar.gz" in the directory of
    267   your choice, e.g.:
    268 
    269   $ mkdir ~/eclipse-3.6
    270   $ cd ~/eclipse-3.6
    271   $ tar xvzf eclipse-rcp-????-linux-gtk.tar.gz
    272 
    273   This will create an "eclipse" directory in the current directory.
    274 
    275 - Set ECLIPSE_HOME to that "eclipse" directory:
    276 
    277   $ export ECLIPSE_HOME=~/eclipse-3.6/eclipse
    278 
    279   Note: it is important you set ECLIPSE_HOME before starting the build.
    280   Otherwise the build process will try to download and install its own Eclipse
    281   installation in /buildroot, which is probably limited to root.
    282 
    283 - Now, before you can build anything, it is important that you start Eclipse
    284   *manually* once using the same user that you will use to build later. That's
    285   because your Eclipse installation is not finished: Eclipse must be run at
    286   least once to create some files in ~/.eclipse/. So run Eclipse now:
    287 
    288   $ ~/eclipse-3.6/eclipse/eclipse &
    289 
    290 - Since you have Eclipse loaded, now is a perfect time to pick up the
    291   CDT plugin. (Another alternative is is to fetch the CDT from its archives
    292   and manually dump all the *.jar in eclipse/plugins.)
    293   
    294   That's it. You won't need to run it manually again.
    295 
    296 
    297 
    298 B- Building ADT
    299 ---------------
    300 
    301 Finally, you have Eclipse, it's installed and it created its own config files,
    302 so now you can build your ADT plugin. To do that you'll change directories to
    303 your git repository and invoke the build script by giving it a destination
    304 directory and an optional build number:
    305 
    306   $ mkdir ~/mysdk
    307   $ cd ~/my-android-git   # <-- this is where you did your "repo sync"
    308   $ sdk/eclipse/scripts/build_server.sh ~/mysdk $USER
    309 
    310 The first argument is the destination directory. It must be absolute. Do not
    311 give a relative destination directory such as "../mysdk". This will make the
    312 Eclipse build fail with a cryptic message:
    313 
    314   BUILD SUCCESSFUL
    315   Total time: 1 minute 5 seconds
    316   **** Package in ../mysdk
    317   Error: Build failed to produce ../mysdk/android-eclipse
    318   Aborting
    319 
    320 The second argument is the build "number". The example used "$USER" but it
    321 really is a free identifier of your choice. It cannot contain spaces nor
    322 periods (dashes are ok.) If the build number is missing, a build timestamp will
    323 be used instead in the filename.
    324 
    325 The build should take something like 5-10 minutes.
    326 
    327 
    328 When the build succeeds, you'll see something like this at the end of the
    329 output:
    330 
    331   ZIP of Update site available at ~/mysdk/android-eclipse-v200903272328.zip
    332 or
    333   ZIP of Update site available at ~/mysdk/android-eclipse-<buildnumber>.zip
    334 
    335 When you load the plugin in Eclipse, its feature and plugin name will look like
    336 "com.android.ide.eclipse.adt_0.9.0.v200903272328-<buildnumber>.jar". The
    337 internal plugin ID is always composed of the package, the build timestamp and
    338 then your own build identifier (a.k.a. the "build number"), if provided. This
    339 means successive builds with the same build identifier are incremental and
    340 Eclipse will know how to update to more recent ones.
    341 
    342 
    343 
    344 -------------
    345 5- Conclusion
    346 -------------
    347 
    348 This completes the howto guide on building your own SDK and ADT plugin.
    349 Feedback is welcome on the public Android Open Source forums:
    350   http://source.android.com/discuss
    351 
    352 If you are upgrading from a pre-cupcake to a cupcake or later SDK please read
    353 the accompanying document "howto_use_cupcake_sdk.txt".
    354 
    355 -end-
    356 
    357