<!DOCTYPE html>

<html>
<head>


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=970" />

<meta name="Description" content="Test and build your apps against the next version of Android to ensure they're ready when the platform officially launches.">
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
<title>Android L Developer Preview | Android Developers</title>

<!-- STYLESHEETS -->
<link rel="stylesheet"
href="//fonts.googleapis.com/css?family=Roboto+Condensed">
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold"
  title="roboto">
<link href="/assets/css/default.css" rel="stylesheet" type="text/css">



<!-- JAVASCRIPT -->
<script src="//www.google.com/jsapi" type="text/javascript"></script>
<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
<script type="text/javascript">
  var toRoot = "/";
  var metaTags = [];
  var devsite = false;
</script>
<script src="/assets/js/docs.js" type="text/javascript"></script>

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-5831155-1', 'android.com');
  ga('create', 'UA-49880327-2', 'android.com', {'name': 'universal'});  // New tracker);
  ga('send', 'pageview');
  ga('universal.send', 'pageview'); // Send page view for new tracker.
</script>

</head>


<body class="gc-documentation" itemscope="" itemtype="http://schema.org/Article">


<a name="top"></a>
<a name="download"></a>
<div id="body-content">
<div class="fullpage">
<div id="jd-content">
  <div class="jd-descr" itemprop="articleBody">
<style>
body,html, #qv {background-color:#e9e9e9}

#qv * { font-weight:bold;}

.fullpage>#footer,
#jd-content>.content-footer.wrap {
  display:none;
}

.content-footer {
  display: none;
}
</style>

    <div style="border-bottom: 1px solid #a5c43a; position: absolute; left: 0; right: 0; top: 0; z-index:99">
      <div class="wrap" style="position: relative; height: 45px; padding: 0 20px;">
        <a href="/index.html" style="position:absolute;top:8px">
          <img src="/assets/images/dac_logo.png" srcset="/assets/images/dac_logo@2x.png 2x" width="123" height="25" alt="Android Developers home page">
        </a>
      </div>
    </div>













    <div class="landing-rest-of-page" style="position:relative;">








  <div class="wrap" id="tos" style="display:none;padding-top:90px">

    <p class="sdk-terms-intro">Before downloading the Android Preview system image,
      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:100%">
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 class="landing-section" id="landing-wrapper" style="padding:55px 10px 0">
          <div class="landing-section-header" style="margin:0">
            <div class="landing-h1">Android L Developer Preview</div>
            <div class="landing-subhead" style="padding-bottom:40px">
              Final APIs now available!
            </div>
          </div>
        <div class="wrap" style="padding:20px; position:relative">

    <img src="/images/home/l-hero_2x.png"
          srcset="/images/home/l-hero.png 1x, /images/home/l-hero_2x.png 2x"
          style=" margin:-5px -30px 0 0;float:right" alt="" width="510">

  <a href="/about/versions/android-5.0.html" class="landing-button landing-primary"
  style="position:absolute;z-index:100;right:215px;top:375px">Android 5.0 API Overview</a>

      <div style="width:440px">
<p>Android 5.0 (Lollipop) is now out of preview and available to users.</p>

