page.title=Getting Started with Android Studio
page.tags="studio"
@jd:body




<div style="position:relative;min-height:660px;">

<h3 style="color:#f80">EARLY ACCESS PREVIEW</h3>

<div id="tos" style="position:absolute;display:none;width:inherit;">
<div class="col-13" style="margin:0;">&nbsp;</div><!-- provides top margin for content -->


<p class="sdk-terms-intro">Before installing the Android SDK, you must agree to the following terms and conditions.</p>

<div class="sdk-terms" onfocus="this.blur()">
<h2 class="norule">Terms and Conditions</h2>
This is the Android Software Development Kit License Agreement

<h3>1. Introduction</h3>
1.1 The Android Software Development Kit (referred to in this License Agreement as the "SDK" and specifically including the Android system files, packaged APIs, and Google APIs add-ons) is licensed to you subject to the terms of this License Agreement. This License Agreement forms a legally binding contract between you and Google in relation to your use of the SDK.

1.2 "Android" means the Android software stack for devices, as made available under the Android Open Source Project, which is located at the following URL: http://source.android.com/, as updated from time to time.

1.3 "Google" means Google Inc., a Delaware corporation with principal place of business at 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.


<h3>2. Accepting this License Agreement</h3>
2.1 In order to use the SDK, you must first agree to this License Agreement. You may not use the SDK if you do not accept this License Agreement.

2.2 By clicking to accept, you hereby agree to the terms of this License Agreement.

2.3 You may not use the SDK and may not accept the License Agreement if you are a person barred from receiving the SDK under the laws of the United States or other countries including the country in which you are resident or from which you use the SDK.

2.4 If you are agreeing to be bound by this License Agreement on behalf of your employer or other entity, you represent and warrant that you have full legal authority to bind your employer or such entity to this License Agreement. If you do not have the requisite authority, you may not accept the License Agreement or use the SDK on behalf of your employer or other entity.


<h3>3. SDK License from Google</h3>
3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide, royalty-free, non-assignable and non-exclusive license to use the SDK solely to develop applications to run on the Android platform.

3.2 You agree that Google or third parties own all legal right, title and interest in and to the SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, and any and all other proprietary rights. Google reserves all rights not expressly granted to you.

3.3 You may not use the SDK for any purpose not expressly permitted by this License Agreement.  Except to the extent required by applicable third party licenses, you may not: (a) copy (except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create derivative works of the SDK or any part of the SDK; or (b) load any part of the SDK onto a mobile handset or any other hardware device except a personal computer, combine any part of the SDK with other software, or distribute any software or device incorporating a part of the SDK.

3.4 You agree that you will not take any actions that may cause or result in the fragmentation of Android, including but not limited to distributing, participating in the creation of, or promoting in any way a software development kit derived from the SDK.

3.5 Use, reproduction and distribution of components of the SDK licensed under an open source software license are governed solely by the terms of that open source software license and not this License Agreement.

3.6 You agree that the form and nature of the SDK that Google provides may change without prior notice to you and that future versions of the SDK may be incompatible with applications developed on previous versions of the SDK. You agree that Google may stop (permanently or temporarily) providing the SDK (or any features within the SDK) to you or to users generally at Google's sole discretion, without prior notice to you.

3.7 Nothing in this License Agreement gives you a right to use any of Google's trade names, trademarks, service marks, logos, domain names, or other distinctive brand features.

3.8 You agree that you will not remove, obscure, or alter any proprietary rights notices (including copyright and trademark notices) that may be affixed to or contained within the SDK.


<h3>4. Use of the SDK by You</h3>
4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) under this License Agreement in or to any software applications that you develop using the SDK, including any intellectual property rights that subsist in those applications.

4.2 You agree to use the SDK and write applications only for purposes that are permitted by (a) this License Agreement and (b) any applicable law, regulation or generally accepted practices or guidelines in the relevant jurisdictions (including any laws regarding the export of data or software to and from the United States or other relevant countries).

4.3 You agree that if you use the SDK to develop applications for general public users, you will protect the privacy and legal rights of those users. If the users provide you with user names, passwords, or other login information or personal information, you must make the users aware that the information will be available to your application, and you must provide legally adequate privacy notice and protection for those users. If your application stores personal or sensitive information provided by users, it must do so securely. If the user provides your application with Google Account information, your application may only use that information to access the user's Google Account when, and for the limited purposes for which, the user has given you permission to do so.

