|  | 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: 2015/09/09 | 
|  |  | 
|  |  | 
|  | 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 -g all,-notdefault,tools | 
|  | $ 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 tofrodos | 
|  |  | 
|  | 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/ | 
|  |  | 
|  |  | 
|  | C- Building just the tools | 
|  | -------------------------------------- | 
|  |  | 
|  | You can also build isolated windows tools directly on Linux without building | 
|  | the full SDK. | 
|  |  | 
|  | To build, perform the following steps: | 
|  |  | 
|  | $ cd ~/my-android-git | 
|  | $ . build/envsetup.sh | 
|  | $ lunch sdk-eng | 
|  | $ make winsdk-tools | 
|  |  | 
|  | A specific tool can be built using: | 
|  |  | 
|  | $ make host_cross_adb | 
|  |  | 
|  | Then the binaries are located at | 
|  | out/host/windows-x86/bin/adb.exe | 
|  |  | 
|  |  | 
|  | ------------------------------------- | 
|  | 4- Building an ADT plugin for Eclipse | 
|  | ------------------------------------- | 
|  |  | 
|  | We've simplified the steps here. | 
|  | It used to be that you'd have to download a specific version of | 
|  | Eclipse and install it at a special location. That's not needed | 
|  | anymore. | 
|  |  | 
|  | Instead you just 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 would 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- | 
|  |  |