page.title=Installing the SDK

@jd:body


<script type="text/javascript">
function toggleDiv(link) {
  var toggleable = $(link).parent();
  if (toggleable.hasClass("closed")) {
    //$(".toggleme", toggleable).slideDown("fast");
    toggleable.removeClass("closed");
    toggleable.addClass("open");
    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot +
"assets/images/triangle-opened.png"));
  } else {
    //$(".toggleme", toggleable).slideUp("fast");
    toggleable.removeClass("open");
    toggleable.addClass("closed");
    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot +
"assets/images/triangle-closed.png"));
  }
  return false;
}
</script>
<style>
.toggleable {
  padding: .25em 1em 0em 1em;
  margin-bottom: 0;
}
.toggleme {
  padding: 1em 1em 0 2em;
  line-height:1em;
}
.toggleable a {
  text-decoration:none;
}
.toggleme a {
  text-decoration:underline;
}
.toggleable.closed .toggleme {
  display:none;
}
#jd-content .toggle-img {
  margin:0;
}
</style>

<div id="qv-wrapper">
<div id="qv">

  <h2>In this document</h2>
  <ol>
    <li><a href="#Preparing">1. Preparing Your Development Computer</a></li>
    <li><a href="#Installing">2. Downloading the SDK Starter Package</a></li>
    <li><a href="#InstallingADT">3. Installing the ADT Plugin for Eclipse</a></li>
    <li><a href="#AddingComponents">4. Adding Platforms and Other Components</a>
      <ol>
        <li><a href="#components">Available Components</a></li>
        <li><a href="#which">Recommended Components</a></li>
      </ol></li>
    <li><a href="#sdkContents">5. Exploring the SDK (Optional)</a></li>
    <li><a href="#NextSteps">Next Steps</a></li>
    <li><a href="#troubleshooting">Troubleshooting</a></li>
  </ol>

<h2>See also</h2>
  <ol>
    <li><a href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin for Eclipse</a></li>
    <li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
  </ol>

</div>
</div>

<p>This page describes how to install the Android SDK
and set up your development environment for the first time.</p>

<p>If you encounter any problems during installation, see the
<a href="#troubleshooting">Troubleshooting</a> section at the bottom of
this page.</p>

<h4>Updating?</h4>

<p>If you already have an Android SDK, use the <em>Android SDK and AVD Manager</em> tool to install
updated tools and new Android platforms into your existing environment. For information about how to
do that, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></p>


<h2 id="Preparing">Step 1. Preparing Your Development Computer</h2>

<p>Before getting started with the Android SDK, take a moment to confirm that
your development computer meets the <a href="requirements.html">System
Requirements</a>. In particular, you might need to install the <a
href="http://java.sun.com/javase/downloads/index.jsp">JDK</a>, if you don't have it already. </p>

<p>If you will be developing in Eclipse with the Android Development
Tools (ADT) Plugin&mdash;the recommended path if you are new to
Android&mdash;make sure that you have a suitable version of Eclipse
installed on your computer (3.4 or newer is recommended). If you need
to install Eclipse, you can download it from this location: </p>

<p style="margin-left:2em;"><a href=
"http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a></p>

<p>For Eclipse 3.5 or newer, the "Eclipse Classic" version is recommended. Otherwise, a Java or
RCP version of Eclipse is recommended.</p>


<h2 id="Installing">Step 2. Downloading the SDK Starter Package</h2>

<p>The SDK starter package is not a full
development environment&mdash;it includes only the core SDK Tools, which you can
use to download the rest of the SDK components (such as the latest Android platform).</p>

<p>If you haven't already, get the latest version of the SDK starter package from the <a
href="{@docRoot}sdk/index.html">SDK download page</a>.</p>

<p>If you downloaded a {@code .zip} or {@code .tgz} package (instead of the SDK installer), unpack
it to a safe location on your machine. By default, the SDK files are unpacked
into a directory named <code>android-sdk-&lt;machine-platform&gt;</code>.</p>

<p>If you downloaded the Windows installer ({@code .exe} file), run it now and it will check
whether the proper Java SE Development Kit (JDK) is installed (installing it, if necessary), then
install the SDK Tools into a default location (which you can modify).</p>