4.4 You agree that you will not engage in any activity with the SDK, including the development or distribution of an application, that interferes with, disrupts, damages, or accesses in an unauthorized manner the servers, networks, or other properties or services of any third party including, but not limited to, Google or any mobile communications carrier.

4.5 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any data, content, or resources that you create, transmit or display through Android and/or applications for Android, and for the consequences of your actions (including any loss or damage which Google may suffer) by doing so.

4.6 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any breach of your obligations under this License Agreement, any applicable third party contract or Terms of Service, or any applicable law or regulation, and for the consequences (including any loss or damage which Google or any third party may suffer) of any such breach.


<h3>5. Your Developer Credentials</h3>
5.1 You agree that you are responsible for maintaining the confidentiality of any developer credentials that may be issued to you by Google or which you may choose yourself and that you will be solely responsible for all applications that are developed under your developer credentials.


<h3>6. Privacy and Information</h3>
6.1 In order to continually innovate and improve the SDK, Google may collect certain usage statistics from the software including but not limited to a unique identifier, associated IP address, version number of the software, and information on which tools and/or services in the SDK are being used and how they are being used. Before any of this information is collected, the SDK will notify you and seek your consent. If you withhold consent, the information will not be collected.

6.2 The data collected is examined in the aggregate to improve the SDK and is maintained in accordance with Google's Privacy Policy.


<h3>7. Third Party Applications</h3>
7.1 If you use the SDK to run applications developed by a third party or that access data, content or resources provided by a third party, you agree that Google is not responsible for those applications, data, content, or resources. You understand that all data, content or resources which you may access through such third party applications are the sole responsibility of the person from which they originated and that Google is not liable for any loss or damage that you may experience as a result of the use or access of any of those third party applications, data, content, or resources.

7.2 You should be aware the data, content, and resources presented to you through such a third party application may be protected by intellectual property rights which are owned by the providers (or by other persons or companies on their behalf). You may not modify, rent, lease, loan, sell, distribute or create derivative works based on these data, content, or resources (either in whole or in part) unless you have been specifically given permission to do so by the relevant owners.

7.3 You acknowledge that your use of such third party applications, data, content, or resources may be subject to separate terms between you and the relevant third party. In that case, this License Agreement does not affect your legal relationship with these third parties.


<h3>8. Using Android APIs</h3>
8.1 Google Data APIs

8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by Google or those parties that provide the data (or by other persons or companies on their behalf). Your use of any such API may be subject to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create derivative works based on this data (either in whole or in part) unless allowed by the relevant Terms of Service.

8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you shall retrieve data only with the user's explicit consent and only when, and for the limited purposes for which, the user has given you permission to do so.


<h3>9. Terminating this License Agreement</h3>
9.1 This License Agreement will continue to apply until terminated by either you or Google as set out below.

9.2 If you want to terminate this License Agreement, you may do so by ceasing your use of the SDK and any relevant developer credentials.

9.3 Google may at any time, terminate this License Agreement with you if:
(A) you have breached any provision of this License Agreement; or
(B) Google is required to do so by law; or
(C) the partner with whom Google offered certain parts of SDK (such as APIs) to you has terminated its relationship with Google or ceased to offer certain parts of the SDK to you; or
(D) Google decides to no longer provide the SDK or certain parts of the SDK to users in the country in which you are resident or from which you use the service, or the provision of the SDK or certain SDK services to you by Google is, in Google's sole discretion, no longer commercially viable.

9.4 When this License Agreement comes to an end, all of the legal rights, obligations and liabilities that you and Google have benefited from, been subject to (or which have accrued over time whilst this License Agreement has been in force) or which are expressed to continue indefinitely, shall be unaffected by this cessation, and the provisions of paragraph 14.7 shall continue to apply to such rights, obligations and liabilities indefinitely.


<h3>10. DISCLAIMER OF WARRANTIES</h3>
10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE SDK IS AT YOUR SOLE RISK AND THAT THE SDK IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE.

10.2 YOUR USE OF THE SDK AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE SDK IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE.

10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.


<h3>11. LIMITATION OF LIABILITY</h3>
11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING.


<h3>12. Indemnification</h3>
12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold harmless Google, its affiliates and their respective directors, officers, employees and agents from and against any and all claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or accruing from (a) your use of the SDK, (b) any application you develop on the SDK that infringes any copyright, trademark, trade secret, trade dress, patent or other intellectual property right of any person or defames any person or violates their rights of publicity or privacy, and (c) any non-compliance by you with this License Agreement.


