page.title=Download Android Studio and SDK Tools
page.tags=sdk, android studio
page.template=sdk
page.image=images/cards/android-studio_2x.png
header.hide=1
page.metaDescription=Download the official Android IDE and developer tools to build apps for Android phones, tablets, wearables, TVs, and more.

studio.version=1.3.2.0

studio.linux_bundle_download=android-studio-ide-141.2178183-linux.zip
studio.linux_bundle_bytes=352010593
studio.linux_bundle_checksum=cf780413f8c8223eb348bd27c19a9c04b75eaeb2

studio.mac_bundle_download=android-studio-ide-141.2178183-mac.dmg
studio.mac_bundle_bytes=368335367
studio.mac_bundle_checksum=75b67eb15a34a152a40e7189484ab0ebc375b877

studio.win_bundle_download=android-studio-ide-141.2178183-windows.zip
studio.win_bundle_bytes=344424713
studio.win_bundle_checksum=3134f226b5f3c3f74d4fc2d9cff03a4458f01d69


studio.win_bundle_exe_download=android-studio-bundle-141.2178183-windows.exe
studio.win_bundle_exe_bytes=1136982712
studio.win_bundle_exe_checksum=c7d39c529dd434489da9d086ff689d34dc791526

studio.win_notools_exe_download=android-studio-ide-141.2178183-windows.exe
studio.win_notools_exe_bytes=321810248
studio.win_notools_exe_checksum=b5d1aaa000729c03a3cf980add79d1b93121c56d




sdk.linux_download=android-sdk_r24.3.4-linux.tgz
sdk.linux_bytes=309138331
sdk.linux_checksum=fb293d7bca42e05580be56b1adc22055d46603dd

sdk.mac_download=android-sdk_r24.3.4-macosx.zip
sdk.mac_bytes=98340900
sdk.mac_checksum=128f10fba668ea490cc94a08e505a48a608879b9

sdk.win_download=android-sdk_r24.3.4-windows.zip
sdk.win_bytes=187496897
sdk.win_checksum=4a8718fb4a2bf2128d34b92f23ddd79fc65839e7


sdk.win_installer=installer_r24.3.4-windows.exe
sdk.win_installer_bytes=139477985
sdk.win_installer_checksum=094dd45f98a31f839feae898b48f23704f2878dd






@jd:body

<style type="text/css">
  .offline {display:none;}
  h2.feature {
    padding-top:30px;
    margin-top:0;
    clear:both;
  }
  .feature-blurb {
  margin:0px; font-size:16px; font-weight:300;
  padding-top:40px;
  }

  .landing-button .small {
    font-size: 12px;
    font-weight: normal;
    line-height: 12px;
    display: block;
  }

  h1.studio-logo {
    width:226px;
    height:78px;
    display:block;
    padding:0;
    white-space: nowrap;
    text-indent: -10000px;
    font-size:0px;
    background: url(../images/tools/studio-logo.png);
    background-image: -webkit-image-set(url(../images/tools/studio-logo.png) 1x, url(../images/tools/studio-logo_2x.png) 2x);
    background-size: 226px 78px;
  }

</style>





<div style="position:relative;">


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

<h1 id="tos-header" style="margin-top:0">Download</h1>

<p class="sdk-terms-intro">Before installing Android Studio or the standalone SDK tools,
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>December 8, 2014</em>
</div>





<div id="next-steps" style="display:none;position:absolute;width:inherit">
  <p>You're just a few steps away from building apps for Android!</p>
  <p>In a moment, you'll be redirected to
  <a id="next-link" href="{@docRoot}sdk/installing/index.html">Installing the Android SDK</a>.</p>

</div><!-- end next-steps -->



<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><a href="" class="button disabled" id="downloadForRealz" onclick="return onDownloadForRealz(this);"></a></p>
</div>


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






<div id="landing">

<div class="col-13">&nbsp;</div><!-- provides top margin for content -->

<img src="{@docRoot}images/tools/studio-hero.png"
srcset="{@docRoot}images/tools/studio-hero_2x.png 2x, {@docRoot}images/tools/studio-hero.png 1x"
width="760" alt="" />

