page.title=Android Studio Release Notes

@jd:body


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

  <h2>See also</h2>
  <ol>
    <li><a href="{@docRoot}sdk/installing/index.html">Installing Android Studio</a></li>
  </ol>

</div>
</div>


<p>Android Studio is the official IDE for Android development, and with a single download includes
everything you need to begin developing Android apps:</p>

<ul>
  <li>IntelliJ IDE + Android Studio plugin
  </li>

  <li>Android SDK Tools
  </li>

  <li>Android Platform-tools
  </li>

  <li>A version of the Android platform
  </li>

  <li>Android Emulator with an Android system image including Google Play
  Services
  </li>
</ul>

<p>For an introduction to Android Studio, read the
<a href="{@docRoot}tools/studio/index.html">Android Studio</a> guide.</p>

<p>Periodic updates are pushed to Android Studio without requiring you to update your Android
project. To manually check for updates, select <strong>Help > Check for update</strong> (on Mac,
select <strong>Android Studio > Check for updates</strong>).</p>


<h2 id="Revisions">Revisions</h2>

<p>The sections below provide notes about successive releases of
Android Studio, as denoted by revision number. </p>

<div class="toggle-content open">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_up.png" class="toggle-content-img"
      alt=""/>Android Studio v2.0.0</a> <em>(April 2016)</em>
  </p>

  <div class="toggle-content-toggleme">

    <p class="note">
      <strong>Note:</strong> If you are developing for the N Developer Preview, you
      should use Android Studio 2.1 Preview. Android Studio 2.0 does not support
      all the features required to target the N Preview. To learn more, read about
      how to properly <a href="{@docRoot}preview/setup-sdk.html">set up your
      developer environment</a> for the N Preview.
    </p>

    <p>
      <strong>Instant Run</strong>:
    </p>

    <ul>
      <li>Android Studio now deploys clean builds faster than ever before.
      Additionally, pushing incremental code changes to the emulator or a physical
      device is now almost instantaneous. Review your updates without redeploying a
      new debug build or, in many cases, without restarting the app.
      </li>

      <li>Instant Run supports pushing the following changes to a running app:
        <ul>
          <li>Changes to the implementation of an existing instance method or
          static method
          </li>

          <li>Changes to an existing app resource
          </li>

          <li>Changes to structural code, such as a method signature or a static
          field (requires a target device running API level 21 or higher).
          </li>
        </ul>
      </li>

      <li>Read the documentation to learn more <a href=
      "{@docRoot}tools/building/building-studio.html#instant-run">about Instant
      Run</a>.
        <p class="note">
          <strong>Note:</strong> Instant Run is supported only when you deploy the
          debug build variant, use <a href=
          "{@docRoot}tools/revisions/gradle-plugin.html#revisions">Android Plugin for
          Gradle version 2.0.0</a> or higher, and configure your app's module-level
          <code>build.gradle</code> file for <code>minSdkVersion 15</code> or higher.
          For the best performance, configure your app for <code>minSdkVersion
          21</code> or higher.
        </p>
      </li>
    </ul>

<p><strong>New additions to Lint:</strong></p>
  <ul>
    <li>Inspection of {@code switch} statements using {@link
    android.support.annotation.IntDef @IntDef} annotated integers to make sure
    all constants are handled. To quickly add any missing statements, use the the
    intention action drop-down menu and select <b>Add Missing @IntDef
    Constants</b>.
    </li>

    <li>Flags for incorrect attempts to use string interpolation to insert
    version numbers in the {@code build.gradle} file.
    </li>

    <li>Flags for anonymous classes that extend the {@link android.app.Fragment
    Fragment} class.
    </li>

    <li>Flags for native code in unsafe locations, such as the {@code res/} and {@code
    asset/} folders. This flag encourages storing native code in the {@code libs/}
    folder, which is then securely packaged into the application’s {@code
    data/app-lib/} folder at install time. <a class="external-link" href=
    "https://android-review.googlesource.com/#/c/169950/">AOSP: #169950</a>
    </li>

    <li>Flags for unsafe calls to {@link java.lang.Runtime#load(java.lang.String)
    Runtime.load()} and {@link java.lang.System#load(java.lang.String)
    System.load()} calls. <a class="external-link" href=
    "https://android-review.googlesource.com/#/c/179980/">AOSP: #179980</a>
    </li>

    <li>Find and remove any unused resources by selecting <b>Refactor &gt; Remove
    Unused Resources</b> from the menu bar. Unused resource detection now
    supports resources only referenced by unused resources, references in raw
    files such as {@code .html} image references, and {@code tools:keep} and
    {@code tools:discard} attributes used by the Gradle resource shrinker, while
    considering inactive source sets (such as resources used in other build
    flavors) and properly handling static field imports.
    </li>

    <li>Checks that implicit API references are supported on all platforms
    targeted by {@code minSdkVersion}.
    </li>

    <li>Flags improper usage of {@link android.support.v7.widget.RecyclerView}
    and {@link android.os.Parcelable}.
    </li>

    <li>{@link android.support.annotation.IntDef @IntDef}, {@link
    android.support.annotation.IntRange @IntRange}, and {@link
    android.support.annotation.Size @Size} inspections are now also checked for
    {@code int} arrays and varargs.
    </li>
  </ul>