<h3>13. Changes to the License Agreement</h3>
13.1 Google may make changes to the License Agreement as it distributes new versions of the SDK. When these changes are made, Google will make a new version of the License Agreement available on the website where the SDK is made available.


<h3>14. General Legal Terms</h3>
14.1 This License Agreement constitutes the whole legal agreement between you and Google and governs your use of the SDK (excluding any services which Google may provide to you under a separate written agreement), and completely replaces any prior agreements between you and Google in relation to the SDK.

14.2 You agree that if Google does not exercise or enforce any legal right or remedy which is contained in this License Agreement (or which Google has the benefit of under any applicable law), this will not be taken to be a formal waiver of Google's rights and that those rights or remedies will still be available to Google.

14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any provision of this License Agreement is invalid, then that provision will be removed from this License Agreement without affecting the rest of this License Agreement. The remaining provisions of this License Agreement will continue to be valid and enforceable.

14.4 You acknowledge and agree that each member of the group of companies of which Google is the parent shall be third party beneficiaries to this License Agreement and that such other companies shall be entitled to directly enforce, and rely upon, any provision of this License Agreement that confers a benefit on (or rights in favor of) them. Other than this, no other person or company shall be third party beneficiaries to this License Agreement.

14.5 EXPORT RESTRICTIONS. THE SDK IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS. YOU MUST COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE SDK. THESE LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE.

14.6 The rights granted in this License Agreement may not be assigned or transferred by either you or Google without the prior written approval of the other party. Neither you nor Google shall be permitted to delegate their responsibilities or obligations under this License Agreement without the prior written approval of the other party.

14.7 This License Agreement, and your relationship with Google under this License Agreement, shall be governed by the laws of the State of California without regard to its conflict of laws provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located within the county of Santa Clara, California to resolve any legal matter arising from this License Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.


<em>November 13, 2012</em>
</div>



<div id="sdk-terms-form">
<p>
<input id="agree" type="checkbox" name="agree" value="1" onclick="onAgreeChecked()" />
<label id="agreeLabel" for="agree">I have read and agree with the above terms and conditions</label>
</p>
<p id="bitpicker" style="display:none">
  <input id="32" onclick="onAgreeChecked()" type="radio" name="bit" value="32">
    <label for="32">32-bit</label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  <input id="64" onclick="onAgreeChecked()" type="radio" name="bit" value="64">
    <label for="64">64-bit</label>
</p>
<p><a href="" class="button disabled" id="downloadForRealz" onclick="return onDownloadForRealz(this);"></a></p>
</div>



</div><!-- end TOS -->


















<div id="main">

<div class="figure" style="width:400px;margin-top:-20px">
<img src="{@docRoot}images/tools/android-studio.png" height="330" width="400" style="margin-bottom:20px" />

<a class="big button subtitle" id="download-ide-button"
href="" style="display:none;width:265px;margin:0 auto;display:block;font-size:18px" ></a>
<div style="width:290px;padding:10px 40px 0 60px;font-size:12px;line-height:16px">

<p style="margin-bottom:8px">This download includes:</p>
<ul>
<li>Android Studio <b>early access preview</b></li>
<li>All the Android SDK Tools to design, test, debug, and profile your app</li>
<li>The latest Android platform to compile your app</li>
<li>The latest Android system image to run your app in the emulator</li>
</ul>

</div>
</div>



<p>Android Studio is a new Android development environment based on IntelliJ
IDEA. Similar to Eclipse with the
ADT Plugin, Android Studio provides integrated Android developer tools
for development and debugging. On top of the
capabilities you expect from IntelliJ, Android Studio offers:</p>

<ul>
  <li>Gradle-based build support.</li>
  <li>Android-specific refactoring and quick fixes.</li>
  <li>Lint tools to catch performance, usability, version compatibility and other problems.</li>
  <li>ProGuard and app-signing capabilities. </li>
  <li>Template-based wizards to create common Android designs and components.</li>
  <li>A rich layout editor that allows you to drag-and-drop UI components, preview layouts on
  multiple screen configurations, and much more.</li>
  <li>Built-in support for <a
  href="http://android-developers.blogspot.com/2013/06/adding-backend-to-your-app-in-android.html"
  class="external-link">Google Cloud Platform</a>, making it easy to integrate Google Cloud
  Messaging and App Engine as server-side components.
