page.title=Test on a Device
meta.tags="preview", "nexus","system image"
page.tags="preview", "androidn"
page.image=images/cards/card-n-downloads_2x.png

@jd:body

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

  <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">

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

    <h2 class="norule">Terms and Conditions</h2>

    <div class="sdk-terms" onfocus="this.blur()" style="width:678px">
This is the Android SDK Preview License Agreement (the “License Agreement”).

1. Introduction

1.1 The Android SDK Preview (referred to in the License Agreement as the “Preview” and specifically including the Android system files, packaged APIs, and Preview library files, if and when they are made available) is licensed to you subject to the terms of the License Agreement. The License Agreement forms a legally binding contract between you and Google in relation to your use of the Preview.

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 “Android-compatible” means any Android implemation that (i) complies with the Android Compatibility Definition document, which can be found at the Android compatibility website (http://source.android.com/compatibility) and which may be updated from time to time; and (ii) successfully passes the Android Compatibility Test Suite (CTS).

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

2. Accepting the License Agreement

2.1 In order to use the Preview, you must first agree to the License Agreement. You may not use the Preview if you do not accept the License Agreement.

2.2 By clicking to accept and/or using the Preview, you hereby agree to the terms of the License Agreement.

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

2.4 If you will use the Preview internally within your company or organization you agree to be bound by the License Agreement on behalf of your employer or other entity, and you represent and warrant that you have full legal authority to bind your employer or such entity to the License Agreement. If you do not have the requisite authority, you may not accept the License Agreement or use the Preview on behalf of your employer or other entity.

3. Preview License from Google

3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide, royalty-free, non-assignable, non-exclusive, and non-sublicensable license to use the Preview solely to develop applications for compatible implementations of Android.

3.2 You may not use this Preview to develop applications for other platforms (including non-compatible implementations of Android) or to develop another SDK. You are of course free to develop applications for other platforms, including non-compatible implementations of Android, provided that this Preview is not used for that purpose.

3.3 You agree that Google or third parties owns all legal right, title and interest in and to the Preview, including any Intellectual Property Rights that subsist in the Preview. "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.4 You may not use the Preview for any purpose not expressly permitted by the 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 Preview or any part of the Preview; or (b) load any part of the Preview onto a mobile handset or any other hardware device except a personal computer, combine any part of the Preview with other software, or distribute any software or device incorporating a part of the Preview.

3.5 Use, reproduction and distribution of components of the Preview licensed under an open source software license are governed solely by the terms of that open source software license and not the License Agreement. You agree to remain a licensee in good standing in regard to such open source software licenses under all the rights granted and to refrain from any actions that may terminate, suspend, or breach such rights.

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

3.7 Nothing in the 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 Preview.

4. Use of the Preview by You

4.1 Google agrees that nothing in the License Agreement gives Google any right, title or interest from you (or your licensors) under the License Agreement in or to any software applications that you develop using the Preview, including any intellectual property rights that subsist in those applications.

4.2 You agree to use the Preview and write applications only for purposes that are permitted by (a) the 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 Preview to develop applications, you will protect the privacy and legal rights of users. If 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 users provide you 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, each user has given you permission to do so.

4.4 You agree that you will not engage in any activity with the Preview, 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 Google or any third party.

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 the 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.

4.7 The Preview is in development, and your testing and feedback are an important part of the development process. By using the Preview, you acknowledge that implementation of some features are still under development and that you should not rely on the Preview having the full functionality of a stable release. You agree not to publicly distribute or ship any application using this Preview as this Preview will no longer be supported after the official Android SDK is released.

5. Your Developer Credentials

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.

6. Privacy and Information

6.1 In order to continually innovate and improve the Preview, 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 Preview are being used and how they are being used. Before any of this information is collected, the Preview 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 Preview and is maintained in accordance with Google's Privacy Policy located at http://www.google.com/policies/privacy/.

7. Third Party Applications

7.1 If you use the Preview 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.

8. Using Google APIs

8.1 Google 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.

9. Terminating the License Agreement

9.1 the License Agreement will continue to apply until terminated by either you or Google as set out below.

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

9.3 Google may at any time, terminate the License Agreement, with or without cause, upon notice to you.

9.4 The License Agreement will automatically terminate without notice or other action upon the earlier of:
(A) when Google ceases to provide the Preview or certain parts of the Preview to users in the country in which you are resident or from which you use the service; and
(B) Google issues a final release version of the Android SDK.

9.5 When the License Agreement is terminated, the license granted to you in the License Agreement will terminate, you will immediately cease all use of the Preview, and the provisions of paragraphs 10, 11, 12 and 14 shall survive indefinitely.

10. DISCLAIMERS

10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE PREVIEW IS AT YOUR SOLE RISK AND THAT THE PREVIEW IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE.

10.2 YOUR USE OF THE PREVIEW AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE PREVIEW 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. WITHOUT LIMITING THE FOREGOING, YOU UNDERSTAND THAT THE PREVIEW IS NOT A STABLE RELEASE AND MAY CONTAIN ERRORS, DEFECTS AND SECURITY VULNERABILITIES THAT CAN RESULT IN SIGNIFICANT DAMAGE, INCLUDING THE COMPLETE, IRRECOVERABLE LOSS OF USE OF YOUR COMPUTER SYSTEM OR OTHER DEVICE.

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.

11. LIMITATION OF LIABILITY

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.

12. Indemnification

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 Preview, (b) any application you develop on the Preview that infringes any Intellectual Property Rights of any person or defames any person or violates their rights of publicity or privacy, and (c) any non-compliance by you of the License Agreement.

13. Changes to the License Agreement

13.1 Google may make changes to the License Agreement as it distributes new versions of the Preview. When these changes are made, Google will make a new version of the License Agreement available on the website where the Preview is made available.

14. General Legal Terms

14.1 the License Agreement constitutes the whole legal agreement between you and Google and governs your use of the Preview (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 Preview.

14.2 You agree that if Google does not exercise or enforce any legal right or remedy which is contained in the 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 the License Agreement is invalid, then that provision will be removed from the License Agreement without affecting the rest of the License Agreement. The remaining provisions of the 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 the License Agreement and that such other companies shall be entitled to directly enforce, and rely upon, any provision of the 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 the License Agreement.

14.5 EXPORT RESTRICTIONS. THE PREVIEW 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 PREVIEW. THESE LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE.

14.6 The License Agreement may not be assigned or transferred by you without the prior written approval of Google, and any attempted assignment without such approval will be void. You shall not delegate your responsibilities or obligations under the License Agreement without the prior written approval of Google.

14.7 The License Agreement, and your relationship with Google under the 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 the 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.
  </div><!-- sdk terms -->



    <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 id="qv-wrapper">
  <div id="qv">
    <h2>In this document</h2>
      <ol>
        <li><a href="#device-preview">Set up a hardware device</a>
          <ol>
            <li><a href="#ota">Get over-the-air updates</a></li>
            <li><a href="#flash">Manually flash a device</a></li>
            <li><a href="#revertDevice">Uninstalling</a></li>
          </ol>
        </li>
        <li><a href="#setupAVD">Set up an emulator</a></li>
      </ol>
  </div>
</div>

<p>
  To run and test your app on the new platform you need to set up an Android N
  runtime environment. You can do that in either of these ways:
</p>

<ul>
  <li>Install Android N on a supported hardware device, or</li>
  <li>Set up an Android emulator running Android N</li>
</ul>

<p>
  If you want an environment for basic compatibility testing of your app on the
  new platform, all you need is your current APK and a hardware device or
  emulator. You don't necessarily need to update your full development
  environment to do basic testing.
</p>

<p>
  If you want to modify your app to target Android N or use new Android N APIs,
  you need to set up a development environment that's updated to support
  Android N. <a href="{@docRoot}preview/setup-sdk.html">Set Up to Develop for
  Android N</a> has details.
</p>


<h2 id="device-preview">Set up a hardware device</h2>

<p>
  The N Developer Preview offers system updates for a range of hardware devices
  that you can use for testing your app, from phones to tablets and TV.
</p>

<p>
  If you have access to a supported device, you can update it to a Developer
  Preview milestone build in one of these ways:
</p>

<ul>
  <li>
    <strong>Enroll the device in automatic OTA system updates</strong> through
    the <a href="https://g.co/androidbeta">Android Beta Program</a>. Once
    enrolled, your device will receive regular over-the-air (OTA) updates of
    all milestone builds in the N Developer Preview. When the next version of
    Android is released, your device will automatically update to the final
    version. This approach is recommended because it lets you seamlessly
    transition from your current environment, through the various releases of
    the N Developer Preview, to the release version.
  </li>

  <li>
    <strong>Download a Developer Preview system image and flash the
    device</strong>. OTA updates are not provided automatically for devices
    that you flash manually, but you can enroll those devices in Android Beta
    Program to get OTA updates. When the next version of Android is released,
    you can download the final device image from the <a href=
    "https://developers.google.com/android/nexus/images" type=
    "external-link">factory images</a> page.
  </li>
</ul>

<h3 id="ota">Enroll the device in automatic OTA updates</h3>

<p>
  If you have access to a supported device (see the list in the Downloads
  table), you can receive over-the-air updates to preview versions of Android
  by enrolling that device in the <a href="https://g.co/androidbeta">Android
  Beta Program</a>. These updates are automatically downloaded and will update
  your device just like official system updates. When the next version of
  Android is released, the device will automatically update to the production
  version.
</p>

<p>
  You can un-enroll a device at any time. The device will receive an OTA update
  to the most recent production version of Android available for that device
  (for example, Android 6.0 Marshmallow). The update requires a full device
  reset, so user data on the device will be removed. Make sure to <strong>back
  up important data</strong> before un-enrolling a device.
</p>

<p>
  For more information and to enroll your device, see
  the <a href="https://g.co/androidbeta">Android Beta Program</a> web site.
</p>

<p class="note"><strong>Note:</strong>
  Un-enrolling requires a full device reset. Back up
  important data first.
</p>

<h3 id="flash">Flashing a device manually</h3>

<p>
  At any time you can download the latest Developer Preview system image and
  manually flash it to your device. See the table below to download the system
  image for your test device. Manually flashing a device is useful if you need
  precise control over the test environment or need to reinstall frequently,
  such as for automated testing.
</p>

<!-- You can flash by ota or system image --><p>
  Installing a system image on a device <strong>removes all data from the
  device</strong>, so you should back up your data first.
</p>

<p>
  After you back up your device data and download the system image below that
  matches your device, follow the instructions at <a href=
  "https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>
  to flash the image onto your device.
</p>

<p>
  Manually flashed system images <strong>do not
  automatically receive OTA updates</strong> to later Developer Preview
  milestone builds or the final, production version. Make sure to keep your
  environment up-to-date and flash a
  new system image at each Developer Preview milestone.
</p>

<p>
  If you decide you want to get OTA updates after manually flashing a device,
  all you need to do is enroll the device in the <a href="https://g.co/androidbeta">Android
  Beta Program</a>. You can enroll the device at any time to receive the next Preview
  update over the air.
</p>

<table>
  <tr>
    <th scope="col">Device</th>
    <th scope="col">Download / Checksums</th>
  </tr>

  <tr id="bullhead">
    <td>Nexus 5X <br>"bullhead"</td>
    <td><a href="#top" onclick="onDownload(this)"
      >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br>
      MD5: e7a9a3061335c1e0c8be2588f13290af<br>
      SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1
    </td>
  </tr>

  <tr id="shamu">
    <td>Nexus 6 <br>"shamu"</td>
    <td><a href="#top" onclick="onDownload(this)"
      >shamu-npd90g-factory-f7a4e3a9.tgz</a><br>
      MD5: 2fb572ddcfca67bb1d741be97492a9ed<br>
      SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a
    </td>
  </tr>

  <tr id="angler">
    <td>Nexus 6P <br>"angler"</td>
    <td><a href="#top" onclick="onDownload(this)"
      >angler-npd90g-factory-cd9ac81e.tgz</a><br>
      MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br>
      SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054
    </td>
  </tr>

  <tr id="volantis">
    <td>Nexus 9 <br>"volantis"</td>
    <td><a href="#top" onclick="onDownload(this)"
      >volantis-npd90g-factory-41b55406.tgz</a><br>
      MD5: cefa78950141da2a7c75e887717e3c8f<br>
      SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f
    </td>
  </tr>

  <tr id="volantisg">
    <td>Nexus 9G <br>"volantisg"</td>
    <td><a href="#top" onclick="onDownload(this)"
      >volantisg-npd90g-factory-610492be.tgz</a><br>
      MD5: 2f36dc0d0fab02ab78be500677ec239f<br>
      SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad
    </td>
  </tr>

  <tr id="fugu">
    <td>Nexus Player <br>"fugu"</td>
    <td><a href="#top" onclick="onDownload(this)"
      >fugu-npd90g-factory-0fe95694.tgz</a><br>
      MD5: f4cb48f919e4c29c631de21416c612e2<br>
      SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4
    </td>
  </tr>

  <tr id="ryu">
    <td>Pixel C <br>"ryu"</td>
    <td><a href="#top" onclick="onDownload(this)"
      >ryu-npd90g-factory-f4da981c.tgz</a><br>
      MD5: d9f0e40b6c20d274831e8a7d285fd887<br>
      SHA-1: f4da981c70576133321e2858e52fe2c990e68a75
    </td>
  </tr>

  <tr id="seed">
    <td>General Mobile 4G (Android One) <br>"seed"</td>
    <td><a href="#top" onclick="onDownload(this)"
      >seed_l8150-npd90g-factory-48f59c99.tgz</a><br>
      MD5: 0ed565c509594072822d71c65b48ec8e<br>
      SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8
    </td>
  </tr>

</table>

<h3 id="revertDevice">Uninstalling the Preview from a device</h3>

<p>
  If you want to uninstall the preview from a device, you can do so in one of
  these ways: </p>
  <ul>
    <li><strong>Obtain a factory spec system image</strong> and then manually
    flash it to the device.
      <ul>
          <li>For <strong>Nexus devices and Pixel C devices</strong>, see
        the <a href="http://developers.google.com/android/nexus/images">Factory Images
        for Nexus Devices</a> page for downloads. </li>
        <li>For <strong>other devices</strong>, please contact the device manufacturer
        directly. Alternatively, if the device is supported
        in the Android Beta Program, you can enroll the device in the
        program and then un-enroll it (see below).</li>
      </ul>
    </li>
    <li><strong>Un-enroll the device from Android Beta Program</strong>. If the
    device is enrolled in the <a href="https://g.co/androidbeta">Android Beta
    Program</a>, regardless of device, you can simply un-enroll it from the program.
  <p>
    The device will receive an OTA update to the most recent production version
    of Android available for that device (for example, Android 6.0 Marshmallow).
    The update requires a full device reset, so user data on the device will be
    removed. Make sure to <strong>back up important data</strong> before
    un-enrolling a device.
  </p>
  </li>
</ul>

<p class="note"><strong>Note:</strong>
  Uninstalling a Developer Preview system image prior to
  the end of the program requires a full device reset and removes all user data
  on the device.
</p>


<h2 id="setupAVD">Set up an emulator</h2>

<p>To use the Android Emulator to run the Android N Preview, you need to
download the Android N Preview SDK and create a virtual device for the
emulator.</p>

<p>First, download the Android N Preview SDK as follows (if you
already got it while <a href="{@docRoot}preview/setup-sdk.html">setting up
to develop for Android N</a>, you can skip this part):

<ol>
  <li>In Android Studio, open the Settings dialog
    (<strong>File &gt; Settings</strong> on Windows/Linux, or
    <strong>Android Studio &gt; Preferences</strong> on Mac). In the left
    panel, select <strong>Appearance &amp; Behavior &gt;
  System Settings &gt; Android SDK</strong>.

  <li>Click the <strong>SDK Platforms</strong> tab, then select the
  <strong>Android N Preview</strong> check box.</li>

  <li>Click the <strong>SDK Tools</strong> tab, then select the
    <strong>Android SDK Build Tools</strong>, <strong>Android SDK
    Platform-Tools</strong>, and <strong>Android SDK Tools</strong> check
    boxes.
  </li>

  <li>Click <strong>OK</strong> and accept the license
    agreements for any packages to be installed.
  </li>
</ol>

<p>You should now have <strong>Android SDK Built-Tools 24.0 0 rc1</strong>,
<strong>Platform-Tools 24.0.0 rc1</strong>, and <strong>SDK Tools
25.0.9</strong>. If you do not update the SDK Tools to 25.0.9, then you won't
be able to run the x86_64 system images for Android N.</p>


<p>Now create a virtual device with the Android N system image:</p>

<ol>
  <li>Open the AVD Manager by selecting <strong>Tools > Android >
    AVD Manager</strong>.</li>
  <li>Click <strong>Create Virtual Device</strong>.</li>
  <li>Select a device such as Nexus 5X, Nexus 6P, Nexus 9, or Android TV,
    then click <strong>Next</strong>.</li>
  <li>Select the <strong>N</strong> system image (with the
    <strong>x86</strong> ABI), then click <strong>Next</strong>.
    (Only x86 system images are currently supported with the Android Emulator
for the Android N Preview.)
  <li>Complete the rest of the AVD configuration and click
    <strong>Finish</strong>.</li>
</ol>

<p>You can now launch the Android Emulator with the Android N Preview AVD.</p>

<p>
For the best experience in the Android Emulator, make sure you're using
Android Studio 2.1 or higher, which supports <a
href="http://tools.android.com/tech-docs/emulator">Android Emulator 2.0</a>
with much faster performance compared to the emulator in
Android Studio 1.5.</p>

<p>For more information about creating virtual devices, see <a href=
  "{@docRoot}tools/devices/index.html">Managing Virtual Devices</a>.
</p>














  </div><!-- landing -->

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



<script>
  var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/";
  function onDownload(link) {

    $("#downloadForRealz").html("Download " + $(link).text());
    $("#downloadForRealz").attr('href', urlRoot + $(link).text());

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

    return true;
  }


  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").fadeOut('fast');
      $("#landing").fadeIn('fast');
    */

      ga('send', 'event', 'M Preview', 'System Image', $("#downloadForRealz").html());

    /*
      location.hash = "";
    */
      return true;
    } else {
      return false;
    }
  }

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

</script>