<p>Make a note of the name and location of the SDK directory on your system&mdash;you will need to
refer to the SDK directory later, when setting up the ADT plugin and when using
the SDK tools from command line.</p>


<h2 id="InstallingADT">Step 3. Installing the ADT Plugin for Eclipse</h2>

<p>Android offers a custom plugin for the Eclipse IDE, called Android
Development Tools (ADT), that is designed to give you a powerful, integrated
environment in which to build Android applications. It extends the capabilites
of Eclipse to let you quickly set up new Android projects, create an application
UI, debug your applications
using the Android SDK tools, and even export signed (or unsigned) APKs in order
to distribute your application. In general, developing in Eclipse with ADT is a
highly recommended approach and is the fastest way to get started with Android.
</p>

<p>If you'd like to use ADT for developing Android applications, install it now.
Read <a href="{@docRoot}sdk/eclipse-adt.html#installing">Installing the ADT Plugin</a> for
step-by-step installation instructions, then return here to continue the
last step in setting up your Android SDK.</p>

<p>If you prefer to work in a different IDE, you do not need to
install Eclipse or ADT, instead, you can directly use the SDK tools to build and
debug your application. The <a href="{@docRoot}guide/developing/index.html">Overview</a>
section of the developer guide outlines the major steps that you need to complete
when developing in Eclipse or other IDEs.</p>



<h2 id="AddingComponents">Step 4. Adding Platforms and Other Components</h2>

<p>The last step in setting up your SDK is using the <em>Android SDK and AVD Manager</em> (a
tool included in the SDK starter package) to download
essential SDK components into your development environment.</p>

<p>The SDK uses a modular structure that separates the major parts of the SDK&mdash;Android platform
versions, add-ons, tools, samples, and documentation&mdash;into a set of separately installable
components. The SDK starter package, which you've already downloaded, includes only a single
component: the latest version of the SDK Tools. To develop an Android
application, you also need to download at least one Android platform and the SDK Platform-tools
(tools that the latest platform depend upon). However, downloading
additional components is highly recommended.</p>

<p>If you used the Windows installer, when you complete the installation wizard, it will launch the
Android SDK and AVD Manager with a default set of platforms and other components selected
for you to install. Simply click <strong>Install</strong> to accept the recommended set of
components and install them. You can then skip to <a href="#sdkContents">Step 5</a>, but we
recommend you first read the section about the <a href="#components">Available Components</a> to
better understand the components available from the Android SDK and AVD Manager.</p>

<p>You can launch the Android SDK and AVD Manager in one of the following ways:</p>
<ul>
  <li>From within Eclipse, select <strong>Window &gt; Android SDK and AVD Manager</strong>.</li>
  <li>On Windows, double-click the <code>SDK Manager.exe</code> file at the root of the Android
SDK directory.</li>
  <li>On Mac or Linux, open a terminal and navigate to the <code>tools/</code> directory in the
Android SDK, then execute: <pre>android</pre> </li>
</ul>

<p>To download components, use the graphical UI of the Android SDK and AVD
Manager, shown in Figure 1, to browse the SDK repository and select new or updated
components. The Android SDK and AVD Manager will install the selected components in
your SDK environment. For information about which components you should download, see the following
section about <a href="#which">Recommended Components</a>.</p>

<img src="/images/sdk_manager_packages.png" />
<p class="img-caption"><strong>Figure 1.</strong> The Android SDK and AVD Manager's
<strong>Available Packages</strong> panel, which shows the SDK components that are
available for you to download into your environment.</p>


<h3 id="components">Available Components</h3>

<p>By default, there are two repositories of components for your SDK: <em>Android
Repository</em> and <em>Third party Add-ons</em>.</p>

<p>The <em>Android Repository</em> offers these types of components:</p>

<ul>
<li><strong>SDK Tools</strong> (pre-installed in the Android SDK starter
package) &mdash; Contains tools for debugging
and testing your application and other utility tools. You can access these
in the <code>&lt;sdk&gt;/tools/</code> directory of your SDK and read more about them in the <a
href="{@docRoot}guide/developing/tools/index.html">Tools</a> section of the developer guide. </li>