</ul>

<p class="caution"><strong>Caution:</strong> Android Studio is currently available as
an <strong>early access preview</strong>. Several features
are either incomplete or not yet implemented and you may encounter bugs. If you are not
comfortable using an unfinished product, you may want to instead
download (or continue to use) the
<a href="{@docRoot}sdk/index.html">ADT Bundle</a> (Eclipse with the ADT Plugin).</p>


<h4 style="clear:right;text-align:right;margin-right:50px"><a href='' class="expandable"
  onclick="toggleExpandable(this,'.pax');return false;"
  >DOWNLOAD FOR OTHER PLATFORMS</a></h4>

<div class="pax col-13 online" style="display:none;margin:0;">

  <table class="download">
    <tr>
      <th>Platform</th>
      <th>Package</th>
      <th>Size</th>
      <th>MD5 Checksum</th>
  </tr>

  <tr>
    <td>Windows</td>
    <td>
  <a onclick="return onDownload(this)" id="win-studio"
      href="http://dl.google.com/android/studio/install/0.4.2/android-studio-bundle-133.970939-windows.exe">
      android-studio-bundle-133.970939-windows.exe
      </a>
    </td>
    <td>515261701 bytes</td>
    <td>1e1ae28b1c00f43d55f17ee35bd4f5d2</td>
  </tr>

  <tr>
    <td><nobr>Mac OS X</nobr></td>
    <td>
  <a onclick="return onDownload(this)" id="mac-studio"
    href="http://dl.google.com/android/studio/install/0.4.2/android-studio-bundle-133.970939-mac.dmg">
    android-studio-bundle-133.970939-mac.dmg
    </a>
    </td>
    <td>491773471 bytes</td>
    <td>6753f67c56acb17617bfbc5bc56384e7</td>
  </tr>

  <tr>
    <td>Linux</td>
    <td>
  <a onclick="return onDownload(this)" id="linux-studio"
    href="http://dl.google.com/android/studio/install/0.4.2/android-studio-bundle-133.970939-linux.tgz">
    android-studio-bundle-133.970939-linux.tgz
    </a>
    </td>
    <td>516080363 bytes</td>
    <td>25455787d76e61baf34bf93eaa00ded6</td>
  </tr>
  </table>

</div><!-- end pax -->



<h2 id="Updating">Updating from older versions</h2>

<p>If you already have Android Studio installed, in most cases, you can upgrade to the latest
version by installing a patch. From within Android Studio, select
<strong>Help &gt; Check for updates</strong> (on Mac, <strong>Android Studio &gt;
Check for updates</strong>) to see whether an update is available.</p>

<p>If an update is not available,
follow the <a href="#Installing">installation instructions</a> below and replace your existing
installation.</p>

<div class="caution">
<p><strong>Caution:</strong> Replacing your existing installation of
Android Studio will remove any additional SDK packages you've installed, such as target
platforms, system images, and sample apps. To preserve these, copy them from your current
SDK directory under Android Studio to a temporary location
before installing the update. Then move them back once the update is complete.
If you fail to copy these packages, then you can instead download them again through
the Android SDK Manager.</p>
</div>


<p>Also note that due to the update to Android Gradle Plugin 0.6, you will encounter errors when opening
existing projects. See the <a href="#Troubleshooting">Troubleshooting</a> notes below for
information about how to resolve them.</p>


