page.title=Building and Running from the Command Line
parent.title=Building and Running
parent.link=index.html
@jd:body

 <div id="qv-wrapper">
    <div id="qv">
      <h2>In this document</h2>
      <ol>
        <li><a href="#DebugMode">Building in Debug Mode</a></li>
        <li><a href="#ReleaseMode">Building in Release Mode</a>
          <ol>
            <li><a href="#ManualReleaseMode">Build unsigned</a></li>
            <li><a href="#AutoReleaseMode">Build signed and aligned</a></li>
            <li><a href="#OnceBuilt">Once built and signed in release mode</a></li>
          </ol>
        </li>
        <li><a href="#RunningOnEmulator">Running on the Emulator</a></li>
        <li><a href="#RunningOnDevice">Running on a Device</a></li>
        <li><a href="#Signing">Application Signing</a></li>
        <li><a href="#AntReference">Ant Command Reference</a></li>
      </ol>
  <h2>See also</h2>
  <ol>
    <li><a href="{@docRoot}tools/devices/managing-avds-cmdline.html">Managing AVDs from
the Command Line</a></li>
    <li><a href="{@docRoot}tools/devices/emulator.html">Using the Android
Emulator</a></li>
    <li><a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a></li>
  </ol>
    </div>
  </div>

  <p>There are two ways to build your application using the Ant build script: one for
  testing/debugging your application &mdash; <em>debug mode</em> &mdash; and one for building your
  final package for release &mdash; <em>release mode</em>. Regardless of which way you build your application,
  it must be signed before it can install on an emulator or device&mdash;with a debug key when building
  in debug mode and with your own private key when building in release mode.</p>

  <p>Whether you're building in debug mode or release mode, you need to use the Ant tool to compile
  and build your project. This will create the .apk file that you can install on an emulator or device.
  When you build in debug mode, the .apk file is automatically signed by the SDK tools with
  a debug key, so it's instantly ready for installation onto an emulator or attached
  development device. You cannot distribute an application that is signed with a debug key.
  When you build in release mode, the .apk file is <em>unsigned</em>, so you
  must manually sign it with your own private key, using Keytool and Jarsigner.</p>

  <p>It's important that you read and understand <a href=
  "{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a>, particularly once
  you're ready to release your application and share it with end-users. That document describes the
  procedure for generating a private key and then using it to sign your .apk file. If you're just
  getting started, however, you can quickly run your applications on an emulator or your own
  development device by building in debug mode.</p>

  <p>If you don't have Ant, you can obtain it from the <a href="http://ant.apache.org/">Apache Ant
  home page</a>. Install it and make sure it is in your executable PATH. Before calling Ant, you
  need to declare the JAVA_HOME environment variable to specify the path to where the JDK is
  installed.</p>

  <p class="note"><strong>Note:</strong> When installing JDK on Windows, the default is to install
  in the "Program Files" directory. This location will cause <code>ant</code> to fail, because of
  the space. To fix the problem, you can specify the JAVA_HOME variable like this:
  <pre>set JAVA_HOME=c:\Progra~1\Java\&lt;jdkdir&gt;</pre>

  <p>The easiest solution, however, is to install JDK in a non-space directory, for example:</p>

  <pre>c:\java\jdk1.7</pre>

  <h2 id="DebugMode">Building in Debug Mode</h2>

  <p>For immediate application testing and debugging, you can build your application in debug mode
  and immediately install it on an emulator. In debug mode, the build tools automatically sign your
  application with a debug key and optimize the package with {@code zipalign}.</p>

  <p>To build in debug mode:</p>

  <ol>
    <li>Open a command-line and navigate to the root of your project directory.</li>
    <li>Use Ant to compile your project in debug mode:
      <pre>