<li><strong>SDK Platform-tools</strong> &mdash; Contains tools that are required to develop and
debug your application, but which are developed alongside the Android platform in order to support
the latest features. These tools are typically updated only when a new platform becomes
available. You can access these
in the <code>&lt;sdk&gt;/platform-tools/</code> directory. Read more about them in
the <a href="{@docRoot}guide/developing/tools/index.html">Tools</a> section of the developer guide.
</li>

<li><strong>Android platforms</strong> &mdash; An SDK platform is
available for every production Android platform deployable to Android-powered
devices. Each platform component includes a fully compliant Android library and
system image, sample code, emulator skins, and any version specific tools. For
detailed information about each platform, see the overview documents available
under the section "Downloadable SDK Components," at left. </li>

<li><strong>USB Driver for Windows</strong> (Windows only) &mdash; Contains driver files
that you can install on your Windows computer, so that you can run and debug
your applications on an actual device. You <em>do not</em> need the USB driver unless
you plan to debug your application on an actual Android-powered device. If you
develop on Mac OS X or Linux, you do not need a special driver to debug
your application on an Android-powered device. (See <a
href="{@docRoot}guide/developing/device.html">Developing on a Device</a> for more information
about developing on a real device.)</li>

<li><strong>Samples</strong> &mdash; Contains the sample code and apps available
for each Android development platform. If you are just getting started with
Android development, make sure to download the samples to your SDK. <!--The download
includes not only a set of very useful sample apps, but also the source for <a
href="{@docRoot}resources/tutorials/hello-world.html">Hello World</a> and other
tutorials. --></li>

<li><strong>Documentation</strong> &mdash; Contains a local copy of the latest
multiversion documentation for the Android framework API. </li>
</ul>

<p>The <em>Third party Add-ons</em> provide components that allow you to create a development
environment using a specific Android external library (such as the Google Maps library) or a
customized (but fully compliant) Android system image. You can add additional Add-on repositories,
by clicking <strong>Add Add-on Site</strong>.</p>


<h3 id="which">Recommended Components</h3>

<p>The SDK repository contains a range of components that you can download.
Use the table below to determine which components you need, based on whether you
want to set up a basic, recommended, or full development environment:
</p>

<table style="width:95%">

<tr>
<th>Environment</th>
<th>SDK&nbsp;Component</th>
<th>Comments</th>
</tr>

<tr>
<td rowspan="3" style="font-size:.9em;background-color:#FFE;">Basic</td>
<td style="font-size:.9em;background-color:#FFE;">SDK Tools</td>
<td style="font-size:.9em;background-color:#FFE;">If you've just installed
the SDK starter package, then you already have the latest version of this component. The
SDK Tools component is required to develop an Android application. Make sure you keep this up to
date.</td>
</tr>

<tr>
<td style="font-size:.9em;background-color:#FFE;">SDK Platform-tools</td>
<td style="font-size:.9em;background-color:#FFE;">This includes more tools that are required
for application development. These tools are platform-dependent and typically update only when
a new SDK platform is made available, in order to support new features in the platform. These
tools are always backward compatible with older platforms, but you must be sure that you have
the latest version of these tools when you install a new SDK platform.</td>
</tr>

<tr>
<td style="font-size:.9em;background-color:#FFE;">SDK platform</td>
<td style="font-size:.9em;background-color:#FFE;">You need to download <strong
style="color:red">at least one platform</strong> into your environment, so that
you will be able to compile your application and set up an Android Virtual
Device (AVD) to run it on (in the emulator). To start with, just download the
latest version of the platform. Later, if you plan to publish your application,
you will want to download other platforms as well, so that you can test your
application on the full range of Android platform versions that your application supports.</td>
</tr>
<tr>
<td colspan="2"
style="border:none;text-align:center;font-size:1.5em;font-weight:bold;">+</td><td
style="border:none"></td>
</tr>
<tr>
<td rowspan="3">Recommended<br/>(plus Basic)</td>
<td>Documentation</td>
<td>The Documentation component is useful because it lets you work offline and
also look up API reference information from inside Eclipse.</td>
</tr>