<h2 id="Installing">Installing Android Studio</h2>
<ol>
<li>Download the <strong>Android Studio</strong> package from above.</li>
<li>Install Android Studio and the SDK tools:
  <p><b>Windows:</b></p>
  <ol>
    <li>Launch the downloaded EXE file, {@code android-studio-bundle-&lt;version&gt;.exe}.</li>
    <li>Follow the setup wizard to install Android Studio.

    <div class="caution"><p><strong>Known issue:</strong>
      On some Windows systems, the launcher script does not find where Java is installed.
      If you encounter this problem,
      you need to set an environment variable indicating the correct location.</p>
      <p>Select <strong>Start menu > Computer > System Properties >
      Advanced System Properties</strong>. Then open <strong>Advanced tab > Environment
      Variables</strong> and add a new system variable <code>JAVA_HOME</code> that points to
      your JDK folder, for example <code>C:\Program Files\Java\jdk1.7.0_21</code>.</p>
    </div>
    </li>

  </ol>
  <p><b>Mac OS X:</b></p>
  <ol>
    <li>Open the downloaded DMG file, {@code android-studio-bundle-&lt;version&gt;.dmg}.</li>
    <li>Drag and drop Android Studio into the Applications folder.

    <div class="caution"><p><strong>Known issue:</strong>
      Depending on your security settings, when you attempt to open Android Studio, you might
      see a warning that says the package is damaged and should be moved to the trash. If this
      happens, go to <strong>System Preferences > Security &amp; Privacy</strong> and under
      <strong>Allow applications downloaded from</strong>, select <strong>Anywhere</strong>.
      Then open Android Studio again.</p>
    </div>
    </li>

  </ol>
  <p><b>Linux:</b></p>
  <ol>
    <li>Unpack the downloaded Tar file, {@code android-studio-bundle-&lt;version&gt;.tgz}, into an appropriate
    location for your applications.
    <li>To launch Android Studio, navigate to the {@code android-studio/bin/} directory
    in a terminal and execute {@code studio.sh}.
      <p>You may want to add {@code android-studio/bin/} to your PATH environmental
      variable so that you can start Android Studio from any directory.</p>
    </li>
  </ol>
</li>
</ol>

<p>That's it! You're ready to start developing apps with Android Studio.</p>

<div class="note">
<p><strong>Note:</strong> On Windows and Mac, the individual tools and
other SDK packages are saved within the Android Studio application directory.
To access the tools directly, use a terminal to navigate into the application and locate
the {@code sdk/} directory. For example:</p>
<p>Windows: <code>\Users\&lt;user&gt;\AppData\Local\Android\android-studio\sdk\</code></p>
<p>Mac: <code>/Applications/Android\ Studio.app/sdk/</code></p>
</div>

<p>For a list of some known issues, see <a
href="http://tools.android.com/knownissues">tools.android.com/knownissues</a>.</p>


<h2 id="Start">Starting a Project</h2>

<p>When you launch Android Studio for the first time, you'll see a Welcome
screen that offers several ways to get started:</p>

<ul>
  <li>To start building a new app, click <strong>New Project</strong>.
    <p>This starts the New Project wizard, which helps you set up a project using an app template.
  </li>
  <li>To import an existing Android app project, click <strong>Import Project</strong>.
    <p class="note"><strong>Note:</strong> If you previously developed your Android project
    with Eclipse, you should first use the new export feature in the ADT plugin to prepare
    your project with the new Gradle build system. For more information, read
    <a href="{@docRoot}sdk/installing/migrate.html">Migrating from Eclipse</a>.</p>
  </li>
</ul>

<p>For additional help using Android Studio, read <a
href="{@docRoot}sdk/installing/studio-tips.html">Tips and Tricks</a>.</p>


<p>As you continue developing apps, you may need to install additional versions
of Android for the emulator and other packages such as the <a
href="{@docRoot}tools/support-library/index.html">Android Support Library</a>.
To install more packages, use
the <a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a>, which you can
open from Android Studio by clicking <strong>SDK Manager</strong>
<img src="{@docRoot}images/tools/sdk-manager-studio.png"
style="vertical-align:bottom;margin:0;height:19px" /> in the toolbar.</p>









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

<div class="toggle-content opened">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-opened.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/triangle-closed.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/triangle-closed.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> See <a
      href="#Troubleshooting">Troubleshooting</a> below for details.</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/triangle-closed.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>

<p class="note"><strong>Note:</strong> Periodic updates are pushed to Android Studio
without requiring you to update from here. To manually check for updates, select
<strong>Help > Check for updates</strong> (on Mac, select <strong>Android Studio >
Check for updates</strong>).</p>




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


<div class="figure" style="width:330px">
<img src="{@docRoot}images/tools/studio_error_gradle5.png" width="330"/>
<p class="img-caption"><strong>Figure 1.</strong> Error dialog when opening an existing project.</p>
</div>

<h3>Error: Gradle project refresh failed</h3>

<p>Android Studio 0.2.0 has updated the Gradle plug-in to 0.5.0, which is not backwards compatible.
When opening a project that uses an older version of the plug-in, Studio will display the error
shown in figure 1 in the upper right corner of the IDE.
To resolve the error, you must change the version of the Android Gradle plug-in to 0.5.0.</p>