<div style="color: #fff; width:226px; height:0; overflow:visible; position:absolute; top:40px; left:25px">

<h1 class="studio-logo" style="margin:0 0 35px !important">Android Studio</h1>

<p style="font-size: 16px; color:#bbb; position: absolute;left: 297px; top: 5px; display: block;
width: 400px;text-align: center;">The official Android IDE</p>

<ul style="font-size:12px;line-height:19px;">
<li>Android Studio IDE</li>
<li>Android SDK tools</li>
<li>Android 5.0 (Lollipop) Platform</li>
<li>Android 5.0 emulator system image with Google APIs</li>
</ul>

<a class="online landing-button green download-bundle-button"
href="#Other" >Download Android Studio<br/><span class='small'></span></a>

<!-- this appears when viewing the offline docs -->
<p class="offline">
To get Android Studio or stand-alone SDK tools, visit <a
href="http://developer.android.com/sdk/index.html">developer.android.com/sdk/</a>
</p>
</div>

<ul>
  <li><a href="#Requirements">System Requirements</a></li>
  <li><a href="#Other">Other Download Options</a></li>
  <li><a href="{@docRoot}sdk/installing/migrate.html">Migrating to Android Studio</a></li>
  <li><a href="https://docs.google.com/a/google.com/forms/d/1mjsyfzv3HAnDY-_Kfj-3QJKdpuksyMFs9e73CRwmT6Q/viewform"
target="_blank">Take a Survey</a></li>
</ul>




<div class="cols">
<h2 class="feature norule col-13">Intelligent code editor</h2>

<div class="col-9">
  <img src="{@docRoot}images/tools/studio-hero-code.png"
srcset="{@docRoot}images/tools/studio-hero-code_2x.png 2x, {@docRoot}images/tools/studio-hero-code.png 1x" width="520" />
</div><!-- end col-9 (left column) -->

<div class="col-4 feature-blurb">
  <p>At the core of Android Studio is an intelligent code editor capable of advanced
  code completion, refactoring, and code analysis.</p>
  <p>The powerful code editor helps you be a more productive Android app developer.</p>
</div>





<h2 class="feature norule col-13">Code templates and GitHub integration</h2>

<div class="col-9">
  <img src="{@docRoot}images/tools/studio-hero-import.png"
srcset="{@docRoot}images/tools/studio-hero-import_2x.png 2x, {@docRoot}images/tools/studio-hero-import.png 1x" width="520" />
</div><!-- end col-9 (left column) -->

<div class="col-4 feature-blurb">
  <p>New project wizards make it easier than ever to start a new project.</p>

  <p>Start projects using template code for patterns such as navigation drawer and view pagers,
  and even import Google code samples from GitHub.</p>
</div>




<h2 class="feature norule col-13">Multi-screen app development</h2>

<div class="col-9">
  <img src="{@docRoot}images/tools/studio-hero-screens.png"
srcset="{@docRoot}images/tools/studio-hero-screens_2x.png 2x, {@docRoot}images/tools/studio-hero-screens.png 1x" width="520" />
</div><!-- end col-9 (left column) -->

<div class="col-4 feature-blurb">
  <p>Build apps for Android phones, tablets, Android Wear,
  Android TV, Android Auto and Google Glass.</p>
  <p>With the new Android Project View and module support in Android Studio, it's easier
  to manage app projects and resources.
</div>




<h2 class="feature norule col-13">Virtual devices for all shapes and sizes</h2>

<div class="col-9">
  <img src="{@docRoot}images/tools/studio-hero-avds.png"
srcset="{@docRoot}images/tools/studio-hero-avds_2x.png 2x, {@docRoot}images/tools/studio-hero-avds.png 1x" width="520" />
</div><!-- end col-9 (left column) -->

<div class="col-4 feature-blurb">
  <p>Android Studio comes pre-configured with an optimized emulator image.</p>
  <p>The updated and streamlined Virtual Device Manager provides
  pre-defined device profiles for common Android devices.</p>
</div>




<h2 class="feature norule col-13">
Android builds evolved, with Gradle</h2>

<div class="col-9">
  <img src="{@docRoot}images/tools/studio-hero-gradle.png"