<tr>
<td>Samples</td>
<td>The Samples components give you source code that you can use to learn about
Android, load as a project and run, or reuse in your own app. Note that multiple
samples components are available &mdash; one for each Android platform version. When
you are choosing a samples component to download, select the one whose API Level
matches the API Level of the Android platform that you plan to use.</td>
</tr>
<tr>
<td>Usb Driver</td>
<td>The Usb Driver component is needed only if you are developing on Windows and
have an Android-powered device on which you want to install your application for
debugging and testing. For Mac OS X and Linux platforms, no
special driver is needed.</td>
</tr>
<tr>
<td colspan="2"
style="border:none;text-align:center;font-size:1.5em;font-weight:bold;">+</td><td
style="border:none"></td>
</tr>
<tr>
<td rowspan="3">Full<br/>(plus Recommended)</td>
<td>Google APIs</td>
<td>The Google APIs add-on gives your application access to the Maps external
library, which makes it easy to display and manipulate Maps data in your
application. </td>
</tr>
<tr>
<td>Additional SDK Platforms</td>
<td>If you plan to publish your application, you will want to download
additional platforms corresponding to the Android platform versions on which you
want the application to run. The recommended approach is to compile your
application against the lowest version you want to support, but test it against
higher versions that you intend the application to run on. You can test your
applications on different platforms by running in an Android Virtual Device
(AVD) on the Android emulator.</td>
</tr>

</table>

<p>Once you've installed at least the basic configuration of SDK components, you're ready to start
developing Android apps. The next section describes the contents of the Android SDK to familiarize
you with the components you've just installed.</p>

<p>For more information about using the Android SDK and AVD Manager, see the <a
href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a> document. </p>


<h2 id="sdkContents">Step 5. Exploring the SDK (Optional)</h2>

<p>Once you've installed the SDK and downloaded the platforms, documentation,
and add-ons that you need, we suggest that you open the SDK directory and take a look at what's
inside.</p>

<p>The table below describes the full SDK directory contents, with components
installed. </p>

<table>
<tr>
<th colspan="3">Name</th><th>Description</th>
</tr>
<tr>
<td colspan="3"><code>add-ons/</code></td>
<td>Contains add-ons to the Android SDK development
environment, which let you develop against external libraries that are available on some
devices. </td>
</tr>
<tr>
<td colspan="3"><code>docs/</code></td>
<td>A full set of documentation in HTML format, including the Developer's Guide,
API Reference, and other information. To read the documentation, load the
file <code>offline.html</code> in a web browser.</td>
</tr>
<tr>
<td colspan="3"><code>platform-tools/</code></td>
<td>Contains development tools that may be updated with each platform release (from the <em>Android
SDK Platform-tools</em> component). Tools in here include {@code adb}, {@code dexdump}, and others
others that you don't typically use directly. These tools are separate from the generic development
tools in the {@code tools/} directory, because these tools may be updated in order to support new
features in the latest Android platform, whereas the other tools have no dependencies on the
platform version.</td>
</tr>
<tr>
<td colspan="3"><code>platforms/</code></td>
<td>Contains a set of Android platform versions that you can develop
applications against, each in a separate directory.  </td>
</tr>
<tr>
<td style="width:2em;border-bottom-color:white;"></td>
<td colspan="2"><code><em>&lt;platform&gt;</em>/</code></td>
<td>Platform version directory, for example "android-1.6". All platform version
directories contain a similar set of files and subdirectory structure.</td>
</tr>

