page.title=Developer Preview 1 Archive
page.image=images/cards/card-download_16-9_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 "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 the License Agreement, Google grants you a royalty-free, non-assignable, non-exclusive, non-sublicensable, limited, revocable license to use the Preview, personally or internally within your company or organization, solely to develop applications to run on the Android platform.

3.2 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.3 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.4 You agree that you will not take any actions that may cause or result in the fragmentation of Android, including but not limited to distributing, participating in the creation of, or promoting in any way a software development kit derived from the 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="#sdk">Developer Preview 1 SDK</a></li>
        <li><a href="#docs">Developer Documentation</a></li>
        <li><a href="#images">Hardware System Images</a></li>
      </ol>
  </div>
</div>


<p>
  The Android M Preview SDK includes development tools, Android system files, and library files to
  help you test your app and the new APIs coming in the next release of the platform. This document
  describes how to get the downloadable components of the preview for testing your app.
</p>


<h2 id="sdk">Developer Preview 1 SDK</h2>

<p>
  The Preview SDK is available for download through the <a href=
  "{@docRoot}tools/help/sdk-manager.html">Android SDK Manager</a>. For more information on
  downloading and configuring the Preview SDK, see <a href=
  "{@docRoot}preview/setup-sdk.html#downloadSdk">Set Up the Preview SDK</a>.
</p>


<h2 id="docs">Developer Documentation</h2>

<p>
  The developer documentation download package provides detailed API reference information and an API difference report for the preview.
</p>

<table>
  <tr>
    <th scope="col">Description</th>
    <th scope="col">Download / Checksums</th>
  </tr>
  <tr id="docs-dl">
    <td>Android M Preview 1<br>Developer Docs</td>
    <td><a href="#top" onclick="onDownload(this)"
      >m-preview-1-developer-docs.zip</a><br>
      MD5: b65201b0d35416f5a1b7a071b52854a7<br>
      SHA-1: d47e856aa65e06897e6edd902ad8d2b1f05ac3ec
    </td>
  </tr>
<table>


<h2 id="images">Hardware System Images</h2>

<p>
  These system images allow you to install a preview version of the platform on a physical device for
  testing. By configuring a device with one of these images, you can install and test your app to
  see how it performs on the next version of the platform. The process of installing a system image
  on a device <em>removes all data from the device</em>, so you should backup your data before
  installing a system image.
</p>

<p class="warning">
  <b>Warning:</b> The following Android system images are previews and are subject to change. Your
  use of these system images is governed by the Android SDK Preview License Agreement. The Android
  preview system images are not stable releases, and may contain errors and defects that can result
  in damage to your computer systems, devices, and data. The preview Android system images are not
  subject to the same testing as the factory OS and can cause your phone and installed services and
  applications to stop working.
</p>

<table>
  <tr>
    <th scope="col">Device</th>
    <th scope="col">Download / Checksums</th>
  </tr>
  <tr id="hammerhead">
    <td>Nexus 5 (GSM/LTE) <br>"hammerhead"</td>
    <td><a href="#top" onclick="onDownload(this)"
      >hammerhead-MPZ44Q-preview-55d76d3a.tgz</a><br>
      MD5: 9e2631b06c6525e401ceaae3677ff320<br>
      SHA-1: 55d76d3a379b18f3363f28d8a462c236ab96fc36
    </td>
  </tr>
  <tr id="shamu">
    <td>Nexus 6 <br>"shamu"</td>
    <td><a href="#top" onclick="onDownload(this)"
      >shamu-MPZ44Q-preview-c1d6506a.tgz</a><br>
      MD5: 307cbf9dab0a38df4ab2639d02be12aa<br>
      SHA-1: c1d6506a74094bdb2f4b8677c7fe4967334f9ea8
    </td>
  </tr>
  <tr id="volantis">
    <td>Nexus 9 <br>"volantis"</td>
    <td><a href="#top" onclick="onDownload(this)"
      >volantis-MPZ44Q-preview-d15ad483.tgz</a><br>
      MD5: fae40377fd999d2b09128665c915264d<br>
      SHA-1: 7ab05f96093b2cb370b226f65931202714cbc2ca
    </td>
  </tr>
  <tr id="fugu">
    <td>Nexus Player <br>"fugu"</td>
    <td><a href="#top" onclick="onDownload(this)"
      >fugu-MPZ44Q-preview-2406ba05.tgz</a><br>
      MD5: 815902141a85cc65e7725f005cad31d5<br>
      SHA-1: 2406ba0598dea1e69110497ac0bc8e16789bc8fb
    </td>
  </tr>
</table>

<h3 id="install-image">Install an Image to a Device</h3>

<p>
  In order to use a device image for testing, you must install it on a compatible device. Follow
  the instructions below to install a system image:
</p>

<ol>
  <li>Download and uncompress one of the system image packages listed here.</li>
  <li>Backup any data you want to preserve from the device.</li>
  <li>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.</li>
</ol>

<p class="note">
  <strong>Note:</strong> Once you have flashed a development device the preview system image,
  it is upgraded automatically with the next preview release through over-the-air (OTA) updates.
</p>

<h3 id="revertDevice">Revert a Device to Factory Specifications</h3>

<p>
  If you want to uninstall the preview and revert the device to factory specifications, go to
  <a href="http://developers.google.com/android/nexus/images">developers.google.com/android</a> and
  download the image you want to flash to for your device. Follow the instructions on that page to
  flash the image to your device.
</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>
