page.title=Download and Test with a Device
meta.keywords="wear-preview"
page.tags="wear-preview"
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 Wear 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 Wear SDK Preview License Agreement (the “License Agreement”).

1. Introduction

1.1 The Android Wear 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">
        <ol>
          <li>
            <a href="#set_up_a_watch">Set Up a Watch</a>
          </li>

          <li>
            <a href="#set_up_an_emulator">Set Up an Emulator</a>
          </li>
        </ol>
      </div>
    </div>

    <p>
      You can run and test your app with the Android Wear 2.0 Developer Preview
      in either of these ways:
    </p>

    <ul>
      <li>Install Android Wear 2.0 on a supported watch, or
      </li>

      <li>Set up an emulator that is running Android Wear 2.0
      </li>
    </ul>

    <p>
      If you want an environment for basic compatibility
      testing of your app, you can use your current APK and a
      supported watch or an emulator. As described below, you don't necessarily
      need to update your full development environment to do basic testing.
    </p>

    <p>
      However, if you want to modify your app to target
      Android Wear 2.0 or use new APIs, you need to update your development
      environment. See <a href="{@docRoot}wear/preview/start.html">Get Started
      with the Preview</a>.
    </p>

    <h2 id="set_up_a_watch">
      Set Up a Watch
    </h2>

    <p>
      You can download a system image and manually flash it to a matching
      watch. See the table below to download the image for your test
      watch.
    </p>

    <p>
      Manually flashing a watch is useful if you need precise control over the
      test environment or need to reinstall frequently, such as for automated
      testing.
    </p>

    <p class="warning">
      <strong>Warning:</strong> Installing a system image on a watch removes all data from the
      watch, so you should back up your data first.
    </p>

    <h3 id="preview_system_images">
      Preview system images
    </h3>

    <p>
      The preview includes system images for testing your app. Based on your
      device, you can download a preview system image from the following tables
      and flash it to the corresponding device.
    </p>

    <h4 id="preview_image_for_lge_watch_urbane_2nd_edition">
      Preview image for LGE Watch Urbane 2nd Edition
    </h4>

    <p class="caution">
      <strong>Caution:</strong> Flashing your device will
      require unlocking the bootloader which may
      void the device's warranty--proceed at your own risk.
     </p>

    <table>
      <tr>
        <th style="width:300px">
          Type of LGE Watch Urbane 2nd Edition image
        </th>
        <th>
          Download/Checksums
        </th>
      </tr>

      <tr id="nemo-preview">
        <td>
          Preview image for testing
        </td>
        <td><a href="#top" onclick="onDownload(this)">nemo-nvd36i-factory-9cdd2ac0.tgz</a><br>
          MD5: b33ba8e59780fbe5c83d8936b108640f<br>
          SHA-1: 9cdd2ac01f2976cafe5a21958298dac159b7a325
        </td>
      </tr>

      <tr id="nemo-non-preview">
        <td>
          Non-preview image (for after testing)
        </td>
        <td><a href="#top" onclick="onDownload(this)">nemo-mnc40x-factory-fa528bec.tgz</a><br>
          MD5: 0b8ba3653d5a93cb854f4d7409d7b6c9<br>
          SHA-1: fa528bec8aba3bf6c7d901ba63cd6ea0a08dbeb0
        </td>
      </tr>

    </table>

    <h4 id="preview_image_for_huawei_watch">
      Preview image for Huawei Watch
    </h4>

    <p class="caution">
      <strong>Caution:</strong> Flashing your device will require unlocking
      the bootloader which
      shall void the device's warranty--proceed at your own risk.
    </p>

    <table>
      <tr>
        <th style="width:300px">
          Type of Huawei Watch image
        </th>
        <th>
          Download/Checksums
        </th>
      </tr>
      <tr id="sturgeon-preview">
        <td>
          Preview image for testing
        </td>
        <td><a href="#top" onclick="onDownload(this)">sturgeon-nvd36i-factory-2cbe5080.tgz</a><br>
          MD5: ccc972cdc33cba778a2f624066ef5713<br>
          SHA-1: 2cbe5080ded060ce43ba65ff27e2290b28981634
        </td>
      </tr>
      <tr id="sturgeon-non-preview">
        <td>
          Non-preview image (for after testing)
        </td>
        <td><a href="#top" onclick="onDownload(this)">sturgeon-mec23l-factory-48003078.tgz</a><br>
          MD5: 417b5cbddb29a2262bce133e283d2732<br>
          SHA-1: 4800307843580f818557dd7c43d8ba2161e289b2
        </td>
      </tr>
    </table>

    <h3 id="flash_a_watch">
      Flash a watch
    </h3>

    <p>
      The steps for flashing an image to a watch are similar to the <a href=
      "https://developers.google.com/android/nexus/images">steps provided for
      flashing to a phone</a>. After you back up your watch
      data, use steps in this section to flash the image to the
      specific watch that matches the image (e.g., you must
      use an LGE Watch Urbane 2nd Edition for the corresponding image).
    </p>

    <p class="warning">
      <strong>Warning:</strong> Installing a system image on a watch removes all data from the
      watch, so you should back up your data first.
    </p>

    <h4 id="set_up_the_watch_to_be_flashed">
      Set up the watch to be flashed
    </h4>

    <p>
      From the phone, unpair ("Forget") the watch.
      Then on the watch, enable the Developer Options menu and ADB debugging as
      follows:
    </p>

    <ol>
      <li>Open the Settings menu on the watch.
      </li>

      <li>Scroll to the bottom of the menu. If no <strong>Developer
      Options</strong> item is provided, tap <strong>About</strong>.
      </li>

      <li>Tap the build number 7 times.
      </li>

      <li>From the Settings menu, tap the <strong>Developer Options</strong>
      item.
      </li>

      <li>Enable ADB debugging.
      </li>
    </ol>

    <h4 id="confirm_installation_of_the_fastboot_tool">
      Confirm installation of the fastboot tool
    </h4>

    <p>
      To flash a device using one of the <a href=
      "#preview_system_images">system images</a>, confirm that you have the
      <code>fastboot</code> tool in the <code>platform-tools/</code> directory
      of the <a href="https://developer.android.com/sdk">Android SDK</a>. Be
      sure that you have the latest version of the <strong>Android SDK
      Platform-tools</strong> from the <a href=
      "{@docRoot}tools/help/sdk-manager.html">SDK Manager</a>.
    </p>

    <p>
      After you confirm that you have the <code>fastboot</code> tool, add the
      tool to your PATH environment variable so the tool can be found when you
      flash the watch.
    </p>

    <h4 id="transfer_the_image_to_the_watch">
      Transfer the image to the watch
    </h4>

    <p>
      To download a preview image and flash it to the watch:
    </p>

    <ol>
      <li>Download and unzip the appropriate system image from a "Preview
      image for testing" row in a <a href="#preview_system_images">table
      above</a>.
      </li>

      <li>Attach the watch charger to the watch and plug the USB cord (from the
      charger) into your computer.
      </li>

      <li>Use the following <a href="{@docRoot}tools/help/adb.html">adb
      command</a> to confirm that the watch is available for flashing:
      <code>adb devices</code>
      </li>

      <li>Use the following adb command to start the device in fastboot mode:
      <code>adb reboot bootloader</code>
      </li>

      <li>If necessary, use one of following two commands to
      unlock the device's bootloader. This step erases all data on the
      device: <code>fastboot flashing unlock</code> or, for some
      devices, <code>fastboot oem unlock</code>
      </li>

      <li>Navigate to the directory where you unzipped the system image in Step
      1.
      </li>

      <li>Execute the <code>flash-all</code> script by typing
      <code>flash-all.sh</code> or, in the case of Windows,
      <code>flash-all.bat</code>.
      </li>
    </ol>


    <h4 id="set_up_watch">
      Set up the watch and begin testing
    </h4>

      <p>
        After the <code>flash-all</code> script finishes, your watch reboots
        and soon will be ready for testing with the preview image.
      </p>

    <ol>
      <li>Attach the watch charger to the watch and plug the USB cord
      into your computer, if it is not already plugged in.
      </li>

      <li>Use the following <a href="{@docRoot}tools/help/adb.html">adb
      command</a> to confirm that the watch is available:
      <code>adb devices</code>
      </li>

      <li>Use the following adb command to start the device in fastboot mode:
      <code>adb reboot bootloader</code>
      </li>

      <li>Use the following command to
      lock the device's bootloader: <code>fastboot flashing lock</code> or, for some
      devices, <code>fastboot oem lock</code>
      </li>

      <li>On the watch, continue the boot by touching <strong>'0'</strong>.
      </li>

    </ol>


    <p>
      Pair the watch with a
      phone or tablet. The preview now is available for testing on the watch.
      Before installing an app, enable the Developer Options menu, and ADB
      debugging, on the watch as follows:
    </p>

    <ol>
      <li>Open the Settings menu (on the watch).
      </li>

      <li>Scroll to the bottom of the menu and tap <strong>About</strong>.
      </li>

      <li>Tap the build number 7 times.
      </li>

      <li>From the Settings menu, tap the <strong>Developer Options</strong>
      item.
      </li>

      <li>Enable ADB debugging.
      </li>

      <li>Connect the watch to your computer and tap <strong>Always allow from
      this computer</strong>.
      </li>
    </ol>

    <p>
      Your watch is ready for you to <a href=
      "{@docRoot}training/wearables/apps/creating.html#Install">install and run
      your app</a>:
    </p>

    <ol>
      <li>Open your app in Android Studio.
      </li>

      <li>Select <strong>wear</strong> from the Run/Debug configuration
      drop-down menu.
      </li>

      <li>Click the Play button.
      </li>

      <li>In the Select Deployment Target box, click your device.
      </li>
    </ol>

    <p>
      After your app is installed on the watch, you are prompted to start the
      app on the watch.
    </p>

    <p>
      When testing is completed, follow the steps for <a href=
      "#remove_the_preview_from_a_watch">removing the preview</a>.
    </p>

    <h3 id="remove_the_preview_from_a_watch">
      Remove the preview from a watch
    </h3>

    <p>
      When testing with the preview is done, unpair ("Forget") the watch from the phone and
      restore the watch as follows:
    </p>

    <ol>
      <li>Download and unzip the appropriate system image from a "Non-preview
      image" row in a <a href="#preview_system_images">table
      above</a>.
      </li>

      <li>Manually flash the image to the watch using steps similar to those in
      <a href="#transfer_the_image_to_the_watch">Transfer the image to the
      watch</a>, except that you flash the <strong>non-preview</strong> image
      to the watch.
      </li>
    </ol>

    <p>
      <strong>Note</strong>: Removing a preview system image requires a full
      device reset and removes all user data on the device.
    </p>

    <h2 id="set_up_an_emulator">
      Set Up an Emulator
    </h2>

    <p>
      To test with the Android Emulator, create a virtual device in Android
      Studio as follows:
    </p>

    <ol>
      <li>Open the AVD Manager by selecting <strong>Tools &gt; Android &gt; AVD
      Manager</strong>.
      </li>

      <li>Click <strong>Create Virtual Device</strong>.
      </li>

      <li>In the <strong>Category</strong> pane, select Wear, choose a hardware profile,
       and click <strong>Next</strong>. The Android Wear 2.0 Developer Preview
       is only optimized for round devices currently, so we recommend not
       using the square or chin profiles for now.
      </li>

      <li>Select an <strong>N</strong> image to download. The images may be on
      the <strong>x86</strong> tab instead of the <strong>Recommended</strong>
      tab, until installed. For example, select the image with the
      <strong>Release Name</strong> of N, the <strong>API Level</strong> of N,
      and the <strong>Target</strong> of "Android 6.X (with Android Wear)".
      When the download and installation are complete, click
      <strong>Finish</strong> and then click <strong>Next</strong>.
      </li>

      <li>Verify the configuration of the Android Virtual Device (AVD) and
      click <strong>Finish</strong>.
      </li>
    </ol>

    <p>
      You can now test an application in the <a href=
      "{@docRoot}tools/devices/emulator.html">Android Emulator</a>. For more
      information about using virtual devices, see <a href=
      "{@docRoot}tools/devices/managing-avds.html">Managing AVDs with the AVD
      Manager</a>.
    </p>
 </div><!-- landing -->

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


<script>
  var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/wear-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>