srcset="{@docRoot}images/tools/studio-hero-gradle_2x.png 2x, {@docRoot}images/tools/studio-hero-gradle.png 1x" width="520" />
</div><!-- end col-9 (left column) -->

<div class="col-4 feature-blurb">
  <p>Create multiple APKs for your Android app with different features using the same project.</p>
  <p>Manage app dependencies with Maven.</p>
  <p>Build APKs from Android Studio or the command line.</p>
</div>

</div>

<h2 class="feature norule">More about Android Studio</h2>
<div style="background:#424242;padding:30px; color:#fff;margin:0 0 15px;">

<a class="online landing-button green download-bundle-button"
style="margin:0 0 40px 60px;float:right"
href="" >Download Android Studio</a>

  <ul>
  <li>Built on IntelliJ IDEA Community Edition, the popular Java IDE by JetBrains.</li>
  <li>Flexible Gradle-based build system.</li>
  <li>Build variants and multiple APK generation.</li>
  <li>Expanded template support for Google Services and various device types.</li>
  <li>Rich layout editor with support for theme editing.</li>
  <li>Lint tools to catch performance, usability, version compatibility, and other problems.</li>
  <li>ProGuard and app-signing capabilities.</li>
  <li>Built-in support for Google Cloud Platform, making it easy to integrate Google Cloud
  Messaging and App Engine.</li>
  </ul>

<p style="margin:0">
For more details about features available in Android Studio,
read the overview at <a href="{@docRoot}tools/studio/index.html">Android Studio</a>.</p>
</div>


<p>If you have been using Eclipse with ADT, be aware that Android Studio is now the official IDE
for Android, so you should migrate to Android Studio to receive all the
latest IDE updates. For help moving projects,
see <a href="{@docRoot}sdk/installing/migrate.html">Migrating to Android
Studio</a>.</p>







<h2 id="Requirements">System Requirements</h2>

<h3>Windows</h3>

<ul>
<li>Microsoft&reg;  Windows&reg;  8/7/Vista/2003 (32 or 64-bit)</li>
<li>2 GB RAM minimum, 4 GB RAM recommended</li>
<li>400 MB hard disk space</li>
<li>At least 1 GB for Android SDK, emulator system images, and caches</li>
<li>1280 x 800  minimum screen resolution</li>
<li>Java Development Kit (JDK) 7 </li>
<li>Optional for accelerated emulator: Intel® processor with support for Intel® VT-x, Intel® EM64T
(Intel® 64), and Execute Disable (XD) Bit functionality</li>
</ul>


<h3>Mac OS X</h3>

<ul>
<li>Mac&reg;  OS X&reg;  10.8.5 or higher, up to 10.9 (Mavericks)</li>
<li>2 GB RAM minimum, 4 GB RAM recommended</li>
<li>400 MB hard disk space</li>
<li>At least 1 GB for Android SDK, emulator system images, and caches</li>
<li>1280 x 800 minimum screen resolution</li>
<li>Java Runtime Environment (JRE) 6</li>
<li>Java Development Kit (JDK) 7</li>
<li>Optional for accelerated emulator: Intel® processor with support for Intel® VT-x, Intel® EM64T
(Intel® 64), and Execute Disable (XD) Bit functionality</li>
</ul>

<p>On Mac OS, run Android Studio with Java Runtime Environment (JRE) 6 for optimized font
rendering. You can then configure your project to use Java Development Kit (JDK) 6 or JDK 7.</p>



<h3>Linux</h3>

<ul>
<li>GNOME or KDE desktop</li>
<li>GNU C Library (glibc) 2.15 or later</li>
<li>2 GB RAM minimum, 4 GB RAM recommended</li>
<li>400 MB hard disk space</li>
<li>At least 1 GB for Android SDK, emulator system images, and caches</li>
<li>1280 x 800 minimum screen resolution</li>
<li>Oracle&reg;  Java Development Kit (JDK) 7 </li>
</ul>
<p>Tested on Ubuntu&reg;  14.04, Trusty Tahr (64-bit distribution capable of running
32-bit applications).</p>




<h2 id="Other" style="clear:left">Other Download Options</h2>

<!-- alternative SDK options follows -->