<tr>
<td style="width:2em;border-bottom-color:white;">&nbsp;</td>
<td style="width:2em;border-bottom-color:white;"></td>
<td><code>data/</code></td>
<td>Storage area for default fonts and resource definitions.</td>
</tr>
<tr>
<td style="width:2em;border-bottom-color:white;"></td>
<td style="width:2em;border-bottom-color:white;"></td>
<td><code>images/</code></td>
<td>Storage area for default disk images, including the Android system image,
the default userdata image, the default ramdisk image, and more. The images
are used in emulator sessions.</td>
</tr>
<tr>
<td style="width:2em;border-bottom-color:white;"></td>
<td style="width:2em;border-bottom-color:white;"></td>
<td><code>skins/</code></td>
<td>A set of emulator skins available for the platform version. Each skin is
designed for a specific screen resolution.</td>
</tr>
<tr>
<td style="width:2em;border-bottom-color:white;"></td>
<td style="width:2em;border-bottom-color:white;"></td>
<td><code>templates/</code></td>
<td>Storage area for file templates used by the SDK development tools.</td>
</tr>
<tr>
<td style="width:2em;border-bottom-color:white;"></td>
<td style="width:2em;border-bottom-color:white;"></td>
<td><code>tools/</code></td>
<td>This directory is used only by SDK Tools r7 and below for development tools that are specific to
this platform version&mdash;it's not used by SDK Tools r8 and above.</td>
</tr>
<tr>
<td style="width:2em;"></td>
<td style="width:2em;"></td>
<td><code>android.jar</code></td>
<td>The Android library used when compiling applications against this platform
version.</td>
</tr>
<tr>
<td colspan="3"><code>samples/</code></td>
<td>Sample code and apps that are specific to platform version.</td>
</tr>
<tr>
<td colspan="3"><code>tools/</code></td>
<td>Contains the set of development and profiling tools that are platform-independent, such
as the emulator, the AVD and SDK Manager, ddms, hierarchyviewer and more. The tools in
this directory may be updated at any time (from the <em>Android SDK Tools</em> component),
independent of platform releases, whereas the tools in {@code platform-tools/} may be updated based
on the latest platform release.</td>
</tr>
<tr>
<td colspan="3"><code>SDK Readme.txt</code></td>
<td>A file that explains how to perform the initial setup of your SDK,
including how to launch the Android SDK and AVD Manager tool on all
platforms</td>
</tr>
<tr>
<td colspan="3"><code>SDK Manager.exe</code></td>
<td>Windows SDK only. A shortcut that launches the Android SDK and AVD
Manager tool, which you use to add components to your SDK. </td>
</tr>
<!--<tr>
<td colspan="3"><code>documentation.html</code></td>
<td>A file that loads the entry page for the local Android SDK
documentation.</td>
</tr>-->

</table>


<p>Optionally, you might want to add the location of the SDK's <code>tools/</code> and
<code>platform-tools</code> to your <code>PATH</code> environment variable, to provide easy
access to the tools.</p>


<div class="toggleable closed">
  <a href="#" onclick="return toggleDiv(this)">
        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
width="9px" />
        How to update your PATH</a>
  <div class="toggleme">

<p>Adding both <code>tools/</code> and <code>platform-tools/</code> to your PATH lets you run
command line <a href="{@docRoot}guide/developing/tools/index.html">tools</a> without needing to
supply the full path to the tool directories. Depending on your operating system, you can
include these directories in your PATH in the following way:</p>

<ul>

  <li>On Windows, right-click on My Computer, and select Properties.
  Under the Advanced tab, hit the Environment Variables button, and in the
  dialog that comes up, double-click on Path (under System Variables). Add the full path to the
  <code>tools/</code> and <code>platform-tools/</code> directories to the path. </li>

  <li>On Linux, edit your <code>~/.bash_profile</code> or <code>~/.bashrc</code> file. Look
  for a line that sets the PATH environment variable and add the
  full path to the <code>tools/</code> and <code>platform-tools</code> directories to it. If you
  don't see a line setting the path, you can add one:
  <pre>export PATH=${PATH}:&lt;sdk&gt;/tools:&lt;sdk&gt;/platform-tools</pre>
  </li>

  <li>On a Mac OS X, look in your home directory for <code>.bash_profile</code> and
  proceed as for Linux. You can create the <code>.bash_profile</code> if
  you don't already have one. </li>
</ul>

</div><!-- end toggleme -->
</div><!-- end toggleable -->


<h2 id="NextSteps">Next Steps</h2>
<p>Once you have completed installation, you are ready to
begin developing applications. Here are a few ways you can get started: </p>

<p><strong>Set up the Hello World application</strong></p>
<ul>
  <li>If you have just installed the SDK for the first time, go to the <a
  href="{@docRoot}resources/tutorials/hello-world.html">Hello
  World tutorial</a>. The tutorial takes you step-by-step through the process
  of setting up your first Android project, including setting up an Android
  Virtual Device (AVD) on which to run the application.
</li>
</ul>

<p class="note">Following the Hello World tutorial is an essential
first step in getting started with Android development. </p>