ant debug
</pre>

      <p>This creates your debug <code>.apk</code> file inside the project <code>bin/</code> directory, named
      <code>&lt;your_project_name&gt;-debug.apk</code>. The file is already signed with
      the debug key and has been aligned with
      <a href="{@docRoot}tools/help/zipalign.html"><code>zipalign</code></a>.
      </p>
    </li>
  </ol>

  <p>Each time you change a source file or resource, you must run Ant again in order to package up
  the latest version of the application.</p>

  <p>To install and run your application on an emulator, see the following section about <a href=
  "#RunningOnEmulator">Running on the Emulator</a>.</p>

  <h2 id="ReleaseMode">Building in Release Mode</h2>

  <p>When you're ready to release and distribute your application to end-users, you must build your
  application in release mode. Once you have built in release mode, it's a good idea to perform
  additional testing and debugging with the final .apk.</p>

  <p>Before you start building your application in release mode, be aware that you must sign the
  resulting application package with your private key, and should then align it using the {@code
  zipalign} tool. There are two approaches to building in release mode: build an unsigned package
  in release mode and then manually sign and align the package, or allow the build script to sign
  and align the package for you.</p>

  <h3 id="ManualReleaseMode">Build unsigned</h3>

  <p>If you build your application <em>unsigned</em>, then you will need to manually sign and align
  the package.</p>

  <p>To build an <em>unsigned</em> .apk in release mode:</p>

  <ol>
    <li>Open a command-line and navigate to the root of your project directory.</li>

    <li>Use Ant to compile your project in release mode:
      <pre>
ant release
</pre>
    </li>
  </ol>

  <p>This creates your Android application .apk file inside the project <code>bin/</code>
  directory, named <code><em>&lt;your_project_name&gt;</em>-unsigned.apk</code>.</p>

  <p class="note"><strong>Note:</strong> The .apk file is <em>unsigned</em> at this point and can't
  be installed until signed with your private key.</p>

  <p>Once you have created the unsigned .apk, your next step is to sign the .apk with your private
  key and then align it with {@code zipalign}. To complete this procedure, read <a href=
  "{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a>.</p>

  <p>When your <code>.apk</code> has been signed and aligned, it's ready to be distributed to end-users.
  You should test the final build on different devices or AVDs to ensure that it
  runs properly on different platforms.</p>

  <h3 id="AutoReleaseMode">Build signed and aligned</h3>

  <p>If you would like, you can configure the Android build script to automatically sign and align
  your application package. To do so, you must provide the path to your keystore and the name of
  your key alias in your project's {@code ant.properties} file. With this information provided,
  the build script will prompt you for your keystore and alias password when you build in release
  mode and produce your final application package, which will be ready for distribution.</p>

  <p class="caution"><strong>Caution:</strong> Due to the way Ant handles input, the password that
  you enter during the build process <strong>will be visible</strong>. If you are concerned about
  your keystore and alias password being visible on screen, then you may prefer to perform the
  application signing manually, via Jarsigner (or a similar tool). To instead perform the signing
  procedure manually, <a href="#ManualReleaseMode">build unsigned</a> and then continue with
  <a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a>.</p>

  <p>To specify your keystore and alias, open the project {@code ant.properties} file (found in
  the root of the project directory) and add entries for {@code key.store} and {@code key.alias}.
  For example:</p>
  <pre>
key.store=path/to/my.keystore
key.alias=mykeystore
</pre>

  <p>Save your changes. Now you can build a <em>signed</em> .apk in release mode:</p>

  <ol>
    <li>Open a command-line and navigate to the root of your project directory.</li>

    <li>Use Ant to compile your project in release mode:
      <pre>
