| Copyright (C) 2009 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. |
| |
| |
| Subject: How to build an Android SDK & ADT Eclipse plugin. |
| Date: 2009/03/27 |
| Updated: 2010/03/30 |
| |
| |
| Table of content: |
| 0- License |
| 1- Foreword |
| 2- Building an SDK for MacOS and Linux |
| 3- Building an SDK for Windows |
| 4- Building an ADT plugin for Eclipse |
| 5- Conclusion |
| |
| |
| |
| ---------- |
| 0- License |
| ---------- |
| |
| Copyright (C) 2009 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. |
| |
| |
| |
| ----------- |
| 1- Foreword |
| ----------- |
| |
| This document explains how to build the Android SDK and the ADT Eclipse plugin. |
| |
| It is designed for advanced users which are proficient with command-line |
| operations and know how to setup the pre-required software. |
| |
| Basically it's not trivial yet when done right it's not that complicated. |
| |
| |
| |
| -------------------------------------- |
| 2- Building an SDK for MacOS and Linux |
| -------------------------------------- |
| |
| First, setup your development environment and get the Android source code from |
| git as explained here: |
| |
| http://source.android.com/source/download.html |
| |
| For example for the cupcake branch: |
| |
| $ mkdir ~/my-android-git |
| $ cd ~/my-android-git |
| $ repo init -u https://android.googlesource.com/platform/manifest -b master |
| $ repo sync |
| |
| Then once you have all the source, simply build the SDK using: |
| |
| $ cd ~/my-android-git |
| $ . build/envsetup.sh |
| $ lunch sdk-eng |
| $ make sdk |
| |
| This will take a while, maybe between 20 minutes and several hours depending on |
| your machine. After a while you'll see this in the output: |
| |
| Package SDK: out/host/darwin-x86/sdk/android-sdk_eng.<build-id>_mac-x86.zip |
| |
| Some options: |
| |
| - Depending on your machine you can tell 'make' to build more things in |
| parallel, e.g. if you have a dual core, use "make -j4 sdk" to build faster. |
| |
| - You can define "BUILD_NUMBER" to control the build identifier that gets |
| incorporated in the resulting archive. The default is to use your username. |
| One suggestion is to include the date, e.g.: |
| |
| $ export BUILD_NUMBER=${USER}-`date +%Y%m%d-%H%M%S` |
| |
| There are certain characters you should avoid in the build number, typically |
| everything that might confuse 'make' or your shell. So for example avoid |
| punctuation and characters like $ & : / \ < > , and . |
| |
| |
| |
| ------------------------------ |
| 3- Building an SDK for Windows |
| ------------------------------ |
| |
| Full Windows SDK builds are now only supported on Linux -- most of the framework is |
| not designed to be built on Windows so technically the Windows SDK is build on top |
| of a Linux SDK where a few binaries are replaced. So it cannot be built on Windows, |
| and it cannot be built on Mac, only on Linux. |
| |
| I'll repeat this again because it's important: |
| |
| To build the Android SDK for Windows, you need to use a *Linux* box. |
| |
| A- Pre-requisites |
| ----------------- |
| |
| Before you can even think of building the Android SDK for Windows, you need to |
| perform the steps from section "2- Building an SDK for MacOS and Linux" above: |
| setup and build a regular Linux SDK. Once this working, please continue here. |
| |
| Under Ubuntu, you will need the following extra packages: |
| |
| $ sudo apt-get install mingw32 tofrodos |
| |
| mingw32 is the cross-compiler, tofrodos adds a unix2dos command |
| |
| |
| B- Building |
| ----------- |
| |
| To build, perform the following steps: |
| |
| $ . build/envsetup.sh |
| $ lunch sdk-eng |
| $ make win_sdk |
| |
| Note that this will build both a Linux SDK then a Windows SDK. The result is located at |
| out/host/windows/sdk/android-sdk_eng.${USER}_windows/ |
| |
| |
| |
| ---------------------------- |
| 4- Partial SDK Windows Tools |
| ---------------------------- |
| |
| As explained above, you can only build a *full* SDK for Windows using Linux. |
| However sometimes you need to develop one specific tools, e.g. adb.exe or |
| aapt.exe, and it's just more convenient to do it on the same platform where |
| you can actually test it. This is what this section explains. |
| |
| |
| A- Cygwin pre-requisite & code checkout |
| --------------------------------------- |
| |
| You must have Cygwin installed. You can use the latest Cygwin 1.7 or the |
| the "legacy Cygwin 1.5" from: |
| |
| http://cygwin.org/ |
| |
| Now configure it: |
| - When installing Cygwin, set Default Text File Type to Unix/binary, not DOS/text. |
| This is really important, otherwise you will get errors when trying to |
| checkout code using git. |
| - Packages that you must install or not: |
| - Required packages: autoconf, bison, curl, flex, gcc, g++, git, gnupg, make, |
| mingw-zlib, python, zip, unzip. |
| - Suggested extra packages: diffutils, emacs, openssh, rsync, vim, wget. |
| - Packages that must not be installed: readline. |
| |
| Once you installed Cygwin properly, checkout the code from git as you did |
| for MacOS or Linux (see section 2 above.) |
| |
| |
| |
| C- Building the Windows Tools |
| ----------------------------- |
| |
| This is the easy part: run make on the tool you want. |
| How do you know which tools you can build? Well obviously all the ones |
| that come in an installed SDK/tools or SDK/platform-tools folder! |
| |
| Example, to build adb: |
| |
| $ cd ~/my-android-git |
| $ . build/envsetup.sh |
| $ lunch sdk-eng |
| $ make adb |
| |
| The result will be somewhere in out/host/windows-x86/bin/. Just look at |
| the output from make to get the exact path. Since you are building this |
| under cygwin, you get an unstripped binary that you can happily feed to |
| gdb to get debugger symbols: |
| |
| $ gdb --args out/host/windows-x86/bin/adb.exe <adb arguments> |
| |
| |
| And before you ask, msys is not supported, nor is MSVC or windbg. |
| |
| So you can build a lot of little parts of the SDK on Windows, one tool |
| at a time, but not the full thing because basically building the whole |
| platform is not supported. This means you cannot build "android.jar" |
| nor "layoutlib.jar" under Windows. For this you want Linux. |
| |
| |
| |
| D- Building the Windows Tools on Linux |
| -------------------------------------- |
| |
| You can also build isolated windows tools directly on Linux. |
| Again, it requires a checkout of the full android code and the usual |
| setup like described above to build an SDK. |
| |
| Then to build an isolated Windows binary, you'd do something like this: |
| |
| $ cd ~/my-android-git |
| $ . build/envsetup.sh |
| $ lunch sdk-eng |
| $ USE_MINGW=1 make adb |
| |
| The special environment variable "USE_MINGW" must be set to 1. This is |
| the clue to switch the make logic to cross-compiling to Windows under |
| Linux. |
| |
| |
| |
| ------------------------------------- |
| 4- Building an ADT plugin for Eclipse |
| ------------------------------------- |
| |
| Requirements: |
| - You can currently only build an ADT plugin for Eclipse under Linux. |
| - You must have a working version of Eclipse 3.6 "helios" RCP installed. |
| - You need X11 to run Eclipse at least once. |
| - You need a lot of patience. The trick is to do the initial setup correctly |
| once, after it's a piece of cake. |
| |
| |
| |
| A- Pre-requisites |
| ----------------- |
| |
| Note for Ubuntu or Debian users: your apt repository probably only has Eclipse |
| 3.2 available and it's probably not suitable to build plugins in the first |
| place. Forget that and install a working 3.6 manually as described below. |
| |
| - Visit http://www.eclipse.org/downloads/ to grab the |
| "Eclipse for RCP/Plug-in Developers (176 MB)" download for Linux. |
| 32-bit and 64-bit versions are available, depending on your Linux installation. |
| |
| Note: Eclipse comes in various editions. Do yourself a favor and just stick |
| to the RCP for building this plugin. For example the J2EE contains too many |
| useless features that will get in the way, and the "Java" version lacks some |
| plugins you need to build other plugins. Please just use the RCP one. |
| |
| Note: You will need the CDT plugin but don't take a "CDT" flavor build as it |
| will lack the RCP tools. Instead take an RCP and then add CDT. |
| |
| - Unpack "eclipse-rcp-*-linux-gtk.tar.gz" in the directory of |
| your choice, e.g.: |
| |
| $ mkdir ~/eclipse-3.6 |
| $ cd ~/eclipse-3.6 |
| $ tar xvzf eclipse-rcp-????-linux-gtk.tar.gz |
| |
| This will create an "eclipse" directory in the current directory. |
| |
| - Set ECLIPSE_HOME to that "eclipse" directory: |
| |
| $ export ECLIPSE_HOME=~/eclipse-3.6/eclipse |
| |
| Note: it is important you set ECLIPSE_HOME before starting the build. |
| Otherwise the build process will try to download and install its own Eclipse |
| installation in /buildroot, which is probably limited to root. |
| |
| - Now, before you can build anything, it is important that you start Eclipse |
| *manually* once using the same user that you will use to build later. That's |
| because your Eclipse installation is not finished: Eclipse must be run at |
| least once to create some files in ~/.eclipse/. So run Eclipse now: |
| |
| $ ~/eclipse-3.6/eclipse/eclipse & |
| |
| - Since you have Eclipse loaded, now is a perfect time to pick up the |
| CDT plugin. (Another alternative is is to fetch the CDT from its archives |
| and manually dump all the *.jar in eclipse/plugins.) |
| |
| That's it. You won't need to run it manually again. |
| |
| |
| |
| B- Building ADT |
| --------------- |
| |
| Finally, you have Eclipse, it's installed and it created its own config files, |
| so now you can build your ADT plugin. To do that you'll change directories to |
| your git repository and invoke the build script by giving it a destination |
| directory and an optional build number: |
| |
| $ mkdir ~/mysdk |
| $ cd ~/my-android-git # <-- this is where you did your "repo sync" |
| $ sdk/eclipse/scripts/build_server.sh ~/mysdk $USER |
| |
| The first argument is the destination directory. It must be absolute. Do not |
| give a relative destination directory such as "../mysdk". This will make the |
| Eclipse build fail with a cryptic message: |
| |
| BUILD SUCCESSFUL |
| Total time: 1 minute 5 seconds |
| **** Package in ../mysdk |
| Error: Build failed to produce ../mysdk/android-eclipse |
| Aborting |
| |
| The second argument is the build "number". The example used "$USER" but it |
| really is a free identifier of your choice. It cannot contain spaces nor |
| periods (dashes are ok.) If the build number is missing, a build timestamp will |
| be used instead in the filename. |
| |
| The build should take something like 5-10 minutes. |
| |
| |
| When the build succeeds, you'll see something like this at the end of the |
| output: |
| |
| ZIP of Update site available at ~/mysdk/android-eclipse-v200903272328.zip |
| or |
| ZIP of Update site available at ~/mysdk/android-eclipse-<buildnumber>.zip |
| |
| When you load the plugin in Eclipse, its feature and plugin name will look like |
| "com.android.ide.eclipse.adt_0.9.0.v200903272328-<buildnumber>.jar". The |
| internal plugin ID is always composed of the package, the build timestamp and |
| then your own build identifier (a.k.a. the "build number"), if provided. This |
| means successive builds with the same build identifier are incremental and |
| Eclipse will know how to update to more recent ones. |
| |
| |
| |
| ------------- |
| 5- Conclusion |
| ------------- |
| |
| This completes the howto guide on building your own SDK and ADT plugin. |
| Feedback is welcome on the public Android Open Source forums: |
| http://source.android.com/discuss |
| |
| If you are upgrading from a pre-cupcake to a cupcake or later SDK please read |
| the accompanying document "howto_use_cupcake_sdk.txt". |
| |
| -end- |
| |