page.title=Download and Test with a Device
meta.keywords="wear-preview"
page.tags="wear-preview"
page.image=images/cards/card-n-sdk_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 <strong>compatibility
      testing</strong> 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 <strong>modify</strong> 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 Android Wear 2.0 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 system 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>
      Installing a system image on a watch <strong>removes all data from the
      watch</strong>, 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>
      <strong>Please note the following:</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 scope="col">
          Type of LGE Watch Urbane 2nd Edition image
        </th>
        <th scope="col">
          Download/Checksums
        </th>
      </tr>
      <tr id="download-3-placeholder">
        <td>
          Preview image for testing
        </td>
        <td><a href="#top" onclick="onDownload(this)">download-3-placeholder.tgz</a><br>
          MD5: [string]<br>
          SHA-1: [string]
        </td>
      </tr>
      <tr id="download-4-placeholder">
        <td>
          Non-preview image (for after testing)
        </td>
        <td><a href="#top" onclick="onDownload(this)">download-4-placeholder.tgz</a><br>
          MD5: [string]<br>
          SHA-1: [string]
        </td>
      </tr>
    </table>

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

    <p>
      <strong>Please note the following:</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 scope="col">
          Type of Huawei Watch image
        </th>
        <th scope="col">
          Download/Checksums
        </th>
      </tr>
      <tr id="download-1-placeholder">
        <td>
          Preview image for testing
        </td>
        <td><a href="#top" onclick="onDownload(this)">download-1-placeholder.tgz</a><br>
          MD5: [string]<br>
          SHA-1: [string]
        </td>
      </tr>
      <tr id="download-2-placeholder">
        <td>
          Non-preview image (for after testing)
        </td>
        <td><a href="#top" onclick="onDownload(this)">download-2-placeholder.tgz</a><br>
          MD5: [string]<br>
          SHA-1: [string]
        </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 <strong>back up your watch
      data</strong>, use steps in this section to flash the image to the
      <strong>specific watch</strong> that matches the image (e.g., you must
      use an LGE Watch Urbane 2nd Edition for the corresponding image).
    </p>

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

    <p>
      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 the "Preview
      system image" column in the <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 <strong>one</strong> of following two commands to
      unlock the device's bootloader. This step <strong>erases all data on the
      device</strong>: <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>

    <p>
      After the script finishes, your watch reboots. 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=
      "#uninstall_the_preview_from_a_watch">uninstalling the preview</a>.
    </p>

    <h3 id="uninstall_the_preview_from_a_watch">
      Uninstall the preview from a watch
    </h3>

    <p>
      When testing with the preview is done, restore the watch as follows:
    </p>

    <ol>
      <li>Download and unzip the appropriate system image from the "Non-preview
      system image" column in the <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 name
      (such as Android Wear Round), and click <strong>Next</strong>.
      </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>