ant release
</pre>
    </li>

    <li>When prompted, enter you keystore and alias passwords.

      <p class="caution"><strong>Caution:</strong> As described above, your password will be
      visible on the screen.</p>
    </li>
  </ol>

  <p>This creates your Android application .apk file inside the project <code>bin/</code>
  directory, named <code><em>&lt;your_project_name&gt;</em>-release.apk</code>. This .apk file has
  been signed with the private key specified in {@code ant.properties} and aligned with {@code
  zipalign}. It's ready for installation and distribution.</p>

  <h3 id="OnceBuilt">Once built and signed in release mode</h3>

  <p>Once you have signed your application with a private key, you can install and run it on an
  <a href="#RunningOnEmulator">emulator</a> or <a href="#RunningOnDevice">device</a>. You can
  also try installing it onto a device from a web server. Simply upload the signed .apk to a web
  site, then load the .apk URL in your Android web browser to download the application and begin
  installation. (On your device, be sure you have enabled
  <em>Settings &gt; Applications &gt; Unknown sources</em>.)</p>

  <h2 id="RunningOnEmulator">Running on the Emulator</h2>

  <p>Before you can run your application on the Android Emulator, you must <a href=
  "{@docRoot}tools/devices/managing-avds.html">create an AVD</a>.</p>

  <p>To run your application:</p>

  <ol>
    <li>
      <strong>Open the AVD Manager and launch a virtual device</strong>

      <p>From your SDK's <code>platform-tools/</code> directory, execute the {@code android} tool
with the <code>avd</code> options:</p>
      <pre>
android avd
</pre>

      <p>In the <em>Virtual Devices</em> view, select an AVD and click <strong>Start</strong>.</p>
    </li>

    <li>
      <strong>Install your application</strong>

      <p>From your SDK's <code>tools/</code> directory, install the {@code .apk} on the
      emulator:</p>
      <pre>
adb install <em>&lt;path_to_your_bin&gt;</em>.apk
</pre>

      <p>Your .apk file (signed with either a release or debug key) is in your project {@code bin/}
      directory after you build your application.</p>

      <p>If there is more than one emulator running, you must specify the emulator upon which to
      install the application, by its serial number, with the <code>-s</code> option. For
      example:</p>
      <pre>
adb -s emulator-5554 install <em>path/to/your/app</em>.apk
</pre>

      <p>To see a list of available device serial numbers, execute {@code adb devices}.</p>
    </li>
  </ol>

  <p>If you don't see your application on the emulator, try closing the emulator and launching the
  virtual device again from the AVD Manager. Sometimes when you install an application for the
  first time, it won't show up in the application launcher or be accessible by other applications.
  This is because the package manager usually examines manifests completely only on emulator
  startup.</p>

  <p>Be certain to create multiple AVDs upon which to test your application. You should have one
  AVD for each platform and screen type with which your application is compatible. For instance, if
  your application compiles against the Android 4.0 (API Level 14) platform, you should create an
  AVD for each platform equal to and greater than 4.0 and an AVD for each <a href=
  "{@docRoot}guide/practices/screens_support.html">screen type</a> you support, then test your
  application on each one.</p>

  <p class="note"><strong>Tip:</strong> If you have <em>only one</em> emulator running, you can
  build your application and install it on the emulator in one simple step. Navigate to the root of
  your project directory and use Ant to compile the project with <em>install mode</em>: <code>ant
  install</code>. This will build your application, sign it with the debug key, and install it on
  the currently running emulator.</p>

  <h2 id="RunningOnDevice">Running on a Device</h2>

  <p>Before you can run your application on a device, you must perform some basic setup for your
  device:</p>

  <ul>
    <li>Enable <strong>USB debugging</strong> on your device.
      <ul>
        <li>On most devices running Android 3.2 or older, you can find the option under
          <strong>Settings > Applications > Development</strong>.</li>
        <li>On Android 4.0 and newer, it's in <strong>Settings > Developer options</strong>.
          <p class="note"><strong>Note:</strong> On Android 4.2 and newer, <strong>Developer
          options</strong> is hidden by default. To make it available, go
          to <strong>Settings > About phone</strong> and tap <strong>Build number</strong>
          seven times. Return to the previous screen to find <strong>Developer options</strong>.</p>
        </li>
      </ul>
    </li>

    <li>Ensure that your development computer can detect your device when connected via USB</li>
  </ul>

  <p>Read <a href="{@docRoot}tools/device.html#setting-up">Setting up a Device for
  Development</a> for more information.</p>

  <p>Once your device is set up and connected via USB, navigate to your SDK's <code>platform-tools/</code>
  directory and install the <code>.apk</code> on the device:</p>
  <pre>