<p><strong>Learn about Android</strong></p>
<ul>
  <li>Take a look at the <a href="{@docRoot}guide/index.html">Dev
  Guide</a> and the types of information it provides</li>
  <li>Read an introduction to Android as a platform in <a
  href="{@docRoot}guide/basics/what-is-android.html">What is
  Android?</a></li>
  <li>Learn about the Android framework and how applications run on it in
  <a href="{@docRoot}guide/topics/fundamentals.html">Application
  Fundamentals</a></li>
  <li>Take a look at the Android framework API specification in the <a
  href="{@docRoot}reference/packages.html">Reference</a> tab</li>
</ul>

<p><strong>Explore the development tools</strong></p>
<ul>
  <li>Get an overview of the <a
  href="{@docRoot}guide/developing/tools/index.html">development
  tools</a> that are available to you</li>
  <li>Read the <a
  href="{@docRoot}guide/developing/index.html">Overview</a>
  for how to develop an Android application.
  </li>
  <li>Read <a href="{@docRoot}guide/developing/device.html">Developing on a Device</a> to set up an
Android-powered device to run and test your application.</li>
</ul>

<p><strong>Follow the Notepad tutorial</strong></p>

<ul>
  <li>The <a href="{@docRoot}resources/tutorials/notepad/index.html">
  Notepad Tutorial</a> shows you how to build a full Android application
  and provides  helpful commentary on the Android system and API. The
  Notepad tutorial helps you bring together the important design
  and architectural concepts in a moderately complex application.
  </li>
</ul>
<p class="note">Following the Notepad tutorial is an excellent
second step in getting started with Android development. </p>

<p><strong>Explore some code</strong></p>

<ul>
  <li>The Android SDK includes sample code and applications for each platform
version. You can browse the samples in the <a
href="{@docRoot}resources/index.html">Resources</a> tab or download them
into your SDK using the Android SDK and AVD Manager. Once you've downloaded the
samples, you'll find them in
<code><em>&lt;sdk&gt;</em>/samples/<em>&lt;platform&gt;/</em></code>. </li>
</ul>

<p><strong>Visit the Android developer groups</strong></p>
<ul>
  <li>Take a look at the <a
  href="{@docRoot}resources/community-groups.html">Community</a> pages to see a list of
  Android developers groups. In particular, you might want to look at the
  <a href="http://groups.google.com/group/android-developers">Android
  Developers</a> group to get a sense for what the Android developer
  community is like.</li>
</ul>

<h2 id="troubleshooting">Troubleshooting</h2>

<h3>Ubuntu Linux Notes</h3>

<ul>
  <li>If you need help installing and configuring Java on your
    development machine, you might find these resources helpful:
    <ul>
      <li><a href="https://help.ubuntu.com/community/Java">https://help.ubuntu.com/community/Java </a></li>
      <li><a href="https://help.ubuntu.com/community/Java">https://help.ubuntu.com/community/JavaInstallation</a></li>
    </ul>
  </li>
  <li>Here are the steps to install Java and Eclipse, prior to installing
  the Android SDK and ADT Plugin.
    <ol>
      <li>If you are running a 64-bit distribution on your development
      machine, you need to install the <code>ia32-libs</code> package using
      <code>apt-get:</code>:
      <pre>apt-get install ia32-libs</pre>
      </li>
      <li>Next, install Java: <pre>apt-get install sun-java6-jdk</pre></li>
      <li>The Ubuntu package manager does not currently offer an Eclipse 3.3
      version for download, so we recommend that you download Eclipse from
      eclipse.org (<a
      href="http://www.eclipse.org/downloads/">http://www.eclipse.org/
      downloads/</a>). A Java or RCP version of Eclipse is recommended.</li>
      <li>Follow the steps given in previous sections to install the SDK
      and the ADT plugin. </li>
    </ol>
  </li>
</ul>

<h3>Other Linux Notes</h3>

<ul>
  <li>If JDK is already installed on your development computer, please
  take a moment to make sure that it meets the version requirements listed
  in the <a href="requirements.html">System Requirements</a>.
  In particular, note that some Linux distributions may include JDK 1.4 or Gnu
  Compiler for Java, both of which are not supported for Android development.</li>
</ul>
