fullpage=true
no_footer_links=true
carousel=true
excludeFromSuggestions=true
page.metaDescription=The official site for Android developers. Provides the Android SDK and documentation for app developers and designers.
page.customHeadTag=<meta name="google-site-verification" content="sa-bIAI6GKvct3f61-WpRguHq-aNjtF7xJjMTSi79as" />

@jd:body


<div class="wrap">
    <!-- Slideshow -->
    <div class="slideshow-container slideshow-home col-16">
        <a href="" class="slideshow-prev">Prev</a>
        <a href="" class="slideshow-next">Next</a>
        <div class="frame">
            <ul>
                <!-- set explicit widths as needed to prevent overflow issues -->

                <li class="item carousel-home">
                    <div class="content-left col-11" style="padding-top:65px;">
                      <script src="//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
                      <div style="box-shadow: 3px 10px 18px 1px #999;width:600px;height:336px">
                        <div id="ytapiplayer">
                          <a href="http://www.youtube.com/watch?v=WWArLD6nqrk"><img width=600 src="{@docRoot}images/video-kiwi.jpg"></a><!--You need Flash player 8+ and JavaScript enabled to view this video. -->
                        </div>
                        <script type="text/javascript">
                            var params = { allowScriptAccess: "always" };
                            var atts = { id: "ytapiplayer" };
                            swfobject.embedSWF("//www.youtube.com/v/WWArLD6nqrk?enablejsapi=1&playerapiid=ytplayer&version=3&HD=1;rel=0;showinfo=0;modestbranding;origin=developer.android.com;autohide=1",
                              "ytapiplayer", "600", "336", "8", null, null, params, atts);

                            // Callback used to pause/resume carousel based on video state
                            function onytplayerStateChange(newState) {
                               var isPaused = $("#pauseButton").hasClass("paused");
                               if ((newState == 1) || (newState == 3)) {
                               // if playing or buffering, pause the carousel
                                 if (!isPaused) {
                                    $("#pauseButton").click();
                                 }
                               } else {
                               // otherwise, make sure carousel is running
                                 if (isPaused) {
                                    $("#pauseButton").click();
                                 }
                               }
                            }

                            // Callback received when YouTube player loads to setup callback (above)
                            function onYouTubePlayerReady(playerId) {
                              var ytplayer = document.getElementById("ytapiplayer");
                              ytplayer.addEventListener("onStateChange", "onytplayerStateChange");
                            }

                        </script>
                      </div>
                    </div>
                    <div class="content-right col-4">
                    <h1 style="white-space:nowrap;line-height:1.2em;">Developer Story: <br />Kiwi, Inc.</h1>
                    <p>Game developer Kiwi has had five titles in the top 25 grossing on Google Play. Hear how Google Play
                      has helped them double revenue every six months.</p>
                      <p><a href="{@docRoot}distribute/googleplay/spotlight/index.html" class="button">Watch more videos </a></p>
                    </div>
                </li>

                <li class="item carousel-home">
                  <div class="content-left col-7" style="width:400px;">
                    <a href="{@docRoot}about/versions/kitkat.html">
                      <img src="{@docRoot}images/home/kk-hero.jpg" width="242" style="padding-top:72px;">
                    </a>
                  </div>
                  <div class="content-right col-4" style="width:340px;">
                    <h1>Android 4.4 KitKat!</h1>
                    <p>A new version of Android is here, with great new features, APIs, and tools for developers.</p>
                    <p>Android 4.4 is built to run on more devices than ever before, and gives you more ways to showcase your content and create beautiful, useful, and innovative apps.</p>
                    <p>Learn about what's new in the Platform Highlights and see the API Overview for details.</p>
                    <p><a href="{@docRoot}about/versions/kitkat.html" class="button">Check out the highlights</a></p>
                  </div>
                </li>

                <li class="item carousel-home">
                  <div class="content-left col-11" style="padding-top:65px;">
                    <a href="https://www.youtube.com/watch?v=sONcojECWXs&list=PLWz5rJ2EKKc-2quE-o0enpILZF3nBZg_K&index=1">
                      <img src="{@docRoot}images/title-devbytes-kk.jpg" style="margin-top:0px;width:600px;">
                    </a>
                  </div>
                  <div class="content-right col-4">
                    <h1 style="white-space:nowrap;line-height:1.2em;">DevBytes: <br />Android 4.4</h1>
                    <p>Join the DevBytes team for a look at what's new in Android 4.4 KitKat&nbsp;&mdash; new ways to make your apps beautiful, printing, storage access framework, and more.</p>
                    <p><a href="https://www.youtube.com/watch?v=sONcojECWXs&list=PLWz5rJ2EKKc-2quE-o0enpILZF3nBZg_K&index=1" class="button">Watch the video </a></p>
                  </div>
                </li>

                <li class="item carousel-home">
                  <div class="content-left col-19" style="width:580px;">
                    <a href="{@docRoot}design/patterns/new.html">
                      <img src="{@docRoot}design/media/design_elements_landing.png" style="margin-top:30px">
                    </a>
                  </div>
                  <div class="content-right col-4" style="width:280px;">
                    <h1>Design for Android KitKat</h1>
                    <p>Android KitKat brings a refreshed UI with updated styles, patterns, and gestures to use in your apps. </p>
                    <p>We've updated the Android Design guidelines and added new pages on branding, fullscreen, and more. </p>
                    <p><a href="{@docRoot}design/patterns/new.html" class="button">See what's new</a></p>
                  </div>
                </li>

                <li class="item carousel-home">
                  <div class="content-left col-11" style="padding-top:65px;">
                    <a href="http://www.youtube.com/watch?v=6QHkv-bSlds&list=PLWz5rJ2EKKc8j2B95zGMb8muZvrIy-wcF&index=1">
                      <img src="{@docRoot}images/title-adia-kk.png" style="margin-top:0px;width:600px;">
                    </a>
                  </div>
                  <div class="content-right col-4">
                    <h1 style="white-space:nowrap;line-height:1.2em;">ADIA: <br />Android 4.4</h1>
                    </p>Join the Android Design in Action team for a walkthrough of new developer features, UX changes, and updates to design guidelines in Android 4.4.</p>
                    <p><a href="http://www.youtube.com/watch?v=6QHkv-bSlds&list=PLWz5rJ2EKKc8j2B95zGMb8muZvrIy-wcF&index=1" class="button">Watch the video </a></p>
                  </div>
                </li>
           </ul>
        </div>
    </div>

<!-- /End slideshow -->

    <a href="" id="pauseButton" style="display:none">pause</a>


</div>
<div class="wrap" style="padding-bottom:20px">
    <!-- Section links -->
    <div class="home-sections">
        <ul>
            <li><a href="{@docRoot}about/index.html">About Android</a></li>
            <li><a href="{@docRoot}sdk/index.html">Get the SDK</a></li>
            <li><a href="http://source.android.com">Open Source</a></li>
            <li><a href="{@docRoot}support.html">Support</a></li>
            <li class="last"><a href="{@docRoot}legal.html">Legal</a></li>
        </ul>
    </div>
    <!-- /Section links -->
</div>