adb -d install <em>path/to/your/app</em>.apk
</pre>

  <p>The {@code -d} flag specifies that you want to use the attached device (in case you also have
  an emulator running).</p>

  <p>For more information on the tools used above, please see the following documents:</p>

  <ul>
    <li><a href="{@docRoot}tools/help/android.html">android Tool</a></li>

    <li><a href="{@docRoot}tools/devices/emulator.html">Android Emulator</a></li>

    <li><a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a> (ADB)</li>
  </ul>

  <h2 id="Signing">Application Signing</h2>

  <p>As you begin developing Android applications, understand that all Android applications must be
  digitally signed before the system will install them on an emulator or device. There are two ways
  to do this: with a <em>debug key</em> (for immediate testing on an emulator or development
  device) or with a <em>private key</em> (for application distribution).</p>

  <p>The Android build tools help you get started by automatically signing your .apk files with a
  debug key at build time. This means that you can compile your application and install it on the
  emulator without having to generate your own private key. However, please note that if you intend
  to publish your application, you <strong>must</strong> sign the application with your own private
  key, rather than the debug key generated by the SDK tools.</p>

  <p>The ADT plugin helps you get started quickly by signing your .apk files with a debug key,
  prior to installing them on an emulator or development device. This means that you can quickly
  run your application from Eclipse without having to generate your own private key. No specific
  action on your part is needed, provided ADT has access to Keytool. However, please note that if
  you intend to publish your application, you <strong>must</strong> sign the application with your
  own private key, rather than the debug key generated by the SDK tools.</p>

  <p>Please read <a href="{@docRoot}tools/publishing/app-signing.html">Signing Your
  Applications</a>, which provides a thorough guide to application signing on Android and what it
  means to you as an Android application developer. The document also includes a guide to exporting
  and signing your application with the ADT's Export Wizard.</p>

  <h2 id="AntReference">Ant Command Reference</h2>
  <dt><code>ant clean</code></dt>
  <dd>Cleans the project. If you include the <code>all</code> target before <code>clean</code>
(<code>ant all clean</code>), other projects are also cleaned. For instance if you clean a
test project, the tested project is also cleaned.</dd>

  <dt><code>ant debug</code></dt>
  <dd>Builds a debug package. Works on application, library, and test projects and compiles
  dependencies as  needed.</dd>

  <dt id="emma"><code>ant emma debug</code></dt>
  <dd>Builds a test project while building the tested project with instrumentation turned on.
  This is used to run tests with code coverage enabled.</dd>

  <dt><code>ant release</code></dt>
  <dd>Builds a release package.</dd>

  <dt><code>ant instrument</code>
  </dt>
  <dd>Builds an instrumented debug package. This is generally called automatically when building a
  test project with code coverage enabled (with the <code>emma</code>
  target)</dd>

  <dt><code>ant &lt;build_target&gt; install</code></dt>
  <dd>Builds and installs a package. Using <code>install</code> by itself fails.</dd>

  <dt><code>ant installd</code></dt>
  <dd>Installs an already compiled debug package. This fails if the <code>.apk</code> is not
  already built.</dd>

  <dt><code>ant installr</code></dt>
  <dd>Installs an already compiled release package. This fails if the <code>.apk</code> is not
  already built.</dd>

  <dt><code>ant installt</code></dt>
  <dd>Installs an already compiled test package. Also installs the <code>.apk</code> of the
  tested application. This fails if the <code>.apk</code> is not already built.</dd>

  <dt><code>ant installi</code></dt>
  <dd>Installs an already compiled instrumented package. This is generally not used manually as
  it's called when installing a test package. This fails if the <code>.apk</code> is not already
  built.</dd>

   <dt><code>ant test</code></dt>
   <dd>Runs the tests (for test projects). The tested and test <code>.apk</code> files must be
   previously installed.</dd>

  <dt><code>ant debug installt test</code></dt>
  <dd>Builds a test project and the tested project, installs both <code>.apk</code> files, and
  runs the tests.</dd>

  <dt><code>ant emma debug install test</code></dt>
  <dd>Builds a test project and the tested project, installs both <code>.apk</code> files, and
  runs the tests with code coverage enabled.</dd>