<p>If you previously developed apps with the L Developer Preview, be aware that various APIs and
behaviors have changed, so you should update your SDK now to test your apps and take advantage of
new features in Android 5.0.</p>


        <p>To get the latest Android 5.0 SDK:</p>
        <ol>
          <li>Start the <a href="/tools/help/sdk-manager.html">Android SDK Manager</a>.</li>
          <li>In the <b>Tools</b> section, select the latest <b>SDK Tools</b>,
            <b>SDK Platform-tools</b>, and <b>SDK Build-tools</b>.</li>
            <!-- Android L not yet showing up in Android SDK Manager...  -->
          <li>Select everything under the <b>Android 5.0</b> section, then
            click <b>Install packages...</b></li>
          <li>Accept the licensing agreement for the packages, then click
            <b>Install</b>.</li>
        <li>If you previously installed the Android L Preview SDK, select all those
          packages in the SDK Manager and click <strong>Delete packages</strong>.
        </ol>
        <p>Now you're ready to develop and test on Android 5.0 with your normal workflow
          and begin publishing app updates to Google Play.
      </div>

    <h2 id="Start" class="norule" style="margin:60px 0 0 0">Get Started on Android 5.0</h2>
        </div> <!-- end .wrap -->



    <div class="wrap" style="background-color:#fff;padding:20px;position:relative">

      <div id="qv-wrapper">
      <div id="qv">
      <h2>More about Android 5.0</h2>
        <ul>
          <li><a href="http://android-developers.blogspot.com/">Android 5.0 announcement</a></li>
          <li><a href="/about/versions/android-5.0.html">Android 5.0 API Overview</a></li>
          <li><a href="/sdk/api_diff/21/changes.html">Android 5.0 API Diff Report</a></li>
          <li><a href="/samples/new/index.html">Android 5.0 API Samples</a></li>
        </ul>
      </div>
      </div>

      <p>Now that Android 5.0 APIs are final:</p>
      <ul>
        <li>The API level for Android 5.0 is 21, so be sure to update your
        app's manifest file to set <a href="/guide/topics/manifest/uses-sdk-element.html#target"
        ><code>targetSdkVersion</code></a> to
        <code>"21"</code> when you begin testing:
        <pre>&lt;uses-sdk android:targetSdkVersion="21" ... /></pre>
        </li>
        <li>Google Play now accepts APKs with <a
          href="/guide/topics/manifest/uses-sdk-element.html#min"><code>minSdkVersion</code></a> or
          <a href="/guide/topics/manifest/uses-sdk-element.html#target"
                  ><code>targetSdkVersion</code></a> set
          to <code>"21"</code>, so you can upload your updated apps today.</li>
      </ul>

      <p>If you previously flashed your Nexus 5 or Nexus 7 with a preview system image, you should
        now update your device to the final factory system image.
        Download the appropriate image from
        <a href="http://developers.google.com/android/nexus/images">Factory Images for Nexus
          Devices</a> and follow the flashing instructions on that page.</p>

        </div> <!-- end .wrap -->








        <div class="wrap" style="padding:20px; position:relative">
    <h2 id="Material" class="norule" style="margin:40px 0 0 0">Design with Material</h2>
    </div>

        <div class="wrap" style="background-color:#fff;padding:20px;position:relative">
      <img src="images/material-layers.png" width="240"
          style="position:absolute;right:20px;top:-50px">

      <div id="qv-wrapper" style="margin-top:120px">
      <div id="qv">

      <h2>More about Material Design</h2>
        <ul>
          <li><a href="http://www.google.com/design/spec/material-design/introduction.html">Material
            Design Spec</a></li>
          <li><a href="/design/material/index.html">Android Material Design</a></li>
          <li><a href="/training/material/index.html">Creating Apps with Material Design</a>
        </ul>
      </div>
      </div>


<p>Material design is a complete design philosophy for visual, motion, and interaction design
across platforms and devices. The <a href=
"http://www.google.com/design/spec/material-design/introduction.html">material design specification
(preview)</a> provides all the details for designers.</p>


      <p>To get started with Material design in your Android app, update
        your <a href="/guide/topics/manifest/uses-sdk-element.html#target"
        ><code>targetSdkVersion</code></a> to <code>"21"</code> and apply the new
        <a href="/reference/android/R.style.html#Theme_Material"
        ><code>Material</code></a> theme. For example, when creating
        a <a href="/guide/topics/ui/themes.html">custom theme</a>
        for your app, open your project's <code>res/values/styles.xml</code> file
        and extend the <a href="/reference/android/R.style.html#Theme_Material"
        ><code>Material</code></a> theme:</p>
<pre>
&lt;resources>
    &lt;style name="AppTheme" parent="android:Theme.Material">
        &lt;!-- Customize the Material elements here -->
    &lt;/style>
&lt;/resources>
</pre>
<p>Then apply your custom theme to your application in the manifest file:</p>
<pre>
&lt;application android:theme="&#64;style/AppTheme">
</pre>
<p>Material design is more than just the UI theme, though. It's also about the way the app
  behaves&mdash;how elements move and transform when the user interacts with them. So Android 5.0
  and the <a href="/tools/support-library/features.html#v7">v7 support library</a> provide new
  widgets and animation APIs that allow you to
  build interaction patterns described in the
  <a href="http://www.google.com/design/spec/material-design/introduction.html">Material design
    specification</a>.</p>

<p>All the Material design elements and interaction patterns provided by the UI styles and widgets
are flexible, so you can adopt only what's appropriate for your app and retain a unique identity
and experience for your product.</p>

<p>And Material design on Android isn't just for Android 5.0. The
  <a href="/tools/support-library/features.html#v7">v7 support library</a> has been significantly
  updated in revision 21 to make many of the Material design elements available when
  running on older versions of the platform.</p>

<p>For many more details about how to implement the Material look and feel,
    see <a href="/training/material/index.html">Creating Apps with Material
    Design</a>.</p>


    </div>











    <div class="wrap" style="padding:20px; position:relative">
    <h2 id="TV" class="norule" style="margin:40px 0 0 0">Build for Android TV</h2>
    </div>

        <div class="wrap" style="background-color:#fff;padding:20px;position:relative">
      <img src="/tv/images/components.png" width="240"
          style="position:absolute;right:20px;top:-50px">

    <div id="qv-wrapper" style="margin-top:120px">
    <div id="qv">

    <h2>More about Android TV</h2>
      <ul>
        <li><a href="/design/tv/index.html">Android TV Design</a></li>
        <li><a href="/training/tv/start/index.html">Building Apps for Android TV</a></li>
        <li><a href="/training/tv/games/index.html">Building TV Games</a></li>
        <li><a href="/training/tv/playback/index.html">Building TV Playback Apps</a></li>
        <li><a href="/distribute/essentials/quality/tv.html">TV App Quality</a></li>
      </ul>
    </div>
    </div>