<p><strong>Additional Improvements</strong>:</p>
    <ul>
      <li>Optimized for Android Emulator 2.0, which is faster than ever before,
      supports a wider range of virtual devices, and features a drastically
      improved UI. To learn more about the new emulator, read the <a href=
      "{@docRoot}tools/sdk/tools-notes.html#notes">SDK Tools release notes</a>.
      </li>

      <li>Improvements to the <a href=
      "{@docRoot}tools/devices/managing-avds.html">Android Virtual Device
      Manager</a>:
        <ul>
          <li>System images are now categorized under the following tabs:
          <em>Recommended</em>, <em>x86</em>, and <em>Other</em>.
          </li>

          <li>Under advanced settings, you can enable multi-core support and
          specify the number of cores the emulator can use.
          </li>

          <li>Under advanced settings, you can determine how graphics are rendered
          on the emulator by selecting one of the following options:
            <ul>
              <li>
                <strong>Hardware:</strong> use you computer's graphics card for
                faster rendering.
              </li>

              <li>
                <strong>Software:</strong> use software-based rendering.
              </li>

              <li>
                <strong>Auto:</strong> let the emulator decide the best option. This
                is the default setting.
              </li>
            </ul>
          </li>
        </ul>
      </li>

      <li>Improved AAPT packaging times by specifying deploy target before the app
      is built. This allows Android Studio to efficiently package only the
      resources required by the specified device.
      </li>

      <li>Added Cloud Test Lab integration to provide on-demand app testing with
      the convenience and scalability of a cloud service. Learn more about how you
      can <a href="{@docRoot}training/testing/start/index.html#run-ctl">use Cloud
      Test Lab with Android Studio</a>.
      </li>

      <li>Added a preview of the new <a class="external-link" href=
      "//tools.android.com/tech-docs/gpu-profiler">GPU Debugger</a>. For graphics
      intensive applications, you can now visually step through your OpenGL ES code
      to optimize your app or game.
      </li>

      <li>Added support for Google App Indexing integration and testing. Add deep
      links, app indexing, and search functionality to your apps to help drive more
      traffic to your app, discover which app content is used most, and attract new
      users. Test and validate your URL links in your app all within Android
      Studio. Learn more about implementing and testing <a href=
      "{@docRoot}tools/help/app-link-indexing.html">Deep Link and App Indexing
      APIs</a>.
      </li>

      <li>Upgrades from the latest IntelliJ 15 release, including improved code
      analysis and performance. See <a class="external-link" href=
      "https://www.jetbrains.com/idea/whatsnew">What's New in IntelliJ</a> for a
      complete description of the new features and enhancements.
      </li>

      <li>XML editor auto-complete now adds quotations marks when completing
      attributes. To check if this option is enabled, open the <b>Setting</b> or
      <b>Preferences</b> dialogue, navigate to <b>Editor &gt; General &gt; Smart
      Keys</b>, and check the box next to <b>Add quotes for attribute value on
      attribute completion</b>. <a class="external-link" href=
      "//b.android.com/195113">Issue: 195113</a>
      </li>

      <li>The XML editor now supports code completion for <a href=
      "{@docRoot}tools/data-binding/guide.html#layout_details">data binding</a>
      expressions.
      </li>
    </ul>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v1.5.1</a> <em>(December 2015)</em>
  </p>
  <div class="toggle-content-toggleme">
    <p>Fixes and enhancements:</p>
    <ul>
    <li>Fixed a rendering failure issue in the Layout Editor.
      <a href="http://b.android.com/194612">Issue: 194612</a> </li>
    <li>Added the ability to vary <code>description</code> manifest attributes by configuration.
      <a href="http://b.android.com/194705">Issue: 194705</a>
    </li>
     <li>Improved the contrast of the Android Studio Darcula appearance theme in Vector Asset Studio.
      <a href="http://b.android.com/191819">Issue: 191819</a>
    </li>
    <li>Added <em>Help</em> button support to Vector Asset Studio.
    </li>
    <li>Added support for the <code>%</code> operator for data binding. <a href="http://b.android.com/194045">Issue: 194045</a>
      </li>
    <li>Fixed a case where launching an app for debugging resulted in the debugger connecting to the
      wrong device. <a href="http://b.android.com/195167">Issue: 195167</a>
    </li>
    <li>Fixed a null pointer exception that could occur when attempting to run an app in
      certain scenarios.
    </li>
  </ul>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v1.5.0</a> <em>(November 2015)</em>
  </p>
  <div class="toggle-content-toggleme">
    <p>Fixes and enhancements:</p>
    <ul>
    <li>Added new Memory Monitor analysis abilities to Android Monitor. When you view an HPROF file
      captured from this monitor, the display is now more helpful so you can more quickly locate
      problems, such as memory leaks. To use this monitor, click <strong>Android Monitor</strong> at
      the bottom of the main window. In Android Monitor, click the <strong>Memory</strong> tab. While
      the monitor is running, click the <strong>Dump Java Heap</strong> icon, and then click
      <strong>Captures</strong> in the main window and double-click the file to view it. Click
      <em>Capture Analysis</em> on the right. (The
      Android Device Monitor can't be running at the same time as Android Monitor.)</li>
    <li>Added new deep link and app link support. The Code Editor can automatically create an
      intent filter for deep linking in the <code>AndroidManifest.xml</code> file. It can also
      generate code to help you integrate with the
      <a href="http://developers.google.com/app-indexing/android/publish" class="external-link">App Indexing API</a>
      in an activity in a Java file. A deep link testing feature
      helps you verify that a specified deep link can launch an app. In the <strong>General</strong>
      tab of the <em>Run/Debug Configurations</em> dialog, you can specify deep link launch
      options. You can also test App Indexing API calls in an activity by using the Android Monitor
      <strong>logcat</strong> display. The Android <code>lint</code> tool now has warnings for
      certain issues involving deep links and the App Indexing API.
    </li>
     <li>Added the ability to use short names when code-completing custom views in the Code Editor.
    </li>
    <li>Added support for more {@link android.graphics.drawable.VectorDrawable} elements to
      <a href="{@docRoot}tools/help/vector-asset-studio.html">Vector Asset Studio</a>
      for backward-compatibility. Vector Asset Studio can use these elements to convert vector
      drawables into PNG raster images to use with Android 4.4 (API level 20) and lower.
    </li>
    <li>Added new <code>lint</code> checks for Android TV and Android Auto to give you
      immediate, actionable feedback in Android Studio, along with several quick fixes. For example,
      for Android TV, it can report and provide a quick fix for permissions, unsupported hardware,
      <code>uses-feature</code> element, and missing banner issues. For Android Auto, it can
      validate the correct usage in the descriptor file referred from your
      <code>AndroidManifest.xml</code> file, report if there isn't an intent filter for the
      <code>MediaBrowserService</code> class, and identify certain voice actions issues.
      </li>
    <li>Added new <code>lint</code> checks for insecure broadcast receivers,
    <code>SSLCertificateSocketFactory</code> and <code>HostnameVerifier</code> class uses, and
    <code>File.setReadable()</code> and <code>File.setWritable()</code> calls. It also detects
    invalid manifest resource lookups, especially for resources that vary by configuration.
    </li>
    <li>Fixed a number of stability issues.
    </li>
  </ul>
  </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v1.4.1</a> <em>(October 2015)</em>
  </p>
  <div class="toggle-content-toggleme">
    <p>Fixes and enhancements:</p>
  <ul>
    <li>Fixed a Gradle model caching issue that could lead to excessive Gradle syncing when the IDE
    was restarted.
    </li>
    <li>Fixed a native debugging deadlock issue.
    </li>
    <li>Fixed an issue blocking users of the Subversion 1.9 version control system.
    </li>
    <li>Fixed a <em>Device Chooser</em> dialog problem where after connecting a device that was
    unauthorized you could no longer select the emulator. <a href="http://b.android.com/189658">Issue: 189658</a>
    </li>
    <li>Fixed incorrect translation error reporting for locales that have a region qualifier and a
    translation in the region (but not in the base locale). <a href="http://b.android.com/188577">Issue: 188577</a>
    </li>
    <li>Fixed a deadlock issue in the Theme Editor related to its interaction with the Layout
    Editor. <a href="http://b.android.com/188070">Issue: 188070</a>
    </li>
    <li>Fixed a Theme Editor reload and edit conflict causing attributes to not properly update.
    <a href="http://b.android.com/187726">Issue: 187726</a>
    </li>
    <li>Improved Theme Editor performance.
    </li>
    <li>Fixed an issue where the <code>android:required</code> attribute was ignored in the manifest.
    <a href="http://b.android.com/187665">Issue: 187665</a>
    </li>
  </ul>
</div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v1.4.0</a> <em>(September 2015)</em>
  </p>
  <div class="toggle-content-toggleme">
    <p>Fixes and enhancements:</p>
  <ul>
    <li>Added the <a href="{@docRoot}tools/help/vector-asset-studio.html">Vector Asset Studio</a>
      tool for importing vector graphics, such as material icons
      and SVG files. To use this tool, in the Android view of the Project window, right-click the
      <strong>res</strong> folder and select <strong>New</strong> &gt; <strong>Vector Asset</strong>.
    </li>
    <li>Added new Android Monitor functions, GPU and Network. To use these monitors, click
      <strong>Android Monitor</strong> at the bottom of the main window. The Android Device Monitor
      can't be running at the same time as Android Monitor.
    </li>
    <li>Added an early preview of the new Theme Editor. To use this feature, select
      <strong>Tools</strong> &gt; <strong>Android</strong> &gt; <strong>Theme Editor</strong>.
    </li>
    <li>Updated the Android templates for the Design Support Library. Templates now include support
      for the Material Design specification, as well as the <code>appcompat</code> Support Library
      for backwards compatibility.
    </li>
  </ul>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v1.3.2</a> <em>(August 2015)</em>
  </p>
  <div class="toggle-content-toggleme">
    <p>Fixes and enhancements:</p>
    <ul>
      <li>Added support for Android 6.0 (API level 23), including new icons and AVD Manager
        support for creating devices with new screen densities.</li>
      <li>Fixed an exception that was occuring during update checks.
        <a href="http://b.android.com/183068">Issue: 183068</a></li>
      <li>Fixed problem where unresolved view coordinates could cause the layout editor to crash.
        <a href="http://b.android.com/178690">Issue: 178690</a></li>
      <li>Fixed issue with invalid resource type warnings.
        <a href="http://b.android.com/182433">Issue: 182433</a></li>
      <li>Fixed lint check that was incorrectly flagging resources as private.
        <a href="http://b.android.com/183120">Issue: 183120</a></li>
    </ul>
  </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v1.3.1</a> <em>(August 2015)</em>
  </p>
  <div class="toggle-content-toggleme">
    <p>Fixes and enhancements:</p>
    <ul>
      <li>Fixed support for creating an Android Wear Android Virtual Device (AVD) on Windows. </li>
      <li>Updated the <em>Project Wizard</em> to use the entered project name.  </li>
      <li>Added support to allow the Android SDK to be stored in a read-only directory.  </li>
      <li>Updated Android Plugin for Gradle version to 1.3.0. </li>
      <li>Fixed issues with launching a debug session from the Android Debug Bridge (adb) Unix
        shell.  </li>
      <li>Fixed the Java package renaming message to show the correct package name. </li>
    </ul>
  </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v1.3.0</a> <em>(July 2015)</em>
  </p>
  <div class="toggle-content-toggleme">
    <p>Fixes and enhancements:</p>
    <ul>
      <li>Added options to enable
        <a href="{@docRoot}tools/studio/studio-features.html#dev-services">developer services</a>,
        such as <a href="https://developers.google.com/admob/">AdMob</a> and
        <a href="{@docRoot}distribute/analyze/start.html">Analytics</a>, in your app from within
        Android Studio. </li>
      <li>Added additional <a href="{@docRoot}tools/debugging/annotations.html">annotations</a>,
        such as <code>@RequiresPermission</code>, <code>@CheckResults</code>, and
        <code>@MainThread</code>. </li>
      <li>Added the capability to generate Java heap dumps and analyze thread allocations from the
        <a href="{@docRoot}tools/studio/index.html#mem-cpu">Memory Monitor</a>. You can also
        convert Android-specific HPROF binary format files to standard HPROF format from within
        Android Studio. </li>
      <li>Integrated the <a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a>
        into Android Studio to simplify package and tools access and provide update notifications.
        <p class="note"><strong>Note:</strong> The standalone SDK Manager is still available from
        the command line, but is recommended for use only with standalone SDK
        installations. </p> </li>
      <li>Added the <code>finger</code> command in the emulator console to simulate
        <a href="{@docRoot}tools/studio/studio-features.html#finger-print">fingerprint</a>
        authentication.  </li>
      <li>Added a <code>&lt;public&gt;</code> resource declaration to designate library
         resources as
         <a href="{@docRoot}tools/studio/studio-features.html#private-res">public and private</a>
         resources.
         <p class="note"><strong>Note:</strong> Requires
         <a href="{@docRoot}tools/building/plugin-for-gradle.html">Android Plugin for Gradle</a>
         version 1.3 or higher. </p> </li>
      <li>Added <a href="{@docRoot}tools/data-binding/guide.html">data binding</a> support to
        create declarative layouts that bind your application logic to layout elements. </li>
      <li>Added support for a separate
        <a href="{@docRoot}tools/studio/studio-features.html#test-module">test APK module</a>
        to build test APKs in Android Studio.  </li>
      <li>Updated the <a href="{@docRoot}tools/help/avd-manager.html">AVD Manager</a> with HAXM
        optimizations and improved notifications. </li>
      <li>Added 64-bit ARM and MIPS emulator support for
        <a class="external-link" href="http://wiki.qemu.org/Main_Page">QEMU</a> 2.1. </li>
      <li>Simplified the resolution of <a href="{@docRoot}tools/help/lint.html">lint</a> warnings
        by adding quick fixes, such as the automatic generation of
        <a href="{@docRoot}reference/android/os/Parcelable.html">Parcelable</a>
        implementation.</li>
      <li>Added <a href="{@docRoot}sdk/installing/studio-tips.html#live-templates">live template</a>
        support for quick insertion of code snippets. </li>
    </ul>
  </div>
</div>




<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v1.2.2</a> <em>(June 2015)</em>
  </p>
  <div class="toggle-content-toggleme">
    <p>Fixes and enhancements:</p>
    <ul>
      <li>Fixed build issues that were blocking builds from completing. </li>
    </ul>
  </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v1.2.1</a> <em>(May 2015)</em>
  </p>
  <div class="toggle-content-toggleme">
    <p>Fixes and enhancements:</p>
    <ul>
      <li>Fixed minor performance and feature issues. </li>
    </ul>
  </div>
</div>



<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v1.2.0</a> <em>(April 2015)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>Fixes and enhancements:</p>
    <ul>
      <li>Updated the Android runtime window to include the
        <a href="{@docRoot}tools/studio/index.html#mem-cpu">Memory Monitor</a> tool
        and added a tab for CPU performance monitoring.</li>
      <li>Added a <em>Captures</em> tab in the left margin to display the captured memory and CPU
        performance data files, such as CPU method tracking and memory heap snapshots.</li>
      <li>Expanded <a href="{@docRoot}tools/debugging/annotations.html">annotation</a>
          support with additional metadata annotations and inferred nullability. </li>
      <li>Enhanced the Translations Editor with additional support for Best Current Practice
          (BCP) 47, which uses 3-letter language and region codes.</li>
      <li>Integrated IntelliJ 14 and 14.1 features for improved code analysis and performance:</li>
         <ul>
          <li>Enhanced debugging to show inline values for variables and referring objects,
            as well as perform inline evaluation of lambda and operator expressions. </li>
          <li>Added code style detection for tab and indent sizes. </li>
          <li>Added scratch files for code experiments and prototyping without project files.</li>
          <li>Added the simultaneous insertion of opening and closing tags in HTML and XML files.</li>
          <li>Added a built-in Java class decompiler so you can look at what’s inside a library
            for which the source code is not available. </li>
         </ul>
         <p>See
         <a class="external-link" href="https://www.jetbrains.com/idea/whatsnew">What's New in IntelliJ</a>
         for a complete description of the new features and enhancements.</p>
       </li>
      <li>Added additional <a href="{@docRoot}tools/studio/index.html#project-view">Project Views</a>
        for <em>Scratches</em>, <em>Project Files</em>, <em>Problems</em>, <em>Production</em>,
        and <em>Tests</em> to enhance project management and access. </li>
      <li>Enhanced the <strong>File &gt; Settings</strong> menu and dialogs for improved settings
          access and management. </li>
      <li>Added support for high-density displays for Windows and Linux. </li>
      <li>Added support for 280 dpi resources in the <code>res/drawable-280dpi/</code> folder.
     </ul>
    </ul>
  </div>
</div>




<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v1.1.0</a> <em>(February 2015)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>Various fixes and enhancements:</p>
    <ul>
      <li>Added support for the <a href="{@docRoot}design/wear/index.html">Android Wear</a> watch
      template. </li>
      <li>Modified new project and module creation to include
      <a href="{@docRoot}tools/projects/index.html#mipmap"><code>res/mipmap</code></a> folders for
      density-specific launcher icons. These <code>res/mipmap</code> folders replace the
      <a href="{@docRoot}guide/topics/resources/drawable-resource.html"><code>res/drawable</code></a>
      folders for launcher icons.  </li>
      <li>Updated launcher icons to have a
      <a href="{@docRoot}design/material/index.html">Material Design</a> look and added an
      <code>xxxhdpi</code> launcher icon. </li>
      <li>Added and enhanced <a href="{@docRoot}tools/help/lint.html"><code>lint</code></a> checks
      for region and language combinations, launcher icons, resource names, and other common
      code problems.</li>
      <li>Added support for Best Current Practice (BCP) language tag 47.  </li>
    </ul>
  </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v1.0.1</a> <em>(December 2014)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>Various fixes and enhancements:</p>
    <ul>
      <li>Fixed AVD Manager and <strong>device.xml</strong> file lock issue. </li>
      <li>Fixed the emulator log on Windows systems. </li>
      <li>Fixed issue with creating AVDs with Android Studio and Android SDK installed on different
      drives on Windows systems.</li>
      <li>Sets the default update channel for new downloads to <strong>Stable</strong>. If you
      installed the 1.0.0 version of Android Studio and would like stable, production-ready version
      updates, use <strong>File > Settings > Updates</strong> to change to the <strong>Stable</strong>
      update channel.
      </li>
    </ul>
  </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v1.0</a> <em>(December 2014)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>Initial release of Android Studio.</p>
  </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v0.8.14</a> <em>(October 2014)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>See
    <a href="http://tools.android.com/recent/androidstudio0814inbetachannel">tools.android.com</a>
    for a full list of changes.</p>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v0.8.6</a> <em>(August 2014)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>See <a href="http://tools.android.com/recent">tools.android.com</a> for a full list of changes.</p>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v0.8.0</a> <em>(June 2014)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p>Added support for Android Wear projects.</p>
    <p>See <a href="http://tools.android.com/recent">tools.android.com</a> for a full list of changes.</p>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v0.5.2</a> <em>(May 2014)</em>
  </p>

  <div class="toggle-content-toggleme">
  <ul>
    <li>See <a href="http://tools.android.com/recent">tools.android.com</a> for a full list of changes.</li>
  </ul>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v0.4.6</a> <em>(March 2014)</em>
  </p>

  <div class="toggle-content-toggleme">
  <ul>
    <li>See <a href="http://tools.android.com/recent">tools.android.com</a> for a full list of changes.</li>
  </ul>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v0.4.2</a> <em>(Jan 2014)</em>
  </p>

  <div class="toggle-content-toggleme">
  <ul>
    <li>See <a href="http://tools.android.com/recent">tools.android.com</a> for a full list of changes.</li>
  </ul>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v0.3.2</a> <em>(Oct 2013)</em>
  </p>

  <div class="toggle-content-toggleme">
  <ul>
    <li>See <a href="http://tools.android.com/recent">tools.android.com</a> for a full list of changes.</li>
  </ul>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v0.2.x</a> <em>(July 2013)</em>
  </p>

  <div class="toggle-content-toggleme">
  <ul>
    <li>Merged in the latest IntelliJ codebase changes. Includes fixes for issues reported by Studio users such as tweaks to Linux font sizes and font rendering.</li>
    <li>Android Gradle plug-in updated to 0.5.0.
      <p class="caution"><strong>Caution:</strong> This new version is not backwards compatible.
      When opening a project that uses an older version of the plug-in, Studio will show an error
      stating <strong>Gradle &lt;project_name&gt; project refresh failed.</strong></p>
      <p>The updated Gradle plug-in includes the following changes:</p>
      <ul>
        <li>Fixed IDE model to contain the output file even if it's customized through the DSL. Also
        fixed the DSL to get/set the output file on the variant object so that it's not necessary to
        use <code>variant.packageApplication or variant.zipAlign</code></li>
        <li>Fixed dependency resolution so that we resolved the combination of (default config,
        build types, flavor(s)) together instead of separately.</li>
        <li>Fixed dependency for tests of library project to properly include all the dependencies
        of the library itself.</li>
        <li>Fixed case where two dependencies have the same leaf name.</li>
        <li>Fixed issue where Proguard rules file cannot be applied on flavors.</li>
      </ul>
      <p>All Gradle plugin release notes are available are here: <a href=
      "http://tools.android.com/tech-docs/new-build-system"
      >http://tools.android.com/tech-docs/new-build-system</a>.</p>
    </li>
    <li>Gradle errors from aapt no longer point to merged output files in the build/ folder, they
    point back to the real source locations.</li>
    <li>Parallel Builds. It's now possible to use Gradle's parallel builds. Please be aware that
    parallel builds are in "incubation" (see <a
    href="http://www.gradle.org/docs/current/userguide/gradle_command_line.html">Gradle's
    documentation</a>.) This feature is off by default. To enable it, go to
    <strong>Preferences</strong> &gt; <strong>Compiler</strong> and check the box <em>Compile
    independent modules in parallel</em>.</li>
    <li>Further work on the new resource repository used for layout rendering, resource
    folding in the editor, and more:
      <ul>
      <li>Basic support for .aar library dependencies (e.g. using a library without a local copy of
      the sources). Still not working for resource XML validation and navigation in source editors.
      </li>
      <li>Cycle detection in resource references.</li>
      <li>Quick Documentation (F1), which can show all translations of the string under the caret,
      will now also show all resource overlays from the various Gradle flavors and build types, as
      well as libraries. They are listed in reverse resource overlay order, with strikethrough on
      the versions of the string that are masked.</li>
      <li>Fixes to handle updating the merged resources when the set of module dependencies
      change.</li>
      <li>XML rendering fixes to properly handle character entity declarations and XML and unicode
      escapes.</li>
      </ul>
    <li>Save screenshot support for the layout preview and layout editor windows.</li>
    <li>Template bug fixes.</li>
    <li>Lint bug fixes.</li>
    <li>Various fixes for crash reports. Thank you, and keep filing crash reports!</li>
  </ul>
  </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
      alt=""/>Android Studio v0.1.x</a> <em>(May 2013)</em>
  </p>

  <div class="toggle-content-toggleme">
  <ul>
    <li>Various bug fixes, including a fix for a common Windows installation issue.
  </ul>
  </div>
</div>

<p>&nbsp;</p>


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

<p>If you encounter problems in Android Studio, look at the following page
for possible resolutions to known issues: <a href="http://tools.android.com/knownissues"
>http://tools.android.com/knownissues</a>.</p>



</div><!-- end main content -->




</div><!-- end relative position wrapper -->