<ol>
  <li>Click the link in the error dialog <strong>Search in build.gradle files</strong>. If the dialog
is no longer visible, click <strong>Event Log</strong>
<img src="{@docRoot}images/tools/studio_error_eventlog.png"
style="vertical-align:bottom;margin:0;height:19px"/> in the bottom-right corner of the IDE,
then click <strong>Search in build.gradle files</strong>.</li>
  <li>Double-click the line under the <em>build.gradle</em> usage. For example:
  <strong>classpath 'com.android.tools.build:gradle:0.4</strong>. This opens the project
  <code>build.gradle</code> file.</li>
  <li>Edit the <code>classpath</code> to change the gradle version to <code>0.5.+</code>.
  For example:
  <pre class="no-pretty-print">
dependencies {
  classpath 'com.android.tools.build:gradle:<strong>0.5.+</strong>'
}
</pre>
  </li>
  <li>Save the file and rebuild your project.</li>
</ol>



<div class="figure" style="width:330px">
<img src="{@docRoot}images/tools/studio_error_supportlib.png" width="330"/>
<p class="img-caption"><strong>Figure 2.</strong> Error dialog when creating a new project
or opening a project using the support library.</p>
</div>

<h3>Error: Failed to import Gradle project</h3>

<p>If, after updating to Android Studio 0.2.x and creating or opening a project, you receive an
error stating <em>"Could not find any version that matches
com.android.support:support-v4:13.0.+"</em>, then you must install the <strong>Android Support
Repository</strong>. This was likely caused because you're pointing Android Studio to an external
Android SDK location that does not have the new Maven repository included with Android Studio
0.2.x. This new Maven repository is used by the new build system for the Support Library, instead
of using the Support Library JAR files, so must be present in the SDK.</p>


<ol>
  <li>Open the <strong>Android SDK Manager</strong>.</li>
  <li>Expand the <strong>Extras</strong> directory
and install <strong>Android Support Repository</strong>.</li>
</ol>

<p>If you've encountered other 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 -->








<script>
  var os;
  var bundlename;
  var $toolslink;

  if (navigator.appVersion.indexOf("Win")!=-1) {
    os = "Windows";
    bundlename = 'win-studio';
  } else if (navigator.appVersion.indexOf("Mac")!=-1) {
    os = "Mac";
    bundlename = 'mac-studio';
  } else if (navigator.appVersion.indexOf("Linux")!=-1) {
    os = "Linux";
    bundlename = 'linux-studio';
  }

  if (os) {
    /* set up primary ACE download button */
    $('#download-ide-button').show();
    $('#download-ide-button').append("Download Android Studio <span class='small'>v0.4.2</span>"
        + "<br/> <span class='small'>for " + os + "</span>");
    $('#download-ide-button').click(function() {return onDownload(this,true);}).attr('href', bundlename);

  } else {
    $('.pax').show();
  }


  function onDownload(link, button) {
    var $studioLink;

    /* set text for download button */
    if (button) {
      $studioLink = $("a#"+$(link).attr('href'));
      $("#downloadForRealz").html($(link).text());
    } else {
      $studioLink = $(link);
      $("#downloadForRealz").html("Download " + $(link).text());
    }

    $("#downloadForRealz").attr('href', $studioLink.attr('href'));

    $("#tos").fadeIn('fast');
    $("#main").fadeOut('fast');

    location.hash = "download";
    return false;
  }


  function onAgreeChecked() {
    /* verify that the TOS is agreed */
    if ($("input#agree").is(":checked")) {
      /* reveal the download button */
      $("a#downloadForRealz").removeClass('disabled');
    } else {
      $("a#downloadForRealz").addClass('disabled');
    }
  }

  function onDownloadForRealz(link) {
    if ($("input#agree").is(':checked')) {
      $("#tos").hide();
      $("#main").show();
      location.hash = "Updating";
      _gaq.push(['_trackEvent', 'SDK', 'Android Studio', $("#downloadForRealz").html()]);
      return true;
    } else {
      $("label#agreeLabel,#bitpicker input").parent().stop().animate({color: "#258AAF"}, 200,
        function() {$("label#agreeLabel,#bitpicker input").parent().stop().animate({color: "#222"}, 200)}
      );
      return false;
    }
  }

  $(window).hashchange( function(){
    if (location.hash == "") {
      location.reload();
    }
  });

</script>