<p>Android 5.0 provides a new platform for users to experience your app on a big screen. The
Android TV experience is centered around a simplified home screen that allows users to discover
your app's content with personalized recommendations and voice search, or select your app to launch
into your fullscreen experience.</p>


<p>Making your app available on Android TV does not require that you build an entirely new app.
Android TV is simply another form factor for the Android platform, so you can deliver the same APK
that you provide for phones and tablets to TVs through Google Play. However, to make your app
available on Android TV, you'll need to make some optimizations such as adding layouts
for the big screen and adding support for remote control input. For more information about design
guidelines, see <a href="/distribute/essentials/quality/tv.html">TV App Quality</a>.</p>

<p class="note"><strong>Note:</strong> Google Play for Android TV will officially
open for apps on November 3.</p>

<p>Android TV is also great new opportunity for Android games. If you'd like to make your games
available on Android TV, be sure to optimize the user experience for the big screen by following
the recommendations in <a href="/training/tv/games/index.html">Building TV Games</a>.</p>


      <p>To get started on Android TV, you need:</p>
      <ul>
        <li>The Android 5.0 SDK packages from the
          <a href="/tools/help/sdk-manager.html">Android SDK Manager</a>,
          including the <strong>Android TV System Image</strong> so you can create an
          Android TV emulator.</li>
        <li>An activity that's launchable from the Android TV home screen. This requires that you
        add the <a href="/reference/android/content/Intent.html#CATEGORY_LEANBACK_LAUNCHER"
        ><code>LEANBACK_LAUNCHER</code></a> category to one of your activities. For example:
<pre>
&lt;activity ... >
    &lt;intent-filter>
        &lt;action android:name="android.intent.action.MAIN" />
        &lt;category android:name="android.intent.category.LEANBACK_LAUNCHER" />
    &lt;/intent-filter>
&lt;/activity>
</pre>
        </li>

        <li>For a set of default styles that optimize your UI for the TV's
          <em>leanback user experience</em>,
          you should also apply the <a
          href="/reference/android/support/v17/leanback/R.style.html#Theme_Leanback"
        ><code>Leanback</code></a> theme to your activity:
<pre>
&lt;activity android:theme="@style/Theme.Leanback" ... >
</pre>
      </li>

      </ul>
      <p>You should also take advantage of the <a
        href="/tools/support-library/features.html#v17-leanback">v17 leanback library</a>, which
        provides the <a href="/reference/android/support/v17/leanback/R.style.html#Theme_Leanback"
        ><code>Leanback</code></a> theme shown above, plus several widgets designed to
        make your UI beautiful and easy to navigate on the big screen, such as a widget that creates
        a set of large horizontal card views.</p>

      <p>For more information about setting up a project for your TV app, building
        TV layouts, and handling controller input,
        see <a href="/training/tv/start/index.html">Building
        TV Apps</a>.</p>
    </div>








      </div> <!-- end .landing-section -->








    <!-- spacer -->
    <div class="wrap" style="padding:20px; position:relative">
      <p>&nbsp;</p>
    </div>



    <div id="footer" class="wrap" style="width:940px;position:relative;">
      <div id="copyright">
        Except as noted, this content is
        licensed under <a href="http://creativecommons.org/licenses/by/2.5/">
        Creative Commons Attribution 2.5</a>. For details and
        restrictions, see the <a href="https://developer.android.com/license.html">Content
        License</a>.
      </div>
    </div>
  </div> <!-- end landing-body-content -->

    </div>

      <div class="content-footer wrap" itemscope=""
        itemtype="http://schema.org/SiteNavigationElement">

        <div class="paging-links layout-content-col col-10">

        </div>

      </div>




  </div> <!-- end jd-content -->

<div id="footer" class="wrap" style="width:940px">


  <div id="copyright">

  Except as noted, this content is
  licensed under <a href="http://creativecommons.org/licenses/by/2.5/">
  Creative Commons Attribution 2.5</a>. For details and
  restrictions, see the <a href="https://developer.android.com/license.html">Content
  License</a>.
  </div>


</div> <!-- end footer -->
</div><!-- end doc-content -->

</div> <!-- end body-content -->


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

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

    $("#tos").show();
    $("#landing-wrapper").hide();

    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-wrapper").fadeIn('fast');
      ga('send', 'event', 'L Preview', 'System Image', $("#downloadForRealz").html());
      location.hash = "";
      // reset the checkbox for future downloads
      $("#agree").trigger('click');
      $("a#downloadForRealz").addClass('disabled');
      return true;
    } else {
      $("label#agreeLabel").parent().stop().animate({color: "#258AAF"}, 200,
        function() {$("label#agreeLabel").parent().stop().animate({color: "#222"}, 200)}
      );
      return false;
    }
  }

</script>


</body>
</html>