<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Google Data &#187; Android Developers</title>
	<atom:link href="/author/android-developers/feed/" rel="self" type="application/rss+xml" />
	<link>https://googledata.org</link>
	<description>Everything Google: News, Products, Services, Content, Culture</description>
	<lastBuildDate>Sat, 14 Mar 2015 22:51:44 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.7.5</generator>
	<item>
		<title>Haystack TV Doubles Engagement with Android TV</title>
		<link>https://googledata.org/google-android/haystack-tv-doubles-engagement-with-android-tv/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=haystack-tv-doubles-engagement-with-android-tv</link>
		<comments>https://googledata.org/google-android/haystack-tv-doubles-engagement-with-android-tv/#comments</comments>
		<pubDate>Fri, 13 Mar 2015 20:26:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=6457bd92274decc81904ff79f5747031</guid>
		<description><![CDATA[<p><i>Posted by <a href="http://google.com/+JBGordon">Joshua Gordon</a>, Developer Advocate</i></p>

<p><a href="http://www.haystack.tv/">Haystack TV</a> is a small six person startup with an ambitious goal: personalize the news. Traditionally, watching news on TV means viewing a list of stories curated by the network. Wouldn&#8217;t it be better if you could watch a personalized news channel, based on interesting YouTube stories? </p>

<p>Haystack already had a mobile app, but entering the living room space seemed daunting. Although &#8220;Smart TVs&#8221; have been on the market for a while, they remain challenging for developers to work with. Many hardware OEMs have proprietary platforms, but Android TV is different. It&#8217;s an open ecosystem with great developer resources. Developers can reach millions of users with familiar Android APIs. If you have an existing Android app, it&#8217;s easy to bring it to the living room. </p>

<p>Two weeks was all it took for Haystack TV to bring their mobile app to Android TV. That includes building an immersive, cinematic UI (a task greatly simplified by the Android framework). Since launching on Android TV, Haystack TV&#8217;s viewership is growing at 40% per month. Previously, users were spending about 40 minutes watching content on mobile per week. Now that&#8217;s up to 80 minutes in the living room. Their longest engagements are through Chromecast and Android TV. </p>

<!--[Interactive video]  -->

<p><i>Hear from Daniel Barreto, CEO of Haystack TV, on developing for Android TV</i></p>

<p>Haystack TV&#8217;s success on Android TV is a great example of how the Android multi-form factor developer experience shines. Once you&#8217;ve learned the ropes of writing Android apps, developing for another form factor (<a href="https://developer.android.com/wear/index.html?utm_campaign=haystack-313&#38;utm_source=dac&#38;utm_medium=blog">Wear</a>, <a href="https://developer.android.com/auto/index.html?utm_campaign=haystack-313&#38;utm_source=dac&#38;utm_medium=blog">Auto</a>, <a href="https://developer.android.com/tv/index.html?utm_campaign=haystack-313&#38;utm_source=dac&#38;utm_medium=blog">TV</a>) is simple.</p>

<h3>Android TV helps you create cinematic UIs </h3>

<p>Haystack TV&#8217;s UI is smooth and cinematic. How were they able to build a great one so quickly? <a href="https://developer.android.com/training/tv/playback/index.html?utm_campaign=haystack-313&#38;utm_source=dac&#38;utm_medium=blog">Developing</a> an immersive UI/UX with Android TV is surprisingly easy. The Leanback support library provides fragments for browsing content, showing a details screen, and search. You can use these to get transitions and animations almost for free. To learn more about building UIs for Android TV, watch the <a href="https://www.youtube.com/watch?v=72K1VhjoL98">Using the Leanback Library</a> DevByte and check out the <a href="https://github.com/googlesamples/androidtv-Leanback">code samples</a>.</p>

<div><a href="http://3.bp.blogspot.com/-WUOxd8y-k20/VQMJ5x7OppI/AAAAAAAABY4/g4yHEs2oqKk/s1600/image02.png"><img border="0" src="http://3.bp.blogspot.com/-WUOxd8y-k20/VQMJ5x7OppI/AAAAAAAABY4/g4yHEs2oqKk/s640/image02.png"></a><p><i>Browsing recommended stories</i></p></div>

<h3>Your content, front and center</h3>

<p>The recommendations row is a central feature of the Android TV home screen. It&#8217;s the first thing users see when they turn on their TVs. You can surface content to appear on the recommendations row by implementing the <a href="https://developer.android.com/training/tv/discovery/recommendations.html?utm_campaign=haystack-313&#38;utm_source=dac&#38;utm_medium=blog">recommendation service</a>. For example, your app can suggest videos your users will want to watch next (say, the next episode in a series, or a related news story). This is great for getting noticed and increasing engagements.</p>

<div><a href="http://4.bp.blogspot.com/-i8xNp2oMNlM/VQNIyxgmlzI/AAAAAAAABZw/bG4on3CW0hY/s1600/fixed.png"><img border="0" src="http://4.bp.blogspot.com/-i8xNp2oMNlM/VQNIyxgmlzI/AAAAAAAABZw/bG4on3CW0hY/s640/fixed.png"><p><i>Haystack&#8217;s content on the recommendations row</i></p></a></div>

<h3>Make your content searchable</h3>

<p>How can users find their favorite movie or show from a library of thousands? On Android TV, they can search for it using their voice. This is much faster and more relaxing than typing on the screen with a remote control! In addition to providing <a href="https://developer.android.com/training/tv/discovery/in-app-search.html?utm_campaign=haystack-313&#38;utm_source=dac&#38;utm_medium=blog">in-app search</a>, your app can surface content to appear on the <a href="https://developer.android.com/training/tv/discovery/searchable.html?utm_campaign=haystack-313&#38;utm_source=dac&#38;utm_medium=blog">global search</a> results page. The framework takes care of speech recognition for you and delivers the result to your app as a plain text string.</p>

<h3>Next Steps</h3>

<p>Android TV makes it possible for small startups to create apps for the living room. There are extensive developer resources. For an overview, watch the <a href="https://www.youtube.com/watch?v=6K_jxccHv5M">Introduction to Android TV</a> DevByte. For details, see the <a href="http://developer.android.com/training/tv/index.html?utm_campaign=haystack-313&#38;utm_source=dac&#38;utm_medium=blog">developer training</a> docs. Watch this episode of <a href="https://www.youtube.com/watch?v=4hsa7uJFyx8">Coffee with a Googler</a> to learn more about the vision for the platform. To get started on your app, visit <a href="http://developer.android.com/tv/index.html?utm_campaign=haystack-313&#38;utm_source=dac&#38;utm_medium=blog">developer.android.com/tv</a>. </p>

<div><div><a href="https://plus.google.com/+AndroidDevelopers/posts/9bofeEcFA5r"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/+AndroidDevelopers/posts/9bofeEcFA5r"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/+AndroidDevelopers/posts/9bofeEcFA5r"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by <a href="http://google.com/+JBGordon">Joshua Gordon</a>, Developer Advocate</i></p>

<p><a href="http://www.haystack.tv/">Haystack TV</a> is a small six person startup with an ambitious goal: personalize the news. Traditionally, watching news on TV means viewing a list of stories curated by the network. Wouldn’t it be better if you could watch a personalized news channel, based on interesting YouTube stories? </p>

<p>Haystack already had a mobile app, but entering the living room space seemed daunting. Although “Smart TVs” have been on the market for a while, they remain challenging for developers to work with. Many hardware OEMs have proprietary platforms, but Android TV is different. It’s an open ecosystem with great developer resources. Developers can reach millions of users with familiar Android APIs. If you have an existing Android app, it’s easy to bring it to the living room. </p>

<p>Two weeks was all it took for Haystack TV to bring their mobile app to Android TV. That includes building an immersive, cinematic UI (a task greatly simplified by the Android framework). Since launching on Android TV, Haystack TV’s viewership is growing at 40% per month. Previously, users were spending about 40 minutes watching content on mobile per week. Now that’s up to 80 minutes in the living room. Their longest engagements are through Chromecast and Android TV. </p>

<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/MPnH7h12h0U" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 70px;" width="560"></iframe>

<p style="margin:auto;text-align:center"><i>Hear from Daniel Barreto, CEO of Haystack TV, on developing for Android TV</i></p>

<p>Haystack TV’s success on Android TV is a great example of how the Android multi-form factor developer experience shines. Once you’ve learned the ropes of writing Android apps, developing for another form factor (<a href="https://developer.android.com/wear/index.html?utm_campaign=haystack-313&utm_source=dac&utm_medium=blog">Wear</a>, <a href="https://developer.android.com/auto/index.html?utm_campaign=haystack-313&utm_source=dac&utm_medium=blog">Auto</a>, <a href="https://developer.android.com/tv/index.html?utm_campaign=haystack-313&utm_source=dac&utm_medium=blog">TV</a>) is simple.</p>

<h3>Android TV helps you create cinematic UIs </h3>

<p>Haystack TV’s UI is smooth and cinematic. How were they able to build a great one so quickly? <a href="https://developer.android.com/training/tv/playback/index.html?utm_campaign=haystack-313&utm_source=dac&utm_medium=blog">Developing</a> an immersive UI/UX with Android TV is surprisingly easy. The Leanback support library provides fragments for browsing content, showing a details screen, and search. You can use these to get transitions and animations almost for free. To learn more about building UIs for Android TV, watch the <a href="https://www.youtube.com/watch?v=72K1VhjoL98">Using the Leanback Library</a> DevByte and check out the <a href="https://github.com/googlesamples/androidtv-Leanback">code samples</a>.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-WUOxd8y-k20/VQMJ5x7OppI/AAAAAAAABY4/g4yHEs2oqKk/s1600/image02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-WUOxd8y-k20/VQMJ5x7OppI/AAAAAAAABY4/g4yHEs2oqKk/s640/image02.png" /></a><p style="margin:auto;text-align:center"><i>Browsing recommended stories</i></p></div>

<h3>Your content, front and center</h3>

<p>The recommendations row is a central feature of the Android TV home screen. It’s the first thing users see when they turn on their TVs. You can surface content to appear on the recommendations row by implementing the <a href="https://developer.android.com/training/tv/discovery/recommendations.html?utm_campaign=haystack-313&utm_source=dac&utm_medium=blog">recommendation service</a>. For example, your app can suggest videos your users will want to watch next (say, the next episode in a series, or a related news story). This is great for getting noticed and increasing engagements.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-i8xNp2oMNlM/VQNIyxgmlzI/AAAAAAAABZw/bG4on3CW0hY/s1600/fixed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-i8xNp2oMNlM/VQNIyxgmlzI/AAAAAAAABZw/bG4on3CW0hY/s640/fixed.png" /><p style="margin:auto;text-align:center"><i>Haystack’s content on the recommendations row</i></p></a></div>

<h3>Make your content searchable</h3>

<p>How can users find their favorite movie or show from a library of thousands? On Android TV, they can search for it using their voice. This is much faster and more relaxing than typing on the screen with a remote control! In addition to providing <a href="https://developer.android.com/training/tv/discovery/in-app-search.html?utm_campaign=haystack-313&utm_source=dac&utm_medium=blog">in-app search</a>, your app can surface content to appear on the <a href="https://developer.android.com/training/tv/discovery/searchable.html?utm_campaign=haystack-313&utm_source=dac&utm_medium=blog">global search</a> results page. The framework takes care of speech recognition for you and delivers the result to your app as a plain text string.</p>

<h3>Next Steps</h3>

<p>Android TV makes it possible for small startups to create apps for the living room. There are extensive developer resources. For an overview, watch the <a href="https://www.youtube.com/watch?v=6K_jxccHv5M">Introduction to Android TV</a> DevByte. For details, see the <a href="http://developer.android.com/training/tv/index.html?utm_campaign=haystack-313&utm_source=dac&utm_medium=blog">developer training</a> docs. Watch this episode of <a href="https://www.youtube.com/watch?v=4hsa7uJFyx8">Coffee with a Googler</a> to learn more about the vision for the platform. To get started on your app, visit <a href="http://developer.android.com/tv/index.html?utm_campaign=haystack-313&utm_source=dac&utm_medium=blog">developer.android.com/tv</a>. </p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/+AndroidDevelopers/posts/9bofeEcFA5r" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/+AndroidDevelopers/posts/9bofeEcFA5r" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/+AndroidDevelopers/posts/9bofeEcFA5r" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/haystack-tv-doubles-engagement-with-android-tv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>A new reference app for multi-device applications</title>
		<link>https://googledata.org/google-android/a-new-reference-app-for-multi-device-applications/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=a-new-reference-app-for-multi-device-applications</link>
		<comments>https://googledata.org/google-android/a-new-reference-app-for-multi-device-applications/#comments</comments>
		<pubDate>Thu, 12 Mar 2015 17:23:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=9b25f7fbbf56e8e2150a22df4655445c</guid>
		<description><![CDATA[It is now possible to bring the benefits of your app to your users wherever they happen to be, no matter what device they have near them. Today we&#8217;re releasing <a href="https://github.com/googlesamples/android-UniversalMusicPlayer?utm_campaign=music-sample-3-15&#38;utm_source=dac&#38;utm_medium=blog">a reference sample</a> that shows how to implement such a service with an app that works across multiple Android form-factors. This sample, the Universal Music Player, is a bare-bones but functional reference app that supports multiple devices and form factors in a single codebase. It is compatible with Android Auto, Android Wear, and Google Cast devices. Give it a try and easily adapt your own app for wherever your users are, be that a phone, watch, TV, car, or more!<br /><br /><figure><img border="0" src="http://1.bp.blogspot.com/-x6hB53Im3Tc/VQHPJp_W0uI/AAAAAAAABYc/L-G9d0DCGV4/s1600/phone.gif" height="320" width="166"><figcaption>Playback controls and album art in the lock screen.<br />
On the application toolbar, the Google Cast icon.</figcaption></figure><br /><figure><img border="0" src="http://4.bp.blogspot.com/-tG0hW5GzhFw/VQMwrR_4K5I/AAAAAAAABZQ/eLwB3tNiFC0/s1600/universal_music_player.png" height="280" width="480"><figcaption>Controlling playback through Android Auto
</figcaption></figure><br /><br /><figure><img border="0" src="http://4.bp.blogspot.com/-sR66__fQylo/VQHPO1jnnWI/AAAAAAAABYk/-3TRMYfsP7E/s1600/watch.gif"><figcaption>Controlling playback on an Android Wear watch
</figcaption></figure><br />
This sample uses a number of new features in <a href="https://developer.android.com/about/versions/android-5.0.html?utm_campaign=music-sample-3-15&#38;utm_source=dac&#38;utm_medium=blog#MediaPlaybackControl">Android 5.0 Lollipop</a>, like <a href="https://developer.android.com/reference/android/app/Notification.MediaStyle.html?utm_campaign=music-sample-3-15&#38;utm_source=dac&#38;utm_medium=blog">MediaStyle notifications</a>, <a href="https://developer.android.com/reference/android/media/session/MediaSession.html?utm_campaign=music-sample-3-15&#38;utm_source=dac&#38;utm_medium=blog">MediaSession</a> and <a href="https://developer.android.com/reference/android/service/media/MediaBrowserService.html?utm_campaign=music-sample-3-15&#38;utm_source=dac&#38;utm_medium=blog">MediaBrowserService</a>. They make it easy to implement media browsing and playback on multiple devices with a single version of your app.<br /><br />
Check out the <a href="https://github.com/googlesamples/android-UniversalMusicPlayer?utm_campaign=music-sample-3-15&#38;utm_source=dac&#38;utm_medium=blog">source code</a> and let your users enjoy your app from wherever they like.<br /><br />
Posted by <a href="https://plus.google.com/+RenatoMangini">Renato Mangini</a>, Senior Developer Platform Engineer, Google Developer Platform Team
<div><div><a href="https://plus.google.com/+AndroidDevelopers/posts/KoTFn5EqrNY"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/b/108967384991768947849/+AndroidDevelopers/posts/KoTFn5EqrNY"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/b/108967384991768947849/+AndroidDevelopers/posts/KoTFn5EqrNY"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[It is now possible to bring the benefits of your app to your users wherever they happen to be, no matter what device they have near them. Today we’re releasing <a href="https://github.com/googlesamples/android-UniversalMusicPlayer?utm_campaign=music-sample-3-15&utm_source=dac&utm_medium=blog">a reference sample</a> that shows how to implement such a service with an app that works across multiple Android form-factors. This sample, the Universal Music Player, is a bare-bones but functional reference app that supports multiple devices and form factors in a single codebase. It is compatible with Android Auto, Android Wear, and Google Cast devices. Give it a try and easily adapt your own app for wherever your users are, be that a phone, watch, TV, car, or more!<br />
<br />
<figure style="text-align: center;font-style: italic;font-size: smaller;text-indent: 0;"><img border="0" src="http://1.bp.blogspot.com/-x6hB53Im3Tc/VQHPJp_W0uI/AAAAAAAABYc/L-G9d0DCGV4/s1600/phone.gif" height="320" width="166" />
<figcaption>Playback controls and album art in the lock screen.<br>
On the application toolbar, the Google Cast icon.</figcaption>
</figure>
<br />
<figure style="text-align: center;font-style: italic;font-size: smaller;text-indent: 0;">
<img border="0" src="http://4.bp.blogspot.com/-tG0hW5GzhFw/VQMwrR_4K5I/AAAAAAAABZQ/eLwB3tNiFC0/s1600/universal_music_player.png" height="280" width="480" /><figcaption>Controlling playback through Android Auto
</figcaption></figure><br />
<br />
<figure style="text-align: center;font-style: italic;font-size: smaller;text-indent: 0;"><img border="0" src="http://4.bp.blogspot.com/-sR66__fQylo/VQHPO1jnnWI/AAAAAAAABYk/-3TRMYfsP7E/s1600/watch.gif" />
<figcaption>Controlling playback on an Android Wear watch
</figcaption></figure><br />
This sample uses a number of new features in <a href="https://developer.android.com/about/versions/android-5.0.html?utm_campaign=music-sample-3-15&utm_source=dac&utm_medium=blog#MediaPlaybackControl">Android 5.0 Lollipop</a>, like <a href="https://developer.android.com/reference/android/app/Notification.MediaStyle.html?utm_campaign=music-sample-3-15&utm_source=dac&utm_medium=blog">MediaStyle notifications</a>, <a href="https://developer.android.com/reference/android/media/session/MediaSession.html?utm_campaign=music-sample-3-15&utm_source=dac&utm_medium=blog">MediaSession</a> and <a href="https://developer.android.com/reference/android/service/media/MediaBrowserService.html?utm_campaign=music-sample-3-15&utm_source=dac&utm_medium=blog">MediaBrowserService</a>. They make it easy to implement media browsing and playback on multiple devices with a single version of your app.<br /><br />
Check out the <a href="https://github.com/googlesamples/android-UniversalMusicPlayer?utm_campaign=music-sample-3-15&utm_source=dac&utm_medium=blog">source code</a> and let your users enjoy your app from wherever they like.<br /><br />
Posted by <a href="https://plus.google.com/+RenatoMangini">Renato Mangini</a>, Senior Developer Platform Engineer, Google Developer Platform Team
<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/+AndroidDevelopers/posts/KoTFn5EqrNY" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/b/108967384991768947849/+AndroidDevelopers/posts/KoTFn5EqrNY" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/b/108967384991768947849/+AndroidDevelopers/posts/KoTFn5EqrNY" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/a-new-reference-app-for-multi-device-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android 5.1 Lollipop SDK</title>
		<link>https://googledata.org/google-android/android-5-1-lollipop-sdk/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=android-5-1-lollipop-sdk</link>
		<comments>https://googledata.org/google-android/android-5-1-lollipop-sdk/#comments</comments>
		<pubDate>Tue, 10 Mar 2015 18:07:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android sdk]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=a898ac56a62139417fbcc4c8d414616e</guid>
		<description><![CDATA[<div>

<img src="http://1.bp.blogspot.com/-U9MP8MVJfRc/VECiwuK8QmI/AAAAAAAAA1w/27T9dWOLdhg/s300/l_image.png" alt=""></div>

                  
<p><em>By <a href="https://www.google.com/+JamalEason">Jamal Eason</a>, Product Manager, Android</em></p>


<p>Yesterday we <a href="http://officialandroid.blogspot.com/2015/03/android-51-unwrapping-new-lollipop.html">announced</a> Android 5.1, an updated version of the <a href="https://developer.android.com/about/versions/lollipop.html?utm_campaign=lollipop-51-315&#38;utm_source=dac&#38;utm_medium=blog">Android Lollipop</a> platform that improves stability, provides better control of notifications, and increases performance. As a part of the Lollipop update, we are releasing the Android 5.1 SDK (API Level 22) which supports the new platform and lets you get started with developing and testing. </p>

<h3>What's new in Android 5.1?</h3>

<p>For developers, Android 5.1 introduces a small set of new APIs. A key API addition is support for  multiple SIM cards, which is important for many regions where <a href="https://www.android.com/one/">Android One</a> phones are being adopted. Consumers of Android One devices will have more flexibility to switch between carriers and manage their network activities in the way that works best for them. Therefore you, as a developer, can create new app experiences that take advantage of this new feature. </p>



<p>In addition to the <a href="http://officialandroid.blogspot.com/2015/03/android-51-unwrapping-new-lollipop.html">new consumer features</a>, Android 5.1 also enhances enterprise features to better support the launch of <a href="http://developer.android.com/training/enterprise/index.html?utm_campaign=lollipop-51-315&#38;utm_source=dac&#38;utm_medium=blog">Android for Work</a>.</p>


<div>




<img border="0" src="http://1.bp.blogspot.com/-9TLEoYAUbr8/VPU0d4HsOXI/AAAAAAAABXs/x2IjrdP_JGk/s400/blog_Android_one_home.png"><img border="0" src="http://1.bp.blogspot.com/-J1FyaFUHQ7I/VPU0d6yGnoI/AAAAAAAABXo/Ro-GYG7otRA/s400/blog_android_dual_sim_2_names.png"><p>Android 5.1 supports multiple SIM cards on compatible devices like Android One.</p>

</div>


<h3>Updates for the Android SDK</h3>

<p>To get you started with Android 5.1, we have updated the Android SDK tools to support the new platform and its <a href="http://developer.android.com/sdk/api_diff/22/changes.html?utm_campaign=lollipop-51-315&#38;utm_source=dac&#38;utm_medium=blog">new APIs</a>. The SDK now includes Android 5.1 emulator system images that you can use to test your apps and develop using the latest capabilities and APIs. You can update your SDK through the  <a href="http://developer.android.com/sdk/installing/adding-packages.html?utm_campaign=lollipop-51-315&#38;utm_source=dac&#38;utm_medium=blog">Android SDK Manager</a> in <a href="http://developer.android.com/sdk/installing/studio.html?utm_campaign=lollipop-51-315&#38;utm_source=dac&#38;utm_medium=blog">Android Studio</a>.</p>

<p>For details on the new developer APIs, take a look at the <a href="http://developer.android.com/about/versions/android-5.1.html?utm_campaign=lollipop-51-315&#38;utm_source=dac&#38;utm_medium=blog">API Overview</a>.</p>




<h3>Coming to Nexus devices soon</h3>

<p>Over the next few weeks, we&#8217;ll be rolling out updates for Android 5.1 to the following Nexus devices: Nexus 4, Nexus 5, Nexus 6, Nexus 7 [2012], Nexus 7 [2012] (3G),  Nexus 7 (2013), Nexus 7 [2013] (3G/LTE), Nexus 9, Nexus 9 (LTE), Nexus 10, and Nexus Player.
</p>

<h3>Next Steps</h3>

<p>As with all Android releases, it&#8217;s a good idea to test your apps on the new platform as soon as possible. You can get started today using Android 5.1 system images with the emulator that&#8217;s included in the SDK, or you can <a href="https://developers.google.com/android/nexus/images?utm_campaign=lollipop-51-315&#38;utm_source=dac&#38;utm_medium=blog">download</a> an Android 5.1 Nexus image and <a href="https://developers.google.com/android/nexus/images?utm_campaign=lollipop-51-315&#38;utm_source=dac&#38;utm_medium=blog#instructions">flash</a> the system image to your Nexus device.</p>

<p>If you have not had a chance to update your app to <a href="http://developer.android.com/training/material/get-started.html?utm_campaign=lollipop-51-315&#38;utm_source=dac&#38;utm_medium=blog">material design</a>, or explore how your app might work on <a href="http://developer.android.com/wear/index.html?utm_campaign=lollipop-51-315&#38;utm_source=dac&#38;utm_medium=blog">Android Wear</a>, <a href="http://developer.android.com/tv/index.html?utm_campaign=lollipop-51-315&#38;utm_source=dac&#38;utm_medium=blog">Android TV</a>, or even <a href="http://developer.android.com/auto/index.html?utm_campaign=lollipop-51-315&#38;utm_source=dac&#38;utm_medium=blog">Android Auto</a>, now is a good time to get started with the Android 5.1 SDK update. </p>


<div><div><a href="https://plus.google.com/108967384991768947849/posts/YY3crTS8c15"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/YY3crTS8c15"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/YY3crTS8c15"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[
<div style="float:right;padding-top:0em;margin-left:3em;margin-right:1em;margin-bottom:2em;">

<img src="http://1.bp.blogspot.com/-U9MP8MVJfRc/VECiwuK8QmI/AAAAAAAAA1w/27T9dWOLdhg/s300/l_image.png" alt="" 
style="border-radius: 6px;padding:0;margin:0;" />
</div>

                  
<p><em>By <a href="https://www.google.com/+JamalEason">Jamal Eason</a>, Product Manager, Android</em></p>


<p itemprop="description">Yesterday we <a href="http://officialandroid.blogspot.com/2015/03/android-51-unwrapping-new-lollipop.html">announced</a> Android 5.1, an updated version of the <a href="https://developer.android.com/about/versions/lollipop.html?utm_campaign=lollipop-51-315&utm_source=dac&utm_medium=blog">Android Lollipop</a> platform that improves stability, provides better control of notifications, and increases performance. As a part of the Lollipop update, we are releasing the Android 5.1 SDK (API Level 22) which supports the new platform and lets you get started with developing and testing. </p>

<h3>What's new in Android 5.1?</h3>

<p>For developers, Android 5.1 introduces a small set of new APIs. A key API addition is support for  multiple SIM cards, which is important for many regions where <a href="https://www.android.com/one/">Android One</a> phones are being adopted. Consumers of Android One devices will have more flexibility to switch between carriers and manage their network activities in the way that works best for them. Therefore you, as a developer, can create new app experiences that take advantage of this new feature. </p>



<p>In addition to the <a href="http://officialandroid.blogspot.com/2015/03/android-51-unwrapping-new-lollipop.html">new consumer features</a>, Android 5.1 also enhances enterprise features to better support the launch of <a href="http://developer.android.com/training/enterprise/index.html?utm_campaign=lollipop-51-315&utm_source=dac&utm_medium=blog">Android for Work</a>.</p>


<div class="separator" style="clear: both; text-align: center;margin-bottom:2em;">




<img border="0" src="http://1.bp.blogspot.com/-9TLEoYAUbr8/VPU0d4HsOXI/AAAAAAAABXs/x2IjrdP_JGk/s400/blog_Android_one_home.png" />
<img border="0" src="http://1.bp.blogspot.com/-J1FyaFUHQ7I/VPU0d6yGnoI/AAAAAAAABXo/Ro-GYG7otRA/s400/blog_android_dual_sim_2_names.png" />

<p style="margin: 0em auto auto 40px;font-size: 13px;color:#666;width:90%">Android 5.1 supports multiple SIM cards on compatible devices like Android One.</p>

</div>


<h3>Updates for the Android SDK</h3>

<p>To get you started with Android 5.1, we have updated the Android SDK tools to support the new platform and its <a href="http://developer.android.com/sdk/api_diff/22/changes.html?utm_campaign=lollipop-51-315&utm_source=dac&utm_medium=blog">new APIs</a>. The SDK now includes Android 5.1 emulator system images that you can use to test your apps and develop using the latest capabilities and APIs. You can update your SDK through the  <a href="http://developer.android.com/sdk/installing/adding-packages.html?utm_campaign=lollipop-51-315&utm_source=dac&utm_medium=blog">Android SDK Manager</a> in <a href="http://developer.android.com/sdk/installing/studio.html?utm_campaign=lollipop-51-315&utm_source=dac&utm_medium=blog">Android Studio</a>.</p>

<p>For details on the new developer APIs, take a look at the <a href="http://developer.android.com/about/versions/android-5.1.html?utm_campaign=lollipop-51-315&utm_source=dac&utm_medium=blog">API Overview</a>.</p>




<h3>Coming to Nexus devices soon</h3>

<p>Over the next few weeks, we’ll be rolling out updates for Android 5.1 to the following Nexus devices: Nexus 4, Nexus 5, Nexus 6, Nexus 7 [2012], Nexus 7 [2012] (3G),  Nexus 7 (2013), Nexus 7 [2013] (3G/LTE), Nexus 9, Nexus 9 (LTE), Nexus 10, and Nexus Player.
</p>

<h3>Next Steps</h3>

<p>As with all Android releases, it’s a good idea to test your apps on the new platform as soon as possible. You can get started today using Android 5.1 system images with the emulator that’s included in the SDK, or you can <a href="https://developers.google.com/android/nexus/images?utm_campaign=lollipop-51-315&utm_source=dac&utm_medium=blog">download</a> an Android 5.1 Nexus image and <a href="https://developers.google.com/android/nexus/images?utm_campaign=lollipop-51-315&utm_source=dac&utm_medium=blog#instructions">flash</a> the system image to your Nexus device.</p>

<p>If you have not had a chance to update your app to <a href="http://developer.android.com/training/material/get-started.html?utm_campaign=lollipop-51-315&utm_source=dac&utm_medium=blog">material design</a>, or explore how your app might work on <a href="http://developer.android.com/wear/index.html?utm_campaign=lollipop-51-315&utm_source=dac&utm_medium=blog">Android Wear</a>, <a href="http://developer.android.com/tv/index.html?utm_campaign=lollipop-51-315&utm_source=dac&utm_medium=blog">Android TV</a>, or even <a href="http://developer.android.com/auto/index.html?utm_campaign=lollipop-51-315&utm_source=dac&utm_medium=blog">Android Auto</a>, now is a good time to get started with the Android 5.1 SDK update. </p>


<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/YY3crTS8c15" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/YY3crTS8c15" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/YY3crTS8c15" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-5-1-lollipop-sdk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Google Play services 7.0 &#8211; Places Everyone!</title>
		<link>https://googledata.org/google-android/google-play-services-7-0-places-everyone/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=google-play-services-7-0-places-everyone</link>
		<comments>https://googledata.org/google-android/google-play-services-7-0-places-everyone/#comments</comments>
		<pubDate>Tue, 03 Mar 2015 01:22:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=257bce5fc1f12a20485a34f92f7ed617</guid>
		<description><![CDATA[<p><i>Posted by <a href="https://plus.google.com/+IanLake">Ian Lake</a>, Developer Advocate</i></p>

<p>Today, we&#8217;re bringing you new tools to build better apps with the rollout of Google Play services 7.0. With this release, we&#8217;re delivering improvements to location settings experiences, a brand new API for place information, new fitness data, <!-- automatic integration of AdMob and Google Analytics,-->  Google Play Games, and more. </p>

<h3>Location Settings Dialog</h3>
<p>While the <a href="https://developer.android.com/reference/com/google/android/gms/location/FusedLocationProviderApi.html?utm_campaign=playservices70-315&#38;utm_source=dac&#38;utm_medium=blog">FusedLocationProviderApi</a> combines multiple sensors to give you the optimal location, the accuracy of the location your app receives still depends greatly on what settings are enabled on the device (e.g. GPS, wifi, airplane mode, etc). In Google Play services 7.0, we&#8217;re introducing a standard mechanism to check that the necessary location settings are enabled for a given <a href="https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html?utm_campaign=playservices70-315&#38;utm_source=dac&#38;utm_medium=blog">LocationRequest</a> to succeed. If there are possible improvements, you can display a one touch control for the user to change their settings without leaving your app.</p>

<div><a href="http://4.bp.blogspot.com/-CC8P9RN7_pk/VPTwYyjt8kI/AAAAAAAABWw/A5cjqZc39hQ/s1600/Location%2BSettings%2BDialog.png"><img border="0" src="http://4.bp.blogspot.com/-CC8P9RN7_pk/VPTwYyjt8kI/AAAAAAAABWw/A5cjqZc39hQ/s400/Location%2BSettings%2BDialog.png"></a></div>

<p>This API provides a great opportunity to make for a much better user experience, particularly if location information is critical to the user experience of your app such as was the case with <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.maps">Google Maps</a> when they integrated the Location Settings dialog and saw a dramatic increase in the number of users in a good location state.</p>

<h3>Places API</h3>
<p>Location can be so much more than a latitude and longitude: the new Places API makes it easy to get details from Google&#8217;s database of places and businesses. The built-in place picker makes it easy for the user to pick their current place and provides all the relevant place details including name, address, phone number, website, and more.</p>

<div><a href="http://3.bp.blogspot.com/-NJHRh-XaQpA/VPT1PFKolYI/AAAAAAAABXU/wF7zJoZ8rgU/s1600/Place%2BPicker%2BDialog.png"><img border="10" src="http://3.bp.blogspot.com/-NJHRh-XaQpA/VPT1PFKolYI/AAAAAAAABXU/wF7zJoZ8rgU/s400/Place%2BPicker%2BDialog.png"></a></div>

<p>If you prefer to provide your own UI, the <code>getCurrentPlace()</code> API returns places directly around the user&#8217;s current location. Autocomplete predictions are also provided to allow a low latency search experience directly within your app.</p>

<p>You can also manually add places with the <code>addPlace()</code> API and report that the user is at a particular place, ensuring that even the most explorative users can input and share their favorite new places.</p>

<p>The Places API will also be available cross-platform: in a few days, you&#8217;ll be able to apply for the Places API for iOS beta program to ensure a great and consistent user experience across mobile platforms. </p>

<h3>Google Fit</h3>
<p><a href="https://developers.google.com/fit/?utm_campaign=playservices70-315&#38;utm_source=dac&#38;utm_medium=blog">Google Fit</a> makes building fitness apps easier with fitness specific APIs on retrieving sensor data like current location and speed, collecting and storing activity data in Google Fit&#8217;s open platform, and automatically aggregating that data into a single view of the user&#8217;s fitness data.</p>

<p>In Google Play services 7.0, the previous <code>Fitness.API</code> that you passed into your <code>GoogleApiClient</code> has now been replaced with a number of APIs, matching the high level set of <a href="https://developers.google.com/fit/android/?utm_campaign=playservices70-315&#38;utm_source=dac&#38;utm_medium=blog">Google Fit Android APIs</a>:</p>
<ul><li><code>SENSORS_API</code> to access raw sensor data via <a href="https://developer.android.com/reference/com/google/android/gms/fitness/Fitness.html?utm_campaign=playservices70-315&#38;utm_source=dac&#38;utm_medium=blog#SensorsApi">SensorsApi</a></li>
<li><code>RECORDING_API</code> to record data via <a href="https://developer.android.com/reference/com/google/android/gms/fitness/Fitness.html?utm_campaign=playservices70-315&#38;utm_source=dac&#38;utm_medium=blog#RecordingApi">RecordingApi</a></li>
<li><code>HISTORY_API</code> for inserting, deleting, or reading data via <a href="https://developer.android.com/reference/com/google/android/gms/fitness/HistoryApi.html?utm_campaign=playservices70-315&#38;utm_source=dac&#38;utm_medium=blog">HistoryApi</a></li>
<li><code>SESSIONS_API</code> for managing sessions via <a href="https://developer.android.com/reference/com/google/android/gms/fitness/SessionsApi.html?utm_campaign=playservices70-315&#38;utm_source=dac&#38;utm_medium=blog">SessionsApi</a></li>
<li><code>BLE_API</code> to interact with Bluetooth Low Energy devices via <a href="https://developer.android.com/reference/com/google/android/gms/fitness/BleApi.html?utm_campaign=playservices70-315&#38;utm_source=dac&#38;utm_medium=blog">BleApi</a></li>
<li><code>CONFIG_API</code> to access custom data types and settings for Google Fit via <a href="https://developer.android.com/reference/com/google/android/gms/fitness/ConfigApi.html?utm_campaign=playservices70-315&#38;utm_source=dac&#38;utm_medium=blog">ConfigApi</a></li>
</ul><p>This change significantly reduces the memory requirement for Google Fit enabled apps running in the background. Like always, apps built on previous versions of Google Play services will continue to work, but we strongly suggest you rebuild your Google Fit enabled apps to take advantage of this change.</p>

<p>Having all the data can be an empowering part of making meaningful changes and Google Fit is augmenting their <a href="https://developers.google.com/fit/android/data-types?utm_campaign=playservices70-315&#38;utm_source=dac&#38;utm_medium=blog">existing data types</a> with the addition of body fat percentage and sleep data.</p>

&#60;!-- <h3>Google Mobile Ads</h3>
<p>We&#8217;ve found integration of AdMob and Google Analytics a powerful combination for analyzing how your users <i>really</i> use your app since we launched <a href="http://analytics.blogspot.com/2014/03/new-tools-to-grow-your-mobile-app.html">Google Analytics in AdMob</a> last year. This new release enables any Google Mobile Ads SDK implementation to automatically get Google Analytics integration giving you the number of users and sessions, session duration, operating systems, device models, geography, and automatic screen reporting without any additional development work.</p>

<p>In addition, we&#8217;ve made numerous improvements across the SDK including ad request prefetching (saving battery usage and improving apparent latency) and making the SDK MRAIDv2 compliant.</p> --&#62;

<h3>Google Play Games</h3>
<p>Announced at Game Developers Conference (GDC), we&#8217;re offering <a href="http://android-developers.blogspot.com/2015/03/new-tools-to-supercharge-your-games-on.html">new tools to supercharge your games on Google Play</a>. Included in Google Play services 7.0 is the Nearby Connections API, allowing games to seamlessly connect smartphones and tablets as second-screen controls to the game running on your TV.</p>

<!--[Interactive video]  --> 

<h3>App Indexing</h3>
<p><a href="https://developers.google.com/app-indexing/?utm_campaign=playservices70-315&#38;utm_source=dac&#38;utm_medium=blog">App Indexing</a> lets Google index apps just like websites, enabling Google search results to deep-link directly into your native app. We've simplified the App Indexing API to make this integration even easier for you by combining the existing <code>view()/viewEnd()</code> and <code>action()/end()</code> flows into a single <code>start()</code> and <code>end()</code> API.</p>

<h3>Changes to GoogleApiClient</h3>
<p><code>GoogleApiClient</code> serves as the common entry point for <a href="https://developer.android.com/google/auth/api-client.html?utm_campaign=playservices70-315&#38;utm_source=dac&#38;utm_medium=blog">accessing Google APIs</a>. For this release, we&#8217;ve made retrieval of Google OAuth 2.0 tokens part of GoogleApiClient, making it much easier to request server auth codes to access Google APIs.</p>

<h3>SDK Coming Soon!</h3>
<p>We will be rolling out Google Play services 7.0 over the next few days.  Expect an update to this blog post, published documentation, and the availability of the SDK once the rollout is completed.</p>

<p>To learn more about Google Play services and the APIs available to you through it, visit the <a href="http://developer.android.com/google/index.html?utm_campaign=playservices70-315&#38;utm_source=dac&#38;utm_medium=blog">Google Services section on the Android Developer site</a>.</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/JRfRmePSWFK"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/JRfRmePSWFK"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/JRfRmePSWFK"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by <a href="https://plus.google.com/+IanLake">Ian Lake</a>, Developer Advocate</i></p>

<p>Today, we’re bringing you new tools to build better apps with the rollout of Google Play services 7.0. With this release, we’re delivering improvements to location settings experiences, a brand new API for place information, new fitness data, <!-- automatic integration of AdMob and Google Analytics,-->  Google Play Games, and more. </p>

<h3>Location Settings Dialog</h3>
<p>While the <a href="https://developer.android.com/reference/com/google/android/gms/location/FusedLocationProviderApi.html?utm_campaign=playservices70-315&amp;utm_source=dac&amp;utm_medium=blog">FusedLocationProviderApi</a> combines multiple sensors to give you the optimal location, the accuracy of the location your app receives still depends greatly on what settings are enabled on the device (e.g. GPS, wifi, airplane mode, etc). In Google Play services 7.0, we’re introducing a standard mechanism to check that the necessary location settings are enabled for a given <a href="https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html?utm_campaign=playservices70-315&amp;utm_source=dac&amp;utm_medium=blog">LocationRequest</a> to succeed. If there are possible improvements, you can display a one touch control for the user to change their settings without leaving your app.</p>

<div class="separator" style="clear: both; text-align: center;"><a black="" border:5px="" href="http://4.bp.blogspot.com/-CC8P9RN7_pk/VPTwYyjt8kI/AAAAAAAABWw/A5cjqZc39hQ/s1600/Location%2BSettings%2BDialog.png" imageanchor="1" solid="" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-CC8P9RN7_pk/VPTwYyjt8kI/AAAAAAAABWw/A5cjqZc39hQ/s400/Location%2BSettings%2BDialog.png" /></a></div>

<p>This API provides a great opportunity to make for a much better user experience, particularly if location information is critical to the user experience of your app such as was the case with <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.maps">Google Maps</a> when they integrated the Location Settings dialog and saw a dramatic increase in the number of users in a good location state.</p>

<h3>Places API</h3>
<p>Location can be so much more than a latitude and longitude: the new Places API makes it easy to get details from Google’s database of places and businesses. The built-in place picker makes it easy for the user to pick their current place and provides all the relevant place details including name, address, phone number, website, and more.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-NJHRh-XaQpA/VPT1PFKolYI/AAAAAAAABXU/wF7zJoZ8rgU/s1600/Place%2BPicker%2BDialog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="10" src="http://3.bp.blogspot.com/-NJHRh-XaQpA/VPT1PFKolYI/AAAAAAAABXU/wF7zJoZ8rgU/s400/Place%2BPicker%2BDialog.png" /></a></div>

<p>If you prefer to provide your own UI, the <code>getCurrentPlace()</code> API returns places directly around the user’s current location. Autocomplete predictions are also provided to allow a low latency search experience directly within your app.</p>

<p>You can also manually add places with the <code>addPlace()</code> API and report that the user is at a particular place, ensuring that even the most explorative users can input and share their favorite new places.</p>

<p>The Places API will also be available cross-platform: in a few days, you’ll be able to apply for the Places API for iOS beta program to ensure a great and consistent user experience across mobile platforms. </p>

<h3>Google Fit</h3>
<p><a href="https://developers.google.com/fit/?utm_campaign=playservices70-315&amp;utm_source=dac&amp;utm_medium=blog">Google Fit</a> makes building fitness apps easier with fitness specific APIs on retrieving sensor data like current location and speed, collecting and storing activity data in Google Fit’s open platform, and automatically aggregating that data into a single view of the user’s fitness data.</p>

<p>In Google Play services 7.0, the previous <code>Fitness.API</code> that you passed into your <code>GoogleApiClient</code> has now been replaced with a number of APIs, matching the high level set of <a href="https://developers.google.com/fit/android/?utm_campaign=playservices70-315&amp;utm_source=dac&amp;utm_medium=blog">Google Fit Android APIs</a>:</p>
<ul><li><code>SENSORS_API</code> to access raw sensor data via <a href="https://developer.android.com/reference/com/google/android/gms/fitness/Fitness.html?utm_campaign=playservices70-315&amp;utm_source=dac&amp;utm_medium=blog#SensorsApi">SensorsApi</a></li>
<li><code>RECORDING_API</code> to record data via <a href="https://developer.android.com/reference/com/google/android/gms/fitness/Fitness.html?utm_campaign=playservices70-315&amp;utm_source=dac&amp;utm_medium=blog#RecordingApi">RecordingApi</a></li>
<li><code>HISTORY_API</code> for inserting, deleting, or reading data via <a href="https://developer.android.com/reference/com/google/android/gms/fitness/HistoryApi.html?utm_campaign=playservices70-315&amp;utm_source=dac&amp;utm_medium=blog">HistoryApi</a></li>
<li><code>SESSIONS_API</code> for managing sessions via <a href="https://developer.android.com/reference/com/google/android/gms/fitness/SessionsApi.html?utm_campaign=playservices70-315&amp;utm_source=dac&amp;utm_medium=blog">SessionsApi</a></li>
<li><code>BLE_API</code> to interact with Bluetooth Low Energy devices via <a href="https://developer.android.com/reference/com/google/android/gms/fitness/BleApi.html?utm_campaign=playservices70-315&amp;utm_source=dac&amp;utm_medium=blog">BleApi</a></li>
<li><code>CONFIG_API</code> to access custom data types and settings for Google Fit via <a href="https://developer.android.com/reference/com/google/android/gms/fitness/ConfigApi.html?utm_campaign=playservices70-315&amp;utm_source=dac&amp;utm_medium=blog">ConfigApi</a></li>
</ul>

<p>This change significantly reduces the memory requirement for Google Fit enabled apps running in the background. Like always, apps built on previous versions of Google Play services will continue to work, but we strongly suggest you rebuild your Google Fit enabled apps to take advantage of this change.</p>

<p>Having all the data can be an empowering part of making meaningful changes and Google Fit is augmenting their <a href="https://developers.google.com/fit/android/data-types?utm_campaign=playservices70-315&amp;utm_source=dac&amp;utm_medium=blog">existing data types</a> with the addition of body fat percentage and sleep data.</p>

<!-- <h3>Google Mobile Ads</h3>
<p>We’ve found integration of AdMob and Google Analytics a powerful combination for analyzing how your users <i>really</i> use your app since we launched <a href="http://analytics.blogspot.com/2014/03/new-tools-to-grow-your-mobile-app.html">Google Analytics in AdMob</a> last year. This new release enables any Google Mobile Ads SDK implementation to automatically get Google Analytics integration giving you the number of users and sessions, session duration, operating systems, device models, geography, and automatic screen reporting without any additional development work.</p>

<p>In addition, we’ve made numerous improvements across the SDK including ad request prefetching (saving battery usage and improving apparent latency) and making the SDK MRAIDv2 compliant.</p> -->

<h3>Google Play Games</h3>
<p>Announced at Game Developers Conference (GDC), we’re offering <a href="http://android-developers.blogspot.com/2015/03/new-tools-to-supercharge-your-games-on.html">new tools to supercharge your games on Google Play</a>. Included in Google Play services 7.0 is the Nearby Connections API, allowing games to seamlessly connect smartphones and tablets as second-screen controls to the game running on your TV.</p>

<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/JvPUD6eI_vw" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom: 1em; margin-left: 70px;" width="560"></iframe> 

<h3>App Indexing</h3>
<p><a href="https://developers.google.com/app-indexing/?utm_campaign=playservices70-315&amp;utm_source=dac&amp;utm_medium=blog">App Indexing</a> lets Google index apps just like websites, enabling Google search results to deep-link directly into your native app. We've simplified the App Indexing API to make this integration even easier for you by combining the existing <code>view()/viewEnd()</code> and <code>action()/end()</code> flows into a single <code>start()</code> and <code>end()</code> API.</p>

<h3>Changes to GoogleApiClient</h3>
<p><code>GoogleApiClient</code> serves as the common entry point for <a href="https://developer.android.com/google/auth/api-client.html?utm_campaign=playservices70-315&amp;utm_source=dac&amp;utm_medium=blog">accessing Google APIs</a>. For this release, we’ve made retrieval of Google OAuth 2.0 tokens part of GoogleApiClient, making it much easier to request server auth codes to access Google APIs.</p>

<h3>SDK Coming Soon!</h3>
<p>We will be rolling out Google Play services 7.0 over the next few days.  Expect an update to this blog post, published documentation, and the availability of the SDK once the rollout is completed.</p>

<p>To learn more about Google Play services and the APIs available to you through it, visit the <a href="http://developer.android.com/google/index.html?utm_campaign=playservices70-315&amp;utm_source=dac&amp;utm_medium=blog">Google Services section on the Android Developer site</a>.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/JRfRmePSWFK" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/JRfRmePSWFK" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/JRfRmePSWFK" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/google-play-services-7-0-places-everyone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>New Tools to Supercharge Your Games on Google Play</title>
		<link>https://googledata.org/google-android/new-tools-to-supercharge-your-games-on-google-play/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new-tools-to-supercharge-your-games-on-google-play</link>
		<comments>https://googledata.org/google-android/new-tools-to-supercharge-your-games-on-google-play/#comments</comments>
		<pubDate>Mon, 02 Mar 2015 18:18:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=e2d43dc6fcd8214d0ca4e882a4dd2e47</guid>
		<description><![CDATA[<p><i>Posted by Greg Hartrell, Senior Product Manager of Google Play Games</i></p>

<p>Everyone has a gaming-ready device in their pocket today. In fact, of the one billion Android users in more than 190 countries, three out of four of them are gamers. This allows game developers to reach a global audience and build a successful business. Over the past year, we paid out more than $7 billion to developers distributing apps and games on Google Play. </p>

<p>At our <a href="https://events.withgoogle.com/gdc-developer-day/">Developer Day</a> during the Game Developers Conference (GDC) taking place this week, we announced a set of new features for Google Play Games and AdMob to power great gaming. Rolling out over the next few weeks, these launches can help you better measure and monetize your games.</p>

<h3>Better measure and adapt to player needs</h3>

<div><em><p>&#8220;Player Analytics has helped me hone in on BombSquad&#8217;s shortcomings, right the ship, and get to a point where I can financially justify making the games I want to make.&#8221;</p>

<p>Eric Froemling, BombSquad developer</p></em></div>

<p>Google Play Games is a set of services that help game developers reach and engage their audience. To further that effort, we&#8217;re introducing <b>Player Analytics</b>, giving developers access to powerful analytics reports to better measure overall business success and understand in-game player behavior. Launching in the next few weeks in the <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a>, the new tool will give indie developers and big studios better insight into how their players are progressing, spending, and churning; access to critical metrics like ARPPU and sessions per user; and assistance setting daily revenue targets. </p>

<p><a href="https://play.google.com/store/apps/details?id=net.froemling.bombsquad&#38;hl=en">BombSquad</a>, created by a one-person game studio in San Francisco, was able to more than double its revenue per user on Google Play after implementing design changes informed during beta testing Player Analytics.</p> 

<h3>Optimizing ads to earn the most revenue </h3>

<p>After optimizing your game for performance, it&#8217;s important to build a smarter monetization experience tailored to each user. That&#8217;s why we&#8217;re announcing <a href="http://admob.blogspot.com/2015/03/announcement-gdc.html?utm_source=Google%20Developer%20Blog%20-%20EN&#38;utm_medium=googledeveloperblog-en&#38;utm_campaign=productannouncementgdc">three</a> important updates to the AdMob platform:</p>

<ul><li><b>Native Ads:</b> Currently available as a limited beta, participating game developers will be able to show ads in their app from Google advertisers, and then customize them so that users see ads that match the visual design of the game. Atari is looking to innovate on its games, like RollerCoaster Tycoon 4 Mobile, and more effectively engage users with this new feature. </li>
<li><b>In-App Purchase House Ads Beta:</b> Game developers will be able to smartly grow their in-app purchase revenue for free. AdMob can now predict which users are more likely to spend on in-app purchases, and developers will be able to show these users customized text or display ads promoting items for sale. Currently in beta, this feature will be coming to all AdMob accounts in the next few weeks.</li>
<li><b>Audience Builder:</b> A powerful tool that enables game developers to create lists of audiences based on how they use their game. They will be able to create customized experiences for users, and ultimately grow their app revenue. </li></ul><div><a href="http://2.bp.blogspot.com/-iX-XiAWNAhA/VPShKDebjeI/AAAAAAAABV0/HOATL8mkn8o/s1600/image00.png"><img border="0" src="http://2.bp.blogspot.com/-iX-XiAWNAhA/VPShKDebjeI/AAAAAAAABV0/HOATL8mkn8o/s400/image00.png"></a></div>

<div><em><p>"Atari creates great game experiences for our broad audience. We're happy to be partnering with Google and be the first games company to take part in the native ads beta and help monetize games in a way that enhances our users' experience."</p>

<p>Todd Shallbetter, Chief Operating Officer, Atari</p></em></div>

<h3>New game experiences powered by Google </h3>
<p>Last year, we launched <a href="http://android-developers.blogspot.com/2014/06/android-tv-and-google-cast.html">Android TV</a> as a way to bring Android into the living room, optimizing games for the big screen. The OEM ecosystem is growing with announced SmartTVs and micro-consoles from partners like Sony, TPVision/Philips and Razer. </p>

<p>To make gaming even more dynamic on Android TV, we&#8217;re launching the <b>Nearby Connections API</b> with the upcoming update of Google Play services. With this new protocol, games can seamlessly connect smartphones and tablets as second-screen controls to the game running on your TV.  Beach Buggy Racing is a fun and competitive multiplayer racing game on Android TV that plans to use Nearby Connections in their summer release, and we are looking forward to more living room multiplayer games taking advantage of mobile devices as second screen controls.</p>




<p>At Google I/O last June, we also unveiled <a href="https://www.google.com/get/cardboard/">Google Cardboard</a> with the goal of making virtual reality (VR) accessible to everyone. With Cardboard, we are giving game developers more opportunities to build unique and immersive experiences from nothing more than a piece of cardboard and your smartphone. The <a href="https://developers.google.com/cardboard/?utm_campaign=GDC-315&#38;utm_source=dac&#38;utm_medium=blog">Cardboard SDKs</a> for Android and Unity enable you to easily build VR apps or adapt your existing app for VR. </p>

<h3>Check us out at GDC</h3>
<p>Visit us at the Google booth #502 on the Expo floor to get hands on experience with Project Tango, Niantic Labs and Cardboard starting on Wednesday, March 4. Our teams from AdMob, AdWords, Analytics, Cloud Platform and Firebase will also be available to answer any of your product questions.</p>

<p>For more information on what we&#8217;re doing at GDC, please visit <a href="https://events.withgoogle.com/gdc-developer-day/">g.co/dev/gdc2015</a>. </p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/Lno9Z4uHw5m"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/Lno9Z4uHw5m"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/Lno9Z4uHw5m"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Greg Hartrell, Senior Product Manager of Google Play Games</i></p>

<p>Everyone has a gaming-ready device in their pocket today. In fact, of the one billion Android users in more than 190 countries, three out of four of them are gamers. This allows game developers to reach a global audience and build a successful business. Over the past year, we paid out more than $7 billion to developers distributing apps and games on Google Play. </p>

<p>At our <a href="https://events.withgoogle.com/gdc-developer-day/">Developer Day</a> during the Game Developers Conference (GDC) taking place this week, we announced a set of new features for Google Play Games and AdMob to power great gaming. Rolling out over the next few weeks, these launches can help you better measure and monetize your games.</p>

<h3>Better measure and adapt to player needs</h3>

<div style="width:35%;float:right;font-size:12pt;padding: 0 0 0 1.5em"><em><p>“Player Analytics has helped me hone in on BombSquad’s shortcomings, right the ship, and get to a point where I can financially justify making the games I want to make.”</p>

<p>Eric Froemling, BombSquad developer</em></p></div>

<p>Google Play Games is a set of services that help game developers reach and engage their audience. To further that effort, we’re introducing <b>Player Analytics</b>, giving developers access to powerful analytics reports to better measure overall business success and understand in-game player behavior. Launching in the next few weeks in the <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a>, the new tool will give indie developers and big studios better insight into how their players are progressing, spending, and churning; access to critical metrics like ARPPU and sessions per user; and assistance setting daily revenue targets. </p>

<p><a href="https://play.google.com/store/apps/details?id=net.froemling.bombsquad&hl=en">BombSquad</a>, created by a one-person game studio in San Francisco, was able to more than double its revenue per user on Google Play after implementing design changes informed during beta testing Player Analytics.</p> 

<h3>Optimizing ads to earn the most revenue </h3>

<p>After optimizing your game for performance, it’s important to build a smarter monetization experience tailored to each user. That’s why we’re announcing <a href="http://admob.blogspot.com/2015/03/announcement-gdc.html?utm_source=Google%20Developer%20Blog%20-%20EN&utm_medium=googledeveloperblog-en&utm_campaign=productannouncementgdc">three</a> important updates to the AdMob platform:</p>

<ul><li><b>Native Ads:</b> Currently available as a limited beta, participating game developers will be able to show ads in their app from Google advertisers, and then customize them so that users see ads that match the visual design of the game. Atari is looking to innovate on its games, like RollerCoaster Tycoon 4 Mobile, and more effectively engage users with this new feature. </li>
<li><b>In-App Purchase House Ads Beta:</b> Game developers will be able to smartly grow their in-app purchase revenue for free. AdMob can now predict which users are more likely to spend on in-app purchases, and developers will be able to show these users customized text or display ads promoting items for sale. Currently in beta, this feature will be coming to all AdMob accounts in the next few weeks.</li>
<li><b>Audience Builder:</b> A powerful tool that enables game developers to create lists of audiences based on how they use their game. They will be able to create customized experiences for users, and ultimately grow their app revenue. </li></ul>

<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-iX-XiAWNAhA/VPShKDebjeI/AAAAAAAABV0/HOATL8mkn8o/s1600/image00.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-iX-XiAWNAhA/VPShKDebjeI/AAAAAAAABV0/HOATL8mkn8o/s400/image00.png" /></a></div>

<div style="width:35%;float:right;font-size:12pt;padding: 0 0 0 1.5em"><em><p>"Atari creates great game experiences for our broad audience. We're happy to be partnering with Google and be the first games company to take part in the native ads beta and help monetize games in a way that enhances our users' experience."</p>

<p>Todd Shallbetter, Chief Operating Officer, Atari</em></p></div>

<h3>New game experiences powered by Google </h3>
<p>Last year, we launched <a href="http://android-developers.blogspot.com/2014/06/android-tv-and-google-cast.html">Android TV</a> as a way to bring Android into the living room, optimizing games for the big screen. The OEM ecosystem is growing with announced SmartTVs and micro-consoles from partners like Sony, TPVision/Philips and Razer. </p>

<p>To make gaming even more dynamic on Android TV, we’re launching the <b>Nearby Connections API</b> with the upcoming update of Google Play services. With this new protocol, games can seamlessly connect smartphones and tablets as second-screen controls to the game running on your TV.  Beach Buggy Racing is a fun and competitive multiplayer racing game on Android TV that plans to use Nearby Connections in their summer release, and we are looking forward to more living room multiplayer games taking advantage of mobile devices as second screen controls.</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/JvPUD6eI_vw" frameborder="0" allowfullscreen style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 70px;"></iframe>


<p>At Google I/O last June, we also unveiled <a href="https://www.google.com/get/cardboard/">Google Cardboard</a> with the goal of making virtual reality (VR) accessible to everyone. With Cardboard, we are giving game developers more opportunities to build unique and immersive experiences from nothing more than a piece of cardboard and your smartphone. The <a href="https://developers.google.com/cardboard/?utm_campaign=GDC-315&utm_source=dac&utm_medium=blog">Cardboard SDKs</a> for Android and Unity enable you to easily build VR apps or adapt your existing app for VR. </p>

<h3>Check us out at GDC</h3>
<p>Visit us at the Google booth #502 on the Expo floor to get hands on experience with Project Tango, Niantic Labs and Cardboard starting on Wednesday, March 4. Our teams from AdMob, AdWords, Analytics, Cloud Platform and Firebase will also be available to answer any of your product questions.</p>

<p>For more information on what we’re doing at GDC, please visit <a href="https://events.withgoogle.com/gdc-developer-day/">g.co/dev/gdc2015</a>. </p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/Lno9Z4uHw5m" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/Lno9Z4uHw5m" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/Lno9Z4uHw5m" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/new-tools-to-supercharge-your-games-on-google-play/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>A New Way to Promote Your App on Google Play</title>
		<link>https://googledata.org/google-android/a-new-way-to-promote-your-app-on-google-play/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=a-new-way-to-promote-your-app-on-google-play</link>
		<comments>https://googledata.org/google-android/a-new-way-to-promote-your-app-on-google-play/#comments</comments>
		<pubDate>Thu, 26 Feb 2015 13:05:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[ads]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=9ddf405506b0a179644fcf969a868593</guid>
		<description><![CDATA[<p><i>Posted by Michael Siliski, Product Management Director, Google Play</i></p>

<p>Google Play now reaches more than 1 billion people on Android devices in more than 190 countries, helping a growing number of developers like you build successful global businesses. In fact, in the past year, we paid more than $7 billion to developers distributing apps and games on Google Play. We remain as committed as ever to making Google Play the best place to find great apps, games and other entertainment.</p>

<p>App discovery plays a critical role in driving your continued success, and over the past year Google has provided <a href="https://developer.android.com/distribute/googleplay/guide.html?utm_campaign=app-promo-215&#38;utm_source=dac&#38;utm_medium=blog">best</a> <a href="https://www.youtube.com/watch?v=lZHwodEg0Xo">practices</a> to enhance app discovery and engagement, as well as <a href="http://adwords.blogspot.com/2014/04/sharing-latest-adwords-innovations.html">app promotion tools</a> to get the most out of search and display advertising for developers. We are always looking for new ways to help you get your apps in front of potential new users. That&#8217;s why, in the next few weeks, we will begin piloting sponsored search results on Google Play, bringing our unique expertise in search ads to the store.</p>

<p>With more than 100 billion searches every month on Google.com, we&#8217;ve seen how search ads shown next to organic search results on Google.com can <a href="http://adwords.blogspot.com/2013/07/new-research-shows-that-88-of-ad-clicks.html">significantly improve content discovery for users and advertisers</a>, both large and small. Search ads on Google Play will enable developers to drive more awareness of their apps and provide consumers new ways to discover apps that they otherwise might have missed.</p>

<div><a href="http://2.bp.blogspot.com/-7cJFXQy40Yc/VO8Yg1WY1-I/AAAAAAAABVY/FtvKcST-xvg/s1600/Attachment-1.gif"><img border="0" src="http://2.bp.blogspot.com/-7cJFXQy40Yc/VO8Yg1WY1-I/AAAAAAAABVY/FtvKcST-xvg/s400/Attachment-1.gif"></a></div>
<p>In the coming weeks, a limited set of users will begin to see ads from a pilot group of advertisers who are already running Google search ads for their apps. We&#8217;ll have more to share in the coming months about the expansion of this program as we look at the results and feedback. We believe search ads will be a useful addition to Google Play for users and developers alike, and we hope this will bring even more success to our developer community. </p>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Michael Siliski, Product Management Director, Google Play</i></p>

<p>Google Play now reaches more than 1 billion people on Android devices in more than 190 countries, helping a growing number of developers like you build successful global businesses. In fact, in the past year, we paid more than $7 billion to developers distributing apps and games on Google Play. We remain as committed as ever to making Google Play the best place to find great apps, games and other entertainment.</p>

<p>App discovery plays a critical role in driving your continued success, and over the past year Google has provided <a href="https://developer.android.com/distribute/googleplay/guide.html?utm_campaign=app-promo-215&utm_source=dac&utm_medium=blog">best</a> <a href="https://www.youtube.com/watch?v=lZHwodEg0Xo">practices</a> to enhance app discovery and engagement, as well as <a href="http://adwords.blogspot.com/2014/04/sharing-latest-adwords-innovations.html">app promotion tools</a> to get the most out of search and display advertising for developers. We are always looking for new ways to help you get your apps in front of potential new users. That’s why, in the next few weeks, we will begin piloting sponsored search results on Google Play, bringing our unique expertise in search ads to the store.</p>

<p>With more than 100 billion searches every month on Google.com, we’ve seen how search ads shown next to organic search results on Google.com can <a href="http://adwords.blogspot.com/2013/07/new-research-shows-that-88-of-ad-clicks.html">significantly improve content discovery for users and advertisers</a>, both large and small. Search ads on Google Play will enable developers to drive more awareness of their apps and provide consumers new ways to discover apps that they otherwise might have missed.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-7cJFXQy40Yc/VO8Yg1WY1-I/AAAAAAAABVY/FtvKcST-xvg/s1600/Attachment-1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-7cJFXQy40Yc/VO8Yg1WY1-I/AAAAAAAABVY/FtvKcST-xvg/s400/Attachment-1.gif" /></a></div>
<p>In the coming weeks, a limited set of users will begin to see ads from a pilot group of advertisers who are already running Google search ads for their apps. We’ll have more to share in the coming months about the expansion of this program as we look at the results and feedback. We believe search ads will be a useful addition to Google Play for users and developers alike, and we hope this will bring even more success to our developer community. </p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/a-new-way-to-promote-your-app-on-google-play/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Bringing apps to the workplace with Google Play for Work</title>
		<link>https://googledata.org/google-android/bringing-apps-to-the-workplace-with-google-play-for-work/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=bringing-apps-to-the-workplace-with-google-play-for-work</link>
		<comments>https://googledata.org/google-android/bringing-apps-to-the-workplace-with-google-play-for-work/#comments</comments>
		<pubDate>Wed, 25 Feb 2015 23:06:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=e0bc307c639a732eacc91d17769059a3</guid>
		<description><![CDATA[<p><i>Posted by Matt Goodridge, Google Play team</i></p>

<p>Work doesn&#8217;t just happen in an office from 9 to 5 anymore. Today&#8217;s workers are mobile workers, and they need to be able to get things done as efficiently and collaboratively as possible, at any time. That&#8217;s why the <a href="http://officialandroid.blogspot.com/2015/02/android-is-ready-for-work.html">Android for Work</a> initiative is bringing together partners across the ecosystem, from device and app makers to networking and management solutions, to provide businesses with a secure, flexible and reliable mobility platform that users already know and love.</p>

<p><b>Google Play for Work</b> allows businesses to securely deploy and manage enterprise-grade apps, across all of their users running Android for Work. Google Play for Work simplifies the process of distributing apps to employees and ensures that IT approves every deployed app. For developers, this is an opportunity to reach a new audience at scale through bulk installs or purchasing, which enables easy installation of your app across enterprises.</p>

<h3>How to join Google Play for Work</h3>
<p>Free apps will be available on Google Play for Work at launch with no action needed on your part. If you have a paid app, you&#8217;ll soon be able to opt-in to make your app available for bulk purchase on Google Play for Work in the Developer Console during the app publishing process. <a href="https://support.google.com/googleplay/android-developer/answer/113469">Find out more about publishing</a> in the Google Play Developer Help Center.</p>

<h3>Designing great apps for Android for Work</h3>
<p>Apps that are installed from Google Play for Work will function without code changes. However, please note that some of the controls that Android for Work offers IT admins could affect how your app works. To ensure the best possible experience for your users, watch the first in our series of Android for Work DevBytes below to understand the best practices you should be following in developing your app.</p>

<!--[Interactive video]  -->

<p>More DevBytes will be posted to our <a href="https://www.youtube.com/user/GoogleDevelopers">YouTube channel</a> soon. Find out more about <a href="http://developer.android.com/work?utm_campaign=androidforwork-215&#38;utm_source=dac&#38;utm_medium=blog">Android for Work</a>.</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/Gf1YwrmH5c1"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/Gf1YwrmH5c1"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/Gf1YwrmH5c1"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Matt Goodridge, Google Play team</i></p>

<p>Work doesn’t just happen in an office from 9 to 5 anymore. Today’s workers are mobile workers, and they need to be able to get things done as efficiently and collaboratively as possible, at any time. That’s why the <a href="http://officialandroid.blogspot.com/2015/02/android-is-ready-for-work.html">Android for Work</a> initiative is bringing together partners across the ecosystem, from device and app makers to networking and management solutions, to provide businesses with a secure, flexible and reliable mobility platform that users already know and love.</p>

<p><b>Google Play for Work</b> allows businesses to securely deploy and manage enterprise-grade apps, across all of their users running Android for Work. Google Play for Work simplifies the process of distributing apps to employees and ensures that IT approves every deployed app. For developers, this is an opportunity to reach a new audience at scale through bulk installs or purchasing, which enables easy installation of your app across enterprises.</p>

<h3>How to join Google Play for Work</h3>
<p>Free apps will be available on Google Play for Work at launch with no action needed on your part. If you have a paid app, you’ll soon be able to opt-in to make your app available for bulk purchase on Google Play for Work in the Developer Console during the app publishing process. <a href="https://support.google.com/googleplay/android-developer/answer/113469">Find out more about publishing</a> in the Google Play Developer Help Center.</p>

<h3>Designing great apps for Android for Work</h3>
<p>Apps that are installed from Google Play for Work will function without code changes. However, please note that some of the controls that Android for Work offers IT admins could affect how your app works. To ensure the best possible experience for your users, watch the first in our series of Android for Work DevBytes below to understand the best practices you should be following in developing your app.</p>

<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/jQWB_-o1kz4" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 70px;" width="560"></iframe>

<p>More DevBytes will be posted to our <a href="https://www.youtube.com/user/GoogleDevelopers">YouTube channel</a> soon. Find out more about <a href="http://developer.android.com/work?utm_campaign=androidforwork-215&utm_source=dac&utm_medium=blog">Android for Work</a>.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/Gf1YwrmH5c1" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/Gf1YwrmH5c1" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/Gf1YwrmH5c1" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/bringing-apps-to-the-workplace-with-google-play-for-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>We&#8217;ll see you at GDC 2015!</title>
		<link>https://googledata.org/google-analytics/well-see-you-at-gdc-2015/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=well-see-you-at-gdc-2015</link>
		<comments>https://googledata.org/google-analytics/well-see-you-at-gdc-2015/#comments</comments>
		<pubDate>Tue, 24 Feb 2015 19:28:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=fedf77905ece5ce0b9965270081f50aa</guid>
		<description><![CDATA[<p><i>Posted by Greg Hartrell, Senior Product Manager of Google Play Games</i></p>

<p>The Game Developers Conference (GDC) is less than one week away in San Francisco. This year we will host our annual <a href="https://events.withgoogle.com/gdc-developer-day/">Developer Day</a> at West Hall and be on the Expo floor in booth #502. We&#8217;re excited to give you a glimpse into how we are helping mobile game developers build successful businesses and improve user experiences. </p>

<div><a href="http://3.bp.blogspot.com/-SpMqpcmAfPA/VOzZGsZmQlI/AAAAAAAABVA/281eVwpZ5dk/s1600/Deck%2BGDC%2B2015%2BBanner%2B3%2Bcrop.png"><img border="0" src="http://3.bp.blogspot.com/-SpMqpcmAfPA/VOzZGsZmQlI/AAAAAAAABVA/281eVwpZ5dk/s640/Deck%2BGDC%2B2015%2BBanner%2B3%2Bcrop.png"></a></div>

<p>Our <a href="https://events.withgoogle.com/gdc-developer-day/">Developer Day</a> will take place in Room 2006 of the West Hall of Moscone Center on Monday, March 2. We're keeping the content action-oriented with a few presentations and lightning talks, followed by a full afternoon of hands on hacking with Google engineers. Here&#8217;s a look at the schedule: </p>

<p><b>Opening Keynote &#124;&#124; 10AM:</b> We&#8217;ll kick off the day by sharing to make your games more successful with Google.  You&#8217;ll hear about new platforms, new tools to make development easier, and ways to measure your mobile games and monetize them.</p>

<p><b>Running A Successful Games Business with Google &#124;&#124; 10:30AM:</b> Next we&#8217;ll hear from Bob Meese, the Global Head of Games Business Development from Google Play, who&#8217;ll offer some key pointers on how to make sure you're best taking advantage of unique tools on Google Play to grow your business effectively. </p>

<p><b>Lightning Talks &#124;&#124; 11:15AM:</b> Ready to absorb all the opportunities Google has to offer your game business? These quick, 5-minute talks will cover everything from FlatBuffers to Google Cast to data interpolation. To keep us on track, a gong may be involved.</p>

<p><b>Code Labs &#124;&#124; 1:30PM:</b> After lunch, we&#8217;ll turn the room into a classroom setting where you can participate in a number of self-guided code labs focused on leveraging Analytics, Google Play game services, Firebase and VR with Cardboard. These Code Labs are completely self-paced and will be available throughout the afternoon. If you want admission to the code labs earlier, sign up for Priority Access <a href="https://events.withgoogle.com/gdc-developer-day/registrations/new/">here</a>! </p>

<p>Also, be sure to check out the Google booth on the Expo floor to get hands on experiences with <a href="https://www.google.com/atap/projecttango/#project">Project Tango</a>, <a href="http://www.nianticproject.com/">Niantic Labs</a> and <a href="https://www.google.com/get/cardboard/">Cardboard</a> starting on Wednesday, March 4. Our teams from AdMob, AdWords, Analytics, Cloud Platform and Firebase will also be available to answer any of your product questions.</p>

<p>For more information on our presence at GDC, including a full list of our talks and speaker details, please visit <a href="http://g.co/dev/gdc2015">g.co/dev/gdc2015</a>. Please note that these events are part of the official Game Developer's Conference, so you will need a pass to attend. If you can't attend GDC in person, you can still check out our morning talks on our livestream at <a href="http://g.co/dev/gdc-livestream">g.co/dev/gdc-livestream</a>.</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/gUPrbphbfNY"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/gUPrbphbfNY"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/gUPrbphbfNY"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Greg Hartrell, Senior Product Manager of Google Play Games</i></p>

<p>The Game Developers Conference (GDC) is less than one week away in San Francisco. This year we will host our annual <a href="https://events.withgoogle.com/gdc-developer-day/">Developer Day</a> at West Hall and be on the Expo floor in booth #502. We’re excited to give you a glimpse into how we are helping mobile game developers build successful businesses and improve user experiences. </p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-SpMqpcmAfPA/VOzZGsZmQlI/AAAAAAAABVA/281eVwpZ5dk/s1600/Deck%2BGDC%2B2015%2BBanner%2B3%2Bcrop.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-SpMqpcmAfPA/VOzZGsZmQlI/AAAAAAAABVA/281eVwpZ5dk/s640/Deck%2BGDC%2B2015%2BBanner%2B3%2Bcrop.png" /></a></div>

<p>Our <a href="https://events.withgoogle.com/gdc-developer-day/">Developer Day</a> will take place in Room 2006 of the West Hall of Moscone Center on Monday, March 2. We're keeping the content action-oriented with a few presentations and lightning talks, followed by a full afternoon of hands on hacking with Google engineers. Here’s a look at the schedule: </p>

<p><b>Opening Keynote || 10AM:</b> We’ll kick off the day by sharing to make your games more successful with Google.  You’ll hear about new platforms, new tools to make development easier, and ways to measure your mobile games and monetize them.</p>

<p><b>Running A Successful Games Business with Google || 10:30AM:</b> Next we’ll hear from Bob Meese, the Global Head of Games Business Development from Google Play, who’ll offer some key pointers on how to make sure you're best taking advantage of unique tools on Google Play to grow your business effectively. </p>

<p><b>Lightning Talks || 11:15AM:</b> Ready to absorb all the opportunities Google has to offer your game business? These quick, 5-minute talks will cover everything from FlatBuffers to Google Cast to data interpolation. To keep us on track, a gong may be involved.</p>

<p><b>Code Labs || 1:30PM:</b> After lunch, we’ll turn the room into a classroom setting where you can participate in a number of self-guided code labs focused on leveraging Analytics, Google Play game services, Firebase and VR with Cardboard. These Code Labs are completely self-paced and will be available throughout the afternoon. If you want admission to the code labs earlier, sign up for Priority Access <a href="https://events.withgoogle.com/gdc-developer-day/registrations/new/">here</a>! </p>

<p>Also, be sure to check out the Google booth on the Expo floor to get hands on experiences with <a href="https://www.google.com/atap/projecttango/#project">Project Tango</a>, <a href="http://www.nianticproject.com/">Niantic Labs</a> and <a href="https://www.google.com/get/cardboard/">Cardboard</a> starting on Wednesday, March 4. Our teams from AdMob, AdWords, Analytics, Cloud Platform and Firebase will also be available to answer any of your product questions.</p>

<p>For more information on our presence at GDC, including a full list of our talks and speaker details, please visit <a href="http://g.co/dev/gdc2015">g.co/dev/gdc2015</a>. Please note that these events are part of the official Game Developer's Conference, so you will need a pass to attend. If you can't attend GDC in person, you can still check out our morning talks on our livestream at <a href="http://g.co/dev/gdc-livestream">g.co/dev/gdc-livestream</a>.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/gUPrbphbfNY" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/gUPrbphbfNY" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/gUPrbphbfNY" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-analytics/well-see-you-at-gdc-2015/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android Developer Story: GinLemon &#8211; Breaking through with Google Play</title>
		<link>https://googledata.org/google-android/android-developer-story-ginlemon-breaking-through-with-google-play/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=android-developer-story-ginlemon-breaking-through-with-google-play</link>
		<comments>https://googledata.org/google-android/android-developer-story-ginlemon-breaking-through-with-google-play/#comments</comments>
		<pubDate>Tue, 24 Feb 2015 18:00:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=9b0c28912e59b193f7d8ad99467d99cc</guid>
		<description><![CDATA[<p><i>Posted by Letitia Lago, Google Play team</i></p>

<p>It&#8217;s not often that a developer is born from a summer holiday joke and a parent&#8217;s love of furniture making. But this is exactly how Vincenzo Colucci started <a href="https://play.google.com/store/apps/developer?id=GinLemon">GinLemon</a>, a successful app business on Google Play.</p>

<p>The choice of Android was an obvious one to Vincenzo, although he didn&#8217;t have experience with Android development at the start &#8212; he learned it by downloading the tools and playing with the examples.</p>

<p>From his original scratch card app, to the global success of Smart Launcher, Vincenzo is proof that great apps can come from personal passion and the willingness to do something a little different.</p>

<p>Find out more about Vincenzo&#8217;s journey in this video. </p>

<!--[Interactive video]  -->

<p>Vincenzo and the team he has built around Smart Launcher are working on a major update, which will be free and they hope to release in March. They also have Smart Locker, a series of lock screens with some unique features, in development and other projects in the pipeline.</p>
  
<p>To learn about creating apps for Google Play and building your own app business, check out <a href="https://developer.android.com/distribute/googleplay/guide.html?utm_campaign=ginlemon-215&#38;utm_source=dac&#38;utm_medium=blog">The Secrets to App Success on Google Play</a> [ebook], a detailed playbook on the best practices and tools you can use to maximize the reach, retention, and revenue of your new app.</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/7gVUCmgj76N"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/7gVUCmgj76N"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/7gVUCmgj76N"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Letitia Lago, Google Play team</i></p>

<p>It’s not often that a developer is born from a summer holiday joke and a parent’s love of furniture making. But this is exactly how Vincenzo Colucci started <a href="https://play.google.com/store/apps/developer?id=GinLemon">GinLemon</a>, a successful app business on Google Play.</p>

<p>The choice of Android was an obvious one to Vincenzo, although he didn’t have experience with Android development at the start — he learned it by downloading the tools and playing with the examples.</p>

<p>From his original scratch card app, to the global success of Smart Launcher, Vincenzo is proof that great apps can come from personal passion and the willingness to do something a little different.</p>

<p>Find out more about Vincenzo’s journey in this video. </p>

<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed?v=700gYRkhkLM&list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 70px;" width="560"></iframe>

<p>Vincenzo and the team he has built around Smart Launcher are working on a major update, which will be free and they hope to release in March. They also have Smart Locker, a series of lock screens with some unique features, in development and other projects in the pipeline.</p>
  
<p>To learn about creating apps for Google Play and building your own app business, check out <a href="https://developer.android.com/distribute/googleplay/guide.html?utm_campaign=ginlemon-215&utm_source=dac&utm_medium=blog">The Secrets to App Success on Google Play</a> [ebook], a detailed playbook on the best practices and tools you can use to maximize the reach, retention, and revenue of your new app.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/7gVUCmgj76N" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/7gVUCmgj76N" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/7gVUCmgj76N" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-developer-story-ginlemon-breaking-through-with-google-play/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Building for Android Wear: Depth and Flexibility</title>
		<link>https://googledata.org/google-android/building-for-android-wear-depth-and-flexibility/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=building-for-android-wear-depth-and-flexibility</link>
		<comments>https://googledata.org/google-android/building-for-android-wear-depth-and-flexibility/#comments</comments>
		<pubDate>Wed, 18 Feb 2015 19:24:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=a8de80b83d7ee07065171bb4b5cb487d</guid>
		<description><![CDATA[<p><i>Posted by <a href="http://google.com/+TimothyJordan">Timothy Jordan</a>, Developer Advocate</i></p>

<p>With so many recent <a href="http://officialandroid.blogspot.com/2014/10/jogging-and-jamming-with-android-wear.html">updates</a> and <a href="http://googleblog.blogspot.com/2014/12/android-dress-code-wear-what-you-want.html">improvements</a> to Android Wear, it's high time to share an updated overview of the platform. We're certainly not done&#8212;there's a lot more to come&#8212;but this is the picture today as you start or continue developing your groundbreaking Android Wear user experiences.</p>

<div><a href="http://3.bp.blogspot.com/-Ilg_yQUMM8I/VOTV400BzlI/AAAAAAAABUI/KjEi728BbIA/s1600/apps-3d.gif"><img border="0" src="http://3.bp.blogspot.com/-Ilg_yQUMM8I/VOTV400BzlI/AAAAAAAABUI/KjEi728BbIA/s640/apps-3d.gif"></a><p><i><a href="http://goo.gl/Hu2bo3">Guns'n'Glory Heros</a> and <a href="http://goo.gl/bfpCrI">Strava</a></i></p></div>


<p>The Android Wear platform emphasizes depth and flexibility. Built on Android, it allows developers to use familiar APIs to create useful, performant, and imaginative apps that run directly on the watch. In the spirit of Android, you have the freedom to make substantial changes to the user experience, including the creation of custom watch faces. There are three main categories of experiences you can build: apps, custom watch faces, and notifications.</p>

<h3>Apps</h3>

<p><a href="http://developer.android.com/training/wearables/apps/index.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">Apps</a> that are built for Android Wear run directly on the watch and can do nearly anything a phone can, from tracking your run to giving you a little entertainment while waiting for the bus. Some even work without a connection to the phone, such as fitness and music apps. There are libraries to help you <a href="http://developer.android.com/training/wearables/data-layer/index.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">move data</a> between the phone and the wearable, as well as create stunning and adaptable <a href="http://developer.android.com/training/wearables/ui/index.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">UIs</a>. Here's a list of some of the great features you have access to:</p>






<table><tr><td><b>
Feature</b></td>
<td><b>Documentation</b></td></tr><tr><td>Full screen activities with touch events</td>
<td><a href="https://developer.android.com/training/wearables/ui/index.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">Creating Custom UIs for Wear Devices</a></td></tr><tr><td>Notifications and custom actions</td>
<td><a href="https://developer.android.com/design/wear/patterns.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">UI Patterns for Android Wear</a></td></tr><tr><td>Custom Watch faces</td>
<td><a href="https://developer.android.com/training/wearables/watch-faces/index.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">Creating Watch Faces</a></td></tr><tr><td>Layouts for round and square devices</td>
<td><a href="https://developer.android.com/training/wearables/ui/index.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">Creating Custom UIs for Wear Devices</a></td></tr><tr><td>OpenGL</td>
<td><a href="http://developer.android.com/training/graphics/opengl/index.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">Displaying Graphics with OpenGL ES</a></td></tr><tr><td>Sensors
<ul><li>Accelerometer</li>
<li>Gyroscope</li>
<li>Compass</li>
<li>Barometer</li>
<li>Heart rate sensor</li></ul></td>

<td><a href="http://developer.android.com/reference/android/hardware/SensorManager.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">SensorManager</a></td></tr><tr><td>Haptics</td>
<td><a href="http://developer.android.com/reference/android/os/Vibrator.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">Vibrator</a></td></tr><tr><td>Microphone</td>
<td><a href="http://developer.android.com/reference/android/media/AudioRecord.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">AudioRecord</a></td></tr><tr><td>Voice actions</td>
<td><a href="https://developer.android.com/training/wearables/apps/voice.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">Adding Voice Capabilities</a></td></tr><tr><td>GPS</td>
<td><a href="http://developer.android.com/training/articles/wear-location-detection.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">Detecting Location on Android Wear</a></td></tr><tr><td>Offline storing of data / music</td>
<td><a href="https://developer.android.com/training/wearables/data-layer/assets.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">Transferring Assets</a></td></tr><tr><td>Media playback controls</td>
<td><a href="https://developer.android.com/reference/android/media/session/MediaSession.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">MediaSession</a>, <a href="https://developer.android.com/reference/android/media/session/MediaController.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">MediaController</a> </td></tr><tr><td>Framework based on Android 5.0 API 21</td>
<td><a href="https://developer.android.com/about/versions/android-5.0.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">Android 5.0 APIs</a></td></tr><tr><td>Standalone or synchronized apps</td>
<td><a href="https://developer.android.com/training/wearables/data-layer/index.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">Sending and Syncing Data</a></td></tr></table><br /><div><a href="http://2.bp.blogspot.com/-e3D3-SMub1E/VOTaoeCP5ZI/AAAAAAAABUY/8WMf8lBRibE/s1600/watchfaces-5c.gif"><img border="0" src="http://2.bp.blogspot.com/-e3D3-SMub1E/VOTaoeCP5ZI/AAAAAAAABUY/8WMf8lBRibE/s640/watchfaces-5c.gif"></a><p><i><a href="http://goo.gl/1p31zy">Selected watch faces</a> </i></p></div>

<h3>Watch Faces</h3>

<p>The ability to create <a href="http://developer.android.com/training/wearables/watch-faces/index.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">custom watch faces</a> gives you direct access to the most prominent UI element on a user's most personal device. The API is simple enough to build watch faces quickly and flexible enough to allow personalization. Again, given the depth and flexibility of the Android platform, you can create something for the user that's both beautiful and packed with unique features.</p>

<p>The development journey starts with the simplicity of bringing your design to the wrist. At the core of the watch face API is the onDraw method that allows you to draw whatever design you can think of to the canvas at a high enough frame rate to deliver fluid animation. This will come through at full fidelity while the watch is in interactive mode.</p>



<p>At other times, when the watch is in ambient mode, you're able to draw a more discreet version of the watch face. Additional preferences can be set to arrange the system UI elements appropriately for your design. Once those basics are covered, the limits are your imagination! You can go further with additions like the moon phase, current weather, or fitness stats. Watchmakers call these items "complications" -- but with Android they're hardly complicated. Once you have the data, just draw it on the canvas as you did the time.</p>

<div><a href="http://3.bp.blogspot.com/-4p4uoucTkWo/VOTbQrRdAQI/AAAAAAAABUg/-4Il0IMAh7o/s1600/notifications-2b2.gif"><img border="0" src="http://3.bp.blogspot.com/-4p4uoucTkWo/VOTbQrRdAQI/AAAAAAAABUg/-4Il0IMAh7o/s640/notifications-2b2.gif"></a><p><i><a href="http://goo.gl/fchCLs">Glympse</a> and <a href="http://goo.gl/zEPn0f">WhatsApp</a></i></p></div>

<h3>Notifications</h3>

<p>Of course, <a href="http://developer.android.com/training/wearables/notifications/index.html?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">Android Wear Notifications</a> are the easiest way to get started in the world of wearables. If you've got an Android app with notifications -- they already work on a Wear watch. If you've already enhanced your notification with actions, this is even better and also automatically already works. You can take things further with Wear-specific functionality like Stacks, Pages, and Voice Replies that make your notifications richer experiences on the wrist.</p>

<p>The user experiences you build for Wear get to take advantage of the power and flexibility of the Android platform. It's easy to get started and possible to create truly groundbreaking UI for your users. Together, we can create an ecosystem of user experiences as diverse as the watches they run on and the people who wear them.</p>

<div><a href="http://1.bp.blogspot.com/-ZMZfK5xwUYc/VOTdREKhbnI/AAAAAAAABUs/qoEHmH6Dzdg/s1600/Android_Wear_Lineup_no_side_v2_cropped3.png"><img border="0" src="http://1.bp.blogspot.com/-ZMZfK5xwUYc/VOTdREKhbnI/AAAAAAAABUs/qoEHmH6Dzdg/s640/Android_Wear_Lineup_no_side_v2_cropped3.png"></a></div>

<p>Check out the developer <a href="https://www.youtube.com/playlist?list=PLWz5rJ2EKKc-kIrPiq098QH9dOle-fLef">videos</a> and <a href="https://developer.android.com/wear?utm_campaign=building-for-wear-215&#38;utm_source=dac&#38;utm_medium=blog">documentation</a> for more, and share your thoughts on the <a href="https://plus.sandbox.google.com/communities/113381227473021565406">Android Wear Developers community</a>. We can&#8217;t wait to see the innovative user experiences you will build on Android Wear.</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/3UxarePPsN9"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/3UxarePPsN9"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/3UxarePPsN9"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by <a href="http://google.com/+TimothyJordan">Timothy Jordan</a>, Developer Advocate</i></p>

<p>With so many recent <a href="http://officialandroid.blogspot.com/2014/10/jogging-and-jamming-with-android-wear.html">updates</a> and <a href="http://googleblog.blogspot.com/2014/12/android-dress-code-wear-what-you-want.html">improvements</a> to Android Wear, it's high time to share an updated overview of the platform. We're certainly not done—there's a lot more to come—but this is the picture today as you start or continue developing your groundbreaking Android Wear user experiences.</p>

<div style="float:right; margin:0 0 20px 20px"><a href="http://3.bp.blogspot.com/-Ilg_yQUMM8I/VOTV400BzlI/AAAAAAAABUI/KjEi728BbIA/s1600/apps-3d.gif"><img border="0" style="width: 200px" src="http://3.bp.blogspot.com/-Ilg_yQUMM8I/VOTV400BzlI/AAAAAAAABUI/KjEi728BbIA/s640/apps-3d.gif" /></a><p style="margin:auto;text-align:center"><i><a href="http://goo.gl/Hu2bo3">Guns'n'Glory Heros</a> and <a href="http://goo.gl/bfpCrI">Strava</a></i></p></div>


<p>The Android Wear platform emphasizes depth and flexibility. Built on Android, it allows developers to use familiar APIs to create useful, performant, and imaginative apps that run directly on the watch. In the spirit of Android, you have the freedom to make substantial changes to the user experience, including the creation of custom watch faces. There are three main categories of experiences you can build: apps, custom watch faces, and notifications.</p>

<h3>Apps</h3>

<p><a href="http://developer.android.com/training/wearables/apps/index.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">Apps</a> that are built for Android Wear run directly on the watch and can do nearly anything a phone can, from tracking your run to giving you a little entertainment while waiting for the bus. Some even work without a connection to the phone, such as fitness and music apps. There are libraries to help you <a href="http://developer.android.com/training/wearables/data-layer/index.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">move data</a> between the phone and the wearable, as well as create stunning and adaptable <a href="http://developer.android.com/training/wearables/ui/index.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">UIs</a>. Here's a list of some of the great features you have access to:</p>





<head>
<style>
table, th, td {
    border: 1px solid black;
    border-collapse: collapse;
}
td {
    padding: 5px;
}
</style>
</head>

<body>

<table style="width:100%">
  <tr style="vertical-align: top; background-color:#BDD0F8;">
    <td><b>
Feature</b></td>
<td><b>Documentation</b></td></tr>
<tr><td>Full screen activities with touch events</td>
<td><a href="https://developer.android.com/training/wearables/ui/index.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">Creating Custom UIs for Wear Devices</a></td></tr>
<tr><td>Notifications and custom actions</td>
<td><a href="https://developer.android.com/design/wear/patterns.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">UI Patterns for Android Wear</a></td></tr>
<tr><td>Custom Watch faces</td>
<td><a href="https://developer.android.com/training/wearables/watch-faces/index.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">Creating Watch Faces</a></td></tr>
<tr><td>Layouts for round and square devices</td>
<td><a href="https://developer.android.com/training/wearables/ui/index.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">Creating Custom UIs for Wear Devices</a></td></tr>
<tr><td>OpenGL</td>
<td><a href="http://developer.android.com/training/graphics/opengl/index.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">Displaying Graphics with OpenGL ES</a></td></tr>
<tr><td>Sensors
<ul><li>Accelerometer</li>
<li>Gyroscope</li>
<li>Compass</li>
<li>Barometer</li>
<li>Heart rate sensor</li></ul></td>

<td><a href="http://developer.android.com/reference/android/hardware/SensorManager.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">SensorManager</a></td></tr>
<tr><td>Haptics</td>
<td><a href="http://developer.android.com/reference/android/os/Vibrator.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">Vibrator</a></td></tr>
<tr><td>Microphone</td>
<td><a href="http://developer.android.com/reference/android/media/AudioRecord.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">AudioRecord</a></td></tr>
<tr><td>Voice actions</td>
<td><a href="https://developer.android.com/training/wearables/apps/voice.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">Adding Voice Capabilities</a></td></tr>
<tr><td>GPS</td>
<td><a href="http://developer.android.com/training/articles/wear-location-detection.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">Detecting Location on Android Wear</a></td></tr>
<tr><td>Offline storing of data / music</td>
<td><a href="https://developer.android.com/training/wearables/data-layer/assets.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">Transferring Assets</a></td></tr>
<tr><td>Media playback controls</td>
<td><a href="https://developer.android.com/reference/android/media/session/MediaSession.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">MediaSession</a>, <a href="https://developer.android.com/reference/android/media/session/MediaController.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">MediaController</a> </td></tr>
<tr><td>Framework based on Android 5.0 API 21</td>
<td><a href="https://developer.android.com/about/versions/android-5.0.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">Android 5.0 APIs</a></td></tr>
<tr><td>Standalone or synchronized apps</td>
<td><a href="https://developer.android.com/training/wearables/data-layer/index.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">Sending and Syncing Data</a></td></tr></table></body>
<br>
<div style="float:right; margin:0 0 20px 20px"><a href="http://2.bp.blogspot.com/-e3D3-SMub1E/VOTaoeCP5ZI/AAAAAAAABUY/8WMf8lBRibE/s1600/watchfaces-5c.gif" imageanchor="1" ><img border="0" style="width: 200px" src="http://2.bp.blogspot.com/-e3D3-SMub1E/VOTaoeCP5ZI/AAAAAAAABUY/8WMf8lBRibE/s640/watchfaces-5c.gif" /></a><p style="margin:auto;text-align:center"><i><a href="http://goo.gl/1p31zy">Selected watch faces</a> </i></p></div>

<h3>Watch Faces</h3>

<p>The ability to create <a href="http://developer.android.com/training/wearables/watch-faces/index.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">custom watch faces</a> gives you direct access to the most prominent UI element on a user's most personal device. The API is simple enough to build watch faces quickly and flexible enough to allow personalization. Again, given the depth and flexibility of the Android platform, you can create something for the user that's both beautiful and packed with unique features.</p>

<p>The development journey starts with the simplicity of bringing your design to the wrist. At the core of the watch face API is the onDraw method that allows you to draw whatever design you can think of to the canvas at a high enough frame rate to deliver fluid animation. This will come through at full fidelity while the watch is in interactive mode.</p>



<p>At other times, when the watch is in ambient mode, you're able to draw a more discreet version of the watch face. Additional preferences can be set to arrange the system UI elements appropriately for your design. Once those basics are covered, the limits are your imagination! You can go further with additions like the moon phase, current weather, or fitness stats. Watchmakers call these items "complications" -- but with Android they're hardly complicated. Once you have the data, just draw it on the canvas as you did the time.</p>

<div style="float:right; margin:0 0 20px 20px"><a href="http://3.bp.blogspot.com/-4p4uoucTkWo/VOTbQrRdAQI/AAAAAAAABUg/-4Il0IMAh7o/s1600/notifications-2b2.gif" imageanchor="1" ><img border="0" style="width: 200px" src="http://3.bp.blogspot.com/-4p4uoucTkWo/VOTbQrRdAQI/AAAAAAAABUg/-4Il0IMAh7o/s640/notifications-2b2.gif" /></a><p style="margin:auto;text-align:center"><i><a href="http://goo.gl/fchCLs">Glympse</a> and <a href="http://goo.gl/zEPn0f">WhatsApp</a></i></p></div>

<h3>Notifications</h3>

<p>Of course, <a href="http://developer.android.com/training/wearables/notifications/index.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">Android Wear Notifications</a> are the easiest way to get started in the world of wearables. If you've got an Android app with notifications -- they already work on a Wear watch. If you've already enhanced your notification with actions, this is even better and also automatically already works. You can take things further with Wear-specific functionality like Stacks, Pages, and Voice Replies that make your notifications richer experiences on the wrist.</p>

<p>The user experiences you build for Wear get to take advantage of the power and flexibility of the Android platform. It's easy to get started and possible to create truly groundbreaking UI for your users. Together, we can create an ecosystem of user experiences as diverse as the watches they run on and the people who wear them.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-ZMZfK5xwUYc/VOTdREKhbnI/AAAAAAAABUs/qoEHmH6Dzdg/s1600/Android_Wear_Lineup_no_side_v2_cropped3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-ZMZfK5xwUYc/VOTdREKhbnI/AAAAAAAABUs/qoEHmH6Dzdg/s640/Android_Wear_Lineup_no_side_v2_cropped3.png" /></a></div>

<p>Check out the developer <a href="https://www.youtube.com/playlist?list=PLWz5rJ2EKKc-kIrPiq098QH9dOle-fLef">videos</a> and <a href="https://developer.android.com/wear?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">documentation</a> for more, and share your thoughts on the <a href="https://plus.sandbox.google.com/communities/113381227473021565406">Android Wear Developers community</a>. We can’t wait to see the innovative user experiences you will build on Android Wear.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/3UxarePPsN9" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/3UxarePPsN9" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/3UxarePPsN9" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/building-for-android-wear-depth-and-flexibility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Beta Channel for the Android WebView</title>
		<link>https://googledata.org/google-android/beta-channel-for-the-android-webview/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=beta-channel-for-the-android-webview</link>
		<comments>https://googledata.org/google-android/beta-channel-for-the-android-webview/#comments</comments>
		<pubDate>Fri, 13 Feb 2015 15:25:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=418db3d11d913b131e1e23056e34cdd7</guid>
		<description><![CDATA[<p><i>Posted by Richard Coles, Software Engineer, Google London</i></p>

<div><a href="http://1.bp.blogspot.com/-QSOKFNRJhJw/VN4XO-xAFPI/AAAAAAAABT4/ERdj50oqAb0/s1600/image00.png"><img border="0" src="http://1.bp.blogspot.com/-QSOKFNRJhJw/VN4XO-xAFPI/AAAAAAAABT4/ERdj50oqAb0/s640/image00.png"></a></div>
<p>Many Android apps use a <a href="http://developer.android.com/reference/android/webkit/WebView.html?utm_campaign=webview-beta-215&#38;utm_source=dac&#38;utm_medium=blog">WebView</a> for displaying HTML content. In Android 5.0 Lollipop, Google has the ability to update WebView independently of the Android platform. Beginning today, developers can use a new beta channel to test the latest version of WebView and provide feedback.</p>

<p>WebView updates bring numerous bug fixes, new web platform APIs and updates from Chromium. If you&#8217;re making use of the WebView in your app, becoming a beta channel tester will give you an early start with new APIs as well as the chance to test your app before the WebView rolls out to your users.</p>

<p>The first version offered in the beta channel will be based on Chrome 40 and you can find a full list of changes on the chromium <a href="http://blog.chromium.org/2014/12/chrome-40-beta-powerful-offline-and.html">blog</a> entry.</p>

<p>To become a beta tester, join the <a href="https://plus.google.com/communities/105434725573080290360">community</a> which will enable you to sign up for the Beta program; you&#8217;ll then be able to install the beta version of the WebView via the Play Store. If you find any bugs, please file them on the <a href="https://code.google.com/p/chromium/issues/entry?template=Webview%20Bugs">Chromium issue tracker</a>.</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/Pe9dTiRGxP5"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/Pe9dTiRGxP5"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/Pe9dTiRGxP5"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Richard Coles, Software Engineer, Google London</i></p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-QSOKFNRJhJw/VN4XO-xAFPI/AAAAAAAABT4/ERdj50oqAb0/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-QSOKFNRJhJw/VN4XO-xAFPI/AAAAAAAABT4/ERdj50oqAb0/s640/image00.png" /></a></div>
<p>Many Android apps use a <a href="http://developer.android.com/reference/android/webkit/WebView.html?utm_campaign=webview-beta-215&utm_source=dac&utm_medium=blog">WebView</a> for displaying HTML content. In Android 5.0 Lollipop, Google has the ability to update WebView independently of the Android platform. Beginning today, developers can use a new beta channel to test the latest version of WebView and provide feedback.</p>

<p>WebView updates bring numerous bug fixes, new web platform APIs and updates from Chromium. If you’re making use of the WebView in your app, becoming a beta channel tester will give you an early start with new APIs as well as the chance to test your app before the WebView rolls out to your users.</p>

<p>The first version offered in the beta channel will be based on Chrome 40 and you can find a full list of changes on the chromium <a href="http://blog.chromium.org/2014/12/chrome-40-beta-powerful-offline-and.html">blog</a> entry.</p>

<p>To become a beta tester, join the <a href="https://plus.google.com/communities/105434725573080290360">community</a> which will enable you to sign up for the Beta program; you’ll then be able to install the beta version of the WebView via the Play Store. If you find any bugs, please file them on the <a href="https://code.google.com/p/chromium/issues/entry?template=Webview%20Bugs">Chromium issue tracker</a>.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/Pe9dTiRGxP5" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/Pe9dTiRGxP5" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/Pe9dTiRGxP5" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/beta-channel-for-the-android-webview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>The Guardian — Understanding and engaging mobile users</title>
		<link>https://googledata.org/google-android/the-guardian-understanding-and-engaging-mobile-users/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-guardian-understanding-and-engaging-mobile-users</link>
		<comments>https://googledata.org/google-android/the-guardian-understanding-and-engaging-mobile-users/#comments</comments>
		<pubDate>Wed, 11 Feb 2015 18:52:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=2edfe0e58b9626b48fc46c89d1cb99a1</guid>
		<description><![CDATA[<p><i>Posted by Leticia Lago, Google Play team</i></p>

<p>The Guardian is a global news organization with one of the world's largest quality English-speaking news websites, <a href="http://theguardian.com/">theguardian.com</a>. It has more than 100 million monthly unique browsers and app users, two thirds of which come from outside the UK.  With a longstanding reputation for agenda-setting journalism, the publication is most recently renowned for its Pulitzer Prize and Emmy-winning coverage of the disclosures made by whistleblower Edward Snowden. The Guardian&#8217;s early adoption of a digital-first policy and continued digital innovation means it has also become a respected name among developers and tech audiences. In the last year, it has launched a redesigned app and new website and been among a handful of publishers to develop its own Glassware.</p>

<p><a href="https://play.google.com/store/apps/details?id=com.guardian">The Guardian</a> app is taking advantage of unique Google Play and Android features to drive user engagement. Their mobile app readers are now 10 to 20 times more engaged than their average web users. Improving engagement has also helped them lift the rating for their app from 4.0 to 4.4 on Google Play.</p>

<p>Anthony Sullivan, Director of Product, and Tom Grinsted, Product Manager, share some best practices for increasing app engagement in this video.</p>

<!--[Interactive video]  --> 


<p>To learn more, be sure to check out these resources to better engage your users:</p>

<ul><li><a href="https://www.youtube.com/watch?v=EEgCy-HFNgE&#38;list=UU_x5XG1OV2P6uZZ5FSM9Ttw">Convert installs to active users</a> [video] &#8212; hear from Matteo Vallone, Partner Development Manager for Google Play, about the best practices for engaging and retaining users through intents, identity, context, and rich notifications as well as delivering a cross-platform user experience.</li>
<li><a href="http://developer.android.com/training/wearables/notifications/index.html?utm_campaign=guardian-215&#38;utm_source=dac&#38;utm_medium=blog">Adding Wearable Features to Notifications</a> [tutorial] &#8212; learn how to add notifications to Android Wear devices, including how to make use of the Wear notification features: voice commands, stacks, and pages.</li>
<li><a href="https://support.google.com/googleplay/android-developer/answer/3131213?hl=en">Beta testing</a> [help] &#8212; discover how to make use of the alpha and beta testing features offered by Google Play, and get feedback from real users.</li>
<li><a href="http://developer.android.com/distribute/users/build-community.html">Build your community (of testers)</a> [guide] &#8212; get advice on how to build communities on G+ or other social networks, then tap into their skills and enthusiasm to help with testing your app.</li></ul><div><div><a href="https://plus.google.com/108967384991768947849/posts/epyXceV429m"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/epyXceV429m"><span>+Android Developers</span></a></div><div><a href="https://https://plus.google.com/108967384991768947849/posts/epyXceV429m"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Leticia Lago, Google Play team</i></p>

<p>The Guardian is a global news organization with one of the world's largest quality English-speaking news websites, <a href="http://theguardian.com/">theguardian.com</a>. It has more than 100 million monthly unique browsers and app users, two thirds of which come from outside the UK.  With a longstanding reputation for agenda-setting journalism, the publication is most recently renowned for its Pulitzer Prize and Emmy-winning coverage of the disclosures made by whistleblower Edward Snowden. The Guardian’s early adoption of a digital-first policy and continued digital innovation means it has also become a respected name among developers and tech audiences. In the last year, it has launched a redesigned app and new website and been among a handful of publishers to develop its own Glassware.</p>

<p><a href="https://play.google.com/store/apps/details?id=com.guardian">The Guardian</a> app is taking advantage of unique Google Play and Android features to drive user engagement. Their mobile app readers are now 10 to 20 times more engaged than their average web users. Improving engagement has also helped them lift the rating for their app from 4.0 to 4.4 on Google Play.</p>

<p>Anthony Sullivan, Director of Product, and Tom Grinsted, Product Manager, share some best practices for increasing app engagement in this video.</p>

<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/lUziismX-5E?list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 70px;" width="560"></iframe> 


<p>To learn more, be sure to check out these resources to better engage your users:</p>

<ul><li><a href="https://www.youtube.com/watch?v=EEgCy-HFNgE&list=UU_x5XG1OV2P6uZZ5FSM9Ttw">Convert installs to active users</a> [video] — hear from Matteo Vallone, Partner Development Manager for Google Play, about the best practices for engaging and retaining users through intents, identity, context, and rich notifications as well as delivering a cross-platform user experience.</li>
<li><a href="http://developer.android.com/training/wearables/notifications/index.html?utm_campaign=guardian-215&utm_source=dac&utm_medium=blog">Adding Wearable Features to Notifications</a> [tutorial] — learn how to add notifications to Android Wear devices, including how to make use of the Wear notification features: voice commands, stacks, and pages.</li>
<li><a href="https://support.google.com/googleplay/android-developer/answer/3131213?hl=en">Beta testing</a> [help] — discover how to make use of the alpha and beta testing features offered by Google Play, and get feedback from real users.</li>
<li><a href="http://developer.android.com/distribute/users/build-community.html">Build your community (of testers)</a> [guide] — get advice on how to build communities on G+ or other social networks, then tap into their skills and enthusiasm to help with testing your app.</li></ul>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/epyXceV429m" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/epyXceV429m" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/the-guardian-understanding-and-engaging-mobile-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Trulia sees 30% more engagement using notifications and further innovates with Android Wear</title>
		<link>https://googledata.org/google-android/trulia-sees-30-more-engagement-using-notifications-and-further-innovates-with-android-wear/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=trulia-sees-30-more-engagement-using-notifications-and-further-innovates-with-android-wear</link>
		<comments>https://googledata.org/google-android/trulia-sees-30-more-engagement-using-notifications-and-further-innovates-with-android-wear/#comments</comments>
		<pubDate>Wed, 04 Feb 2015 18:23:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=98621390faf9c364409942fe9d150182</guid>
		<description><![CDATA[<p><i>Posted by Laura Della Torre, Google Play team</i></p>

<p>Trulia&#8217;s mission is to make it as easy as possible for home buyers, sellers, owners and renters to navigate the real estate market. Originally a website-based company, Trulia is keenly aware that its users are migrating to mobile. Today, more than 50 percent of Trulia&#8217;s business comes from mobile and growth shows no sign of slowing, so they know that&#8217;s where they need to innovate.</p>

<p>In the following video, Jonathan McNulty, VP of Consumer Product, and Lauren Hirashima, Mobile Product Manager, at Trulia, talked about how the company successfully leveraged notifications on Android to increase app engagement by 30 percent and has seen 2x the amount of engagement on Android relative to other platforms:</p>

<!--[Interactive video]  --> 

<p>Trulia continues to focus on improving their mobile experience, using Google&#8217;s geo-fencing technology to create Nearby Home Alerts, which lets users know when they walk near a new listing. Combined with Android Wear, Trulia now  makes it possible for users to see details and photos about a property and call or email the agent, all directly from their watch.</p>

<p>Find out more about using <a href="https://developer.android.com/distribute/engage/notifications.html?utm_campaign=truliawear-215&#38;utm_source=dac&#38;utm_medium=blog">rich notifications</a> on Android and <a href="https://developer.android.com/distribute/googleplay/wear.html?utm_campaign=truliawear-215&#38;utm_source=dac&#38;utm_medium=blog">developing for Android Wear</a>. And check out <a href="https://developer.android.com/distribute/googleplay/guide.html?utm_campaign=truliawear-215&#38;utm_source=dac&#38;utm_medium=blog">The Secrets to App Success on Google Play</a> (ebook) which contains a chapter dedicated to the best practices and tools you can use to increase user engagement and retention in your app.</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/Kv7jmwHLaFr"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/Kv7jmwHLaFr"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/Kv7jmwHLaFr"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Laura Della Torre, Google Play team</i></p>

<p>Trulia’s mission is to make it as easy as possible for home buyers, sellers, owners and renters to navigate the real estate market. Originally a website-based company, Trulia is keenly aware that its users are migrating to mobile. Today, more than 50 percent of Trulia’s business comes from mobile and growth shows no sign of slowing, so they know that’s where they need to innovate.</p>

<p>In the following video, Jonathan McNulty, VP of Consumer Product, and Lauren Hirashima, Mobile Product Manager, at Trulia, talked about how the company successfully leveraged notifications on Android to increase app engagement by 30 percent and has seen 2x the amount of engagement on Android relative to other platforms:</p>

<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/p2eZbZqo0es?list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 70px;" width="560"></iframe> 

<p>Trulia continues to focus on improving their mobile experience, using Google’s geo-fencing technology to create Nearby Home Alerts, which lets users know when they walk near a new listing. Combined with Android Wear, Trulia now  makes it possible for users to see details and photos about a property and call or email the agent, all directly from their watch.</p>

<p>Find out more about using <a href="https://developer.android.com/distribute/engage/notifications.html?utm_campaign=truliawear-215&utm_source=dac&utm_medium=blog">rich notifications</a> on Android and <a href="https://developer.android.com/distribute/googleplay/wear.html?utm_campaign=truliawear-215&utm_source=dac&utm_medium=blog">developing for Android Wear</a>. And check out <a href="https://developer.android.com/distribute/googleplay/guide.html?utm_campaign=truliawear-215&utm_source=dac&utm_medium=blog">The Secrets to App Success on Google Play</a> (ebook) which contains a chapter dedicated to the best practices and tools you can use to increase user engagement and retention in your app.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/Kv7jmwHLaFr" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/Kv7jmwHLaFr" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/Kv7jmwHLaFr" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/trulia-sees-30-more-engagement-using-notifications-and-further-innovates-with-android-wear/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android Wear &amp; QR Code: Putting Users through the Fast Track</title>
		<link>https://googledata.org/google-android/android-wear-qr-code-putting-users-through-the-fast-track/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=android-wear-qr-code-putting-users-through-the-fast-track</link>
		<comments>https://googledata.org/google-android/android-wear-qr-code-putting-users-through-the-fast-track/#comments</comments>
		<pubDate>Tue, 27 Jan 2015 12:13:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=1e99814a05c17527e777519f0d793fc7</guid>
		<description><![CDATA[<p><i>Posted by <a href="https://plus.google.com/+HoiLam/">Hoi Lam</a>, Developer Advocate</i></p>

<div><a href="http://2.bp.blogspot.com/-P-PITLDLYJ0/VMc0-7Jde_I/AAAAAAAABSo/ojJL_YcS9to/s1600/image01.gif"><img border="0" src="http://2.bp.blogspot.com/-P-PITLDLYJ0/VMc0-7Jde_I/AAAAAAAABSo/ojJL_YcS9to/s1600/image01.gif"></a></div>

<p>Rushing onto a train, entering a concert, or simply ordering a coffee, we have all seen users (or ourselves) rummaging through their wallets or mobile app trying to get the right boarding pass, ticket or loyalty card. With Android Wear and a few lines of code in your mobile app, this can all work like magic.</p>

<h3>What&#8217;s new in the Android Support Library</h3>
<p><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.WearableExtender.html?utm_campaign=wearQR-115&#38;utm_source=dac&#38;utm_medium=blog#setHintShowBackgroundOnly(boolean)">While QR Code images could be attached to a notification</a> since the first release of the Android Wear platform, developers have asked about two situations which they would like to see improve:</p>

<ol><li>With circular displays, it is hard for developer to know if the QR code is displayed in it&#8217;s entirety and not cropped.</li>
<li>To conserve battery, Android Wear switches off the screen after five seconds of inactivity. However, this makes it hard for the user to ensure that the QR code is still displayed on their wrist when they reach the front of the queue. </li></ol><p>With the latest support library, we have added two additional methods to <code><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.WearableExtender.html?utm_campaign=wearQR-115&#38;utm_source=dac&#38;utm_medium=blog">WearableExtender</a></code> to give developers more control over how background images are displayed in notifications. These new APIs can be used in a number of scenarios, we will focus on the QR code use case in this post:</p>

<ul><li><b>Ensure the image is not cropped</b> - <code><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.WearableExtender.html?utm_campaign=wearQR-115&#38;utm_source=dac&#38;utm_medium=blog#setHintAvoidBackgroundClipping(boolean)">setHintAvoidBackgroundClipping(true)</a></code></li>
With this new method, developers can ensure that the entire QR code is always visible.


<table><tr><td><b>Wrong:</b> <br /><code>setHintAvoidBackgroundClipping
(false)<br />// this is the Default</code></td>
<td><b>Right:</b> <br /><code>setHintAvoidBackgroundClipping
(true)</code></td></tr><tr><td><div><a href="http://3.bp.blogspot.com/-V5Vp6UgINKE/VMc4mLtTiNI/AAAAAAAABTE/RIFpZ9KrmvE/s1600/image00.png"><img border="0" src="http://3.bp.blogspot.com/-V5Vp6UgINKE/VMc4mLtTiNI/AAAAAAAABTE/RIFpZ9KrmvE/s320/image00.png"></a></div></td>
<td><div><a href="http://1.bp.blogspot.com/-nXULq9XStwM/VMc4rWSjw-I/AAAAAAAABTM/9VTiJctEYy4/s1600/image02.png"><img border="0" src="http://1.bp.blogspot.com/-nXULq9XStwM/VMc4rWSjw-I/AAAAAAAABTM/9VTiJctEYy4/s320/image02.png"></a></div></td>
</tr></table><li><b>Ensure the QR code is still displayed when the user gets to the front of the queue</b> - <code><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.WearableExtender.html?utm_campaign=wearQR-115&#38;utm_source=dac&#38;utm_medium=blog#setHintScreenTimeout(int)">setHintScreenTimeout(timeInMS)</a></code></li>
This new method enables developers to set a timeout that makes sense for their specific use case.</ul><h3>Design Best Practices</h3>
<p>We have experimented with a number of customization options with QR codes and here are some of the lessons learnt:</p>

<h4>Dos</h4>
<ul><li><b>Do test with your equipment</b> - Before deploying, test with your QR code readers to ensure that the QR code displayed on the wearable works with your equipment.</li>
<li><b>Do use black and white QR codes</b> - This ensures maximum contrasts and makes it easier for the reader to read the information.</li>
<li><b>Do display only the core information in the text notification</b> - Remember that less is more. Glanceability is important for wearables.</li>
<li><b>Do test with both round and square watches</b> - The amount of text can be displayed on the notification varies especially dependent on the form factor (square and circular).</li>
<li><b>Do brand with icon</b> - On the main notification in the Android Wear stream, developers can set a full color icon using setLargeIcon to brand your notification. </li>
<li><b>Do convey additional information using background</b> - To achieve an even better result, consider setting context sensitive backgrounds through setBackground, such as a photo of the destination for the train or a picture of the stadium.</li>
<li><b>Do use QR codes which are 400x400 pixels or larger</b> - In line with other background images, the recommended minimum size for QR code is 400x400 pixels.</li></ul><h4>Don'ts</h4>
<ul><li><b>Do not brand the QR code</b> - The screen real estate is limited on Android Wear and using some of this for branding may result in the QR code not working correctly.</li>
<li><b>Do not use anything other than grey or default theme color for notification text</b> - Although Android Wear notifications support basic text formatting such as setting text color, this should be used in moderation with the color set to default or grey. The reason is that the Holo theme for Android 4.x has a default background of black whereas Material Design theme for Android 5+ including Android Wear has a white background. This makes it hard for the colour to work for both themes. Bold and Italic are fine formatting choices.</li></ul><h3>Android Wear is for people on the move</h3>
<p>Using QR codes on Android Wear is a very delightful experience. The information that the user needs is right on their wrist at the right time in the right place. With the new APIs, you can now unlock more doors than ever before and give users an easier time with check in on the go.</p>

<p>Sample code can be downloaded from <a href="https://github.com/hcl21/QRCodeOnAndroidWear">this repository</a>. </p>

<div><div><span>Join the discussion on</span><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/RFJZnSg3Xft"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/RFJZnSg3Xft"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by <a href="https://plus.google.com/+HoiLam/">Hoi Lam</a>, Developer Advocate</i></p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-P-PITLDLYJ0/VMc0-7Jde_I/AAAAAAAABSo/ojJL_YcS9to/s1600/image01.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://2.bp.blogspot.com/-P-PITLDLYJ0/VMc0-7Jde_I/AAAAAAAABSo/ojJL_YcS9to/s1600/image01.gif" /></a></div>

<p>Rushing onto a train, entering a concert, or simply ordering a coffee, we have all seen users (or ourselves) rummaging through their wallets or mobile app trying to get the right boarding pass, ticket or loyalty card. With Android Wear and a few lines of code in your mobile app, this can all work like magic.</p>

<h3>What’s new in the Android Support Library</h3>
<p><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.WearableExtender.html?utm_campaign=wearQR-115&utm_source=dac&utm_medium=blog#setHintShowBackgroundOnly(boolean)">While QR Code images could be attached to a notification</a> since the first release of the Android Wear platform, developers have asked about two situations which they would like to see improve:</p>

<ol><li>With circular displays, it is hard for developer to know if the QR code is displayed in it’s entirety and not cropped.</li>
<li>To conserve battery, Android Wear switches off the screen after five seconds of inactivity. However, this makes it hard for the user to ensure that the QR code is still displayed on their wrist when they reach the front of the queue. </li></ol>

<p>With the latest support library, we have added two additional methods to <code><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.WearableExtender.html?utm_campaign=wearQR-115&utm_source=dac&utm_medium=blog">WearableExtender</a></code> to give developers more control over how background images are displayed in notifications. These new APIs can be used in a number of scenarios, we will focus on the QR code use case in this post:</p>

<ul><li><b>Ensure the image is not cropped</b> - <code><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.WearableExtender.html?utm_campaign=wearQR-115&utm_source=dac&utm_medium=blog#setHintAvoidBackgroundClipping(boolean)">setHintAvoidBackgroundClipping(true)</a></code></li>
With this new method, developers can ensure that the entire QR code is always visible.

<head>
<style>
table, th, td {
    border: 1px solid black;
    border-collapse: collapse;
}
</style>
</head>

<body>

<table style="width:100%">
  <tr style="vertical-align: top;">
    <td><b>Wrong:</b> <br/><code>setHintAvoidBackgroundClipping
(false)<br/>// this is the Default</code></td>
<td><b>Right:</b> <br/><code>setHintAvoidBackgroundClipping
(true)</code></td></tr>
  <tr>
    <td><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-V5Vp6UgINKE/VMc4mLtTiNI/AAAAAAAABTE/RIFpZ9KrmvE/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-V5Vp6UgINKE/VMc4mLtTiNI/AAAAAAAABTE/RIFpZ9KrmvE/s320/image00.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-nXULq9XStwM/VMc4rWSjw-I/AAAAAAAABTM/9VTiJctEYy4/s1600/image02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-nXULq9XStwM/VMc4rWSjw-I/AAAAAAAABTM/9VTiJctEYy4/s320/image02.png" /></a></div></td>
</tr></table></body>



<li><b>Ensure the QR code is still displayed when the user gets to the front of the queue</b> - <code><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.WearableExtender.html?utm_campaign=wearQR-115&utm_source=dac&utm_medium=blog#setHintScreenTimeout(int)">setHintScreenTimeout(timeInMS)</a></code></li>
This new method enables developers to set a timeout that makes sense for their specific use case.</ul>

<h3>Design Best Practices</h3>
<p>We have experimented with a number of customization options with QR codes and here are some of the lessons learnt:</p>

<h4>Dos</h4>
<ul><li><b>Do test with your equipment</b> - Before deploying, test with your QR code readers to ensure that the QR code displayed on the wearable works with your equipment.</li>
<li><b>Do use black and white QR codes</b> - This ensures maximum contrasts and makes it easier for the reader to read the information.</li>
<li><b>Do display only the core information in the text notification</b> - Remember that less is more. Glanceability is important for wearables.</li>
<li><b>Do test with both round and square watches</b> - The amount of text can be displayed on the notification varies especially dependent on the form factor (square and circular).</li>
<li><b>Do brand with icon</b> - On the main notification in the Android Wear stream, developers can set a full color icon using setLargeIcon to brand your notification. </li>
<li><b>Do convey additional information using background</b> - To achieve an even better result, consider setting context sensitive backgrounds through setBackground, such as a photo of the destination for the train or a picture of the stadium.</li>
<li><b>Do use QR codes which are 400x400 pixels or larger</b> - In line with other background images, the recommended minimum size for QR code is 400x400 pixels.</li></ul>

<h4>Don'ts</h4>
<ul><li><b>Do not brand the QR code</b> - The screen real estate is limited on Android Wear and using some of this for branding may result in the QR code not working correctly.</li>
<li><b>Do not use anything other than grey or default theme color for notification text</b> - Although Android Wear notifications support basic text formatting such as setting text color, this should be used in moderation with the color set to default or grey. The reason is that the Holo theme for Android 4.x has a default background of black whereas Material Design theme for Android 5+ including Android Wear has a white background. This makes it hard for the colour to work for both themes. Bold and Italic are fine formatting choices.</li></ul>

<h3>Android Wear is for people on the move</h3>
<p>Using QR codes on Android Wear is a very delightful experience. The information that the user needs is right on their wrist at the right time in the right place. With the new APIs, you can now unlock more doors than ever before and give users an easier time with check in on the go.</p>

<p>Sample code can be downloaded from <a href="https://github.com/hcl21/QRCodeOnAndroidWear">this repository</a>. </p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><https://plus.google.com/108967384991768947849/posts/RFJZnSg3Xft" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/RFJZnSg3Xft" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/RFJZnSg3Xft" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-wear-qr-code-putting-users-through-the-fast-track/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>How Google Analytics helps you make better decisions for your apps</title>
		<link>https://googledata.org/google-analytics/how-google-analytics-helps-you-make-better-decisions-for-your-apps/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-google-analytics-helps-you-make-better-decisions-for-your-apps</link>
		<comments>https://googledata.org/google-analytics/how-google-analytics-helps-you-make-better-decisions-for-your-apps/#comments</comments>
		<pubDate>Thu, 15 Jan 2015 20:12:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=1ea0f3b5de2f1f9cdcc9e84566d0b47a</guid>
		<description><![CDATA[<p><i>Posted by Russell Ketchum, Lead Product Manager, Google Analytics for Mobile Apps</i></p>

<p>Knowing how your customers use your app is the foundation to keeping them happy and engaged. It&#8217;s important to track downloads and user ratings, but the key to building a successful business is using data to dive deeper into understanding the full acquisition funnel and what makes users stick around. </p>

<p>Google Analytics is the easiest way to understand more about what your users are doing inside your app on Google Play, while also simultaneously tracking your users across the web and other mobile platforms. To show how Google Analytics can help, we've created <a href="https://developer.android.com/distribute/analyze/index.html?utm_campaign=betterdecisions-115&#38;utm_source=dac&#38;utm_medium=blog">a new "Analyze" section on the Android Developers website</a> for you to check out. We provide guidance on how to design a measurement plan and implement effective in-app analytics &#8211; <i>and take advantage of features only available between Google Play and Google Analytics</i>.</p>

<div><a href="http://1.bp.blogspot.com/-C9_T1yLgdWs/VLgaWcBEArI/AAAAAAAABSY/tF6DG1G-aEI/s1600/Google-play-flow.png"><img border="0" src="http://1.bp.blogspot.com/-C9_T1yLgdWs/VLgaWcBEArI/AAAAAAAABSY/tF6DG1G-aEI/s640/Google-play-flow.png"></a></div>
<p></p><i>The Google Play Referral Flow in Analytics</i>

<p>Google Analytics for mobile apps provides a comprehensive view into your app&#8217;s full user lifecycle, including user acquisition, composition, in app behavior, and key conversions. Our <a href="https://analyticsacademy.withgoogle.com/course04">Analytics Academy</a> course on mobile app analytics is also a great resource to learn the fundamentals. </p>

<p>Eltsoft LLC, a foreign language learning and education app developer for Android, recognized early on how impactful Google Analytics would have on the company's ability to quickly improve on its apps and meet user needs. </p>

<p><i>Analytics has really helped us to track the effectiveness of the changes to our app. I would say six months ago, that our success was a mystery. The data said we were doing well, but the whys were not clear. Therefore, we couldn&#8217;t replicate or push forward. But today, we understand what&#8217;s happening and can project our future success. We have not only the data, but can control certain variables allowing us to understand that data. - Jason Byrne, <a href="http://eltsoft.com/">Eltsoft LLC</a></i></p>

<p>Here are some powerful tips to make the most of Google Analytics: </p>

<ol type="1"><li><b>Understand the full acquisition funnel</b></li>
Uniquely integrated with the Google Play Developer Console, Google Analytics gives you a comprehensive view of the Google Play Referral Flow. By linking Analytics to the Developer Console, you can track useful data on how users move through the acquisition flow from your marketing efforts to the Google Play store listing to the action of launching the app. If you find that a significant number of users browse your app in Google Play, but don&#8217;t install it, for example, you can then focus your efforts on improving your store listing.
<li><b>Unlock powerful insights on in-app purchases</b></li>
Monitoring in-app purchases in the Google Play Developer Console will show you the total revenue your app is generating, but it does not give you the full picture about your paying users. By instrumenting your app with the Google Analytics ecommerce tracking, you&#8217;ll get a fuller understanding of what paying users do inside your app. For example, you can find out which acquisition channels deliver users who stay engaged and go on to become the highest value users.
<li><b>Identify roadblocks and common paths with the Behavior Flow</b></li>
Understanding how users move through your app is best done with in-app analytics. With Google Analytics, you can easily spot if a significant percentage of users leave your app during a specific section. For example, if you see significant drop off on a certain level of your game, you may want to make that level easier, so that more users complete the level and progress through the game. Similarly, if you find users who complete a tutorial stay engaged with your app, you might put the tutorial front and center for first-time users.
<li><b>Segment your audience to find valuable insights</b></li>
Aggregated data can help you answer questions about overall trends in your app. If you want to unlock deeper insights about what drives your users&#8217; behavior, you can slice and dice your data using segmentation, such as demographics, behavior, or install date. If something changes in one of your key metrics, segmentation can help you get to the root of the issue -- for example, was a recent app update unpopular with users from one geographic area, or were users with a certain device or carrier affected by a bug?
<li><b>Use custom data to measure what matters for your business</b></li>
Simply activating the Google Analytics library gives you many out-of-the-box metrics without additional work, such as daily and monthly active users, session duration, breakdowns by country, and many more variables. However, it&#8217;s likely that your app has many user actions or data types that are unique to it, which are critical to building an engaged user base. Google Analytics provides events, custom dimensions, and custom metrics so you can craft a measurement strategy that fits your app and business.
<li><b>No more one-size-fits-all ad strategy</b></li>
If you&#8217;re a developer using AdMob to monetize your app, you can now see all of your Analytics data in the AdMob dashboard. Running a successful app business is all about reaching the right user with the right ad or product at the right time. If you create specific user segments in Google Analytics, you can target each segment with different ad products. For example, try targeting past purchasers with in-app purchase ads, while monetizing users who don&#8217;t purchase through targeted advertising. </ol><p>By measuring your app performance on a granular level, you will be able to make better decisions for your business. Successful developers build their measurement plan at the same time as building their app in order to set goals and track progress against key success metrics, but it&#8217;s never too late to start. </p>

<p>Choose the implementation that works best for your app to <a href="https://developer.android.com/distribute/analyze/start.html?utm_campaign=betterdecisions-115&#38;utm_source=dac&#38;utm_medium=blog">get started with Google Analytics</a> today and find out more about what you can do in the new &#8220;<a href="https://developer.android.com/distribute/analyze/index.html?utm_campaign=betterdecisions-115&#38;utm_source=dac&#38;utm_medium=blog">Analyze</a>&#8221; section of developers.android.com.</p>

<div><div><span>Join the discussion on</span><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/Bd7m1TDKpqc"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/Bd7m1TDKpqc"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Russell Ketchum, Lead Product Manager, Google Analytics for Mobile Apps</i></p>

<p>Knowing how your customers use your app is the foundation to keeping them happy and engaged. It’s important to track downloads and user ratings, but the key to building a successful business is using data to dive deeper into understanding the full acquisition funnel and what makes users stick around. </p>

<p>Google Analytics is the easiest way to understand more about what your users are doing inside your app on Google Play, while also simultaneously tracking your users across the web and other mobile platforms. To show how Google Analytics can help, we've created <a href="https://developer.android.com/distribute/analyze/index.html?utm_campaign=betterdecisions-115&utm_source=dac&utm_medium=blog">a new "Analyze" section on the Android Developers website</a> for you to check out. We provide guidance on how to design a measurement plan and implement effective in-app analytics – <i>and take advantage of features only available between Google Play and Google Analytics</i>.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-C9_T1yLgdWs/VLgaWcBEArI/AAAAAAAABSY/tF6DG1G-aEI/s1600/Google-play-flow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-C9_T1yLgdWs/VLgaWcBEArI/AAAAAAAABSY/tF6DG1G-aEI/s640/Google-play-flow.png" /></a></div>
<p><center><i>The Google Play Referral Flow in Analytics</i></center></p>

<p>Google Analytics for mobile apps provides a comprehensive view into your app’s full user lifecycle, including user acquisition, composition, in app behavior, and key conversions. Our <a href="https://analyticsacademy.withgoogle.com/course04">Analytics Academy</a> course on mobile app analytics is also a great resource to learn the fundamentals. </p>

<p>Eltsoft LLC, a foreign language learning and education app developer for Android, recognized early on how impactful Google Analytics would have on the company's ability to quickly improve on its apps and meet user needs. </p>

<p><i>Analytics has really helped us to track the effectiveness of the changes to our app. I would say six months ago, that our success was a mystery. The data said we were doing well, but the whys were not clear. Therefore, we couldn’t replicate or push forward. But today, we understand what’s happening and can project our future success. We have not only the data, but can control certain variables allowing us to understand that data. - Jason Byrne, <a href="http://eltsoft.com/">Eltsoft LLC</a></i></p>

<p>Here are some powerful tips to make the most of Google Analytics: </p>

<ol type="1"><li><b>Understand the full acquisition funnel</b></li>
Uniquely integrated with the Google Play Developer Console, Google Analytics gives you a comprehensive view of the Google Play Referral Flow. By linking Analytics to the Developer Console, you can track useful data on how users move through the acquisition flow from your marketing efforts to the Google Play store listing to the action of launching the app. If you find that a significant number of users browse your app in Google Play, but don’t install it, for example, you can then focus your efforts on improving your store listing.
<li><b>Unlock powerful insights on in-app purchases</b></li>
Monitoring in-app purchases in the Google Play Developer Console will show you the total revenue your app is generating, but it does not give you the full picture about your paying users. By instrumenting your app with the Google Analytics ecommerce tracking, you’ll get a fuller understanding of what paying users do inside your app. For example, you can find out which acquisition channels deliver users who stay engaged and go on to become the highest value users.
<li><b>Identify roadblocks and common paths with the Behavior Flow</b></li>
Understanding how users move through your app is best done with in-app analytics. With Google Analytics, you can easily spot if a significant percentage of users leave your app during a specific section. For example, if you see significant drop off on a certain level of your game, you may want to make that level easier, so that more users complete the level and progress through the game. Similarly, if you find users who complete a tutorial stay engaged with your app, you might put the tutorial front and center for first-time users.
<li><b>Segment your audience to find valuable insights</b></li>
Aggregated data can help you answer questions about overall trends in your app. If you want to unlock deeper insights about what drives your users’ behavior, you can slice and dice your data using segmentation, such as demographics, behavior, or install date. If something changes in one of your key metrics, segmentation can help you get to the root of the issue -- for example, was a recent app update unpopular with users from one geographic area, or were users with a certain device or carrier affected by a bug?
<li><b>Use custom data to measure what matters for your business</b></li>
Simply activating the Google Analytics library gives you many out-of-the-box metrics without additional work, such as daily and monthly active users, session duration, breakdowns by country, and many more variables. However, it’s likely that your app has many user actions or data types that are unique to it, which are critical to building an engaged user base. Google Analytics provides events, custom dimensions, and custom metrics so you can craft a measurement strategy that fits your app and business.
<li><b>No more one-size-fits-all ad strategy</b></li>
If you’re a developer using AdMob to monetize your app, you can now see all of your Analytics data in the AdMob dashboard. Running a successful app business is all about reaching the right user with the right ad or product at the right time. If you create specific user segments in Google Analytics, you can target each segment with different ad products. For example, try targeting past purchasers with in-app purchase ads, while monetizing users who don’t purchase through targeted advertising. </ol>

<p>By measuring your app performance on a granular level, you will be able to make better decisions for your business. Successful developers build their measurement plan at the same time as building their app in order to set goals and track progress against key success metrics, but it’s never too late to start. </p>

<p>Choose the implementation that works best for your app to <a href="https://developer.android.com/distribute/analyze/start.html?utm_campaign=betterdecisions-115&utm_source=dac&utm_medium=blog">get started with Google Analytics</a> today and find out more about what you can do in the new “<a href="https://developer.android.com/distribute/analyze/index.html?utm_campaign=betterdecisions-115&utm_source=dac&utm_medium=blog">Analyze</a>” section of developers.android.com.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><https://plus.google.com/108967384991768947849/posts/Bd7m1TDKpqc" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/Bd7m1TDKpqc" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/Bd7m1TDKpqc" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-analytics/how-google-analytics-helps-you-make-better-decisions-for-your-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Efficient Game Textures with Hardware Compression</title>
		<link>https://googledata.org/google-android/efficient-game-textures-with-hardware-compression/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=efficient-game-textures-with-hardware-compression</link>
		<comments>https://googledata.org/google-android/efficient-game-textures-with-hardware-compression/#comments</comments>
		<pubDate>Tue, 13 Jan 2015 19:39:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=ba4fe46c25ea30c5500ed45be11c30e1</guid>
		<description><![CDATA[<p><i>Posted by <a href="https://plus.google.com/u/1/+ShaneeNishry/posts">Shanee Nishry</a>, Developer Advocate</i></p>

<p>As you may know, high resolution textures contribute to better graphics and a more impressive game experience. Adaptive Scalable Texture Compression (ASTC) helps solve many of the challenges involved including reducing memory footprint and loading time and even increase performance and battery life.</p>

<p>If you have a lot of textures, you are probably already compressing them. Unfortunately, not all compression algorithms are made equal. PNG, JPG and other common formats are not GPU friendly. Some of the highest-quality algorithms today are proprietary and limited to certain GPUs. Until recently, the only broadly supported GPU accelerated formats were relatively primitive and produced poor results.</p>

<p>With the introduction of ASTC, a new compression technique invented by ARM and standardized by the Khronos group, we expect to see dramatic changes for the better. ASTC promises to be both high quality and broadly supported by future Android devices. But until devices with ASTC support become widely available, it&#8217;s important to understand the variety of legacy formats that exist today.</p>

<p>We will examine preferable compression formats which are supported on the GPU to help you reduce .apk size and loading times of your game.</p>

<h3>Texture Compression</h3>
<p>Popular compressed formats include PNG and JPG, which can&#8217;t be decoded directly by the GPU. As a consequence, they need to be decompressed before copying them to the GPU memory. Decompressing the textures takes time and leads to increased loading times.</p>

<p>A better option is to use hardware accelerated formats. These formats are lossy but have the advantage of being designed for the GPU.</p>

<p>This means they do not need to be decompressed before being copied and result in decreased loading times for the player and may even lead to increased performance due to hardware optimizations.</p>

<h3>Hardware Accelerated Formats</h3>

<p>Hardware accelerated formats have many benefits. As mentioned before, they help improve loading times and the runtime memory footprint.</p>

<p>Additionally, these formats help improve performance, battery life and reduce heating of the device, requiring less bandwidth while also consuming less energy.</p>

<p>There are two categories of hardware accelerated formats, standard and proprietary. This table shows the standard formats:</p>

<table><tr><td>ETC1</td>
<td>Supported on all Android devices with OpenGL ES 2.0 and above. Does not support alpha channel.</td></tr><tr><td>ETC2</td>
<td>Requires OpenGL ES 3.0 and above.</td></tr><tr><td>ASTC</td>
<td>Higher quality than ETC1 and ETC2. Supported with the Android Extension Pack.</td></tr></table><p>As you can see, with higher OpenGL support you gain access to better formats. There are proprietary formats to replace ETC1, delivering higher quality and alpha channel support. These are shown in the following table:</p>


<table><tr><td>
ATC</td>
<td>Available with Adreno GPU.</td></tr><tr><td>PVRTC</td>
<td>Available with a PowerVR GPU.</td></tr><tr><td>DXT1</td>
<td>S3 DXT1 texture compression. Supported on devices running Nvidia Tegra platform.</td></tr><tr><td>S3TC</td>
<td>S3 texture compression, nonspecific to DXT variant. Supported on devices running Nvidia Tegra platform.</td></tr></table><p>That&#8217;s a lot of formats, revealing a different problem. How do you choose which format to use?</p>

<p>To best support all devices you need to create multiple apks using different texture formats. The Google Play developer console allows you to add multiple apks and will deliver the right one to the user based on their device. For more information check <a href="http://developer.android.com/training/multiple-apks/texture.html?utm_campaign=ASTC-115&#38;utm_source=dac&#38;utm_medium=blog">this page</a>.</p>

<p>When a device only supports OpenGL ES 2.0 it is recommended to use a proprietary format to get the best results possible, this means making an apk for each hardware.</p>

<p>On devices with access to OpenGL ES 3.0 you can use ETC2. The <b>GL_COMPRESSED_RGBA8_ETC2_EAC</b> format is an improved version of ETC1 with added alpha support.</p>

<p>The best case is when the device supports the Android Extension Pack. Then you should use the ASTC format which has better quality and is more efficient than the other formats.</p>

<h3>Adaptive Scalable Texture Compression (ASTC)</h3>
<p>The Android Extension Pack has ASTC as a standard format, removing the need to have different formats for different devices.</p>

<p>In addition to being supported on modern hardware, ASTC also offers improved quality over other GPU formats by having full alpha support and better quality preservation.</p>

<p>ASTC is a block based texture compression algorithm developed by <a href="http://www.arm.com/">ARM</a>. It offers multiple block footprints and bitrate options to lower the size of the final texture. The higher the block footprint, the smaller the final file but possibly more quality loss.</p>

<p>Note that some images compress better than others. Images with similar neighboring pixels tend to have better quality compared to images with vastly different neighboring pixels.</p>

<p>Let&#8217;s examine a texture to better understand ASTC:</p>

<a href="http://3.bp.blogspot.com/-jFGG5zyscHY/VLVvLrh_OgI/AAAAAAAABQU/l7Swn9S7Btw/s1600/jelly-original.png"><img border="0" src="http://3.bp.blogspot.com/-jFGG5zyscHY/VLVvLrh_OgI/AAAAAAAABQU/l7Swn9S7Btw/s200/jelly-original.png"></a>

<p>This bitmap is 1.1MB uncompressed and 299KB when compressed as PNG.</p>

<p>Compressing the Android jellybean jar texture into ASTC through the <a href="http://malideveloper.arm.com/develop-for-mali/tools/asset-creation/mali-gpu-texture-compression-tool/">Mali GPU Texture Compression Tool</a> yields the following results.</p>


<table><tr><td>Block Footprint</td>
<td>4x4</td>
<td>6x6</td>
<td>8x8</td></tr><tr><td>Memory</td>
<td>262KB</td>
<td>119KB</td>
<td>70KB</td></tr><tr><td>Image Output</td>
<td><a href="http://3.bp.blogspot.com/-LQAdi5XHyXg/VLVvXl2cldI/AAAAAAAABQc/PEuVMpaK9MI/s1600/jelly-astc-4x4.png"><img border="0" src="http://3.bp.blogspot.com/-LQAdi5XHyXg/VLVvXl2cldI/AAAAAAAABQc/PEuVMpaK9MI/s200/jelly-astc-4x4.png"></a></td>
<td><a href="http://4.bp.blogspot.com/-uK6-LMf60Ak/VLVvcCjD3YI/AAAAAAAABQk/5Dgij3IkEAQ/s1600/jelly-astc-6x6.png"><img border="0" src="http://4.bp.blogspot.com/-uK6-LMf60Ak/VLVvcCjD3YI/AAAAAAAABQk/5Dgij3IkEAQ/s200/jelly-astc-6x6.png"></a></td>
<td><a href="http://2.bp.blogspot.com/-u728LnZPe7k/VLVvfnC3cGI/AAAAAAAABQs/AYtnfGS8MLk/s1600/jelly-astc-8x8.png"><img border="0" src="http://2.bp.blogspot.com/-u728LnZPe7k/VLVvfnC3cGI/AAAAAAAABQs/AYtnfGS8MLk/s200/jelly-astc-8x8.png"></a></td></tr><tr><td>Difference Map</td>
<td><a href="http://2.bp.blogspot.com/-vDfS-9X5zLI/VLVvpcsf5UI/AAAAAAAABQ0/0H9g1eNIrV4/s1600/4x4-1x.png"><img border="0" src="http://2.bp.blogspot.com/-vDfS-9X5zLI/VLVvpcsf5UI/AAAAAAAABQ0/0H9g1eNIrV4/s200/4x4-1x.png"></a></td>
<td><a href="http://2.bp.blogspot.com/-jsoSkmgFxHc/VLVvtsoXlpI/AAAAAAAABQ8/f07n9rBc_eU/s1600/6x6-1x.png"><img border="0" src="http://2.bp.blogspot.com/-jsoSkmgFxHc/VLVvtsoXlpI/AAAAAAAABQ8/f07n9rBc_eU/s200/6x6-1x.png"></a></td>
<td><a href="http://3.bp.blogspot.com/-vKlF4vqAvhc/VLVvxy5T7XI/AAAAAAAABRE/l5xGTjKQL_Y/s1600/8x8-1x.png"><img border="0" src="http://3.bp.blogspot.com/-vKlF4vqAvhc/VLVvxy5T7XI/AAAAAAAABRE/l5xGTjKQL_Y/s200/8x8-1x.png"></a></td></tr><tr><td>5x Enhanced Difference Map</td>
<td><a href="http://3.bp.blogspot.com/-uOC_LA3sZCc/VLVv2fXPlPI/AAAAAAAABRM/m4CfjJmk-NY/s1600/4x4-5x.png"><img border="0" src="http://3.bp.blogspot.com/-uOC_LA3sZCc/VLVv2fXPlPI/AAAAAAAABRM/m4CfjJmk-NY/s200/4x4-5x.png"></a></td>
<td><a href="http://2.bp.blogspot.com/-kz8Ze68p_Fs/VLVv69CA4WI/AAAAAAAABRU/IggSZPeiHXU/s1600/6x6-5x.png"><img border="0" src="http://2.bp.blogspot.com/-kz8Ze68p_Fs/VLVv69CA4WI/AAAAAAAABRU/IggSZPeiHXU/s200/6x6-5x.png"></a></td>
<td><a href="http://1.bp.blogspot.com/-6gGslWUxjUA/VLVv-3AjJjI/AAAAAAAABRc/_0AyOMsRdRU/s1600/8x8-5x.png"><img border="0" src="http://1.bp.blogspot.com/-6gGslWUxjUA/VLVv-3AjJjI/AAAAAAAABRc/_0AyOMsRdRU/s200/8x8-5x.png"></a></td></tr></table><p>As you can see, the highest quality (4x4) bitrate for ASTC already gains over PNG in memory size. Unlike PNG, this gain stays even after copying the image to the GPU.</p>

<p>The tradeoff comes in the detail, so it is important to carefully examine textures when compressing them to see how much compression is acceptable.</p>

<h3>Conclusion</h3>
<p>Using hardware accelerated textures in your games will help you reduce the size of your .apk, runtime memory use as well as loading times.</p>

<p>Improve performance on a wider range of devices by uploading multiple apks with different GPU texture formats and <a href="http://developer.android.com/training/multiple-apks/texture.html?utm_campaign=ASTC-115&#38;utm_source=dac&#38;utm_medium=blog">declaring the texture type in the AndroidManifest.xml</a>.</p>

<p>If you are aiming for high end devices, make sure to use ASTC which is included in the Android Extension Pack.</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/B1gExxdHMzz"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/B1gExxdHMzz"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/B1gExxdHMzz"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by <a href="https://plus.google.com/u/1/+ShaneeNishry/posts">Shanee Nishry</a>, Developer Advocate</i></p>

<p>As you may know, high resolution textures contribute to better graphics and a more impressive game experience. Adaptive Scalable Texture Compression (ASTC) helps solve many of the challenges involved including reducing memory footprint and loading time and even increase performance and battery life.</p>

<p>If you have a lot of textures, you are probably already compressing them. Unfortunately, not all compression algorithms are made equal. PNG, JPG and other common formats are not GPU friendly. Some of the highest-quality algorithms today are proprietary and limited to certain GPUs. Until recently, the only broadly supported GPU accelerated formats were relatively primitive and produced poor results.</p>

<p>With the introduction of ASTC, a new compression technique invented by ARM and standardized by the Khronos group, we expect to see dramatic changes for the better. ASTC promises to be both high quality and broadly supported by future Android devices. But until devices with ASTC support become widely available, it’s important to understand the variety of legacy formats that exist today.</p>

<p>We will examine preferable compression formats which are supported on the GPU to help you reduce .apk size and loading times of your game.</p>

<h3>Texture Compression</h3>
<p>Popular compressed formats include PNG and JPG, which can’t be decoded directly by the GPU. As a consequence, they need to be decompressed before copying them to the GPU memory. Decompressing the textures takes time and leads to increased loading times.</p>

<p>A better option is to use hardware accelerated formats. These formats are lossy but have the advantage of being designed for the GPU.</p>

<p>This means they do not need to be decompressed before being copied and result in decreased loading times for the player and may even lead to increased performance due to hardware optimizations.</p>

<h3>Hardware Accelerated Formats</h3>

<p>Hardware accelerated formats have many benefits. As mentioned before, they help improve loading times and the runtime memory footprint.</p>

<p>Additionally, these formats help improve performance, battery life and reduce heating of the device, requiring less bandwidth while also consuming less energy.</p>

<p>There are two categories of hardware accelerated formats, standard and proprietary. This table shows the standard formats:</p>
<head>
<style>
table {
    border-collapse: collapse;
}

table, th, td {
    border: 1px solid black;
}
td {
    padding: 5px;
}</head>
</style><body>
<Table><tr><td>ETC1</td>
<td>Supported on all Android devices with OpenGL ES 2.0 and above. Does not support alpha channel.</td></tr>
<tr><td>ETC2</td>
<td>Requires OpenGL ES 3.0 and above.</td></tr>
<tr><td>ASTC</td>
<td>Higher quality than ETC1 and ETC2. Supported with the Android Extension Pack.</td></tr></table></body>

<p>As you can see, with higher OpenGL support you gain access to better formats. There are proprietary formats to replace ETC1, delivering higher quality and alpha channel support. These are shown in the following table:</p>

<head>
<style>
table {
    border-collapse: collapse;
}

table, th, td {
    border: 1px solid black;
}td {
    padding: 5px;
}</head>
</style><body>
<Table><tr><td>
ATC</td>
<td>Available with Adreno GPU.</td></tr>
<tr><td>PVRTC</td>
<td>Available with a PowerVR GPU.</td></tr>
<tr><td>DXT1</td>
<td>S3 DXT1 texture compression. Supported on devices running Nvidia Tegra platform.</td></tr>
<tr><td>S3TC</td>
<td>S3 texture compression, nonspecific to DXT variant. Supported on devices running Nvidia Tegra platform.</td></tr></table></body>

<p>That’s a lot of formats, revealing a different problem. How do you choose which format to use?</p>

<p>To best support all devices you need to create multiple apks using different texture formats. The Google Play developer console allows you to add multiple apks and will deliver the right one to the user based on their device. For more information check <a href="http://developer.android.com/training/multiple-apks/texture.html?utm_campaign=ASTC-115&utm_source=dac&utm_medium=blog">this page</a>.</p>

<p>When a device only supports OpenGL ES 2.0 it is recommended to use a proprietary format to get the best results possible, this means making an apk for each hardware.</p>

<p>On devices with access to OpenGL ES 3.0 you can use ETC2. The <b>GL_COMPRESSED_RGBA8_ETC2_EAC</b> format is an improved version of ETC1 with added alpha support.</p>

<p>The best case is when the device supports the Android Extension Pack. Then you should use the ASTC format which has better quality and is more efficient than the other formats.</p>

<h3>Adaptive Scalable Texture Compression (ASTC)</h3>
<p>The Android Extension Pack has ASTC as a standard format, removing the need to have different formats for different devices.</p>

<p>In addition to being supported on modern hardware, ASTC also offers improved quality over other GPU formats by having full alpha support and better quality preservation.</p>

<p>ASTC is a block based texture compression algorithm developed by <a href="http://www.arm.com/">ARM</a>. It offers multiple block footprints and bitrate options to lower the size of the final texture. The higher the block footprint, the smaller the final file but possibly more quality loss.</p>

<p>Note that some images compress better than others. Images with similar neighboring pixels tend to have better quality compared to images with vastly different neighboring pixels.</p>

<p>Let’s examine a texture to better understand ASTC:</p>

<a href="http://3.bp.blogspot.com/-jFGG5zyscHY/VLVvLrh_OgI/AAAAAAAABQU/l7Swn9S7Btw/s1600/jelly-original.png" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-jFGG5zyscHY/VLVvLrh_OgI/AAAAAAAABQU/l7Swn9S7Btw/s200/jelly-original.png" /></a>

<p>This bitmap is 1.1MB uncompressed and 299KB when compressed as PNG.</p>

<p>Compressing the Android jellybean jar texture into ASTC through the <a href="http://malideveloper.arm.com/develop-for-mali/tools/asset-creation/mali-gpu-texture-compression-tool/">Mali GPU Texture Compression Tool</a> yields the following results.</p>

<head>
<style>
table {
    border-collapse: collapse;
}

table, th, td {
    border: 1px solid black;
}td {
    padding: 5px;
}</head>
</style><body>
<Table><tr><td>Block Footprint</td>
<td>4x4</td>
<td>6x6</td>
<td>8x8</td></tr>
<tr><td>Memory</td>
<td>262KB</td>
<td>119KB</td>
<td>70KB</td</tr>
<tr><td>Image Output</td>
<td><a href="http://3.bp.blogspot.com/-LQAdi5XHyXg/VLVvXl2cldI/AAAAAAAABQc/PEuVMpaK9MI/s1600/jelly-astc-4x4.png" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-LQAdi5XHyXg/VLVvXl2cldI/AAAAAAAABQc/PEuVMpaK9MI/s200/jelly-astc-4x4.png" /></a></td>
<td><a href="http://4.bp.blogspot.com/-uK6-LMf60Ak/VLVvcCjD3YI/AAAAAAAABQk/5Dgij3IkEAQ/s1600/jelly-astc-6x6.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-uK6-LMf60Ak/VLVvcCjD3YI/AAAAAAAABQk/5Dgij3IkEAQ/s200/jelly-astc-6x6.png" /></a></td>
<td><a href="http://2.bp.blogspot.com/-u728LnZPe7k/VLVvfnC3cGI/AAAAAAAABQs/AYtnfGS8MLk/s1600/jelly-astc-8x8.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-u728LnZPe7k/VLVvfnC3cGI/AAAAAAAABQs/AYtnfGS8MLk/s200/jelly-astc-8x8.png" /></a></td></tr>
<tr><td>Difference Map</td>
<td><a href="http://2.bp.blogspot.com/-vDfS-9X5zLI/VLVvpcsf5UI/AAAAAAAABQ0/0H9g1eNIrV4/s1600/4x4-1x.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-vDfS-9X5zLI/VLVvpcsf5UI/AAAAAAAABQ0/0H9g1eNIrV4/s200/4x4-1x.png" /></a></td>
<td><a href="http://2.bp.blogspot.com/-jsoSkmgFxHc/VLVvtsoXlpI/AAAAAAAABQ8/f07n9rBc_eU/s1600/6x6-1x.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-jsoSkmgFxHc/VLVvtsoXlpI/AAAAAAAABQ8/f07n9rBc_eU/s200/6x6-1x.png" /></a></td>
<td><a href="http://3.bp.blogspot.com/-vKlF4vqAvhc/VLVvxy5T7XI/AAAAAAAABRE/l5xGTjKQL_Y/s1600/8x8-1x.png" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-vKlF4vqAvhc/VLVvxy5T7XI/AAAAAAAABRE/l5xGTjKQL_Y/s200/8x8-1x.png" /></a></td></tr>
<tr><td>5x Enhanced Difference Map</td>
<td><a href="http://3.bp.blogspot.com/-uOC_LA3sZCc/VLVv2fXPlPI/AAAAAAAABRM/m4CfjJmk-NY/s1600/4x4-5x.png" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-uOC_LA3sZCc/VLVv2fXPlPI/AAAAAAAABRM/m4CfjJmk-NY/s200/4x4-5x.png" /></a></td>
<td><a href="http://2.bp.blogspot.com/-kz8Ze68p_Fs/VLVv69CA4WI/AAAAAAAABRU/IggSZPeiHXU/s1600/6x6-5x.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-kz8Ze68p_Fs/VLVv69CA4WI/AAAAAAAABRU/IggSZPeiHXU/s200/6x6-5x.png" /></a></td>
<td><a href="http://1.bp.blogspot.com/-6gGslWUxjUA/VLVv-3AjJjI/AAAAAAAABRc/_0AyOMsRdRU/s1600/8x8-5x.png" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-6gGslWUxjUA/VLVv-3AjJjI/AAAAAAAABRc/_0AyOMsRdRU/s200/8x8-5x.png" /></a></td></tr></table></body>

<p>As you can see, the highest quality (4x4) bitrate for ASTC already gains over PNG in memory size. Unlike PNG, this gain stays even after copying the image to the GPU.</p>

<p>The tradeoff comes in the detail, so it is important to carefully examine textures when compressing them to see how much compression is acceptable.</p>

<h3>Conclusion</h3>
<p>Using hardware accelerated textures in your games will help you reduce the size of your .apk, runtime memory use as well as loading times.</p>

<p>Improve performance on a wider range of devices by uploading multiple apks with different GPU texture formats and <a href="http://developer.android.com/training/multiple-apks/texture.html?utm_campaign=ASTC-115&utm_source=dac&utm_medium=blog">declaring the texture type in the AndroidManifest.xml</a>.</p>

<p>If you are aiming for high end devices, make sure to use ASTC which is included in the Android Extension Pack.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/B1gExxdHMzz" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/B1gExxdHMzz" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/B1gExxdHMzz" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/efficient-game-textures-with-hardware-compression/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Build Mobile App Services with Google Cloud Tools for Android Studio v1.0</title>
		<link>https://googledata.org/google-android/build-mobile-app-services-with-google-cloud-tools-for-android-studio-v1-0/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=build-mobile-app-services-with-google-cloud-tools-for-android-studio-v1-0</link>
		<comments>https://googledata.org/google-android/build-mobile-app-services-with-google-cloud-tools-for-android-studio-v1-0/#comments</comments>
		<pubDate>Fri, 19 Dec 2014 21:41:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=6dd565bde8b816a21719cc070f4237b4</guid>
		<description><![CDATA[<p><i>Posted by Chris Sells, Product Manager, Cloud Tools for Android Studio</i></p>

<p><a href="https://cloud.google.com/mobile/">Cloud Tools for Android Studio</a> allows you to simultaneously build the service- and client-side of your mobile app. Earlier this month, we announced the release of <a href="http://android-developers.blogspot.com/2014/12/android-studio-10.html">Android Studio 1.0</a>  that showed just how much raw functionality there is available for Android app developers. However, the client isn&#8217;t the whole picture, as most mobile apps also need one or more web services. It was for this reason that the Cloud Tools for Android Studio were created. </p>

<p>Cloud Tools put the power of <a href="https://cloud.google.com/appengine/docs">Google App Engine</a> in the same IDE alongside of your mobile client, giving you all the same Java language tools for both sides of your app, as well as making it far easier for you to keep them in sync as each of them changes.</p>

<h3>Getting Started</h3>
<p>To get started with Cloud Tools for Android Studio, add a New Module to your Android Studio project, choose <i>Google Cloud Module</i> and you&#8217;ll have three choices:</p>

<div><a href="http://4.bp.blogspot.com/-VPpjKqX8nNA/VJHXpBn-9CI/AAAAAAAABHQ/Od7vMB8LuNA/s1600/image06.png"><img border="0" src="http://4.bp.blogspot.com/-VPpjKqX8nNA/VJHXpBn-9CI/AAAAAAAABHQ/Od7vMB8LuNA/s640/image06.png"></a></div>
<p></p><i>You can add three Google Cloud module types to your Android Studio project</i>

<p>The <a href="https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/HelloWorld">Java Servlet Module</a> gives you a plain servlet class for you to implement as you see fit. If you&#8217;d like help building your REST endpoints with declarative routing and HTTP verbs and automatic Java object serialization to and from JSON, then you&#8217;ll want the <a href="https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/HelloEndpoints">Java Endpoints Module</a>. If you want the power of endpoints, along with the ability to send notifications from your server to your clients, then choose <a href="https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/GcmEndpoints">Backend with Google Cloud Messaging</a>.</p>

<p>Once you&#8217;re done, you&#8217;ll have your service code right next to your client code:</p>

<div><a href="http://3.bp.blogspot.com/-X35hNHk1OGE/VJHXoHzXMlI/AAAAAAAABHA/iv5LoFfJOb4/s1600/image02.png"><img border="0" src="http://3.bp.blogspot.com/-X35hNHk1OGE/VJHXoHzXMlI/AAAAAAAABHA/iv5LoFfJOb4/s640/image02.png"></a></div>

<p></p><i>You can build your mobile app&#8217;s client and service code together in a single project</i>
 
<p>Not only does this make it very convenient to build and test your entire end-to-end, but we also dropped a little extra something into your app&#8217;s build.gradle file:</p>

<div><a href="http://4.bp.blogspot.com/-1NC-mBlQ9ZQ/VJHXo6oX3BI/AAAAAAAABHY/6rbb3EH6-Ws/s1600/image04.png"><img border="0" src="http://4.bp.blogspot.com/-1NC-mBlQ9ZQ/VJHXo6oX3BI/AAAAAAAABHY/6rbb3EH6-Ws/s640/image04.png"></a></div>

<p></p><i>The android-endpoints configuration build step in your build.gradle file creates a client-side library for your server-side endpoint</i>

<p>The updated Gradle file will now create a library for use in your app&#8217;s client code that changes when your service API changes. This library lets you call into your service from your client and provides full code completion as you do:</p>

<div><a href="http://1.bp.blogspot.com/-Z3b6Am-oUxM/VJHXoOXD-eI/AAAAAAAABG4/JQ107vrHfrg/s1600/image00.png"><img border="0" src="http://1.bp.blogspot.com/-Z3b6Am-oUxM/VJHXoOXD-eI/AAAAAAAABG4/JQ107vrHfrg/s640/image00.png"></a></div>

<p></p><i>The client-side endpoint library provides code completion and documentation</i>

<p>Instead of writing the code to create HTTP requests by hand, you can make calls via the library in a typesafe manner and the marshalling from JSON to Java will be handled for you, just like on the server-side (but in reverse, of course).</p>

<h3>Endpoints Error Detection</h3>
<p>Meanwhile, back on the server-side, as you make changes to your endpoints, we&#8217;re watching to make sure that they&#8217;re in good working order even before you compile by checking the attributes as you type:</p>

<div><a href="http://2.bp.blogspot.com/--saSySxcOMo/VJHXpyZMO9I/AAAAAAAABHc/JM1YdEov95g/s1600/image08.png"><img border="0" src="http://2.bp.blogspot.com/--saSySxcOMo/VJHXpyZMO9I/AAAAAAAABHc/JM1YdEov95g/s640/image08.png"></a></div>

<p></p><i>Cloud Tools will detect errors in your endpoint attributes</i>

<p>Here, Cloud Tools have found a duplicate name in the <i>ApiMethod</i> attribute, which is easy to do if you&#8217;re creating a new method from an existing method.</p>

<h3>Creating an Endpoint from an Objectify Entity</h3>
<p>If, as part of your endpoint implementation, you decide to take advantage of the <a href="https://code.google.com/p/objectify-appengine/">popular Objectify library</a>, you&#8217;ll find that Cloud Tools provides special support for you. When you right-click (or control-click on the Mac) on a file containing an Objectify entity class, you&#8217;ll get the <i>Generate Cloud Endpoint from Java class</i> option:</p>

<div><a href="http://2.bp.blogspot.com/-NBtVitaWnDI/VJHXoB5eTzI/AAAAAAAABG8/D01ALm1G3hk/s1600/image01.png"><img border="0" src="http://2.bp.blogspot.com/-NBtVitaWnDI/VJHXoB5eTzI/AAAAAAAABG8/D01ALm1G3hk/s640/image01.png"></a></div>

<p></p><i>The generate Cloud Endpoint from Java class option will create a CRUD endpoint for you</i>

<p>If you&#8217;re running this option on a Java class that isn&#8217;t built with Objectify, then you&#8217;re going to get an endpoint with empty methods for get and insert operations that you can implement as appropriate. However, if you do this with an Objectify entity, you&#8217;ll get a fully implemented endpoint:</p>

<div><a href="http://1.bp.blogspot.com/-XLgDLU-DSTg/VJHXosNPE0I/AAAAAAAABHE/cD2W_j_m_cA/s1600/image03.png"><img border="0" src="http://1.bp.blogspot.com/-XLgDLU-DSTg/VJHXosNPE0I/AAAAAAAABHE/cD2W_j_m_cA/s640/image03.png"></a></div>
<p></p><i>Cloud Tools has built-in support for generating Objectify-based cloud endpoint implementations</i>

<h3>Using your Cloud Endpoint</h3>
<p>As an Android developer, you&#8217;re used to deploying your client first in the emulator and then into a local device. Likewise, with the service, you&#8217;ll want to test first to your local machine and then, when you&#8217;re ready, deploy into a Google App Engine project. You can run your service app locally by simply choosing it from the Configurations menu dropdown on the toolbar and pressing the Run button:</p>

<div><a href="http://2.bp.blogspot.com/-fmA__LeG3QU/VJHXpJ9o-MI/AAAAAAAABHM/SLzPFxw6B2M/s1600/image05.png"><img border="0" src="http://2.bp.blogspot.com/-fmA__LeG3QU/VJHXpJ9o-MI/AAAAAAAABHM/SLzPFxw6B2M/s640/image05.png"></a></div>


<p></p><i>The Configurations menu in the toolbar lets you launch your service for testing</i>

<p>This will build and execute your service on <a href="http://localhost:8080/">http://localhost:8080/</a> (by default) so that you can test against it with your Android app running in the emulator. Once you&#8217;re ready to deploy to Google Cloud Platform, you can do so by selecting the Deploy Module to App Engine option from the Build menu, where you&#8217;ll be able to choose the source module you want to deploy, log into your Google account and pick the target project to which you&#8217;d like to deploy:</p>

<div><a href="http://4.bp.blogspot.com/-t4Ly0YjIfjo/VJHXpqyRvuI/AAAAAAAABHk/9VA7lgU04lU/s1600/image07.png"><img border="0" src="http://4.bp.blogspot.com/-t4Ly0YjIfjo/VJHXpqyRvuI/AAAAAAAABHk/9VA7lgU04lU/s640/image07.png"></a></div> 

<p></p><i>The Deploy to App Engine dialog will use your Google credentials to enumerate your projects for you</i>

<p>Cloud Tools beta required some extra copying and pasting to get the Google login to work, but all of that&#8217;s gone now in this release.</p><p>

</p><h3>What&#8217;s Next?</h3>
<p>We&#8217;re excited to get this release into your hands, so if you&#8217;ve haven&#8217;t downloaded it yet, then go <a href="http://developer.android.com/sdk/index.html?utm_campaign=cloudandroid-1214&#38;utm_source=dac&#38;utm_medium=blog">download Android Studio 1.0</a> right now! To take advantage of <a href="https://cloud.google.com/mobile/">Cloud Tools for Android Studio</a>, you&#8217;ll want to <a href="https://cloud.google.com/">sign up for a free Google Cloud Platform trial</a>.  Nothing is stopping you from building great Android apps from front to back. If you&#8217;ve got suggestions, <a href="https://plus.google.com/communities/114791428968349268860">drop us a line</a> so that we can keep improving. We&#8217;re just getting started putting Google Cloud Platform tools in your hands. We can&#8217;t wait to see what you&#8217;ll build.</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/YfXFMv5DumN"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/YfXFMv5DumN"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/YfXFMv5DumN"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Chris Sells, Product Manager, Cloud Tools for Android Studio</i></p>

<p><a href="https://cloud.google.com/mobile/">Cloud Tools for Android Studio</a> allows you to simultaneously build the service- and client-side of your mobile app. Earlier this month, we announced the release of <a href="http://android-developers.blogspot.com/2014/12/android-studio-10.html">Android Studio 1.0</a>  that showed just how much raw functionality there is available for Android app developers. However, the client isn’t the whole picture, as most mobile apps also need one or more web services. It was for this reason that the Cloud Tools for Android Studio were created. </p>

<p>Cloud Tools put the power of <a href="https://cloud.google.com/appengine/docs">Google App Engine</a> in the same IDE alongside of your mobile client, giving you all the same Java language tools for both sides of your app, as well as making it far easier for you to keep them in sync as each of them changes.</p>

<h3>Getting Started</h3>
<p>To get started with Cloud Tools for Android Studio, add a New Module to your Android Studio project, choose <i>Google Cloud Module</i> and you’ll have three choices:</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-VPpjKqX8nNA/VJHXpBn-9CI/AAAAAAAABHQ/Od7vMB8LuNA/s1600/image06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-VPpjKqX8nNA/VJHXpBn-9CI/AAAAAAAABHQ/Od7vMB8LuNA/s640/image06.png" /></a></div>
<p><center><i>You can add three Google Cloud module types to your Android Studio project</i></center></p>

<p>The <a href="https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/HelloWorld">Java Servlet Module</a> gives you a plain servlet class for you to implement as you see fit. If you’d like help building your REST endpoints with declarative routing and HTTP verbs and automatic Java object serialization to and from JSON, then you’ll want the <a href="https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/HelloEndpoints">Java Endpoints Module</a>. If you want the power of endpoints, along with the ability to send notifications from your server to your clients, then choose <a href="https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/GcmEndpoints">Backend with Google Cloud Messaging</a>.</p>

<p>Once you’re done, you’ll have your service code right next to your client code:</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-X35hNHk1OGE/VJHXoHzXMlI/AAAAAAAABHA/iv5LoFfJOb4/s1600/image02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-X35hNHk1OGE/VJHXoHzXMlI/AAAAAAAABHA/iv5LoFfJOb4/s640/image02.png" /></a></div>

<p><center><i>You can build your mobile app’s client and service code together in a single project</i></center></p>
 
<p>Not only does this make it very convenient to build and test your entire end-to-end, but we also dropped a little extra something into your app’s build.gradle file:</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-1NC-mBlQ9ZQ/VJHXo6oX3BI/AAAAAAAABHY/6rbb3EH6-Ws/s1600/image04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-1NC-mBlQ9ZQ/VJHXo6oX3BI/AAAAAAAABHY/6rbb3EH6-Ws/s640/image04.png" /></a></div>

<p><center><i>The android-endpoints configuration build step in your build.gradle file creates a client-side library for your server-side endpoint</i></center></p>

<p>The updated Gradle file will now create a library for use in your app’s client code that changes when your service API changes. This library lets you call into your service from your client and provides full code completion as you do:</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-Z3b6Am-oUxM/VJHXoOXD-eI/AAAAAAAABG4/JQ107vrHfrg/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-Z3b6Am-oUxM/VJHXoOXD-eI/AAAAAAAABG4/JQ107vrHfrg/s640/image00.png" /></a></div>

<p><center><i>The client-side endpoint library provides code completion and documentation</p></center></i>

<p>Instead of writing the code to create HTTP requests by hand, you can make calls via the library in a typesafe manner and the marshalling from JSON to Java will be handled for you, just like on the server-side (but in reverse, of course).</p>

<h3>Endpoints Error Detection</h3>
<p>Meanwhile, back on the server-side, as you make changes to your endpoints, we’re watching to make sure that they’re in good working order even before you compile by checking the attributes as you type:</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/--saSySxcOMo/VJHXpyZMO9I/AAAAAAAABHc/JM1YdEov95g/s1600/image08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/--saSySxcOMo/VJHXpyZMO9I/AAAAAAAABHc/JM1YdEov95g/s640/image08.png" /></a></div>

<p><center><i>Cloud Tools will detect errors in your endpoint attributes</p></center></i>

<p>Here, Cloud Tools have found a duplicate name in the <i>ApiMethod</i> attribute, which is easy to do if you’re creating a new method from an existing method.</p>

<h3>Creating an Endpoint from an Objectify Entity</h3>
<p>If, as part of your endpoint implementation, you decide to take advantage of the <a href="https://code.google.com/p/objectify-appengine/">popular Objectify library</a>, you’ll find that Cloud Tools provides special support for you. When you right-click (or control-click on the Mac) on a file containing an Objectify entity class, you’ll get the <i>Generate Cloud Endpoint from Java class</i> option:</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-NBtVitaWnDI/VJHXoB5eTzI/AAAAAAAABG8/D01ALm1G3hk/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-NBtVitaWnDI/VJHXoB5eTzI/AAAAAAAABG8/D01ALm1G3hk/s640/image01.png" /></a></div>

<p><center><i>The generate Cloud Endpoint from Java class option will create a CRUD endpoint for you</p></center></i>

<p>If you’re running this option on a Java class that isn’t built with Objectify, then you’re going to get an endpoint with empty methods for get and insert operations that you can implement as appropriate. However, if you do this with an Objectify entity, you’ll get a fully implemented endpoint:</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-XLgDLU-DSTg/VJHXosNPE0I/AAAAAAAABHE/cD2W_j_m_cA/s1600/image03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-XLgDLU-DSTg/VJHXosNPE0I/AAAAAAAABHE/cD2W_j_m_cA/s640/image03.png" /></a></div>
<p><center><i>Cloud Tools has built-in support for generating Objectify-based cloud endpoint implementations</p></center></i>

<h3>Using your Cloud Endpoint</h3>
<p>As an Android developer, you’re used to deploying your client first in the emulator and then into a local device. Likewise, with the service, you’ll want to test first to your local machine and then, when you’re ready, deploy into a Google App Engine project. You can run your service app locally by simply choosing it from the Configurations menu dropdown on the toolbar and pressing the Run button:</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-fmA__LeG3QU/VJHXpJ9o-MI/AAAAAAAABHM/SLzPFxw6B2M/s1600/image05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-fmA__LeG3QU/VJHXpJ9o-MI/AAAAAAAABHM/SLzPFxw6B2M/s640/image05.png" /></a></div>


<p><center><i>The Configurations menu in the toolbar lets you launch your service for testing</p></center></i>

<p>This will build and execute your service on <a href="http://localhost:8080/">http://localhost:8080/</a> (by default) so that you can test against it with your Android app running in the emulator. Once you’re ready to deploy to Google Cloud Platform, you can do so by selecting the Deploy Module to App Engine option from the Build menu, where you’ll be able to choose the source module you want to deploy, log into your Google account and pick the target project to which you’d like to deploy:</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-t4Ly0YjIfjo/VJHXpqyRvuI/AAAAAAAABHk/9VA7lgU04lU/s1600/image07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-t4Ly0YjIfjo/VJHXpqyRvuI/AAAAAAAABHk/9VA7lgU04lU/s640/image07.png" /></a></div> 

<p><center><i>The Deploy to App Engine dialog will use your Google credentials to enumerate your projects for you</p></center></i>

<p>Cloud Tools beta required some extra copying and pasting to get the Google login to work, but all of that’s gone now in this release.<p>

<h3>What’s Next?</h3>
<p>We’re excited to get this release into your hands, so if you’ve haven’t downloaded it yet, then go <a href="http://developer.android.com/sdk/index.html?utm_campaign=cloudandroid-1214&utm_source=dac&utm_medium=blog">download Android Studio 1.0</a> right now! To take advantage of <a href="https://cloud.google.com/mobile/">Cloud Tools for Android Studio</a>, you’ll want to <a href="https://cloud.google.com/">sign up for a free Google Cloud Platform trial</a>.  Nothing is stopping you from building great Android apps from front to back. If you’ve got suggestions, <a href="https://plus.google.com/communities/114791428968349268860">drop us a line</a> so that we can keep improving. We’re just getting started putting Google Cloud Platform tools in your hands. We can’t wait to see what you’ll build.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/YfXFMv5DumN" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/YfXFMv5DumN" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/YfXFMv5DumN" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/build-mobile-app-services-with-google-cloud-tools-for-android-studio-v1-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Google Play game services ends year with a bang!</title>
		<link>https://googledata.org/google-android/google-play-game-services-ends-year-with-a-bang/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=google-play-game-services-ends-year-with-a-bang</link>
		<comments>https://googledata.org/google-android/google-play-game-services-ends-year-with-a-bang/#comments</comments>
		<pubDate>Fri, 19 Dec 2014 19:26:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=cbfdd4052c3c2647ea9cd1020639d5d9</guid>
		<description><![CDATA[<p><i>Posted by <a href="https://plus.google.com/117647322593751060893">Benjamin Frenkel</a>, Product Manager, Play Games</i></p>

<p>In an effort to supercharge our Google Play games services (GPGS) developer tools, we&#8217;re introducing the Game services Publishing API, a revamped <a href="https://github.com/playgameservices/play-games-plugin-for-unity">Unity Plugin</a>, additional enhancements to the <a href="https://developers.google.com/games/services/cpp/GettingStartedNativeClient?utm_campaign=pgs-1214&#38;utm_source=dac&#38;utm_medium=blog">C++ SDK</a>, and improved Leaderboard Tamper Protection.</p>

<p>Let&#8217;s dig into what&#8217;s new for developers:</p>

<h3>Publishing API to automate game services configuration</h3>

<p>At <a href="http://android-developers.blogspot.com/2014/07/grow-with-google-play-scaled-publishing.html">Google I/O</a> this past June, the pubsite team launched the Google Play Developer Publishing APIs to automate the configuration and publishing of applications to the Play store. Game developers can now also use the <a href="https://developers.google.com/games/services/publishing/index?utm_campaign=pgs-1214&#38;utm_source=dac&#38;utm_medium=blog">Google Play game services Publishing API</a> to automate the configuration and publishing of game services resources, starting with achievements and leaderboards.</p>
 
<p>For example, if you plan on publishing your game in multiple languages, the game services Publishing API will enable you to pull translation data from spreadsheets, CSVs, or a Content Management System (CMS) and automatically apply those translations to your achievements.</p>

<p>Early adopter Square Enix believes the game services Publishing API will be an indispensable tool to manage global game rollouts:</p>

<div><a href="http://3.bp.blogspot.com/-ZTF3YSI69rI/VJR6FBfz1iI/AAAAAAAABP0/I2pR4G4Ljvc/s1600/hitman%2Bgo%2Bscreenshot.png"><img border="0" src="http://3.bp.blogspot.com/-ZTF3YSI69rI/VJR6FBfz1iI/AAAAAAAABP0/I2pR4G4Ljvc/s200/hitman%2Bgo%2Bscreenshot.png"></a></div>

<br /><p><i>Achievements are the most used feature in Google Play game services for us. As our games support more languages, achievement management has become increasingly difficult. With the game services Publishing API, we can automate this process, which is really helpful. The game services Publishing API also comes with great samples that we were able to easily customize for our needs</i></p>

<p>Keisuke Hata, Manager / Technical Director, SQUARE ENIX Co., Ltd.</p>

<br /><br /><br /><br /><p>To get started today, take a look at the developer documentation <a href="https://developers.google.com/games/services/publishing/quickstart?utm_campaign=pgs-1214&#38;utm_source=dac&#38;utm_medium=blog">here.</a></p>

<h3>Updated Unity plugin and Cross-platform C++ SDK</h3>

<ul><li><b>Unity plugin Saved Games support:</b> You can now take advantage of the Saved Games feature directly from the Unity plugin, with more storage and greater discoverability through the Play Games app</li>
<li><b>New Unity plugin architecture:</b> We&#8217;ve rewritten the plugin on top of our cross-platform C++ SDK to speed up feature development across SDKs and increase our responsiveness to your feedback</li>
<li><b>Improved Unity generated Xcode project setup:</b> You now have a much more robust way to generate Xcode projects integrated with Google Play Game Services in Unity</li>
<li><b>Updated and improved Unity samples:</b> We&#8217;ve updated our sample codes to make it easier for first time developers to integrate Google Play games services</li>
<li><b>C++ SDK support for iPhone 6 Plus:</b> You can now take advantage of the out-of-box games services UI (e.g., for leaderboards and achievements) for larger form factor devices, such as the iPhone 6 Plus</li></ul><p>We also include some important bug fixes and stability improvements. Check out the release notes for the <a href="https://github.com/playgameservices/play-games-plugin-for-unity/blob/master/CHANGELOG.txt">Unity Plugin</a> and the getting started page for the <a href="https://developers.google.com/games/services/cpp/GettingStartedNativeClient?utm_campaign=pgs-1214&#38;utm_source=dac&#38;utm_medium=blog">C++ SDK</a> for more details.</p>

<h3>Leaderboard Tamper Protection</h3>

<p>Turn on Leaderboard Tamper Protection to automatically hide suspected tampered scores from your leaderboards. To enable tamper protection on an existing leaderboard, go to your leaderboard in the Play developer console and flip the &#8220;Leaderboard tamper protection&#8221; toggle to on. Tamper protection will be on by default for new leaderboards.<a href="https://developers.google.com/games/services/common/concepts/leaderboards?utm_campaign=pgs-1214&#38;utm_source=dac&#38;utm_medium=blog#hiding_leaderboard_scores">Learn more</a>.</p>

<div><a href="http://1.bp.blogspot.com/-IVvBvaHgmvU/VJPNnqybWGI/AAAAAAAABO8/EK7Np37xe9c/s1600/image02.png"><img border="0" src="http://1.bp.blogspot.com/-IVvBvaHgmvU/VJPNnqybWGI/AAAAAAAABO8/EK7Np37xe9c/s640/image02.png"></a></div>
<p>To learn more about cleaning up previously submitted suspicious scores refer to the <a href="https://developers.google.com/games/services/console/configuring?utm_campaign=pgs-1214&#38;utm_source=dac&#38;utm_medium=blog#managing_services_programatically">Google Play game services Management APIs</a> documentation or get the web demo console for the Management API directly from github <a href="https://github.com/playgameservices/management-tools">here</a>.</p>

<div><a href="http://3.bp.blogspot.com/-M05evgXsBMw/VJPNnrHlGzI/AAAAAAAABPA/i048wfmrTz0/s1600/image00.png"><img border="0" src="http://3.bp.blogspot.com/-M05evgXsBMw/VJPNnrHlGzI/AAAAAAAABPA/i048wfmrTz0/s640/image00.png"></a></div>
In addition, if you prefer command-line tools, you can use the python-based option <a href="https://developers.google.com/api-client-library/python/apis/gamesManagement/v1management?utm_campaign=pgs-1214&#38;utm_source=dac&#38;utm_medium=blog">here</a>.

<div><div><a href="https://plus.google.com/108967384991768947849/posts/f6qGzhN9Epg"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/f6qGzhN9Epg"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/f6qGzhN9Epg"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by <a href="https://plus.google.com/117647322593751060893">Benjamin Frenkel</a>, Product Manager, Play Games</i></p>

<p>In an effort to supercharge our Google Play games services (GPGS) developer tools, we’re introducing the Game services Publishing API, a revamped <a href="https://github.com/playgameservices/play-games-plugin-for-unity">Unity Plugin</a>, additional enhancements to the <a href="https://developers.google.com/games/services/cpp/GettingStartedNativeClient?utm_campaign=pgs-1214&utm_source=dac&utm_medium=blog">C++ SDK</a>, and improved Leaderboard Tamper Protection.</p>

<p>Let’s dig into what’s new for developers:</p>

<h3>Publishing API to automate game services configuration</h3>

<p>At <a href="http://android-developers.blogspot.com/2014/07/grow-with-google-play-scaled-publishing.html">Google I/O</a> this past June, the pubsite team launched the Google Play Developer Publishing APIs to automate the configuration and publishing of applications to the Play store. Game developers can now also use the <a href="https://developers.google.com/games/services/publishing/index?utm_campaign=pgs-1214&utm_source=dac&utm_medium=blog">Google Play game services Publishing API</a> to automate the configuration and publishing of game services resources, starting with achievements and leaderboards.</p>
 
<p>For example, if you plan on publishing your game in multiple languages, the game services Publishing API will enable you to pull translation data from spreadsheets, CSVs, or a Content Management System (CMS) and automatically apply those translations to your achievements.</p>

<p>Early adopter Square Enix believes the game services Publishing API will be an indispensable tool to manage global game rollouts:</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-ZTF3YSI69rI/VJR6FBfz1iI/AAAAAAAABP0/I2pR4G4Ljvc/s1600/hitman%2Bgo%2Bscreenshot.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-ZTF3YSI69rI/VJR6FBfz1iI/AAAAAAAABP0/I2pR4G4Ljvc/s200/hitman%2Bgo%2Bscreenshot.png" /></a></div>

<br />

<p><i>Achievements are the most used feature in Google Play game services for us. As our games support more languages, achievement management has become increasingly difficult. With the game services Publishing API, we can automate this process, which is really helpful. The game services Publishing API also comes with great samples that we were able to easily customize for our needs</i></p>

<p>Keisuke Hata, Manager / Technical Director, SQUARE ENIX Co., Ltd.</p>

<br /><br /><br /><br />
<p>To get started today, take a look at the developer documentation <a href="https://developers.google.com/games/services/publishing/quickstart?utm_campaign=pgs-1214&utm_source=dac&utm_medium=blog">here.</a></p>

<h3>Updated Unity plugin and Cross-platform C++ SDK</h3>

<ul><li><b>Unity plugin Saved Games support:</b> You can now take advantage of the Saved Games feature directly from the Unity plugin, with more storage and greater discoverability through the Play Games app</li>
<li><b>New Unity plugin architecture:</b> We’ve rewritten the plugin on top of our cross-platform C++ SDK to speed up feature development across SDKs and increase our responsiveness to your feedback</li>
<li><b>Improved Unity generated Xcode project setup:</b> You now have a much more robust way to generate Xcode projects integrated with Google Play Game Services in Unity</li>
<li><b>Updated and improved Unity samples:</b> We’ve updated our sample codes to make it easier for first time developers to integrate Google Play games services</li>
<li><b>C++ SDK support for iPhone 6 Plus:</b> You can now take advantage of the out-of-box games services UI (e.g., for leaderboards and achievements) for larger form factor devices, such as the iPhone 6 Plus</li></ul>

<p>We also include some important bug fixes and stability improvements. Check out the release notes for the <a href="https://github.com/playgameservices/play-games-plugin-for-unity/blob/master/CHANGELOG.txt">Unity Plugin</a> and the getting started page for the <a href="https://developers.google.com/games/services/cpp/GettingStartedNativeClient?utm_campaign=pgs-1214&utm_source=dac&utm_medium=blog">C++ SDK</a> for more details.</p>

<h3>Leaderboard Tamper Protection</h3>

<p>Turn on Leaderboard Tamper Protection to automatically hide suspected tampered scores from your leaderboards. To enable tamper protection on an existing leaderboard, go to your leaderboard in the Play developer console and flip the “Leaderboard tamper protection” toggle to on. Tamper protection will be on by default for new leaderboards.<a href="https://developers.google.com/games/services/common/concepts/leaderboards?utm_campaign=pgs-1214&utm_source=dac&utm_medium=blog#hiding_leaderboard_scores">Learn more</a>.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-IVvBvaHgmvU/VJPNnqybWGI/AAAAAAAABO8/EK7Np37xe9c/s1600/image02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-IVvBvaHgmvU/VJPNnqybWGI/AAAAAAAABO8/EK7Np37xe9c/s640/image02.png" /></a></div>
<p>To learn more about cleaning up previously submitted suspicious scores refer to the <a href="https://developers.google.com/games/services/console/configuring?utm_campaign=pgs-1214&utm_source=dac&utm_medium=blog#managing_services_programatically">Google Play game services Management APIs</a> documentation or get the web demo console for the Management API directly from github <a href="https://github.com/playgameservices/management-tools">here</a>.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-M05evgXsBMw/VJPNnrHlGzI/AAAAAAAABPA/i048wfmrTz0/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-M05evgXsBMw/VJPNnrHlGzI/AAAAAAAABPA/i048wfmrTz0/s640/image00.png" /></a></div>
In addition, if you prefer command-line tools, you can use the python-based option <a href="https://developers.google.com/api-client-library/python/apis/gamesManagement/v1management?utm_campaign=pgs-1214&utm_source=dac&utm_medium=blog">here</a>.

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/f6qGzhN9Epg" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/f6qGzhN9Epg" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/f6qGzhN9Epg" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/google-play-game-services-ends-year-with-a-bang/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Making a performant watch face</title>
		<link>https://googledata.org/google-android/making-a-performant-watch-face/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=making-a-performant-watch-face</link>
		<comments>https://googledata.org/google-android/making-a-performant-watch-face/#comments</comments>
		<pubDate>Thu, 18 Dec 2014 21:23:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=5dcfc989be3c0eb029c761d6e1902343</guid>
		<description><![CDATA[<p><i>Posted by <a href="https://plus.google.com/b/108967384991768947849/+HoiLam/posts">Hoi Lam</a>, Developer Advocate, Android Wear</i></p>

<p>What&#8217;s a better holiday gift than great performance? You&#8217;ve got a great watch face idea -- now, you want to make sure the face you&#8217;re presenting to the world is one of care and attention to detail.</p>

<p>At the core of the watch face's process is an onDraw method for canvas operations. This allows maximum flexibility for your design, but also comes with a few performance caveats. In this blog post, we will mainly focus on performance using the real life journey of how we optimised the Santa Tracker watch face, more than doubling the number of fps (from 18 fps to 42 fps) and making the animation sub-pixel smooth.</p>

<h3>Starting point - 18 fps</h3>
<p>Our Santa watch face contains a number of overlapping bitmaps that are used to achieve our final image. Here's a list of them from bottom to top:</p>
<ol type="1"><li>Background (static)</li>
<li>Clouds which move to the middle</li>
<li>Tick marks (static)</li>
<li>Santa figure and sledge (static)</li>
<li>Santa&#8217;s hands - hours and minutes </li>
<li>Santa&#8217;s head (static)</li></ol><p>The journey begins with these images...</p>

<h3>Large images kill performance (+14 fps)</h3>

<p>Image size is critical to performance in a Wear application, especially if the images will be scaled and rotated. Wasted pixel space (like Santa&#8217;s arm here) is a common asset mistake:</p>

<table border="0"><tr><td>Before: 584 x 584 = 341,056 pixels</td><td>After: 48*226 = 10,848 (97% reduction)</td></tr><td><a href="http://4.bp.blogspot.com/-_TmrBc9W89g/VJNAJEkghVI/AAAAAAAABMY/J730BQr1K6c/s1600/image05.png"><img border="0" src="http://4.bp.blogspot.com/-_TmrBc9W89g/VJNAJEkghVI/AAAAAAAABMY/J730BQr1K6c/s320/image05.png"></a></td>

<td><a href="http://1.bp.blogspot.com/-bUUIKJVFSW8/VJNAOAH4dNI/AAAAAAAABMg/nJXIcIQoGEI/s1600/image08.png"><img border="0" src="http://1.bp.blogspot.com/-bUUIKJVFSW8/VJNAOAH4dNI/AAAAAAAABMg/nJXIcIQoGEI/s320/image08.png"></a></td></table><p>It's tempting to use bitmaps from the original mock up that have the exact location of watch arms and components in absolute space. Sadly, this creates problems, like in Santa's arm here. While the arm is in the correct position, even transparent pixels increase the size of the image, which can cause performance problems due to memory fetch. You'll want to work with your design team to extract padding and rotational information from the images, and rely on the system to apply the transformations on our behalf.</p>

<p>Since the original image covers the entire screen, even though the bitmap is mostly transparent, the system still needs to check every pixel to see if they have been impacted. Cutting down the area results in significant gains in performance. After correcting both of the arms, the Santa watch face frame rate increased by 10 fps to 28 fps (fps up 56%). We saved another 4 fps (fps up 22%) by cropping Santa&#8217;s face and figure layer. 14 fps gained, not bad!</p>

<h3>Combine Bitmaps (+7 fps)</h3>

<p>Although it would be ideal to have the watch tick marks on top of our clouds, it actually does not make much difference visually as the clouds themselves are transparent. Therefore there is an opportunity to combine the background with the ticks.</p>

<a href="http://4.bp.blogspot.com/-cIl0OKhdEUI/VJNAWiRTRPI/AAAAAAAABMo/zZlIOGIn1OI/s1600/image02.png"><img border="0" src="http://4.bp.blogspot.com/-cIl0OKhdEUI/VJNAWiRTRPI/AAAAAAAABMo/zZlIOGIn1OI/s320/image02.png"></a>
 + 
<a href="http://4.bp.blogspot.com/-DKqPZ3FFIys/VJNAaoNSWwI/AAAAAAAABMw/TlGOyxFwJTo/s1600/image12.png"><img border="0" src="http://4.bp.blogspot.com/-DKqPZ3FFIys/VJNAaoNSWwI/AAAAAAAABMw/TlGOyxFwJTo/s320/image12.png"></a>

<p>When we combined these two views together, it meant that the watch needed to spend less time doing alpha blending operations between them, saving precious CPU time. So, consider collapsing alpha blended resources wherever we can in order to increase performance. By combining two full screen bitmaps, we were able to gain another 7 fps (fps up 39%). </p>

<h3>Anti-alias vs FilterBitmap flags - what should you use? (+2 fps)</h3>

<p>Android Wear watches come in all shapes and sizes. As a result, it is sometimes necessary to resize a bitmap before drawing on the screen. However, it is not always clear what options developers should select to make sure that the bitmap comes out smoothly. With <a href="http://developer.android.com/reference/android/graphics/Canvas.html?utm_campaign=watchface-1214&#38;utm_source=dac&#38;utm_medium=blog#drawBitmap(android.graphics.Bitmap,%20float,%20float,%20android.graphics.Paint)">canvas.drawBitmap</a>, developers need to feed in a <a href="http://developer.android.com/reference/android/graphics/Paint.html?utm_campaign=watchface-1214&#38;utm_source=dac&#38;utm_medium=blog">Paint</a> object. There are two important options to set - they are <a href="http://developer.android.com/reference/android/graphics/Paint.html?utm_campaign=watchface-1214&#38;utm_source=dac&#38;utm_medium=blog#setAntiAlias(boolean)">anti-alias</a> and <a href="http://developer.android.com/reference/android/graphics/Paint.html?utm_campaign=watchface-1214&#38;utm_source=dac&#38;utm_medium=blog#setFilterBitmap(boolean)">FilterBitmap</a>. Here&#8217;s our advice:</p>
<ul><li><b>Anti-alias does not do anything for bitmaps with transparent edges.</b> We often switch on the anti-alias option by default as developers when we are creating a Paint object. However, this option only really makes sense for vector objects. For bitmaps, this is used to blend the rectangular edges if it is rotated or skewed and it has no impact if the edge pixels are transparent (as we would imagine most watch face arms would be). The hand on the left below has anti-alias switched on, the one on the right has it switched off. So turn off anti-aliasing for bitmaps to gain performance back. For our watch face, we gained another 2 fps (fps up 11%) by switching this option off.</li>
<a href="http://1.bp.blogspot.com/-RCcXz_TBJ_Y/VJNAlh1oduI/AAAAAAAABM4/Lr4BGv5UgOI/s1600/image10.png"><img border="0" src="http://1.bp.blogspot.com/-RCcXz_TBJ_Y/VJNAlh1oduI/AAAAAAAABM4/Lr4BGv5UgOI/s320/image10.png"></a><a href="http://3.bp.blogspot.com/-_evXnLc0msg/VJNAlkY6y3I/AAAAAAAABM8/kCIYpVbx-6g/s1600/image03.png"><img border="0" src="http://3.bp.blogspot.com/-_evXnLc0msg/VJNAlkY6y3I/AAAAAAAABM8/kCIYpVbx-6g/s320/image03.png"></a>

<li><b>Switch on FilterBitmap for all bitmap objects which are on top of other objects</b> - this option smooths the edges when drawBitmap is called. This should not be confused with the filter option on <a href="http://developer.android.com/reference/android/graphics/Bitmap.html?utm_campaign=watchface-1214&#38;utm_source=dac&#38;utm_medium=blog#createScaledBitmap(android.graphics.Bitmap,%20int,%20int,%20boolean)">Bitmap.createScaledBitmap</a> for resizing bitmaps. We need both to be turned on. The bitmaps below are the magnified view of Santa&#8217;s hand. The one on the left has FilterBitmap switched off and the one on the right has FilterBitmap switched on.</li></ul><a href="http://3.bp.blogspot.com/-P5-tdrGoDOQ/VJNAupvVP3I/AAAAAAAABNI/IMFvsdnsJQI/s1600/image13.png"><img border="0" src="http://3.bp.blogspot.com/-P5-tdrGoDOQ/VJNAupvVP3I/AAAAAAAABNI/IMFvsdnsJQI/s320/image13.png"></a><a href="http://1.bp.blogspot.com/-N7ulZj_aD1U/VJNAumtx7MI/AAAAAAAABNM/SfWXoc_30XQ/s1600/image16.png"><img border="0" src="http://1.bp.blogspot.com/-N7ulZj_aD1U/VJNAumtx7MI/AAAAAAAABNM/SfWXoc_30XQ/s320/image16.png"></a>


<h3>Eliminate expensive calls in the onDraw loop (+3 fps)</h3>
<p>onDraw is the most critical function call in watch faces. It's called for every drawable frame, and the actual painting process cannot move forward until it's finished. As such, our onDraw method should be as light and as performant as possible. Here's some common problems that developers run into that can be avoided:</p>

<ol type="1"><li><b>Do move heavy and common code to a precompute function</b> - e.g. if we commonly grab R.array.cloudDegrees, try doing that in onCreate, and just referencing it in the onDraw loop.</li>
<li><b>Don&#8217;t repeat the same image transform in onDraw</b> - it&#8217;s common to resize bitmaps at runtime to fit the screen size but this is not available in onCreate. To avoid resizing the bitmap over and over again in onDraw, override <a href="http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html?utm_campaign=watchface-1214&#38;utm_source=dac&#38;utm_medium=blog#onSurfaceChanged(android.view.SurfaceHolder,%20int,%20int,%20int)">onSurfaceChanged</a> where width and height information are available and resize images there.</li>
<li><b>Don't allocate objects in onDraw</b> - this leads to high memory churn which will force garbage collection events to kick off, killing frame rates.</li>
<li><b>Do analyze the CPU performance by using a tool such as the Android Device Monitor.</b> It&#8217;s important that the onDraw execution time is short and occurs in a regular period.</li></ol><p>Following these simple rules will improve rendering performance drastically.</p>

<p>In the first version, the Santa onDraw routine has a rogue line:</p>
<pre>int[] cloudDegrees = 
    getResources().getIntArray(R.array.cloudDegrees);</pre>

<p>This loads the int array on every call from resources which is expensive. By eliminating this, we gained another 3 fps (fps up 17%).</p>

<h3>Sub-pixel smooth animation (-2 fps)</h3>

<p>For those keeping count, we should be 44 fps, so why is the end product 42 fps? The reason is a limitation with canvas.drawBitmap. Although this command takes left and top positioning settings as a float, <a href="https://code.google.com/p/android/issues/detail?id=11993">the API actually only deals with integers if it is purely translational for backwards compatibility reasons</a>. As a result, the cloud can only move in increments of a whole pixel resulting in janky animations. In order to be sub-pixel smooth, we actually need to draw and then rotate rather than having pre-rotate clouds which moves towards Santa. This additional rotation costs us 2 fps. However, the effect is worthwhile as the animation is now sub-pixel smooth.</p>

<p><b>Before - fast but janky and wobbly</b></p>
<pre>for (int i = 0; i 

<p><b>After - slightly slower but sub-pixel smooth</b></p>
<pre>for (int i = 0; i 

<a href="http://4.bp.blogspot.com/-U8s39eTZWII/VJMqE8BT-4I/AAAAAAAABME/KWgfrjME428/s1600/santa_janky.gif"><img border="0" src="http://4.bp.blogspot.com/-U8s39eTZWII/VJMqE8BT-4I/AAAAAAAABME/KWgfrjME428/s320/santa_janky.gif"></a><a href="http://4.bp.blogspot.com/-edAuzG3QY4E/VJMqEiKPD5I/AAAAAAAABMA/7lJnXQTe7FQ/s1600/santa_smooth.gif"><img border="0" src="http://4.bp.blogspot.com/-edAuzG3QY4E/VJMqEiKPD5I/AAAAAAAABMA/7lJnXQTe7FQ/s320/santa_smooth.gif"></a>

<p><i>Before: Integer translation values create janky, wobbly animation. After: smooth sailing!</i></p>

<h3>Quality on every wrist</h3>
<p>The watch face is the most prominent UI element in Android Wear. As craftspeople, it is our responsibility to make it shine. Let&#8217;s put quality on every wrist!</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/6UWHhFbnaKC"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/6UWHhFbnaKC"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/6UWHhFbnaKC"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div></pre></pre>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by <a href="https://plus.google.com/b/108967384991768947849/+HoiLam/posts">Hoi Lam</a>, Developer Advocate, Android Wear</i></p>

<p>What’s a better holiday gift than great performance? You’ve got a great watch face idea -- now, you want to make sure the face you’re presenting to the world is one of care and attention to detail.</p>

<p>At the core of the watch face's process is an onDraw method for canvas operations. This allows maximum flexibility for your design, but also comes with a few performance caveats. In this blog post, we will mainly focus on performance using the real life journey of how we optimised the Santa Tracker watch face, more than doubling the number of fps (from 18 fps to 42 fps) and making the animation sub-pixel smooth.</p>

<h3>Starting point - 18 fps</h3>
<p>Our Santa watch face contains a number of overlapping bitmaps that are used to achieve our final image. Here's a list of them from bottom to top:</p>
<ol type="1"><li>Background (static)</li>
<li>Clouds which move to the middle</li>
<li>Tick marks (static)</li>
<li>Santa figure and sledge (static)</li>
<li>Santa’s hands - hours and minutes </li>
<li>Santa’s head (static)</li></ol>

<p>The journey begins with these images...</p>

<h3>Large images kill performance (+14 fps)</h3>

<p>Image size is critical to performance in a Wear application, especially if the images will be scaled and rotated. Wasted pixel space (like Santa’s arm here) is a common asset mistake:</p>

<table border="0" style="width:100%">
  <tr>
    <td>Before: 584 x 584 = 341,056 pixels</td><td>After: 48*226 = 10,848 (97% reduction)</td></tr>
<td><a href="http://4.bp.blogspot.com/-_TmrBc9W89g/VJNAJEkghVI/AAAAAAAABMY/J730BQr1K6c/s1600/image05.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-_TmrBc9W89g/VJNAJEkghVI/AAAAAAAABMY/J730BQr1K6c/s320/image05.png" /></a></td>

<td><a href="http://1.bp.blogspot.com/-bUUIKJVFSW8/VJNAOAH4dNI/AAAAAAAABMg/nJXIcIQoGEI/s1600/image08.png" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-bUUIKJVFSW8/VJNAOAH4dNI/AAAAAAAABMg/nJXIcIQoGEI/s320/image08.png" /></a></td></tr></table>

<p>It's tempting to use bitmaps from the original mock up that have the exact location of watch arms and components in absolute space. Sadly, this creates problems, like in Santa's arm here. While the arm is in the correct position, even transparent pixels increase the size of the image, which can cause performance problems due to memory fetch. You'll want to work with your design team to extract padding and rotational information from the images, and rely on the system to apply the transformations on our behalf.</p>

<p>Since the original image covers the entire screen, even though the bitmap is mostly transparent, the system still needs to check every pixel to see if they have been impacted. Cutting down the area results in significant gains in performance. After correcting both of the arms, the Santa watch face frame rate increased by 10 fps to 28 fps (fps up 56%). We saved another 4 fps (fps up 22%) by cropping Santa’s face and figure layer. 14 fps gained, not bad!</p>

<h3>Combine Bitmaps (+7 fps)</h3>

<p>Although it would be ideal to have the watch tick marks on top of our clouds, it actually does not make much difference visually as the clouds themselves are transparent. Therefore there is an opportunity to combine the background with the ticks.</p>

<a href="http://4.bp.blogspot.com/-cIl0OKhdEUI/VJNAWiRTRPI/AAAAAAAABMo/zZlIOGIn1OI/s1600/image02.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-cIl0OKhdEUI/VJNAWiRTRPI/AAAAAAAABMo/zZlIOGIn1OI/s320/image02.png" /></a>
 + 
<a href="http://4.bp.blogspot.com/-DKqPZ3FFIys/VJNAaoNSWwI/AAAAAAAABMw/TlGOyxFwJTo/s1600/image12.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-DKqPZ3FFIys/VJNAaoNSWwI/AAAAAAAABMw/TlGOyxFwJTo/s320/image12.png" /></a>

<p>When we combined these two views together, it meant that the watch needed to spend less time doing alpha blending operations between them, saving precious CPU time. So, consider collapsing alpha blended resources wherever we can in order to increase performance. By combining two full screen bitmaps, we were able to gain another 7 fps (fps up 39%). </p>

<h3>Anti-alias vs FilterBitmap flags - what should you use? (+2 fps)</h3>

<p>Android Wear watches come in all shapes and sizes. As a result, it is sometimes necessary to resize a bitmap before drawing on the screen. However, it is not always clear what options developers should select to make sure that the bitmap comes out smoothly. With <a href="http://developer.android.com/reference/android/graphics/Canvas.html?utm_campaign=watchface-1214&utm_source=dac&utm_medium=blog#drawBitmap(android.graphics.Bitmap,%20float,%20float,%20android.graphics.Paint)">canvas.drawBitmap</a>, developers need to feed in a <a href="http://developer.android.com/reference/android/graphics/Paint.html?utm_campaign=watchface-1214&utm_source=dac&utm_medium=blog">Paint</a> object. There are two important options to set - they are <a href="http://developer.android.com/reference/android/graphics/Paint.html?utm_campaign=watchface-1214&utm_source=dac&utm_medium=blog#setAntiAlias(boolean)">anti-alias</a> and <a href="http://developer.android.com/reference/android/graphics/Paint.html?utm_campaign=watchface-1214&utm_source=dac&utm_medium=blog#setFilterBitmap(boolean)">FilterBitmap</a>. Here’s our advice:</p>
<ul><li><b>Anti-alias does not do anything for bitmaps with transparent edges.</b> We often switch on the anti-alias option by default as developers when we are creating a Paint object. However, this option only really makes sense for vector objects. For bitmaps, this is used to blend the rectangular edges if it is rotated or skewed and it has no impact if the edge pixels are transparent (as we would imagine most watch face arms would be). The hand on the left below has anti-alias switched on, the one on the right has it switched off. So turn off anti-aliasing for bitmaps to gain performance back. For our watch face, we gained another 2 fps (fps up 11%) by switching this option off.</li>
<a href="http://1.bp.blogspot.com/-RCcXz_TBJ_Y/VJNAlh1oduI/AAAAAAAABM4/Lr4BGv5UgOI/s1600/image10.png" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-RCcXz_TBJ_Y/VJNAlh1oduI/AAAAAAAABM4/Lr4BGv5UgOI/s320/image10.png" /></a><a href="http://3.bp.blogspot.com/-_evXnLc0msg/VJNAlkY6y3I/AAAAAAAABM8/kCIYpVbx-6g/s1600/image03.png" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-_evXnLc0msg/VJNAlkY6y3I/AAAAAAAABM8/kCIYpVbx-6g/s320/image03.png" /></a>

<li><b>Switch on FilterBitmap for all bitmap objects which are on top of other objects</b> - this option smooths the edges when drawBitmap is called. This should not be confused with the filter option on <a href="http://developer.android.com/reference/android/graphics/Bitmap.html?utm_campaign=watchface-1214&utm_source=dac&utm_medium=blog#createScaledBitmap(android.graphics.Bitmap,%20int,%20int,%20boolean)">Bitmap.createScaledBitmap</a> for resizing bitmaps. We need both to be turned on. The bitmaps below are the magnified view of Santa’s hand. The one on the left has FilterBitmap switched off and the one on the right has FilterBitmap switched on.</li></ul>
<a href="http://3.bp.blogspot.com/-P5-tdrGoDOQ/VJNAupvVP3I/AAAAAAAABNI/IMFvsdnsJQI/s1600/image13.png" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-P5-tdrGoDOQ/VJNAupvVP3I/AAAAAAAABNI/IMFvsdnsJQI/s320/image13.png" /></a><a href="http://1.bp.blogspot.com/-N7ulZj_aD1U/VJNAumtx7MI/AAAAAAAABNM/SfWXoc_30XQ/s1600/image16.png" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-N7ulZj_aD1U/VJNAumtx7MI/AAAAAAAABNM/SfWXoc_30XQ/s320/image16.png" /></a>


<h3>Eliminate expensive calls in the onDraw loop (+3 fps)</h3>
<p>onDraw is the most critical function call in watch faces. It's called for every drawable frame, and the actual painting process cannot move forward until it's finished. As such, our onDraw method should be as light and as performant as possible. Here's some common problems that developers run into that can be avoided:</p>

<ol type="1"><li><b>Do move heavy and common code to a precompute function</b> - e.g. if we commonly grab R.array.cloudDegrees, try doing that in onCreate, and just referencing it in the onDraw loop.</li>
<li><b>Don’t repeat the same image transform in onDraw</b> - it’s common to resize bitmaps at runtime to fit the screen size but this is not available in onCreate. To avoid resizing the bitmap over and over again in onDraw, override <a href="http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html?utm_campaign=watchface-1214&utm_source=dac&utm_medium=blog#onSurfaceChanged(android.view.SurfaceHolder,%20int,%20int,%20int)">onSurfaceChanged</a> where width and height information are available and resize images there.</li>
<li><b>Don't allocate objects in onDraw</b> - this leads to high memory churn which will force garbage collection events to kick off, killing frame rates.</li>
<li><b>Do analyze the CPU performance by using a tool such as the Android Device Monitor.</b> It’s important that the onDraw execution time is short and occurs in a regular period.</li></ol>

<p>Following these simple rules will improve rendering performance drastically.</p>

<p>In the first version, the Santa onDraw routine has a rogue line:</p>
<pre class="pretty print">int[] cloudDegrees = 
    getResources().getIntArray(R.array.cloudDegrees);</pre>

<p>This loads the int array on every call from resources which is expensive. By eliminating this, we gained another 3 fps (fps up 17%).</p>

<h3>Sub-pixel smooth animation (-2 fps)</h3>

<p>For those keeping count, we should be 44 fps, so why is the end product 42 fps? The reason is a limitation with canvas.drawBitmap. Although this command takes left and top positioning settings as a float, <a href="https://code.google.com/p/android/issues/detail?id=11993">the API actually only deals with integers if it is purely translational for backwards compatibility reasons</a>. As a result, the cloud can only move in increments of a whole pixel resulting in janky animations. In order to be sub-pixel smooth, we actually need to draw and then rotate rather than having pre-rotate clouds which moves towards Santa. This additional rotation costs us 2 fps. However, the effect is worthwhile as the animation is now sub-pixel smooth.</p>

<p><b>Before - fast but janky and wobbly</b></p>
<pre class="pretty print">for (int i = 0; i < mCloudBitmaps.length; i++) {
    float r = centerX - (timeElapsed / mCloudSpeeds[i]) % centerX;
    float x = centerX + 
        -1 * (r * (float) Math.cos(Math.toRadians(cloudDegrees[i] + 90)));
    float y = centerY - 
        r * (float) Math.sin(Math.toRadians(cloudDegrees[i] + 90));
    mCloudFilterPaints[i].setAlpha((int) (r/centerX * 255));
    Bitmap cloud = mCloudBitmaps[i];
    canvas.drawBitmap(cloud,
        x - cloud.getWidth() / 2,
        y - cloud.getHeight() / 2,
        mCloudFilterPaints[i]);
}</pre>

<p><b>After - slightly slower but sub-pixel smooth</b></p>
<pre class="pretty print">for (int i = 0; i < mCloudBitmaps.length; i++) {
    canvas.save();
    canvas.rotate(mCloudDegrees[i], centerX, centerY);
    float r = centerX - (timeElapsed / (mCloudSpeeds[i])) % centerX;
    mCloudFilterPaints[i].setAlpha((int) (r / centerX * 255));
    canvas.drawBitmap(mCloudBitmaps[i], centerX, centerY - r,
        mCloudFilterPaints[i]);
    canvas.restore();
}</pre>

<a href="http://4.bp.blogspot.com/-U8s39eTZWII/VJMqE8BT-4I/AAAAAAAABME/KWgfrjME428/s1600/santa_janky.gif" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-U8s39eTZWII/VJMqE8BT-4I/AAAAAAAABME/KWgfrjME428/s320/santa_janky.gif" /></a><a href="http://4.bp.blogspot.com/-edAuzG3QY4E/VJMqEiKPD5I/AAAAAAAABMA/7lJnXQTe7FQ/s1600/santa_smooth.gif" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-edAuzG3QY4E/VJMqEiKPD5I/AAAAAAAABMA/7lJnXQTe7FQ/s320/santa_smooth.gif" /></a>

<p><i>Before: Integer translation values create janky, wobbly animation. After: smooth sailing!</i></p>

<h3>Quality on every wrist</h3>
<p>The watch face is the most prominent UI element in Android Wear. As craftspeople, it is our responsibility to make it shine. Let’s put quality on every wrist!</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/6UWHhFbnaKC" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/6UWHhFbnaKC" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/6UWHhFbnaKC" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/making-a-performant-watch-face/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>New Code Samples for Lollipop</title>
		<link>https://googledata.org/google-android/new-code-samples-for-lollipop/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new-code-samples-for-lollipop</link>
		<comments>https://googledata.org/google-android/new-code-samples-for-lollipop/#comments</comments>
		<pubDate>Thu, 11 Dec 2014 22:41:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=2b60c48d49d1ac15a544063eb405b7c8</guid>
		<description><![CDATA[<p><i>Posted by <a href="https://plus.google.com/+TrevorJohns/posts">Trevor Johns</a>, Developer Programs Engineer</i></p>

<p>With the launch of Android 5.0 Lollipop, we&#8217;ve added more than <a href="http://developer.android.com/samples/new/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">20 new code samples</a> demonstrating how to implement some of the great new features of this release. To access the code samples, you can easily import them in <a href="http://android-developers.blogspot.com/2014/12/android-studio-10.html">Android Studio 1.0</a> using the new Samples Wizard.</p>

<p>Go to File &#62; Import Sample in order to browse the available samples, which include a description and preview for each. Once you&#8217;ve made your selection, select &#8220;Next&#8221; and a new project will be automatically created for you. Run the project on an emulator or device, and feel free to experiment with the code.</p>   

<div><a href="http://2.bp.blogspot.com/-BzYxdDb_eso/VIk4mU4h_jI/AAAAAAAABGA/gtCE3vU2ULA/s1600/Sample%2BWizard.png"><img border="0" src="http://2.bp.blogspot.com/-BzYxdDb_eso/VIk4mU4h_jI/AAAAAAAABGA/gtCE3vU2ULA/s640/Sample%2BWizard.png" vspace="10"></a>
<i>Samples Wizard in Android Studio 1.0</i>/&#62;</div>

<div><a href="http://2.bp.blogspot.com/-lDebhiOdsa0/VIk9Zt1ZGFI/AAAAAAAABGM/qb_w9cZawts/s1600/Sample%2Bin%2BEditor.png"><img border="0" src="http://2.bp.blogspot.com/-lDebhiOdsa0/VIk9Zt1ZGFI/AAAAAAAABGM/qb_w9cZawts/s640/Sample%2Bin%2BEditor.png" vspace="10"></a>
<i>Newly imported sample project in Android Studio</i>/&#62;</div>

<p>Alternatively, you can browse through them via the <b>Samples browser</b> on the <a href="http://developer.android.com/samples/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">developer site</a>. Each sample has an Overview description, Project page to browse app file structure, and Download link for obtaining a ZIP file of the sample. As a third option, code samples can also be accessed in the SDK Manager by downloading the <b>SDK samples</b> for Android 5.0 (API 21) and importing them as existing projects into your IDE. </p>

<div><a href="http://1.bp.blogspot.com/-nNPFmG_yQyM/VIlCDxWyXwI/AAAAAAAABGY/Sa6EoCJUbLI/s360/activitytransition.png">
<img border="0" src="http://1.bp.blogspot.com/-nNPFmG_yQyM/VIlCDxWyXwI/AAAAAAAABGY/Sa6EoCJUbLI/s360/activitytransition.png"></a><br /><i>Sample demonstrating transition animations<br /></i>
</div>

<h3>Material Design</h3>

<p>When adopting material design, you can refer to our collection of sample code highlighting material elements: </p>

<ul><li><a href="http://developer.android.com/samples/FloatingActionButtonBasic/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">Floating action button</a></li>
<li><a href="http://developer.android.com/samples/RevealEffectBasic/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">Reveal effect</a></li>
<li><a href="http://developer.android.com/samples/CardView/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">CardView</a></li>
<li><a href="http://developer.android.com/samples/DrawableTinting/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">Drawable tinting</a></li>
<li><a href="http://developer.android.com/samples/ElevationBasic/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">Elevation</a></li>
<li><a href="http://developer.android.com/samples/ElevationDrag/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">Drag-and-drop with elevation</a></li>
<li><a href="http://developer.android.com/samples/ClippingBasic/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">View clipping</a></li>
<li><a href="http://developer.android.com/samples/Interpolator/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">Animation interpolators</a></li></ul><p>For additional help, please refer to our design <a href="http://android-developers.blogspot.com/2014/10/material-design-on-android-checklist.html">checklist</a>, <a href="http://android-developers.blogspot.com/2014/10/implementing-material-design-in-your.html">list</a> of key APIs and widgets, and documentation <a href="https://developer.android.com/design/material/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">guide</a>.</p>

<p>To view some of these material design elements in action, check out the Google I/O app <a href="http://android-developers.blogspot.com/2014/07/google-io-2014-app-source-code-now.html">source code</a>.</p>

<h3>Platform</h3>

<p><a href="http://android-developers.blogspot.com/2014/10/whats-new-in-android-50-lollipop.html">Lollipop</a> brings the most extensive update to the Android platform yet. The Overview screen allows an app to surface multiple tasks as <a href="http://developer.android.com/samples/DocumentCentricApps/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">concurrent documents</a>. You can include enhanced notifications with this <a href="http://developer.android.com/samples/LNotifications/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">sample</a> code, which shows you how to use the lockscreen and heads-up notification APIs.</p>

<p>We also introduced a new <a href="https://www.youtube.com/watch?v=Xtp3tH27OFs">Camera API</a> to provide developers more advanced image capture and processing capabilities. These samples detail how to use the camera preview and <a href="http://developer.android.com/samples/Camera2Basic/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">take photos</a>, how to <a href="http://developer.android.com/samples/Camera2Video/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">record video</a>, and implement a real-time high-dynamic range <a href="http://developer.android.com/samples/HdrViewfinder/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">camera viewfinder</a>.</p>

<p>Elsewhere, <a href="https://developer.android.com/about/versions/android-5.0.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog#Power">Project Volta</a> encourages developers to make their apps more battery-efficient with new APIs and tools. The <a href="http://developer.android.com/samples/JobScheduler/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">JobScheduler sample</a> demonstrates how you can schedule background tasks to be completed later or under specific conditions. </p>

<p>For those interested in the enterprise device administration use case, there are sample apps on setting <a href="http://developer.android.com/samples/AppRestrictions/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">app restrictions</a> and creating a <a href="http://developer.android.com/samples/BasicManagedProfile/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">managed profile</a>.</p>

<h3>Android Wear</h3>

<p>For Android Wear, we have a <a href="http://developer.android.com/samples/SpeedTracker/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">speed tracker sample</a> to show how to take advantage of <a href="http://android-developers.blogspot.com/2014/10/gps-on-android-wear-devices.html">GPS support</a> on wearables. You can browse the rest of the <a href="http://developer.android.com/samples/wearable.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">Android Wear samples</a> too, and here are some highlights that demonstrate the unique capabilities of wearables, such as data synchronization, notifications, and supporting round displays:</p>

<ul><li><a href="http://developer.android.com/samples/DataLayer/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">DataLayer</a></li>
<li><a href="http://developer.android.com/samples/FindMyPhone/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">FindMyPhone</a></li>
<li><a href="http://developer.android.com/samples/GridViewPager/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">GridViewPager</a></li>
<li><a href="http://developer.android.com/samples/Notifications/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">Notifications</a></li>
<li><a href="http://developer.android.com/samples/RecipeAssistant/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">RecipeAssistant</a></li>
<li><a href="http://developer.android.com/samples/SynchronizedNotifications/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">SynchronizedNotifications</a></li>
<li><a href="http://developer.android.com/samples/WatchViewStub/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">WatchViewStub</a></li></ul><h3>Android TV</h3>

<p>Extend your app for Android TV using the <a href="https://www.youtube.com/watch?v=72K1VhjoL98">Leanback library</a> described in this <a href="https://developer.android.com/training/tv/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">training guide</a> and <a href="https://github.com/googlesamples/androidtv-Leanback">sample</a>.</p> 

<p>To try out a game that is specifically optimized for Android TV, download <a href="https://play.google.com/store/apps/details?id=com.google.fpl.pie_noon">Pie Noon</a> from Google Play. It&#8217;s an <a href="http://android-developers.blogspot.com/2014/11/coding-android-tv-games-is-easy-as-pie.html">open-source game</a> developed in-house at Google that supports multiple players using Bluetooth controllers or touch controls on mobile devices. </p>

<h3>Android Auto</h3>

<p>For the use cases highlighted in the <a href="https://www.youtube.com/watch?v=ctiaVxgclsg">Introduction to Android Auto</a> DevByte, we have two code samples. The <a href="http://developer.android.com/samples/MediaBrowserService/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">Media Browser sample</a> (<a href="https://www.youtube.com/watch?v=Q96Sw6v4ULg">DevByte</a>) demonstrates how easy it is to make an audio app compatible with Android Auto by using the new <a href="https://developer.android.com/about/versions/android-5.0.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog#MediaPlaybackControl">Lollipop media APIs</a>, while the <a href="http://developer.android.com/samples/MessagingService/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">Messaging sample</a> (<a href="https://www.youtube.com/watch?v=gSVLuaOTIPk">DevByte</a>) demonstrates how to implement notifications that support replies using speech recognition.</p>

<h3>Google Play services</h3>

<p>Since we&#8217;ve discussed sample resources for the Android platform and form factors, we also want to mention that there are existing samples for Google Play services. With Google Play services, your app can take advantage of the latest Google-powered APIs such as Maps, Google Fit, Google Cast, and more. Access samples in the Google Play services SDK or visit the individual pages for each API on the <a href="http://developer.android.com/google/play-services/index.html?utm_campaign=lollipopsamples-1214&#38;utm_source=dac&#38;utm_medium=blog">developer site</a>. For game developers, you can reference the <a href="https://developers.google.com/games/services/downloads/">Google Play Games services</a> samples for how to add achievements, leaderboards, and multiplayer support to your game.</p>

<p>Check out a sample today to help you with your development!</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/GSrP89uoP7f"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/GSrP89uoP7f"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/GSrP89uoP7f"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by <a href="https://plus.google.com/+TrevorJohns/posts">Trevor Johns</a>, Developer Programs Engineer</i></p>

<p>With the launch of Android 5.0 Lollipop, we’ve added more than <a href="http://developer.android.com/samples/new/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">20 new code samples</a> demonstrating how to implement some of the great new features of this release. To access the code samples, you can easily import them in <a href="http://android-developers.blogspot.com/2014/12/android-studio-10.html">Android Studio 1.0</a> using the new Samples Wizard.</p>

<p>Go to File > Import Sample in order to browse the available samples, which include a description and preview for each. Once you’ve made your selection, select “Next” and a new project will be automatically created for you. Run the project on an emulator or device, and feel free to experiment with the code.</p>   

<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-BzYxdDb_eso/VIk4mU4h_jI/AAAAAAAABGA/gtCE3vU2ULA/s1600/Sample%2BWizard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-BzYxdDb_eso/VIk4mU4h_jI/AAAAAAAABGA/gtCE3vU2ULA/s640/Sample%2BWizard.png" vspace="10"/></a>
<center><i>Samples Wizard in Android Studio 1.0</i></center/></div>

<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-lDebhiOdsa0/VIk9Zt1ZGFI/AAAAAAAABGM/qb_w9cZawts/s1600/Sample%2Bin%2BEditor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-lDebhiOdsa0/VIk9Zt1ZGFI/AAAAAAAABGM/qb_w9cZawts/s640/Sample%2Bin%2BEditor.png" vspace="10"/></a>
<center><i>Newly imported sample project in Android Studio</i></center/></div>

<p>Alternatively, you can browse through them via the <b>Samples browser</b> on the <a href="http://developer.android.com/samples/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">developer site</a>. Each sample has an Overview description, Project page to browse app file structure, and Download link for obtaining a ZIP file of the sample. As a third option, code samples can also be accessed in the SDK Manager by downloading the <b>SDK samples</b> for Android 5.0 (API 21) and importing them as existing projects into your IDE. </p>

<div style="float:right;"><a href="http://1.bp.blogspot.com/-nNPFmG_yQyM/VIlCDxWyXwI/AAAAAAAABGY/Sa6EoCJUbLI/s360/activitytransition.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">
<img border="0" src="http://1.bp.blogspot.com/-nNPFmG_yQyM/VIlCDxWyXwI/AAAAAAAABGY/Sa6EoCJUbLI/s360/activitytransition.png" /></a><br><i>Sample demonstrating transition animations<br>
</i>
</div>

<h3>Material Design</h3>

<p>When adopting material design, you can refer to our collection of sample code highlighting material elements: </p>

<ul><li><a href="http://developer.android.com/samples/FloatingActionButtonBasic/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">Floating action button</a></li>
<li><a href="http://developer.android.com/samples/RevealEffectBasic/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">Reveal effect</a></li>
<li><a href="http://developer.android.com/samples/CardView/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">CardView</a></li>
<li><a href="http://developer.android.com/samples/DrawableTinting/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">Drawable tinting</a></li>
<li><a href="http://developer.android.com/samples/ElevationBasic/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">Elevation</a></li>
<li><a href="http://developer.android.com/samples/ElevationDrag/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">Drag-and-drop with elevation</a></li>
<li><a href="http://developer.android.com/samples/ClippingBasic/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">View clipping</a></li>
<li><a href="http://developer.android.com/samples/Interpolator/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">Animation interpolators</a></li></ul>

<p>For additional help, please refer to our design <a href="http://android-developers.blogspot.com/2014/10/material-design-on-android-checklist.html">checklist</a>, <a href="http://android-developers.blogspot.com/2014/10/implementing-material-design-in-your.html">list</a> of key APIs and widgets, and documentation <a href="https://developer.android.com/design/material/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">guide</a>.</p>

<p>To view some of these material design elements in action, check out the Google I/O app <a href="http://android-developers.blogspot.com/2014/07/google-io-2014-app-source-code-now.html">source code</a>.</p>

<h3>Platform</h3>

<p><a href="http://android-developers.blogspot.com/2014/10/whats-new-in-android-50-lollipop.html">Lollipop</a> brings the most extensive update to the Android platform yet. The Overview screen allows an app to surface multiple tasks as <a href="http://developer.android.com/samples/DocumentCentricApps/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">concurrent documents</a>. You can include enhanced notifications with this <a href="http://developer.android.com/samples/LNotifications/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">sample</a> code, which shows you how to use the lockscreen and heads-up notification APIs.</p>

<p>We also introduced a new <a href="https://www.youtube.com/watch?v=Xtp3tH27OFs">Camera API</a> to provide developers more advanced image capture and processing capabilities. These samples detail how to use the camera preview and <a href="http://developer.android.com/samples/Camera2Basic/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">take photos</a>, how to <a href="http://developer.android.com/samples/Camera2Video/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">record video</a>, and implement a real-time high-dynamic range <a href="http://developer.android.com/samples/HdrViewfinder/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">camera viewfinder</a>.</p>

<p>Elsewhere, <a href="https://developer.android.com/about/versions/android-5.0.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog#Power">Project Volta</a> encourages developers to make their apps more battery-efficient with new APIs and tools. The <a href="http://developer.android.com/samples/JobScheduler/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">JobScheduler sample</a> demonstrates how you can schedule background tasks to be completed later or under specific conditions. </p>

<p>For those interested in the enterprise device administration use case, there are sample apps on setting <a href="http://developer.android.com/samples/AppRestrictions/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">app restrictions</a> and creating a <a href="http://developer.android.com/samples/BasicManagedProfile/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">managed profile</a>.</p>

<h3>Android Wear</h3>

<p>For Android Wear, we have a <a href="http://developer.android.com/samples/SpeedTracker/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">speed tracker sample</a> to show how to take advantage of <a href="http://android-developers.blogspot.com/2014/10/gps-on-android-wear-devices.html">GPS support</a> on wearables. You can browse the rest of the <a href="http://developer.android.com/samples/wearable.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">Android Wear samples</a> too, and here are some highlights that demonstrate the unique capabilities of wearables, such as data synchronization, notifications, and supporting round displays:</p>

<ul><li><a href="http://developer.android.com/samples/DataLayer/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">DataLayer</a></li>
<li><a href="http://developer.android.com/samples/FindMyPhone/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">FindMyPhone</a></li>
<li><a href="http://developer.android.com/samples/GridViewPager/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">GridViewPager</a></li>
<li><a href="http://developer.android.com/samples/Notifications/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">Notifications</a></li>
<li><a href="http://developer.android.com/samples/RecipeAssistant/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">RecipeAssistant</a></li>
<li><a href="http://developer.android.com/samples/SynchronizedNotifications/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">SynchronizedNotifications</a></li>
<li><a href="http://developer.android.com/samples/WatchViewStub/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">WatchViewStub</a></li></ul>

<h3>Android TV</h3>

<p>Extend your app for Android TV using the <a href="https://www.youtube.com/watch?v=72K1VhjoL98">Leanback library</a> described in this <a href="https://developer.android.com/training/tv/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">training guide</a> and <a href="https://github.com/googlesamples/androidtv-Leanback">sample</a>.</p> 

<p>To try out a game that is specifically optimized for Android TV, download <a href="https://play.google.com/store/apps/details?id=com.google.fpl.pie_noon">Pie Noon</a> from Google Play. It’s an <a href="http://android-developers.blogspot.com/2014/11/coding-android-tv-games-is-easy-as-pie.html">open-source game</a> developed in-house at Google that supports multiple players using Bluetooth controllers or touch controls on mobile devices. </p>

<h3>Android Auto</h3>

<p>For the use cases highlighted in the <a href="https://www.youtube.com/watch?v=ctiaVxgclsg">Introduction to Android Auto</a> DevByte, we have two code samples. The <a href="http://developer.android.com/samples/MediaBrowserService/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">Media Browser sample</a> (<a href="https://www.youtube.com/watch?v=Q96Sw6v4ULg">DevByte</a>) demonstrates how easy it is to make an audio app compatible with Android Auto by using the new <a href="https://developer.android.com/about/versions/android-5.0.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog#MediaPlaybackControl">Lollipop media APIs</a>, while the <a href="http://developer.android.com/samples/MessagingService/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">Messaging sample</a> (<a href="https://www.youtube.com/watch?v=gSVLuaOTIPk">DevByte</a>) demonstrates how to implement notifications that support replies using speech recognition.</p>

<h3>Google Play services</h3>

<p>Since we’ve discussed sample resources for the Android platform and form factors, we also want to mention that there are existing samples for Google Play services. With Google Play services, your app can take advantage of the latest Google-powered APIs such as Maps, Google Fit, Google Cast, and more. Access samples in the Google Play services SDK or visit the individual pages for each API on the <a href="http://developer.android.com/google/play-services/index.html?utm_campaign=lollipopsamples-1214&utm_source=dac&utm_medium=blog">developer site</a>. For game developers, you can reference the <a href="https://developers.google.com/games/services/downloads/">Google Play Games services</a> samples for how to add achievements, leaderboards, and multiplayer support to your game.</p>

<p>Check out a sample today to help you with your development!</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/GSrP89uoP7f" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/GSrP89uoP7f" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/GSrP89uoP7f" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/new-code-samples-for-lollipop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Hello World, meet our new experimental toolchain, Jack and Jill</title>
		<link>https://googledata.org/google-android/hello-world-meet-our-new-experimental-toolchain-jack-and-jill/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hello-world-meet-our-new-experimental-toolchain-jack-and-jill</link>
		<comments>https://googledata.org/google-android/hello-world-meet-our-new-experimental-toolchain-jack-and-jill/#comments</comments>
		<pubDate>Thu, 11 Dec 2014 17:47:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=3d0ba49c39808fcda92adb4145568f67</guid>
		<description><![CDATA[<p><i>Posted by <a href="https://plus.google.com/+PaulRashidi/">Paul Rashidi</a>, Developer Programs Engineer</i></p>

<p>We've been working on a new toolchain for Android that&#8217;s designed to improve build times and simplify development by reducing dependencies on other tools. Today, we&#8217;re introducing you to Jack (Java Android Compiler Kit) and Jill (Jack Intermediate Library Linker), the two tools at the core of the new toolchain. </p>

<p>We are making an early, experimental version of Jack and Jill available for testing with non-production versions of your apps. This post describes how the toolchain works, how to configure it, and how to let us know of your feature requests and any bugs you find. </p><p>

</p><h3>So how does it work?</h3>

<p>When the new tool chain is enabled, Jill will translate any libraries you are referencing to a new Jack library file (.jack). This prepares them to be quickly merged with other .jack files. The Android Gradle plugin and Jack collect any .jack library files, along with your source code, and compiles them into a set of dex files. During the process, Jack also handles any requested code minification. The output is then assembled into an APK file as normal. We also include support for multiple dex files, if you have <a href="https://developer.android.com/tools/building/multidex.html?utm_campaign=jackjill-1214&#38;utm_source=dac&#38;utm_medium=blog">enabled that support</a>.</p>

<div><a href="http://2.bp.blogspot.com/-ioHctWdyVco/VInupgI8H7I/AAAAAAAABGo/Vwz6-cMsXkc/s1600/JackBlogDiagram%2B(1).gif"><img border="0" src="http://2.bp.blogspot.com/-ioHctWdyVco/VInupgI8H7I/AAAAAAAABGo/Vwz6-cMsXkc/s1600/JackBlogDiagram%2B(1).gif"></a></div>

<h3>How do I use it?</h3>

<p>Jack and Jill are already available in the 21.1.1+ Build Tools for Android Studio. Complementary Gradle support is also currently available in the Android 1.0.0+ Gradle plugin. To get started, all you need to do is make sure you're using these versions of the tooling and then add a single line in your <code>build.gradle</code> file. Perform a build of your application to receive a newly built APK.</p>

<pre>android {
    ...
    buildToolsRevision '21.1.1'
    defaultConfig {
      // Enable the experimental Jack build tools.
      useJack = true
    }
    ...
}</pre>

If you want to build your app with both toolchains, <a href="http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-flavors">Product Flavors</a> are a great way to do this. Your <code>build.gradle</code> file might look something like the snippet below.

<pre>android {
    ...
    productFlavors {
        dev {
            ...
        }
        experimental {
            useJack = true
        }
        prod {
            ...
        }
    }
    ...
}</pre>

<h3>How do I configure my build?</h3>

<p>We are making the transition to Jack as smooth as possible by supporting minification (shrinking and/or obfuscation), as well as repackaging (i.e. similar to tools like jarjar), while using the same input files as you are used to. Minification is available in the Gradle plugin immediately and repackaging will follow. You should continue to use the "<code>minifyEnabled true</code>" directive to reduce the size of your app among all other optimizations you would normally use. There are more details on our reference page (linked below) regarding the level of support for each type of optimization. We encourage you to provide feedback there if your current configuration isn't supported. </p>

<h3>Give us your feedback</h3>

<p>We are attempting to make the toolchain as easy to test out as possible and we're looking for your help to fine tune it. Use the <a href="http://tools.android.com/tech-docs/jackandjill">reference page</a> to find known issues, file feature requests, and report bugs. Happy building!</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/TCdpDqJzjva"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/TCdpDqJzjva"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/TCdpDqJzjva"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by <a href="https://plus.google.com/+PaulRashidi/">Paul Rashidi</a>, Developer Programs Engineer</i></p>

<p>We've been working on a new toolchain for Android that’s designed to improve build times and simplify development by reducing dependencies on other tools. Today, we’re introducing you to Jack (Java Android Compiler Kit) and Jill (Jack Intermediate Library Linker), the two tools at the core of the new toolchain. </p>

<p>We are making an early, experimental version of Jack and Jill available for testing with non-production versions of your apps. This post describes how the toolchain works, how to configure it, and how to let us know of your feature requests and any bugs you find. <p>

<h3>So how does it work?</h3>

<p>When the new tool chain is enabled, Jill will translate any libraries you are referencing to a new Jack library file (.jack). This prepares them to be quickly merged with other .jack files. The Android Gradle plugin and Jack collect any .jack library files, along with your source code, and compiles them into a set of dex files. During the process, Jack also handles any requested code minification. The output is then assembled into an APK file as normal. We also include support for multiple dex files, if you have <a href="https://developer.android.com/tools/building/multidex.html?utm_campaign=jackjill-1214&utm_source=dac&utm_medium=blog">enabled that support</a>.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-ioHctWdyVco/VInupgI8H7I/AAAAAAAABGo/Vwz6-cMsXkc/s1600/JackBlogDiagram%2B(1).gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-ioHctWdyVco/VInupgI8H7I/AAAAAAAABGo/Vwz6-cMsXkc/s1600/JackBlogDiagram%2B(1).gif" /></a></div>

<h3>How do I use it?</h3>

<p>Jack and Jill are already available in the 21.1.1+ Build Tools for Android Studio. Complementary Gradle support is also currently available in the Android 1.0.0+ Gradle plugin. To get started, all you need to do is make sure you're using these versions of the tooling and then add a single line in your <code>build.gradle</code> file. Perform a build of your application to receive a newly built APK.</p>

<pre class="prettyprint">android {
    ...
    buildToolsRevision '21.1.1'
    defaultConfig {
      // Enable the experimental Jack build tools.
      useJack = true
    }
    ...
}</pre>

If you want to build your app with both toolchains, <a href="http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-flavors">Product Flavors</a> are a great way to do this. Your <code>build.gradle</code> file might look something like the snippet below.

<pre class="prettyprint">android {
    ...
    productFlavors {
        dev {
            ...
        }
        experimental {
            useJack = true
        }
        prod {
            ...
        }
    }
    ...
}</pre>

<h3>How do I configure my build?</h3>

<p>We are making the transition to Jack as smooth as possible by supporting minification (shrinking and/or obfuscation), as well as repackaging (i.e. similar to tools like jarjar), while using the same input files as you are used to. Minification is available in the Gradle plugin immediately and repackaging will follow. You should continue to use the "<code>minifyEnabled true</code>" directive to reduce the size of your app among all other optimizations you would normally use. There are more details on our reference page (linked below) regarding the level of support for each type of optimization. We encourage you to provide feedback there if your current configuration isn't supported. </p>

<h3>Give us your feedback</h3>

<p>We are attempting to make the toolchain as easy to test out as possible and we're looking for your help to fine tune it. Use the <a href="http://tools.android.com/tech-docs/jackandjill">reference page</a> to find known issues, file feature requests, and report bugs. Happy building!</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/TCdpDqJzjva" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/TCdpDqJzjva" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/TCdpDqJzjva" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/hello-world-meet-our-new-experimental-toolchain-jack-and-jill/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Watch Face API Now Available for Android Wear</title>
		<link>https://googledata.org/google-android/watch-face-api-now-available-for-android-wear/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=watch-face-api-now-available-for-android-wear</link>
		<comments>https://googledata.org/google-android/watch-face-api-now-available-for-android-wear/#comments</comments>
		<pubDate>Wed, 10 Dec 2014 18:04:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=d91bd61e4f031a084170e4472083c59f</guid>
		<description><![CDATA[<p><i>Posted by <a href="https://plus.google.com/+WaynePiekarski">Wayne Piekarski</a>, Developer Advocate</i></p>

<p>We&#8217;re pleased to announce that the official Android Wear <a href="http://developer.android.com/training/wearables/watch-faces/index.html?utm_campaign=watchface-1214&#38;utm_source=dac&#38;utm_medium=blog">Watch Face API</a> is now available for developers. <a href="http://googleblog.blogspot.com/2014/12/android-dress-code-wear-what-you-want.html">Watch faces</a> give users even more ways to express their personal style, while creating an opportunity for developers to customize the most prominent UI feature of the watches. Watch faces have been the most requested feature from users and developers alike, and we can&#8217;t wait to see what you build for them.</p>


<!--[Interactive video]  --> 
<p><i>An Introduction to Watch Faces for Android Wear by <a href="http://www.google.com/+TimothyJordan">Timothy Jordan</a>
</i></p>
<h3>Design and development</h3>

<p>To get started, first learn about <a href="http://developer.android.com/design/wear/watchfaces.html?utm_campaign=watchface-1214&#38;utm_source=dac&#38;utm_medium=blog">Designing Watch Faces</a>, and then check out the <a href="http://developer.android.com/training/wearables/watch-faces/index.html?utm_campaign=watchface-1214&#38;utm_source=dac&#38;utm_medium=blog">Creating Watch Faces</a> training class. The <a href="http://developer.android.com/samples/WatchFace?utm_campaign=watchface-1214&#38;utm_source=dac&#38;utm_medium=blog">WatchFace Sample</a> available online and in the <a href="http://android-developers.blogspot.com/2014/12/android-studio-10.html">Android Studio</a> samples manager also provides a number of different examples to help you jump right in. For a quick overview, you can also watch the <a href="https://www.youtube.com/watch?v=AK38PJZmIW8">Watch Faces for Android Wear</a> DevByte video above.</p>

<p>Watch faces are services that run from your wearable app, so you can provide one or multiple watch faces with a single app install. You can also choose to have configuration activities on the phone or watch, for example to let a user change between 12 and 24-hour time, or to change the watch face&#8217;s background. You can use OpenGL to provide smooth graphics, and a background service to pull in useful data like weather and calendar events. Watch faces can be analog, or digital, or display the time in some new way that hasn&#8217;t been invented yet&#8211;&#8211;it&#8217;s up to you.</p>

<h3>Updates to existing devices</h3>
<p>Over the next week, the latest release of Android Wear, based on Android 5.0 and implementing API 21, will roll out to users. All Android Wear devices will be updated to Android 5.0 via an over-the air (OTA) update. The update allows users to manage and configure watch faces in the <a href="https://play.google.com/store/apps/details?id=com.google.android.wearable.app&#38;hl=en">Android Wear app</a> on their phone, and install <a href="https://play.google.com/store/apps/collection/promotion_3000f68_wear_watch_faces">watch faces from Google Play</a>. Any handheld device running Android 4.3 or later will continue to work with all Android Wear devices.</p>

<h3>Upgrade your watch faces</h3>
<p>Developers are incredibly resourceful and we&#8217;re impressed with the watch faces you were able to create without any documentation at all. If you&#8217;ve already built a watch face for Android Wear using an unofficial approach, you should migrate your apps to the official API. The official API ensures a consistent user experience across the platform, while giving you additional information and controls, such as letting you know when the watch enters ambient mode, allowing you to adjust the position of system UI elements, and more. Using the new API is also necessary for your app to be featured in the <a href="https://play.google.com/store/apps/collection/promotion_3000f68_wear_watch_faces">Watch Faces collection</a> on Google Play.</p>

<h3>Deployment of watch faces to Google Play</h3>
<p>We recommend you update your apps on Google Play as soon as the Android Wear 5.0 API 21 OTA rollout is complete, which we&#8217;ll announce on the <a href="http://g.co/androidweardev">Android Wear Developers Google+ community</a>. It&#8217;s important to wait until the OTA rollout is complete because a Watch Face requiring API 21 will not be visible on a watch running API 20. Once your user gets the OTA, then the watch face will become visible. If you want to immediately launch your updates during the OTA rollout, make sure you set minSdkVersion to 20 in your wearable app, otherwise the app will fail to install for pre-OTA users. Once the rollout is complete, please transition your existing watch faces to the new API by January 31, 2015, at which point we plan to remove support for watch faces that don't use the official API.</p>

<h3>Android Wear apps on Google Play</h3>
<p>Starting today, you can submit any of your apps for designation as Android Wear apps on Google Play by following the <a href="http://developer.android.com/distribute/googleplay/wear.html?utm_campaign=watchface-1214&#38;utm_source=dac&#38;utm_medium=blog">Distributing to Android Wear</a> guidelines. If your apps follow the criteria in the <a href="http://developer.android.com/distribute/essentials/quality/wear.html?utm_campaign=watchface-1214&#38;utm_source=dac&#38;utm_medium=blog">Wear App Quality</a> checklist and are accepted as Wear apps on Play, it will be easier for Android Wear users to discover them. To opt-in for Android Wear review, visit the Pricing &#38; Distribution section of the <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a>.</p>

<p>In the few short months since we&#8217;ve launched Android Wear, developers have already written thousands of apps, taking advantage of custom notifications, voice actions, and fully native Android capabilities. Thanks to you, users have infinite ways to personalize their watches, choosing from six devices, a range of watch bands, and thousands of apps. With support for custom watch faces launching today, users will have even more choices in the future. These choices are at the heart of a rich Android Wear ecosystem and as we continue to open up core features of the platform to developers, we can&#8217;t wait to see what you build next.</p>

<div><a href="http://4.bp.blogspot.com/-1uNeb0xiWoo/VIiEwIeSxwI/AAAAAAAABFM/SDN_jyjtuKQ/s1600/Hero_Dev_Blog_3840x2160.jpg"><img border="0" src="http://4.bp.blogspot.com/-1uNeb0xiWoo/VIiEwIeSxwI/AAAAAAAABFM/SDN_jyjtuKQ/s640/Hero_Dev_Blog_3840x2160.jpg"></a>
</div>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/H7YgQPxxSjU"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/H7YgQPxxSjU"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/H7YgQPxxSjU"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by <a href="https://plus.google.com/+WaynePiekarski">Wayne Piekarski</a>, Developer Advocate</i></p>

<p>We’re pleased to announce that the official Android Wear <a href="http://developer.android.com/training/wearables/watch-faces/index.html?utm_campaign=watchface-1214&utm_source=dac&utm_medium=blog">Watch Face API</a> is now available for developers. <a href="http://googleblog.blogspot.com/2014/12/android-dress-code-wear-what-you-want.html">Watch faces</a> give users even more ways to express their personal style, while creating an opportunity for developers to customize the most prominent UI feature of the watches. Watch faces have been the most requested feature from users and developers alike, and we can’t wait to see what you build for them.</p>


<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/AK38PJZmIW8" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 70px;" width="560"></iframe> 
<p style="text-align:center;font-size: 13px;margin-top:0;"><i>An Introduction to Watch Faces for Android Wear by <a href="http://www.google.com/+TimothyJordan">Timothy Jordan</a>
</i></p>
<h3>Design and development</h3>

<p>To get started, first learn about <a href="http://developer.android.com/design/wear/watchfaces.html?utm_campaign=watchface-1214&utm_source=dac&utm_medium=blog">Designing Watch Faces</a>, and then check out the <a href="http://developer.android.com/training/wearables/watch-faces/index.html?utm_campaign=watchface-1214&utm_source=dac&utm_medium=blog">Creating Watch Faces</a> training class. The <a href="http://developer.android.com/samples/WatchFace?utm_campaign=watchface-1214&utm_source=dac&utm_medium=blog">WatchFace Sample</a> available online and in the <a href="http://android-developers.blogspot.com/2014/12/android-studio-10.html">Android Studio</a> samples manager also provides a number of different examples to help you jump right in. For a quick overview, you can also watch the <a href="https://www.youtube.com/watch?v=AK38PJZmIW8">Watch Faces for Android Wear</a> DevByte video above.</p>

<p>Watch faces are services that run from your wearable app, so you can provide one or multiple watch faces with a single app install. You can also choose to have configuration activities on the phone or watch, for example to let a user change between 12 and 24-hour time, or to change the watch face’s background. You can use OpenGL to provide smooth graphics, and a background service to pull in useful data like weather and calendar events. Watch faces can be analog, or digital, or display the time in some new way that hasn’t been invented yet––it’s up to you.</p>

<h3>Updates to existing devices</h3>
<p>Over the next week, the latest release of Android Wear, based on Android 5.0 and implementing API 21, will roll out to users. All Android Wear devices will be updated to Android 5.0 via an over-the air (OTA) update. The update allows users to manage and configure watch faces in the <a href="https://play.google.com/store/apps/details?id=com.google.android.wearable.app&hl=en">Android Wear app</a> on their phone, and install <a href="https://play.google.com/store/apps/collection/promotion_3000f68_wear_watch_faces">watch faces from Google Play</a>. Any handheld device running Android 4.3 or later will continue to work with all Android Wear devices.</p>

<h3>Upgrade your watch faces</h3>
<p>Developers are incredibly resourceful and we’re impressed with the watch faces you were able to create without any documentation at all. If you’ve already built a watch face for Android Wear using an unofficial approach, you should migrate your apps to the official API. The official API ensures a consistent user experience across the platform, while giving you additional information and controls, such as letting you know when the watch enters ambient mode, allowing you to adjust the position of system UI elements, and more. Using the new API is also necessary for your app to be featured in the <a href="https://play.google.com/store/apps/collection/promotion_3000f68_wear_watch_faces">Watch Faces collection</a> on Google Play.</p>

<h3>Deployment of watch faces to Google Play</h3>
<p>We recommend you update your apps on Google Play as soon as the Android Wear 5.0 API 21 OTA rollout is complete, which we’ll announce on the <a href="http://g.co/androidweardev">Android Wear Developers Google+ community</a>. It’s important to wait until the OTA rollout is complete because a Watch Face requiring API 21 will not be visible on a watch running API 20. Once your user gets the OTA, then the watch face will become visible. If you want to immediately launch your updates during the OTA rollout, make sure you set minSdkVersion to 20 in your wearable app, otherwise the app will fail to install for pre-OTA users. Once the rollout is complete, please transition your existing watch faces to the new API by January 31, 2015, at which point we plan to remove support for watch faces that don't use the official API.</p>

<h3>Android Wear apps on Google Play</h3>
<p>Starting today, you can submit any of your apps for designation as Android Wear apps on Google Play by following the <a href="http://developer.android.com/distribute/googleplay/wear.html?utm_campaign=watchface-1214&utm_source=dac&utm_medium=blog">Distributing to Android Wear</a> guidelines. If your apps follow the criteria in the <a href="http://developer.android.com/distribute/essentials/quality/wear.html?utm_campaign=watchface-1214&utm_source=dac&utm_medium=blog">Wear App Quality</a> checklist and are accepted as Wear apps on Play, it will be easier for Android Wear users to discover them. To opt-in for Android Wear review, visit the Pricing & Distribution section of the <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a>.</p>

<p>In the few short months since we’ve launched Android Wear, developers have already written thousands of apps, taking advantage of custom notifications, voice actions, and fully native Android capabilities. Thanks to you, users have infinite ways to personalize their watches, choosing from six devices, a range of watch bands, and thousands of apps. With support for custom watch faces launching today, users will have even more choices in the future. These choices are at the heart of a rich Android Wear ecosystem and as we continue to open up core features of the platform to developers, we can’t wait to see what you build next.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-1uNeb0xiWoo/VIiEwIeSxwI/AAAAAAAABFM/SDN_jyjtuKQ/s1600/Hero_Dev_Blog_3840x2160.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-1uNeb0xiWoo/VIiEwIeSxwI/AAAAAAAABFM/SDN_jyjtuKQ/s640/Hero_Dev_Blog_3840x2160.jpg" /></a>
</div>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/H7YgQPxxSjU" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/H7YgQPxxSjU" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/H7YgQPxxSjU" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/watch-face-api-now-available-for-android-wear/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Google Play services and DEX method limits</title>
		<link>https://googledata.org/google-android/google-play-services-and-dex-method-limits/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=google-play-services-and-dex-method-limits</link>
		<comments>https://googledata.org/google-android/google-play-services-and-dex-method-limits/#comments</comments>
		<pubDate>Tue, 09 Dec 2014 17:40:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=50fbc47535cb545f055005dfd5ac7a81</guid>
		<description><![CDATA[<p><i>Posted by <a href="https://plus.google.com/b/108967384991768947849/+LaurenceMoroney/posts">Laurence Moroney</a>, Developer Advocate</i></p>

<p>A constraint for some Android apps is the total number of methods that the underlying compiled .dex file can support. It&#8217;s limited by 16 bits, or 65,536 values. </p>

<p>When you include third-party libraries in your application, you will have <i>all</i> of their methods in your .dex file. Larger APIs, such as those included in Google Play services, will then begin eating into the limit very quickly.</p>

<p>You can learn more about this, and ways that you can work around it with the <a href="http://android-developers.blogspot.com/2014/12/android-studio-10.html">Android Studio 1.0</a> build system <a href="http://developer.android.com/tools/building/multidex.html?utm_campaign=dex-1214&#38;utm_source=dac&#38;utm_medium=blog">here</a>.</p>

<p>Additionally, with Google Play services version 6.5 or later, it is possible for you to include Google Play services in your application using a number of smaller client libraries, so that only Google Play services APIs you use will get compiled into your .dex file, and therefore their methods won't count towards your method limit.</p>

<p>Prior to version 6.5, you would typically have a line like this in your build.gradle file:</p>

<pre>compile 'com.google.android.gms:play-services:6.5.87'</pre>

<p>Starting with version 6.5, of Google Play services, you&#8217;ll be able to pick from a number of individual APIs, and you can see which ones have their own include files in the documentation. For example, if all you want to use is Maps, you would instead have:</p>

<pre>compile 'com.google.android.gms:play-services-maps:6.5.87'</pre>

<p>Note that this will transitively include the &#8216;base&#8217; libraries, which are used across all APIs. You can include them independently with the following line:</p>

<pre>compile 'com.google.android.gms:play-services-base:6.5.87'</pre>

<p>The complete list of API names is below. More details can be found on the <a href="https://developer.android.com/google/play-services/setup.html?utm_campaign=dex-1214&#38;utm_source=dac&#38;utm_medium=blog">Android Developer site</a>.</p>

<code>com.google.android.gms:play-services-base:6.5.87<br />
com.google.android.gms:play-services-ads:6.5.87<br />
com.google.android.gms:play-services-appindexing:6.5.87<br />
com.google.android.gms:play-services-maps:6.5.87<br />
com.google.android.gms:play-services-location:6.5.87<br />
com.google.android.gms:play-services-fitness:6.5.87<br />
com.google.android.gms:play-services-panorama:6.5.87<br />
com.google.android.gms:play-services-drive:6.5.87<br />
com.google.android.gms:play-services-games:6.5.87<br />
com.google.android.gms:play-services-wallet:6.5.87<br />
com.google.android.gms:play-services-identity:6.5.87<br />
com.google.android.gms:play-services-cast:6.5.87<br />
com.google.android.gms:play-services-plus:6.5.87<br />
com.google.android.gms:play-services-appstate:6.5.87<br />
com.google.android.gms:play-services-wearable:6.5.87<br />
com.google.android.gms:play-services-all-wear:6.5.87<br /></code>

<p><b>Note</b>: At the time of writing, the correct version to use is 6.5.87. As this is a very granular number, it will get updated quite quickly, so be sure the check the latest version when you are coding. Often people will use a &#8216;+&#8217; to denote versions, such as 6.5.+ to use the latest 6.5 build. However, it&#8217;s typically discouraged to use a &#8216;+&#8217; as it can lead to inconsistencies.</p>

<p>Also, there are some changes to the names of the libraries that will impact you if you build applications for Android Wear. Previously you may have used <code>play-services-wearable</code> to include the entire Google Play services library for your wearable, and if you want to continue doing so, you should now use <code>play-services-all-wear</code> instead. You can continue to use <code>play-services-wearable</code> which will instead give you just the Wearable Data Layer API (see <a href="https://developer.android.com/training/wearables/data-layer/index.html?utm_campaign=dex-1214&#38;utm_source=dac&#38;utm_medium=blog">here</a>). Should you do this, and you want to continue working with other Google Play services features, such as the Location APIs on your wearable, you would need to add <code>play-services-location</code>.</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/ET57uavriT9"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/ET57uavriT9"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/ET57uavriT9"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by <a href="https://plus.google.com/b/108967384991768947849/+LaurenceMoroney/posts">Laurence Moroney</a>, Developer Advocate</i></p>

<p>A constraint for some Android apps is the total number of methods that the underlying compiled .dex file can support. It’s limited by 16 bits, or 65,536 values. </p>

<p>When you include third-party libraries in your application, you will have <i>all</i> of their methods in your .dex file. Larger APIs, such as those included in Google Play services, will then begin eating into the limit very quickly.</p>

<p>You can learn more about this, and ways that you can work around it with the <a href="http://android-developers.blogspot.com/2014/12/android-studio-10.html">Android Studio 1.0</a> build system <a href="http://developer.android.com/tools/building/multidex.html?utm_campaign=dex-1214&utm_source=dac&utm_medium=blog">here</a>.</p>

<p>Additionally, with Google Play services version 6.5 or later, it is possible for you to include Google Play services in your application using a number of smaller client libraries, so that only Google Play services APIs you use will get compiled into your .dex file, and therefore their methods won't count towards your method limit.</p>

<p>Prior to version 6.5, you would typically have a line like this in your build.gradle file:</p>

<pre class="prettyprint">compile 'com.google.android.gms:play-services:6.5.87'</pre>

<p>Starting with version 6.5, of Google Play services, you’ll be able to pick from a number of individual APIs, and you can see which ones have their own include files in the documentation. For example, if all you want to use is Maps, you would instead have:</p>

<pre class="prettyprint">compile 'com.google.android.gms:play-services-maps:6.5.87'</pre>

<p>Note that this will transitively include the ‘base’ libraries, which are used across all APIs. You can include them independently with the following line:</p>

<pre class="prettyprint">compile 'com.google.android.gms:play-services-base:6.5.87'</pre>

<p>The complete list of API names is below. More details can be found on the <a href="https://developer.android.com/google/play-services/setup.html?utm_campaign=dex-1214&utm_source=dac&utm_medium=blog">Android Developer site</a>.</p>

<code>com.google.android.gms:play-services-base:6.5.87<br/>
com.google.android.gms:play-services-ads:6.5.87<br/>
com.google.android.gms:play-services-appindexing:6.5.87<br/>
com.google.android.gms:play-services-maps:6.5.87<br/>
com.google.android.gms:play-services-location:6.5.87<br/>
com.google.android.gms:play-services-fitness:6.5.87<br/>
com.google.android.gms:play-services-panorama:6.5.87<br/>
com.google.android.gms:play-services-drive:6.5.87<br/>
com.google.android.gms:play-services-games:6.5.87<br/>
com.google.android.gms:play-services-wallet:6.5.87<br/>
com.google.android.gms:play-services-identity:6.5.87<br/>
com.google.android.gms:play-services-cast:6.5.87<br/>
com.google.android.gms:play-services-plus:6.5.87<br/>
com.google.android.gms:play-services-appstate:6.5.87<br/>
com.google.android.gms:play-services-wearable:6.5.87<br/>
com.google.android.gms:play-services-all-wear:6.5.87<br/></code>

<p><b>Note</b>: At the time of writing, the correct version to use is 6.5.87. As this is a very granular number, it will get updated quite quickly, so be sure the check the latest version when you are coding. Often people will use a ‘+’ to denote versions, such as 6.5.+ to use the latest 6.5 build. However, it’s typically discouraged to use a ‘+’ as it can lead to inconsistencies.</p>

<p>Also, there are some changes to the names of the libraries that will impact you if you build applications for Android Wear. Previously you may have used <code>play-services-wearable</code> to include the entire Google Play services library for your wearable, and if you want to continue doing so, you should now use <code>play-services-all-wear</code> instead. You can continue to use <code>play-services-wearable</code> which will instead give you just the Wearable Data Layer API (see <a href="https://developer.android.com/training/wearables/data-layer/index.html?utm_campaign=dex-1214&utm_source=dac&utm_medium=blog">here</a>). Should you do this, and you want to continue working with other Google Play services features, such as the Location APIs on your wearable, you would need to add <code>play-services-location</code>.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/ET57uavriT9" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/ET57uavriT9" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/ET57uavriT9" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/google-play-services-and-dex-method-limits/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Over goes big and goes home with Android</title>
		<link>https://googledata.org/google-android/over-goes-big-and-goes-home-with-android/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=over-goes-big-and-goes-home-with-android</link>
		<comments>https://googledata.org/google-android/over-goes-big-and-goes-home-with-android/#comments</comments>
		<pubDate>Tue, 09 Dec 2014 15:13:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=7e0a330c935b6d8a04605d9af94fed3e</guid>
		<description><![CDATA[<p><i>Posted by Leticia Lago, Google Play team</i></p>

<p><a href="https://play.google.com/store/apps/details?id=com.overllc.over&#38;hl=en">Over</a> has taken a simple idea, adding text and artwork to photos, and turned it into a creative tool that enables anyone to easily and intuitively add a unique twist to any image.</p>

<p>The Over team recently decided to bring their successful app to Android. &#8220;We love unlocking human creativity and Android offers a massive opportunity for doing just that. It was a no-brainer,&#8221; says Aaron Marshall, Founder, CEO, and Designer at Over. &#8220;Moving to Cape Town was eye-opening in many ways. It made me experience first-hand how many people outside the US use Android.  We see users in emerging markets using mobile devices as their primary device, and believe there is a lot of opportunity in providing them with creative tools for mobile.&#8221; </p>

<p>The entire team was new to the platform, and were quickly impressed by the ease of development and the power of the distribution tools in the Developer Console on Google Play.</p>

<p>In this video, the Over team talk about their experiences learning and working with Android. </p>

<!--[Interactive video]  --> 

<p>Over engineer Johan Nell, who arrived with Java experience but hadn&#8217;t worked with Android, says that he and fellow engineer Herko Lategan &#8220;were able to get a working prototype out in the first week.&#8221;</p>

<p>Android plays a big part in Over living up to its mantra of &#8220;go big, and go home&#8221;. As Aaron explains, &#8220;we don&#8217;t think you should be sacrificing your family to create wealth, or add value, or change the world. Being able to experiment and iterate quickly is crucial in helping us achieve this goal.&#8221;</p>
  
<p>To learn about starting a successful business with Android, be sure to check out these resources: </p>

<ul><li><a href="https://developer.android.com/distribute/googleplay/guide.html?utm_campaign=over-1214&#38;utm_source=dac&#38;utm_medium=blog">The Secrets to App Success on Google Play</a> [ebook] &#8212; a detailed playbook on the best practices and tools you can use to maximize the reach, retention, and revenue of your new app.</li>
<li><a href="http://developer.android.com/training/index.html?utm_campaign=over-1214&#38;utm_source=dac&#38;utm_medium=blog">Getting Started</a> [training] &#8212; check out this comprehensive learning resource that takes you from first principles through to the most powerful Android APIs.</li></ul><div><div><a href="https://plus.google.com/108967384991768947849/posts/JTDKa5czGTF"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/JTDKa5czGTF"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/JTDKa5czGTF"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Leticia Lago, Google Play team</i></p>

<p><a href="https://play.google.com/store/apps/details?id=com.overllc.over&hl=en">Over</a> has taken a simple idea, adding text and artwork to photos, and turned it into a creative tool that enables anyone to easily and intuitively add a unique twist to any image.</p>

<p>The Over team recently decided to bring their successful app to Android. “We love unlocking human creativity and Android offers a massive opportunity for doing just that. It was a no-brainer,” says Aaron Marshall, Founder, CEO, and Designer at Over. “Moving to Cape Town was eye-opening in many ways. It made me experience first-hand how many people outside the US use Android.  We see users in emerging markets using mobile devices as their primary device, and believe there is a lot of opportunity in providing them with creative tools for mobile.” </p>

<p>The entire team was new to the platform, and were quickly impressed by the ease of development and the power of the distribution tools in the Developer Console on Google Play.</p>

<p>In this video, the Over team talk about their experiences learning and working with Android. </p>

<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/watch?v=YSo9t3IDsDw&list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c&index=14" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:2em; margin-left: 70px;" width="560"></iframe> 

<p>Over engineer Johan Nell, who arrived with Java experience but hadn’t worked with Android, says that he and fellow engineer Herko Lategan “were able to get a working prototype out in the first week.”</p>

<p>Android plays a big part in Over living up to its mantra of “go big, and go home”. As Aaron explains, “we don’t think you should be sacrificing your family to create wealth, or add value, or change the world. Being able to experiment and iterate quickly is crucial in helping us achieve this goal.”</p>
  
<p>To learn about starting a successful business with Android, be sure to check out these resources: </p>

<ul><li><a href="https://developer.android.com/distribute/googleplay/guide.html?utm_campaign=over-1214&utm_source=dac&utm_medium=blog">The Secrets to App Success on Google Play</a> [ebook] — a detailed playbook on the best practices and tools you can use to maximize the reach, retention, and revenue of your new app.</li>
<li><a href="http://developer.android.com/training/index.html?utm_campaign=over-1214&utm_source=dac&utm_medium=blog">Getting Started</a> [training] — check out this comprehensive learning resource that takes you from first principles through to the most powerful Android APIs.</li></ul>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/JTDKa5czGTF" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/JTDKa5czGTF" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/JTDKa5czGTF" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/over-goes-big-and-goes-home-with-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android Studio 1.0</title>
		<link>https://googledata.org/google-android/android-studio-1-0/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=android-studio-1-0</link>
		<comments>https://googledata.org/google-android/android-studio-1-0/#comments</comments>
		<pubDate>Mon, 08 Dec 2014 19:43:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=fa9a51d50d7b45756eff1ea991d9fa3f</guid>
		<description><![CDATA[<div>
<img border="0" src="http://1.bp.blogspot.com/-UGrENgc-ec8/VIJsFPD19aI/AAAAAAAABBk/ICFczO1O6mU/s1000/studio-logo.png"></div>

<p><em>By <a href="https://www.google.com/+JamalEason">Jamal Eason</a>, Product Manager, Android</em></p>



<p>Today we are excited to introduce <strong>Android Studio 1.0</strong>. Android Studio is the official Integrated Development Environment (IDE) from the Android team. It is built on the popular IntelliJ IDEA (Community Edition) Java IDE.  </p>

<p>We first released a preview of Android Studio at I/O last year.  We value the on-going feedback from you, thanks!  We are making Android Studio 1.0 available for download as a stable release on the <a href="http://developer.android.com/sdk/index.html">Android Developer site</a>.</p>


<h3>Download Android Studio</h3>

<p>If you are currently developing for Android or thinking about getting started, now is the time to <a href="http://developer.android.com/sdk/index.html">download Android Studio 1.0</a> (or upgrade if you are using an earlier version). Similar to the Chrome release channels, Android Studio will continue to receive updates on four different release channels: Stable, Beta, Dev, and Canary.  Canary builds are at the bleeding edge of development, while the stable release is fully tested. With this range of release channels you can choose how quickly you want to get the latest features for Android Studio.</p>


<h3>Android Studio features</h3>

<p>With the release of Android Studio, you have access to a new set of features to enable your development workflow. Some of the key features of Android Studio are listed below, but make sure to check out the <a href="http://developer.android.com/tools/studio/index.html">Android Studio page</a> for a full feature overview.</p>

<h4>Startup experience</h4>



<ul><li><i>First-run setup wizard</i> &#8212; The getting started experience now installs the right Android SDK, sets up your development environment settings, and creates an optimized emulator for testing your app. Plus, we include a set of code templates to help you get started. </li>

<div><a href="http://2.bp.blogspot.com/-3dthvcHHOlo/VIKNNX0wLWI/AAAAAAAABD0/VX0vlOmkpL8/s1600/first%2Brun%2Bwizard.png"><img border="0" src="http://2.bp.blogspot.com/-3dthvcHHOlo/VIKNNX0wLWI/AAAAAAAABD0/VX0vlOmkpL8/s800/first%2Brun%2Bwizard.png"></a>
</div>


<li><i>Sample Importing &#38; templates</i>  &#8212;  Android Studio includes wizards that enable you to start with new project templates or import Google code samples.</li>



<div><a href="http://2.bp.blogspot.com/-2pfCClH_Vi0/VIKNNErRV3I/AAAAAAAABDs/8BQT1lQPUIM/s1600/Sample%2BWizard.png"><img border="0" src="http://2.bp.blogspot.com/-2pfCClH_Vi0/VIKNNErRV3I/AAAAAAAABDs/8BQT1lQPUIM/s800/Sample%2BWizard.png"></a>
</div>
</ul><h4>Code and resource editing, user interface design</h4>



<ul><li><i>Code Editing</i> &#8212; Android Studio takes advantage of all the intelligent code editing capabilities of IntelliJ IDEA such as advanced code completion, refactoring, and code analysis. </li>


<div><a href="http://2.bp.blogspot.com/-DHQYEdfFSE0/VIKNORx1X5I/AAAAAAAABEM/r7afXHZLbxs/s1600/shadow_studio-hero-code_2x.png"><img border="0" src="http://2.bp.blogspot.com/-DHQYEdfFSE0/VIKNORx1X5I/AAAAAAAABEM/r7afXHZLbxs/s800/shadow_studio-hero-code_2x.png"></a></div>


<li><i>Internationalization string editing</i> &#8212; Manage string translations of your app in Android Studio. </li>

<div><a href="http://4.bp.blogspot.com/-ok0a_1dW9PY/VIKNOmy8-TI/AAAAAAAABEU/LTSy6ih6VY4/s1600/translations.png"><img border="0" src="http://4.bp.blogspot.com/-ok0a_1dW9PY/VIKNOmy8-TI/AAAAAAAABEU/LTSy6ih6VY4/s800/translations.png"></a></div>

<li><i>User interface design</i> &#8212; Edit and preview your Android Layouts across multiple screen sizes, languages, and even API versions. </li>

<div><a href="http://4.bp.blogspot.com/-DW220tDpMcM/VIKNNGEuDNI/AAAAAAAABD4/Afto70CzVOk/s1600/Multi-Screen%2BPreview.png"><img border="0" src="http://4.bp.blogspot.com/-DW220tDpMcM/VIKNNGEuDNI/AAAAAAAABD4/Afto70CzVOk/s800/Multi-Screen%2BPreview.png"></a></div>
</ul><h4>Performance analysis</h4>

<ul><li><i>Memory monitor</i> &#8212;  View the memory usage of your app over time to help find ways to improve the performance of your app. </li>


<div><a href="http://3.bp.blogspot.com/-rd40vumDg_Y/VIKNOMQHqqI/AAAAAAAABEE/8yXCDDEIsTk/s1600/monitor.png">
<img border="0" src="http://3.bp.blogspot.com/-rd40vumDg_Y/VIKNOMQHqqI/AAAAAAAABEE/8yXCDDEIsTk/s800/monitor.png"></a></div>
</ul><h4>Unified build system</h4>

<ul><li>Android Studio uses a <a href="http://developer.android.com/tools/building/plugin-for-gradle.html">Gradle-based build system</a> that provides a lot of flexibility and extensibility, as well as the ability to build from within and outside of the IDE. This unified build system decouples the build from Studio itself, meaning that Studio updates never impact the output of your build.</li>

<li>Some of the key features of the build systems are: <a href="http://developer.android.com/tools/building/configuring-gradle.html">build variant support</a> to better handle different build types (debug vs. release), or different versions of the same app (paid vs. free), multi-apks handling through splits, multi-dex support, and dependency management for 3rd party libraries.</li>
</ul><h4>Instant access to Google Cloud Services</h4>

<ul><li>Android Studio even enables an easy way to add Google Cloud Backends &#38; Endpoints to your app, as well as Google Cloud Messaging (<a href="https://cloud.google.com/mobile/">find out more</a>).</li>

<div><a href="http://1.bp.blogspot.com/-3J2n6iqIOPU/VIKNNGVCIpI/AAAAAAAABDw/MU9a0yr4cVc/s1600/cloud%2Bbackend.png">
<img border="0" src="http://1.bp.blogspot.com/-3J2n6iqIOPU/VIKNNGVCIpI/AAAAAAAABDw/MU9a0yr4cVc/s800/cloud%2Bbackend.png"></a></div>
</ul><h3>Time to migrate &#38; update</h3>

<p>If you are an Eclipse user, check out our <a href="http://developer.android.com/sdk/installing/migrate.html">migration steps</a> or you can just import your projects right into Android Studio with the import wizard, shown below: </p>

<div><a href="http://2.bp.blogspot.com/-fsVCc0v-xfg/VIKNOHu32DI/AAAAAAAABEQ/YiHo11A0Skw/s1600/import_eclipse_step2.png">
<img border="0" src="http://2.bp.blogspot.com/-fsVCc0v-xfg/VIKNOHu32DI/AAAAAAAABEQ/YiHo11A0Skw/s800/import_eclipse_step2.png"></a>
<a href="http://1.bp.blogspot.com/-AyODqb-wrWI/VIKNNz93IeI/AAAAAAAABD8/E-eNqNUxWEw/s800/import_eclipse_step1.png">
<img border="0" src="http://1.bp.blogspot.com/-AyODqb-wrWI/VIKNNz93IeI/AAAAAAAABD8/E-eNqNUxWEw/s1600/import_eclipse_step1.png"></a></div>


<p>If you were using one of the early versions of Android Studio, you should also upgrade to version 1.0 since we have added a host of new features and have addressed many bugs. </p>

<p>We have also released version 1.0 of the Gradle plugin with a file format that is now stable. The communication between Android Studio and the Gradle plugin is now stable, so updating one will not require updating the other. Check the <a href="http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0">technical release notes</a> for additional tips for updating your previous Android Studio projects.</p>


<h3>Give us your feedback</h3>

<p>We are always seeking to bring you the best Android development experience. We already have plans to add features ranging from improved testing and better support for game development, but we want to know how you work and what capabilities you'd like to have for your Android development. </p>

<p>Please take a moment to <strong><a href="https://docs.google.com/a/google.com/forms/d/1mjsyfzv3HAnDY-_Kfj-3QJKdpuksyMFs9e73CRwmT6Q/viewform">complete a short survey</a></strong> (less than 5 minutes). Your responses will help shape the next set of features offered in Android Studio. </p>

<h3>Questions?</h3>

<p>We develop Android Studio and the corresponding tools in open source, so you can also file bugs via the public <a href="https://code.google.com/p/android/issues/entry?template=Android%20Studio%20bug">Android bug tracker</a> and we will do our best to address your issues or questions.  If you have specific questions or need help in your migration, feel free to connect with the Android developer tools team on our <a href="https://plus.google.com/communities/114791428968349268860">Google+ community page</a>.</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/FZoNKU9q51u"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/FZoNKU9q51u"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/FZoNKU9q51u"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<style>
h3 {
  font-size:20px;
  font-family:Roboto,sans-serif;
  font-weight:400;
  line-height:1.25em;
  margin-top:1.1em;
}
h4 {
  font-size:16px;
  font-family:Roboto,sans-serif;
  font-weight:900;
  line-height:1.25em;
  margin-top:1.3em;
}
ul.featurelist li {
margin-top:1.3em;
line-height:1.25em;
}

</style>
<div style="float:right;margin:0 0 2em 2em;padding:0;">
<img style="width:360px;" border="0" src="http://1.bp.blogspot.com/-UGrENgc-ec8/VIJsFPD19aI/AAAAAAAABBk/ICFczO1O6mU/s1000/studio-logo.png" />
</div>

<p><em>By <a href="https://www.google.com/+JamalEason">Jamal Eason</a>, Product Manager, Android</em></p>



<p>Today we are excited to introduce <strong>Android Studio 1.0</strong>. Android Studio is the official Integrated Development Environment (IDE) from the Android team. It is built on the popular IntelliJ IDEA (Community Edition) Java IDE.  </p>

<p>We first released a preview of Android Studio at I/O last year.  We value the on-going feedback from you, thanks!  We are making Android Studio 1.0 available for download as a stable release on the <a href="http://developer.android.com/sdk/index.html">Android Developer site</a>.</p>


<h3>Download Android Studio</h3>

<p>If you are currently developing for Android or thinking about getting started, now is the time to <a href="http://developer.android.com/sdk/index.html">download Android Studio 1.0</a> (or upgrade if you are using an earlier version). Similar to the Chrome release channels, Android Studio will continue to receive updates on four different release channels: Stable, Beta, Dev, and Canary.  Canary builds are at the bleeding edge of development, while the stable release is fully tested. With this range of release channels you can choose how quickly you want to get the latest features for Android Studio.</p>


<h3>Android Studio features</h3>

<p>With the release of Android Studio, you have access to a new set of features to enable your development workflow. Some of the key features of Android Studio are listed below, but make sure to check out the <a href="http://developer.android.com/tools/studio/index.html">Android Studio page</a> for a full feature overview.</p>

<h4>Startup experience</h4>



<ul class="featurelist">
<li style="margin-top:1.1em"><i>First-run setup wizard</i> &mdash; The getting started experience now installs the right Android SDK, sets up your development environment settings, and creates an optimized emulator for testing your app. Plus, we include a set of code templates to help you get started. </li>

<div style="text-align:center;width:80%;"><a href="http://2.bp.blogspot.com/-3dthvcHHOlo/VIKNNX0wLWI/AAAAAAAABD0/VX0vlOmkpL8/s1600/first%2Brun%2Bwizard.png"><img border="0" src="http://2.bp.blogspot.com/-3dthvcHHOlo/VIKNNX0wLWI/AAAAAAAABD0/VX0vlOmkpL8/s800/first%2Brun%2Bwizard.png" style="width:100%;margin-top:.8em;" /></a>
</div>


<li><i>Sample Importing &amp; templates</i>  &mdash;  Android Studio includes wizards that enable you to start with new project templates or import Google code samples.</li>



<div style="text-align:center;width:100%;"><a href="http://2.bp.blogspot.com/-2pfCClH_Vi0/VIKNNErRV3I/AAAAAAAABDs/8BQT1lQPUIM/s1600/Sample%2BWizard.png"><img border="0" src="http://2.bp.blogspot.com/-2pfCClH_Vi0/VIKNNErRV3I/AAAAAAAABDs/8BQT1lQPUIM/s800/Sample%2BWizard.png"  style="width:100%;margin-top:.8em;" /></a>
</div>
</ul>

<h4>Code and resource editing, user interface design</h4>



<ul class="featurelist">
<li><i>Code Editing</i> &mdash; Android Studio takes advantage of all the intelligent code editing capabilities of IntelliJ IDEA such as advanced code completion, refactoring, and code analysis. </li>


<div style="width:100%"><a href="http://2.bp.blogspot.com/-DHQYEdfFSE0/VIKNORx1X5I/AAAAAAAABEM/r7afXHZLbxs/s1600/shadow_studio-hero-code_2x.png"><img border="0" src="http://2.bp.blogspot.com/-DHQYEdfFSE0/VIKNORx1X5I/AAAAAAAABEM/r7afXHZLbxs/s800/shadow_studio-hero-code_2x.png" style="width:100%;margin-top:.8em;" /></a></div>


<li><i>Internationalization string editing</i> &mdash; Manage string translations of your app in Android Studio. </li>

<div style="width:100%"><a href="http://4.bp.blogspot.com/-ok0a_1dW9PY/VIKNOmy8-TI/AAAAAAAABEU/LTSy6ih6VY4/s1600/translations.png"><img border="0" src="http://4.bp.blogspot.com/-ok0a_1dW9PY/VIKNOmy8-TI/AAAAAAAABEU/LTSy6ih6VY4/s800/translations.png" style="width:100%;paddding-left:0;margin-top:.8em;" /></a></div>

<li><i>User interface design</i> &mdash; Edit and preview your Android Layouts across multiple screen sizes, languages, and even API versions. </li>

<div style="width:100%"><a href="http://4.bp.blogspot.com/-DW220tDpMcM/VIKNNGEuDNI/AAAAAAAABD4/Afto70CzVOk/s1600/Multi-Screen%2BPreview.png"><img border="0" src="http://4.bp.blogspot.com/-DW220tDpMcM/VIKNNGEuDNI/AAAAAAAABD4/Afto70CzVOk/s800/Multi-Screen%2BPreview.png" style="width:100%;margin-top:.8em;" /></a></div>
</ul>


<h4>Performance analysis</h4>

<ul class="featurelist">
<li><i>Memory monitor</i> &mdash;  View the memory usage of your app over time to help find ways to improve the performance of your app. </li>


<div style="width:100%"><a href="http://3.bp.blogspot.com/-rd40vumDg_Y/VIKNOMQHqqI/AAAAAAAABEE/8yXCDDEIsTk/s1600/monitor.png">
<img border="0" src="http://3.bp.blogspot.com/-rd40vumDg_Y/VIKNOMQHqqI/AAAAAAAABEE/8yXCDDEIsTk/s800/monitor.png" style="width:100%;margin-top:.8em;" /></a></div>
</ul>

<h4>Unified build system</h4>

<ul>
<li>Android Studio uses a <a href="http://developer.android.com/tools/building/plugin-for-gradle.html">Gradle-based build system</a> that provides a lot of flexibility and extensibility, as well as the ability to build from within and outside of the IDE. This unified build system decouples the build from Studio itself, meaning that Studio updates never impact the output of your build.</li>

<li>Some of the key features of the build systems are: <a href="http://developer.android.com/tools/building/configuring-gradle.html">build variant support</a> to better handle different build types (debug vs. release), or different versions of the same app (paid vs. free), multi-apks handling through splits, multi-dex support, and dependency management for 3rd party libraries.</li>
</ul>


<h4>Instant access to Google Cloud Services</h4>

<ul class="featurelist">
<li>Android Studio even enables an easy way to add Google Cloud Backends &amp; Endpoints to your app, as well as Google Cloud Messaging (<a href="https://cloud.google.com/mobile/">find out more</a>).</li>

<div style="width:100%"><a href="http://1.bp.blogspot.com/-3J2n6iqIOPU/VIKNNGVCIpI/AAAAAAAABDw/MU9a0yr4cVc/s1600/cloud%2Bbackend.png">
<img border="0" src="http://1.bp.blogspot.com/-3J2n6iqIOPU/VIKNNGVCIpI/AAAAAAAABDw/MU9a0yr4cVc/s800/cloud%2Bbackend.png" style="width:100%;margin-top:.8em" />
</a></div>
</ul>

<h3>Time to migrate &amp; update</h3>

<p>If you are an Eclipse user, check out our <a href="http://developer.android.com/sdk/installing/migrate.html">migration steps</a> or you can just import your projects right into Android Studio with the import wizard, shown below: </p>

<div style="width:100%;margin-top:1em;"><a href="http://2.bp.blogspot.com/-fsVCc0v-xfg/VIKNOHu32DI/AAAAAAAABEQ/YiHo11A0Skw/s1600/import_eclipse_step2.png">
<img border="0" src="http://2.bp.blogspot.com/-fsVCc0v-xfg/VIKNOHu32DI/AAAAAAAABEQ/YiHo11A0Skw/s800/import_eclipse_step2.png" style="width:48%;float:right;" /></a>
<a href="http://1.bp.blogspot.com/-AyODqb-wrWI/VIKNNz93IeI/AAAAAAAABD8/E-eNqNUxWEw/s800/import_eclipse_step1.png">
<img border="0" src="http://1.bp.blogspot.com/-AyODqb-wrWI/VIKNNz93IeI/AAAAAAAABD8/E-eNqNUxWEw/s1600/import_eclipse_step1.png" style="width:48%" />
</a></div>


<p>If you were using one of the early versions of Android Studio, you should also upgrade to version 1.0 since we have added a host of new features and have addressed many bugs. </p>

<p>We have also released version 1.0 of the Gradle plugin with a file format that is now stable. The communication between Android Studio and the Gradle plugin is now stable, so updating one will not require updating the other. Check the <a href="http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0">technical release notes</a> for additional tips for updating your previous Android Studio projects.</p>


<h3>Give us your feedback</h3>

<p>We are always seeking to bring you the best Android development experience. We already have plans to add features ranging from improved testing and better support for game development, but we want to know how you work and what capabilities you'd like to have for your Android development. </p>

<p>Please take a moment to <strong><a href="https://docs.google.com/a/google.com/forms/d/1mjsyfzv3HAnDY-_Kfj-3QJKdpuksyMFs9e73CRwmT6Q/viewform">complete a short survey</a></strong> (less than 5 minutes). Your responses will help shape the next set of features offered in Android Studio. </p>

<h3>Questions?</h3>

<p>We develop Android Studio and the corresponding tools in open source, so you can also file bugs via the public <a href="https://code.google.com/p/android/issues/entry?template=Android%20Studio%20bug">Android bug tracker</a> and we will do our best to address your issues or questions.  If you have specific questions or need help in your migration, feel free to connect with the Android developer tools team on our <a href="https://plus.google.com/communities/114791428968349268860">Google+ community page</a>.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/FZoNKU9q51u" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/FZoNKU9q51u" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/FZoNKU9q51u" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-studio-1-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Sky Force 2014 Reimagined for Android TV</title>
		<link>https://googledata.org/google-android/sky-force-2014-reimagined-for-android-tv/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sky-force-2014-reimagined-for-android-tv</link>
		<comments>https://googledata.org/google-android/sky-force-2014-reimagined-for-android-tv/#comments</comments>
		<pubDate>Mon, 24 Nov 2014 17:31:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=78e1df16f31fab951784371e76742636</guid>
		<description><![CDATA[<p><em>By <a href="https://plus.google.com/+JamilMoledina/">Jamil Moledina</a>, Games Strategic Partnerships Lead, Google Play</em></p>

<p>In the coming months, we&#8217;ll be seeing more media players, like the recently released Nexus Player, and TVs from partners with Android TV built-in hit the market. While there&#8217;s plenty of information <a href="http://developer.android.com/training/tv/games/index.html?utm_campaign=skyforce-1114&#38;utm_source=dac&#38;utm_medium=blog">available</a> about the technical aspects of adapting your app or game to Android TV, it&#8217;s also useful to consider design changes to optimize for the living room. That way you can provide lasting engagement for existing fans as well as new players discovering your game in this new setting. Here are three things one developer did, and how you can do them too.</p>

<p>Infinite Dreams is an indie studio out of Poland, co-founded by hardcore game fans Tomasz Kostrzewski and Marek Wyszy&#324;ski. With <a href="https://play.google.com/store/apps/details?id=pl.idreams.skyforcehdtv">Sky Force 2014 TV</a>, they brought their hit arcade style game to Android TV in a particularly clever way. The mobile-based version of Sky Force 2014 reimaged the 2004 classic by introducing stunning 3D visuals, and a free-to-download business model using in-app purchasing and competitive tournaments to increase engagement. In bringing Sky Force 2014 to TV, they found ways to factor in the play style, play sessions, and real-world social context of the living room, while paying homage to the title&#8217;s classic arcade heritage. As Wyszy&#324;ski puts it, &#8220;We decided not to take any shortcuts,  we wanted to make the game feel like it was designed to be played on TV.&#8221;</p>

<h3>Orientation</h3>

<p>For starters, Sky Force 2014 is played vertically on a smartphone or tablet, also known as portrait mode. In the game, you&#8217;re piloting a powerful fighter plane flying up the screen over a scrolling landscape, targeting waves of steampunk enemies coming down at you. You can see far enough up the screen, enabling you to plan your attacks and dodge enemies in advance.</p>

<div>
<img border="0" src="http://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http://4.bp.blogspot.com/-UfKToRmgusI/VHNjHdGLOHI/AAAAAAAABBM/SeFovit4m5s/s800/portrait04.jpg&#38;container=blogger&#38;gadget=a&#38;rewriteMime=image/*" height="320" width="240"><p><em>Vertical play on the mobile version</em></p>
</div>

<p>When bringing the game to TV, the quickest approach would have been to preserve that vertical orientation of the gameplay, by pillarboxing the field of play. </p>

<p>With Sky Force 2014, Infinite Dreams considered their options, and decided to scale the gameplay horizontally, in landscape mode, and recompose the view and combat elements. You&#8217;re still aiming up the screen, but the world below and the enemies coming at you are filling out a much wider field of view. They also completely reworked the UI to be comfortably operated with a gamepad or simple remote. From Wyszy&#324;ski&#8217;s point of view, &#8220;We really didn't want to just add support for remote and gamepad on top of what we had because we felt it would not work very well.&#8221; This approach gives the play experience a much more immersive field of view, putting you right there in the middle of the action. More information on designing for landscape orientation can be found <a href="http://developer.android.com/training/tv/games/index.html?utm_campaign=skyforce-1114&#38;utm_source=dac&#38;utm_medium=blog#display">here</a>.  </p>

<h3>Multiplayer</h3>

<p>Like all mobile game developers building for the TV, Infinite Dreams had to figure out how to adapt touch input onto a controller. Sky Force 2014 TV accepts both remote control and gamepad controller input. Both are well-tuned, and fighter handling is natural and responsive, but Infinite Dreams didn&#8217;t stop there. They took the opportunity to add cooperative multiplayer functionality to take advantage of the wider field of view from a TV. In this way, they not only scaled the visuals of the game to the living room, but also factored in that it&#8217;s a living room where people play together. Given the extended lateral patterns of advancing enemies, multiplayer strategies emerge, like &#8220;divide and conquer,&#8221; or &#8220;I&#160;got your back&#8221; for players of different skill levels. More information about adding controller support to your Android game can be found <a href="http://developer.android.com/training/game-controllers/compatibility.html?utm_campaign=skyforce-1114&#38;utm_source=dac&#38;utm_medium=blog">here</a>, handling controller actions <a href="http://developer.android.com/training/game-controllers/controller-input.html?utm_campaign=skyforce-1114&#38;utm_source=dac&#38;utm_medium=blog">here</a>, and mapping each player&#8217;s paired controllers <a href="http://developer.android.com/reference/android/view/InputDevice.html?utm_campaign=skyforce-1114&#38;utm_source=dac&#38;utm_medium=blog#getControllerNumber">here</a>.</p>

<div>
<img border="0" src="http://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http://1.bp.blogspot.com/-662cmVZYCGE/VHNjHWE94VI/AAAAAAAABBQ/2niSZGrhg8o/s800/multiplayer01.jpg&#38;container=blogger&#38;gadget=a&#38;rewriteMime=image/*" height="360" width="640"><p><em>Players battle side by side in the Android TV version</em></p>
</div>

<h3>Business Model</h3>

<p>Infinite Dreams is also experimenting with monetization and extending play session length. The TV version replaces several $1.99 in-app purchases and timers with a try-before-you-buy model which charges $4.99 after playing the first 2 levels for free. We&#8217;ve seen this single purchase model prove successful with other arcade action games like Mediocre&#8217;s <a href="https://play.google.com/store/apps/details?id=com.mediocre.smashhit"><i>Smash Hit</i></a> for smartphones and tablets, in which the purchase unlocks checkpoint saves. We&#8217;re also seeing strong arcade action games like Vector Unit&#8217;s <a href="https://play.google.com/store/apps/details?id=com.vectorunit.purple.googleplay"><i>Beach Buggy Racing</i></a> and Ubisoft&#8217;s <a href="https://play.google.com/store/apps/details?id=com.fgol.HungrySharkEvolution"><i>Hungry Shark Evolution</i></a> retain their existing in-app purchase models for Android TV. More information on setting up your games for these varied business models can be found <a href="http://developer.android.com/distribute/monetize/freemium.html?utm_campaign=skyforce-1114&#38;utm_source=dac&#38;utm_medium=blog">here</a>. We&#8217;ll be tracking and sharing these variations in business models on Android TV, including variations in premium, as the Android TV platform grows.</p><p></p>

<p>Reflecting on the work involved in making these changes, Wyszy&#324;ski says, &#8220;From a technical point of view the process was not really so difficult &#8211; it took us about a month of work to incorporate all of the features and we are very happy with the results.&#8221; Take a moment to check out Sky Force 2014 TV on a Nexus Player and the other games in the <a href="https://play.google.com/store/apps/collection/promotion_3000e24_androidtv_games_all">Android TV collection on Google Play</a>, most of which made no design changes and still play well on a TV. Consider your own starting point, take a look at the Android TV <a href="http://developer.android.com/training/tv/start/index.html?utm_campaign=skyforce-1114&#38;utm_source=dac&#38;utm_medium=blog">section</a><a> on our developer blog, and build the version of your game that would be most satisfying to players on the couch.</a></p><a>

</a><div><a></a><div><a></a><a href="https://plus.google.com/+AndroidDevelopers/posts/Bthey42xdfM"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/+AndroidDevelopers/posts/Bthey42xdfM"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/+AndroidDevelopers/posts/Bthey42xdfM"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>
<div></div>]]></description>
				<content:encoded><![CDATA[
<p><em>By <a href="https://plus.google.com/+JamilMoledina/">Jamil Moledina</a>, Games Strategic Partnerships Lead, Google Play</em></p>

<p>In the coming months, we’ll be seeing more media players, like the recently released Nexus Player, and TVs from partners with Android TV built-in hit the market. While there’s plenty of information <a href="http://developer.android.com/training/tv/games/index.html?utm_campaign=skyforce-1114&amp;utm_source=dac&amp;utm_medium=blog">available</a> about the technical aspects of adapting your app or game to Android TV, it’s also useful to consider design changes to optimize for the living room. That way you can provide lasting engagement for existing fans as well as new players discovering your game in this new setting. Here are three things one developer did, and how you can do them too.</p>

<p>Infinite Dreams is an indie studio out of Poland, co-founded by hardcore game fans Tomasz Kostrzewski and Marek Wyszyński. With <a href="https://play.google.com/store/apps/details?id=pl.idreams.skyforcehdtv">Sky Force 2014 TV</a>, they brought their hit arcade style game to Android TV in a particularly clever way. The mobile-based version of Sky Force 2014 reimaged the 2004 classic by introducing stunning 3D visuals, and a free-to-download business model using in-app purchasing and competitive tournaments to increase engagement. In bringing Sky Force 2014 to TV, they found ways to factor in the play style, play sessions, and real-world social context of the living room, while paying homage to the title’s classic arcade heritage. As Wyszyński puts it, “We decided not to take any shortcuts,  we wanted to make the game feel like it was designed to be played on TV.”</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.25em;">Orientation</h3>

<p>For starters, Sky Force 2014 is played vertically on a smartphone or tablet, also known as portrait mode. In the game, you’re piloting a powerful fighter plane flying up the screen over a scrolling landscape, targeting waves of steampunk enemies coming down at you. You can see far enough up the screen, enabling you to plan your attacks and dodge enemies in advance.</p>

<div style="display: block;text-align: center;margin-top:1em;">
<img border="0" src="http://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http://4.bp.blogspot.com/-UfKToRmgusI/VHNjHdGLOHI/AAAAAAAABBM/SeFovit4m5s/s800/portrait04.jpg&amp;container=blogger&amp;gadget=a&amp;rewriteMime=image/*" height="320" width="240">
<p style="text-align:center;font-size: 13px;margin-top:0;"><em>Vertical play on the mobile version</em></p>
</div>

<p>When bringing the game to TV, the quickest approach would have been to preserve that vertical orientation of the gameplay, by pillarboxing the field of play. </p>

<p>With Sky Force 2014, Infinite Dreams considered their options, and decided to scale the gameplay horizontally, in landscape mode, and recompose the view and combat elements. You’re still aiming up the screen, but the world below and the enemies coming at you are filling out a much wider field of view. They also completely reworked the UI to be comfortably operated with a gamepad or simple remote. From Wyszyński’s point of view, “We really didn't want to just add support for remote and gamepad on top of what we had because we felt it would not work very well.” This approach gives the play experience a much more immersive field of view, putting you right there in the middle of the action. More information on designing for landscape orientation can be found <a href="http://developer.android.com/training/tv/games/index.html?utm_campaign=skyforce-1114&amp;utm_source=dac&amp;utm_medium=blog#display">here</a>.  </p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.25em;">Multiplayer</h3>

<p>Like all mobile game developers building for the TV, Infinite Dreams had to figure out how to adapt touch input onto a controller. Sky Force 2014 TV accepts both remote control and gamepad controller input. Both are well-tuned, and fighter handling is natural and responsive, but Infinite Dreams didn’t stop there. They took the opportunity to add cooperative multiplayer functionality to take advantage of the wider field of view from a TV. In this way, they not only scaled the visuals of the game to the living room, but also factored in that it’s a living room where people play together. Given the extended lateral patterns of advancing enemies, multiplayer strategies emerge, like “divide and conquer,” or “I&nbsp;got your back” for players of different skill levels. More information about adding controller support to your Android game can be found <a href="http://developer.android.com/training/game-controllers/compatibility.html?utm_campaign=skyforce-1114&amp;utm_source=dac&amp;utm_medium=blog">here</a>, handling controller actions <a href="http://developer.android.com/training/game-controllers/controller-input.html?utm_campaign=skyforce-1114&amp;utm_source=dac&amp;utm_medium=blog">here</a>, and mapping each player’s paired controllers <a href="http://developer.android.com/reference/android/view/InputDevice.html?utm_campaign=skyforce-1114&amp;utm_source=dac&amp;utm_medium=blog#getControllerNumber">here</a>.</p>

<div style="display: block;text-align: center;margin-top:1.5em;">
<img itemprop="image" border="0" src="http://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http://1.bp.blogspot.com/-662cmVZYCGE/VHNjHWE94VI/AAAAAAAABBQ/2niSZGrhg8o/s800/multiplayer01.jpg&amp;container=blogger&amp;gadget=a&amp;rewriteMime=image/*" height="360" width="640">
<p style="text-align:center;font-size: 13px;margin-top:0;"><em>Players battle side by side in the Android TV version</em></p>
</div>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.25em;">Business Model</h3>

<p>Infinite Dreams is also experimenting with monetization and extending play session length. The TV version replaces several $1.99 in-app purchases and timers with a try-before-you-buy model which charges $4.99 after playing the first 2 levels for free. We’ve seen this single purchase model prove successful with other arcade action games like Mediocre’s <a href="https://play.google.com/store/apps/details?id=com.mediocre.smashhit"><i>Smash Hit</i></a> for smartphones and tablets, in which the purchase unlocks checkpoint saves. We’re also seeing strong arcade action games like Vector Unit’s <a href="https://play.google.com/store/apps/details?id=com.vectorunit.purple.googleplay"><i>Beach Buggy Racing</i></a> and Ubisoft’s <a href="https://play.google.com/store/apps/details?id=com.fgol.HungrySharkEvolution"><i>Hungry Shark Evolution</i></a> retain their existing in-app purchase models for Android TV. More information on setting up your games for these varied business models can be found <a href="http://developer.android.com/distribute/monetize/freemium.html?utm_campaign=skyforce-1114&amp;utm_source=dac&amp;utm_medium=blog">here</a>. We’ll be tracking and sharing these variations in business models on Android TV, including variations in premium, as the Android TV platform grows.<p></p>

<p>Reflecting on the work involved in making these changes, Wyszyński says, “From a technical point of view the process was not really so difficult – it took us about a month of work to incorporate all of the features and we are very happy with the results.” Take a moment to check out Sky Force 2014 TV on a Nexus Player and the other games in the <a href="https://play.google.com/store/apps/collection/promotion_3000e24_androidtv_games_all">Android TV collection on Google Play</a>, most of which made no design changes and still play well on a TV. Consider your own starting point, take a look at the Android TV <a href="http://developer.android.com/training/tv/start/index.html?utm_campaign=skyforce-1114&amp;utm_source=dac&amp;utm_medium=blog">section</a><a> on our developer blog, and build the version of your game that would be most satisfying to players on the couch.</a></p><a>

</a><div style="display: inline-block; float: right; line-height: 0;clear:both;"><a></a><div style="float: left;"><a></a><a href="https://plus.google.com/+AndroidDevelopers/posts/Bthey42xdfM" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br>
<br>
<a href="https://plus.google.com/+AndroidDevelopers/posts/Bthey42xdfM" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/+AndroidDevelopers/posts/Bthey42xdfM" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32"></a></div></div>
<div style="clear: both;"></div>





]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/sky-force-2014-reimagined-for-android-tv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>musiXmatch drives user engagement through innovation</title>
		<link>https://googledata.org/google-android/musixmatch-drives-user-engagement-through-innovation/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=musixmatch-drives-user-engagement-through-innovation</link>
		<comments>https://googledata.org/google-android/musixmatch-drives-user-engagement-through-innovation/#comments</comments>
		<pubDate>Thu, 20 Nov 2014 14:50:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=5ff16522e1842611e4bfeef36f5ac52a</guid>
		<description><![CDATA[<p><i>Posted by Leticia Lago, Google Play team</i></p>

<p><a href="https://play.google.com/store/apps/details?id=com.musixmatch.android.lyrify">musiXmatch</a> is an app that offers Android users the unique and powerful feature FloatingLyrics. FloatingLyrics pops up a floating window showing synched lyrics as users listen to tracks on their favorite player and music services. It&#8217;s achieved through a seamless integration with <a href="http://developer.android.com/guide/components/intents-filters.html?utm_campaign=musiXmatch-1114&#38;utm_source=dac&#38;utm_medium=blog">intents</a> on the platform, something that&#8217;s technically possible only on Android. </p>

<p>As a result musiXmatch has seen &#8220;a dramatic increase in terms of engagement&#8217;, says founder Max Ciociola, &#8220;which has been two times more active users and even two times more the average time they spend in the app.&#8221;</p>

<p>The ability to deliver lyrics to a range of different devices &#8212; such as Chromecast, Android TV, and Android Wear &#8212;  is creating opportunities for musiXmatch. It&#8217;s helping them turn their app into a smart companion for their users and getting them closer to their goal of reaching 100 million people. </p>

<p>In the following video, Max and Android engineer Sebastiano Gottardo talk about the unique capabilities that Android offers to musiXmatch:</p>

<!--[Interactive video]  --> 

<p>To learn about achieving great user engagement and retention and reaching more users through different form factors, be sure to check out these resources: </p>

<ul><li><a href="https://www.youtube.com/watch?v=EEgCy-HFNgE&#38;list=UU_x5XG1OV2P6uZZ5FSM9Ttw">Convert installs to active users</a> &#8212; Watch this video to hear from Matteo Vallone, Partner Development Manager for Google Play, about the best practices in engaging and retaining app users using intents, identity, context, and rich notifications as well as delivering a cross-platform user experience.</li>
<li><a href="https://www.youtube.com/watch?v=LvEkHNwPCRM&#38;index=9&#38;list=PLWz5rJ2EKKc9gCSx3Y4smCwgj2O29FNM2">Expanding to new form factors: Tablet, Wear &#38; TV</a> &#8212; Watch this panel discussion with Google experts talking about cross-platform opportunities and answering developer questions.</li></ul><div><div><a href="https://plus.google.com/108967384991768947849/posts/RYmCw1HcbaT"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/RYmCw1HcbaT"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/RYmCw1HcbaT"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Leticia Lago, Google Play team</i></p>

<p><a href="https://play.google.com/store/apps/details?id=com.musixmatch.android.lyrify">musiXmatch</a> is an app that offers Android users the unique and powerful feature FloatingLyrics. FloatingLyrics pops up a floating window showing synched lyrics as users listen to tracks on their favorite player and music services. It’s achieved through a seamless integration with <a href="http://developer.android.com/guide/components/intents-filters.html?utm_campaign=musiXmatch-1114&utm_source=dac&utm_medium=blog">intents</a> on the platform, something that’s technically possible only on Android. </p>

<p>As a result musiXmatch has seen “a dramatic increase in terms of engagement’, says founder Max Ciociola, “which has been two times more active users and even two times more the average time they spend in the app.”</p>

<p>The ability to deliver lyrics to a range of different devices — such as Chromecast, Android TV, and Android Wear —  is creating opportunities for musiXmatch. It’s helping them turn their app into a smart companion for their users and getting them closer to their goal of reaching 100 million people. </p>

<p>In the following video, Max and Android engineer Sebastiano Gottardo talk about the unique capabilities that Android offers to musiXmatch:</p>

<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/nWKiNRgKZv8?list=UUVHFbqXqoYvEWM1Ddxl0QDg" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:2em; margin-left: 70px;" width="560"></iframe> 

<p>To learn about achieving great user engagement and retention and reaching more users through different form factors, be sure to check out these resources: </p>

<ul><li><a href="https://www.youtube.com/watch?v=EEgCy-HFNgE&list=UU_x5XG1OV2P6uZZ5FSM9Ttw">Convert installs to active users</a> — Watch this video to hear from Matteo Vallone, Partner Development Manager for Google Play, about the best practices in engaging and retaining app users using intents, identity, context, and rich notifications as well as delivering a cross-platform user experience.</li>
<li><a href="https://www.youtube.com/watch?v=LvEkHNwPCRM&index=9&list=PLWz5rJ2EKKc9gCSx3Y4smCwgj2O29FNM2">Expanding to new form factors: Tablet, Wear & TV</a> — Watch this panel discussion with Google experts talking about cross-platform opportunities and answering developer questions.</li></ul>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/RYmCw1HcbaT" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/RYmCw1HcbaT" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/RYmCw1HcbaT" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/musixmatch-drives-user-engagement-through-innovation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Chinese Developers Can Now Offer Paid Applications to Google Play Users in More Than 130 countries</title>
		<link>https://googledata.org/google-android/chinese-developers-can-now-offer-paid-applications-to-google-play-users-in-more-than-130-countries/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=chinese-developers-can-now-offer-paid-applications-to-google-play-users-in-more-than-130-countries</link>
		<comments>https://googledata.org/google-android/chinese-developers-can-now-offer-paid-applications-to-google-play-users-in-more-than-130-countries/#comments</comments>
		<pubDate>Thu, 20 Nov 2014 01:56:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=3f1b2df8b03f1c9556ece4d13b725566</guid>
		<description><![CDATA[<p><em>By Ellie Powers, product manager for Google Play </em></p>


<div><a href="http://3.bp.blogspot.com/-ZrvsOxe_OBA/T1W6xuCBMkI/AAAAAAAABZ4/uwCvJl0YRYs/s1600/gplay_logo_web_white.png"><img border="0" src="http://developer.android.com/images/home/play_logo.png"></a></div>


<p>Google Play is the largest digital store for Android users to discover and purchase their favorite mobile app and games, and the ecosystem is continuing to grow globally. Over the past year, we&#8217;ve expanded the list of countries where app developers can sign up to be merchants on Google Play, totaling 60 countries, including Lebanon, Jordan, Oman, Pakistan, Puerto Rico, Qatar and Venezuela most recently.</p>

<p>As part of that continued effort, we&#8217;re excited to announce <b>merchant support in China</b>, enabling local developers to export and sell their apps to Google Play users in more than <a href="https://support.google.com/googleplay/answer/143779">130 countries</a>. Chinese developers can now offer both free and paid applications through various monetization models, including in-app purchasing and subscriptions.  For revenue generated on Google Play, developers will receive payment to their Chinese bank accounts via USD wire transfers.</p>

<p>If you develop Android apps in China and want to start distributing your apps to a global audience through Google Play, visit <a href="https://play.google.com/apps/publish">play.google.com/apps/publish</a> and register as a developer.  If you want to sell apps and in-app products, you'll need to also sign up for a Google Wallet merchant account, which is available on the &#8220;Revenue&#8221; page in the Google Play Developer Console.  After you&#8217;ve uploaded your apps, you can set prices in the Developer Console and later receive reports on your revenue. You&#8217;ll receive your developer payouts via <a href="https://support.google.com/googleplay/android-developer/answer/2700656?hl=zh-Hans">wire transfer</a>.  For more details, please visit our <a href="https://support.google.com/googleplay/android-developer/answer/6112435?hl=zh-Hans">developer help center</a>.</p>

<p>We look forward to continuing to roll out Google Play support to developers in many more countries around the world.</p>

<p><b>&#20013;&#22269;&#24320;&#21457;&#32773;&#21487;&#20197;&#21521;&#20840;&#29699;130&#20010;&#22269;&#23478;&#30340;Google Play&#29992;&#25143;&#25552;&#20379;&#20184;&#36153;&#24212;&#29992;&#21862;</b></p>

<p>&#21457;&#34920;&#32773;&#65306;Ellie Powers, Google Play&#20135;&#21697;&#32463;&#29702;</p>

<p>Google Play&#26159;&#19968;&#20010;&#21487;&#35753;Android&#29992;&#25143;&#21457;&#29616;&#21644;&#36141;&#20080;&#20182;&#20204;&#21916;&#29233;&#30340;&#31227;&#21160;&#24212;&#29992;&#31243;&#24207;&#21644;&#28216;&#25103;&#30340;&#20840;&#29699;&#26368;&#22823;&#30340;&#24212;&#29992;&#21830;&#24215;&#65292;&#36825;&#20010;&#29983;&#24577;&#31995;&#32479;&#22312;&#20840;&#29699;&#36805;&#36895;&#25104;&#38271;&#12290;&#36807;&#21435;&#19968;&#24180;&#20013;&#65292;&#25105;&#20204;&#24050;&#32463;&#25193;&#23637;&#21040;60&#20010;&#22269;&#23478;&#65292;&#35753;&#24212;&#29992;&#31243;&#24207;&#24320;&#21457;&#20154;&#21592;&#21487;&#20197;&#27880;&#20876;&#25104;&#20026; Google Play&#30340;&#21830;&#23478;&#65292;&#20854;&#20013;&#26032;&#36817;&#25903;&#25345;&#30340;&#22269;&#23478;&#21253;&#25324;&#40654;&#24052;&#23273;&#12289;&#32422;&#26086;&#12289;&#38463;&#26364;&#12289;&#24052;&#22522;&#26031;&#22374;&#12289;&#27874;&#22810;&#40654;&#21508;&#12289;&#21345;&#22612;&#23572;&#21644;&#22996;&#20869;&#29790;&#25289;&#12290;</p>

<p>&#20316;&#20026;&#25345;&#32493;&#25913;&#36827; Google Play&#21162;&#21147;&#30340;&#19968;&#37096;&#20998;&#65292;&#25105;&#20204;&#24456;&#39640;&#20852;&#22320;&#23459;&#24067;&#22312;&#20013;&#22269;&#22686;&#21152;&#20102;&#23545;&#21830;&#23478;&#30340;&#25903;&#25345;&#65292;&#35753;&#20013;&#22269;&#30340;&#24320;&#21457;&#32773;&#33021;&#21806;&#21334;&#24212;&#29992;&#31243;&#24207;&#21040;130&#20010;&#22269;&#23478;&#30340; Google Play &#29992;&#25143;&#12290;&#20013;&#22269;&#30340;&#24320;&#21457;&#32773;&#29616;&#22312;&#21487;&#20197;&#25552;&#20379;&#36890;&#36807;&#21508;&#31181;&#30408;&#21033;&#27169;&#24335;&#30340;&#20813;&#36153;&#21644;&#20184;&#36153;&#24212;&#29992;&#65292;&#21253;&#25324;&#24212;&#29992;&#20869;&#36141;&#20080;&#21644;&#35746;&#38405;&#12290;&#22312; Google Play &#20135;&#29983;&#30340;&#33829;&#25910;&#23558;&#36890;&#36807;&#32654;&#20803;&#30005;&#27719;&#30340;&#26041;&#24335;&#25903;&#20184;&#32473;&#24320;&#21457;&#32773;&#30340;&#20013;&#22269;&#30340;&#38134;&#34892;&#36134;&#25143;&#12290;</p>

<p>&#22914;&#26524;&#20320;&#22312;&#20013;&#22269;&#24320;&#21457;Android&#24212;&#29992;&#31243;&#24207;&#65292;&#24182;&#24076;&#26395;&#36890;&#36807; Google Play &#25226;&#24212;&#29992;&#31243;&#24207;&#25512;&#24191;&#21040;&#20840;&#29699;&#65292;&#35831;&#30331;&#24405;<a href="https://play.google.com/apps/publish">play.google.com/apps/publish</a> &#24182;&#24314;&#31435;&#20320;&#30340; Google Play &#24320;&#21457;&#32773;&#36134;&#25143;&#12290;&#22914;&#26524;&#20320;&#24819;&#21806;&#21334;&#20184;&#36153;&#30340;&#24212;&#29992;&#31243;&#24207;&#21644;&#24212;&#29992;&#31243;&#24207;&#20869;&#30340;&#20135;&#21697;&#65292;&#21017;&#38656;&#35201;&#20877;&#27880;&#20876;&#19968;&#20010;Google &#30005;&#23376;&#38065;&#21253;&#21830;&#23478;&#24080;&#25143;&#65292;&#36890;&#36807;Google Play&#24320;&#21457;&#32773;&#25511;&#21046;&#21488;&#37324;&#30340;&#8221;&#33829;&#25910;&#8221;&#39029;&#38754;&#36827;&#34892;&#35774;&#32622;&#12290;&#19978;&#20256;&#24212;&#29992;&#31243;&#24207;&#21518;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#24320;&#21457;&#32773;&#25511;&#21046;&#21488;&#35774;&#23450;&#20215;&#26684;&#65292;&#20043;&#21518;&#23601;&#21487;&#20197;&#25910;&#21040;&#33829;&#25910;&#25253;&#21578;&#65292;&#20320;&#23558;&#20250;&#36890;&#36807;<a href="https://support.google.com/googleplay/android-developer/answer/2700656?hl=zh-Hans">&#30005;&#27719;</a>&#30340;&#26041;&#24335;&#33719;&#24471;&#25910;&#20837;&#12290;</p>

<p>&#25105;&#20204;&#23558;&#32487;&#32493;&#22686;&#21152;&#26356;&#22810; Google Play &#21830;&#23478;&#25903;&#25345;&#30340;&#22269;&#23478;&#65292;&#25964;&#35831;&#20851;&#27880;&#12290;

</p><p>&#26356;&#22810;&#35814;&#24773;&#65292;&#35831;&#35775;&#38382;&#25105;&#20204;&#30340;<a href="https://support.google.com/googleplay/android-developer/answer/6112435?hl=zh-Hans">&#24320;&#21457;&#32773;&#24110;&#21161;&#20013;&#24515;</a>&#12290;</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/GzhtDRsp7BS"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/GzhtDRsp7BS"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/GzhtDRsp7BS"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><em>By Ellie Powers, product manager for Google Play </em></p>


<div class="separator" style="clear: both; text-align: left;"><a href="http://3.bp.blogspot.com/-ZrvsOxe_OBA/T1W6xuCBMkI/AAAAAAAABZ4/uwCvJl0YRYs/s1600/gplay_logo_web_white.png" imageanchor="1" style="clear:both; float:left;margin-left:0em; margin-right:1em;margin-bottom:4em;margin-top:2em;"><img itemprop="image" border="0" src="http://developer.android.com/images/home/play_logo.png"  /></a></div>


<p>Google Play is the largest digital store for Android users to discover and purchase their favorite mobile app and games, and the ecosystem is continuing to grow globally. Over the past year, we’ve expanded the list of countries where app developers can sign up to be merchants on Google Play, totaling 60 countries, including Lebanon, Jordan, Oman, Pakistan, Puerto Rico, Qatar and Venezuela most recently.</p>

<p>As part of that continued effort, we’re excited to announce <b>merchant support in China</b>, enabling local developers to export and sell their apps to Google Play users in more than <a href="https://support.google.com/googleplay/answer/143779">130 countries</a>. Chinese developers can now offer both free and paid applications through various monetization models, including in-app purchasing and subscriptions.  For revenue generated on Google Play, developers will receive payment to their Chinese bank accounts via USD wire transfers.</p>

<p>If you develop Android apps in China and want to start distributing your apps to a global audience through Google Play, visit <a href="https://play.google.com/apps/publish">play.google.com/apps/publish</a> and register as a developer.  If you want to sell apps and in-app products, you'll need to also sign up for a Google Wallet merchant account, which is available on the “Revenue” page in the Google Play Developer Console.  After you’ve uploaded your apps, you can set prices in the Developer Console and later receive reports on your revenue. You’ll receive your developer payouts via <a href="https://support.google.com/googleplay/android-developer/answer/2700656?hl=zh-Hans">wire transfer</a>.  For more details, please visit our <a href="https://support.google.com/googleplay/android-developer/answer/6112435?hl=zh-Hans">developer help center</a>.</p>

<p style="margin-bottom:1.5em">We look forward to continuing to roll out Google Play support to developers in many more countries around the world.</p>

<p><b>中国开发者可以向全球130个国家的Google Play用户提供付费应用啦</b></p>

<p>发表者：Ellie Powers, Google Play产品经理</p>

<p>Google Play是一个可让Android用户发现和购买他们喜爱的移动应用程序和游戏的全球最大的应用商店，这个生态系统在全球迅速成长。过去一年中，我们已经扩展到60个国家，让应用程序开发人员可以注册成为 Google Play的商家，其中新近支持的国家包括黎巴嫩、约旦、阿曼、巴基斯坦、波多黎各、卡塔尔和委内瑞拉。</p>

<p>作为持续改进 Google Play努力的一部分，我们很高兴地宣布在中国增加了对商家的支持，让中国的开发者能售卖应用程序到130个国家的 Google Play 用户。中国的开发者现在可以提供通过各种盈利模式的免费和付费应用，包括应用内购买和订阅。在 Google Play 产生的营收将通过美元电汇的方式支付给开发者的中国的银行账户。</p>

<p>如果你在中国开发Android应用程序，并希望通过 Google Play 把应用程序推广到全球，请登录<a href="https://play.google.com/apps/publish">play.google.com/apps/publish</a> 并建立你的 Google Play 开发者账户。如果你想售卖付费的应用程序和应用程序内的产品，则需要再注册一个Google 电子钱包商家帐户，通过Google Play开发者控制台里的”营收”页面进行设置。上传应用程序后，你可以通过开发者控制台设定价格，之后就可以收到营收报告，你将会通过<a href="https://support.google.com/googleplay/android-developer/answer/2700656?hl=zh-Hans">电汇</a>的方式获得收入。</p>

<p>我们将继续增加更多 Google Play 商家支持的国家，敬请关注。

<p>更多详情，请访问我们的<a href="https://support.google.com/googleplay/android-developer/answer/6112435?hl=zh-Hans">开发者帮助中心</a>。</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/GzhtDRsp7BS" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/GzhtDRsp7BS" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/GzhtDRsp7BS" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/chinese-developers-can-now-offer-paid-applications-to-google-play-users-in-more-than-130-countries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Coding Android TV games is easy as pie</title>
		<link>https://googledata.org/google-android/coding-android-tv-games-is-easy-as-pie-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=coding-android-tv-games-is-easy-as-pie-2</link>
		<comments>https://googledata.org/google-android/coding-android-tv-games-is-easy-as-pie-2/#comments</comments>
		<pubDate>Wed, 19 Nov 2014 18:23:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=46fdbb50fdc9e03979e5f5feee45ab37</guid>
		<description><![CDATA[<div><a href="http://4.bp.blogspot.com/-OjVQAF7LQ_w/VGzUaduajsI/AAAAAAAABA8/1pyB23anwHk/s1600/splash.png"><img border="0" src="http://4.bp.blogspot.com/-OjVQAF7LQ_w/VGzUaduajsI/AAAAAAAABA8/1pyB23anwHk/s640/splash.png"></a></div>

<i>Posted by Alex Ames, Fun Propulsion Labs at Google*</i>

<p>We&#8217;re pleased to announce <a href="https://play.google.com/store/apps/details?id=com.google.fpl.pie_noon">Pie Noon</a>, a simple game created to demonstrate multi-player support on the <a href="http://www.google.com/nexus/player/">Nexus Player</a>, an <a href="https://developer.android.com/tv/index.html?utm_campaign=pienoon-1114&#38;utm_source=dac&#38;utm_medium=blog">Android TV device</a>. Pie Noon is an <a href="https://github.com/google/pienoon">open source</a>, cross-platform game written in C++ which supports:</p>

<ul><li>Up to 4 players using Bluetooth controllers.</li>
<li>Touch controls.</li>
<li>Google Play Games Services sign-in and leaderboards.</li>
<li>Other Android devices (you can play on your phone or tablet in single-player mode, or against human adversaries using Bluetooth controllers).</li></ul><p>Pie Noon serves as a demonstration of how to use the <a href="https://www.libsdl.org/">SDL</a> library in Android games as well as Google technologies like <a href="http://google.github.io/flatbuffers/">Flatbuffers</a>, <a href="http://google.github.io/mathfu/">Mathfu</a>, <a href="http://google.github.io/fplutil/">fplutil</a>, and <a href="https://developers.google.com/speed/webp/?utm_campaign=pienoon-1114&#38;utm_source=dac&#38;utm_medium=blog">WebP</a>.</p>

<ul><li><a href="http://google.github.io/flatbuffers/">Flatbuffers</a> provides efficient serialization of the data loaded at run time for quick loading times. (Examples: <a href="https://github.com/google/pienoon/tree/develop/src/flatbufferschemas">schema files</a> and <a href="https://github.com/google/pienoon/blob/develop/src/pie_noon_game.cpp#L113">loading compiled Flatbuffers</a>)</li>
<li><a href="http://google.github.io/mathfu/">Mathfu</a> drives the rendering code, particle effects, scene layout, and more, allowing for efficient mathematical operations optimized with <a href="http://en.wikipedia.org/wiki/SIMD">SIMD</a>. (Example: <a href="https://github.com/google/pienoon/blob/develop/src/particles.cpp">particle system</a>)</li>
<li><a href="http://google.github.io/fplutil/">fplutil</a> streamlines the build process for Android, making iteration faster and easier. Our <a href="https://github.com/google/pienoon/blob/develop/build_install_run.sh#L67">Android build script</a> makes use of it to easily compile and run on on Android devices.</li>
<li><a href="https://developers.google.com/speed/webp/?utm_campaign=pienoon-1114&#38;utm_source=dac&#38;utm_medium=blog">WebP</a> compresses image assets more efficiently than jpg or png file formats, allowing for smaller APK sizes.</li></ul><br /><!--[Interactive video]  --> 

<p>You can download the game in the <a href="https://play.google.com/store/apps/details?id=com.google.fpl.pie_noon">Play Store</a> and the latest open source release from our <a href="https://github.com/google/pienoon">GitHub page</a>. We invite you to learn from the code to see how you can implement these libraries and utilities in your own Android games. Take advantage of our <a href="https://groups.google.com/forum/#!forum/pienoon">discussion list</a> if you have any questions, and don&#8217;t forget to throw a few pies while you&#8217;re at it!</p>

<p><i>* Fun Propulsion Labs is a team within Google that's dedicated to advancing gaming on Android and other platforms.</i></p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/NdtTkghBwLc"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/NdtTkghBwLc"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/NdtTkghBwLc"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-OjVQAF7LQ_w/VGzUaduajsI/AAAAAAAABA8/1pyB23anwHk/s1600/splash.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-OjVQAF7LQ_w/VGzUaduajsI/AAAAAAAABA8/1pyB23anwHk/s640/splash.png" /></a></div>

<i>Posted by Alex Ames, Fun Propulsion Labs at Google*</i>

<p>We’re pleased to announce <a href="https://play.google.com/store/apps/details?id=com.google.fpl.pie_noon">Pie Noon</a>, a simple game created to demonstrate multi-player support on the <a href="http://www.google.com/nexus/player/">Nexus Player</a>, an <a href="https://developer.android.com/tv/index.html?utm_campaign=pienoon-1114&utm_source=dac&utm_medium=blog">Android TV device</a>. Pie Noon is an <a href="https://github.com/google/pienoon">open source</a>, cross-platform game written in C++ which supports:</p>

<ul><li>Up to 4 players using Bluetooth controllers.</li>
<li>Touch controls.</li>
<li>Google Play Games Services sign-in and leaderboards.</li>
<li>Other Android devices (you can play on your phone or tablet in single-player mode, or against human adversaries using Bluetooth controllers).</li></ul>

<p>Pie Noon serves as a demonstration of how to use the <a href="https://www.libsdl.org/">SDL</a> library in Android games as well as Google technologies like <a href="http://google.github.io/flatbuffers/">Flatbuffers</a>, <a href="http://google.github.io/mathfu/">Mathfu</a>, <a href="http://google.github.io/fplutil/">fplutil</a>, and <a href="https://developers.google.com/speed/webp/?utm_campaign=pienoon-1114&utm_source=dac&utm_medium=blog">WebP</a>.</p>

<ul><li><a href="http://google.github.io/flatbuffers/">Flatbuffers</a> provides efficient serialization of the data loaded at run time for quick loading times. (Examples: <a href="https://github.com/google/pienoon/tree/develop/src/flatbufferschemas">schema files</a> and <a href="https://github.com/google/pienoon/blob/develop/src/pie_noon_game.cpp#L113">loading compiled Flatbuffers</a>)</li>
<li><a href="http://google.github.io/mathfu/">Mathfu</a> drives the rendering code, particle effects, scene layout, and more, allowing for efficient mathematical operations optimized with <a href="http://en.wikipedia.org/wiki/SIMD">SIMD</a>. (Example: <a href="https://github.com/google/pienoon/blob/develop/src/particles.cpp">particle system</a>)</li>
<li><a href="http://google.github.io/fplutil/">fplutil</a> streamlines the build process for Android, making iteration faster and easier. Our <a href="https://github.com/google/pienoon/blob/develop/build_install_run.sh#L67">Android build script</a> makes use of it to easily compile and run on on Android devices.</li>
<li><a href="https://developers.google.com/speed/webp/?utm_campaign=pienoon-1114&utm_source=dac&utm_medium=blog">WebP</a> compresses image assets more efficiently than jpg or png file formats, allowing for smaller APK sizes.</li></ul><br />

<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/p1F6HRFnLoo?rel=0" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:2em; margin-left: 70px;" width="560"></iframe> 

<p>You can download the game in the <a href="https://play.google.com/store/apps/details?id=com.google.fpl.pie_noon">Play Store</a> and the latest open source release from our <a href="https://github.com/google/pienoon">GitHub page</a>. We invite you to learn from the code to see how you can implement these libraries and utilities in your own Android games. Take advantage of our <a href="https://groups.google.com/forum/#!forum/pienoon">discussion list</a> if you have any questions, and don’t forget to throw a few pies while you’re at it!</p>

<p><i>* Fun Propulsion Labs is a team within Google that's dedicated to advancing gaming on Android and other platforms.</i></p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/NdtTkghBwLc" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/NdtTkghBwLc" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/NdtTkghBwLc" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/coding-android-tv-games-is-easy-as-pie-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Begin developing with Android Auto</title>
		<link>https://googledata.org/google-android/begin-developing-with-android-auto/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=begin-developing-with-android-auto</link>
		<comments>https://googledata.org/google-android/begin-developing-with-android-auto/#comments</comments>
		<pubDate>Tue, 18 Nov 2014 18:02:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=e37ad3c9edf057a91f37e7961dae716a</guid>
		<description><![CDATA[<p><i>Posted by Daniel Holle, Product Manager</i></p>

<p>At Google I/O back in June, we provided a preview of Android Auto. Today, we&#8217;re excited to announce the availability of our first <a href="http://developer.android.com/training/auto/start/index.html?utm_campaign=android-auto-1114&#38;utm_source=dac&#38;utm_medium=blog">APIs</a> for building Auto-enabled apps for audio and messaging.  Android apps can now be extended to the car in a way that is optimized for the driving experience. </p> 

<p>For users, this means they simply connect their Android handheld to a compatible vehicle and begin utilizing a car-optimized Android experience that works with the car&#8217;s head unit display, steering wheel buttons, and more. For developers, the APIs and UX guidelines make it easy to provide a simple way for users to get the information they need while on the road.  As an added bonus, the Android Auto APIs let developers easily extend their existing apps targeting Android 5.0 (API level 21) or higher to work in the car without having to worry about vehicle-specific hardware differences. This gives developers wide reach across manufacturers, model and regions, by just developing with one set of APIs and UX standards.</p>

<!--[Interactive video]  -->  

<p>There are two use cases that Android Auto supports today:</p>

<ul><li><a href="https://developer.android.com/training/auto/audio/index.html?utm_campaign=android-auto-1114&#38;utm_source=dac&#38;utm_medium=blog"><i>Audio apps</i></a> that expose content for users to browse and allow audio playback from the car, such as music, podcasts, news, etc.</li>
<li><a href="https://developer.android.com/training/auto/messaging/index.html?utm_campaign=android-auto-1114&#38;utm_source=dac&#38;utm_medium=blog"><i>Messaging apps</i></a> that receive incoming notifications, read messages aloud, and send replies via voice from the car.</li></ul><p>To help you get started with Android Auto, check out our <a href="http://developer.android.com/training/auto/start/index.html?utm_campaign=android-auto-1114&#38;utm_source=dac&#38;utm_medium=blog">Getting Started guide</a>. It&#8217;s important to note that while the APIs are available today, apps extended with Android Auto cannot be published quite yet.  More app categories will be supported in the future, providing more opportunities for developers and drivers of Android Auto. We encourage you to join the <a href="http://g.co/AndroidAutoDev">Android Auto Developers Google+ community</a> to stay up-to-date on the latest news and timelines. </p>

<p>We&#8217;ve already started working with partners to develop experiences for Android Auto: iHeartRadio, Joyride, Kik, MLB.com, NPR, Pandora, PocketCasts, Songza, SoundCloud, Spotify, Stitcher, TextMe, textPlus, TuneIn, Umano, and WhatsApp.  If you happen to be in the Los Angeles area, stop by the <a href="http://laautoshow.com/">LA Auto Show</a> through November 30 and visit us in the Hyundai booth to take Android Auto and an app or two for a test drive. </p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/TkgHUhHQUF4"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/TkgHUhHQUF4"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/TkgHUhHQUF4"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Daniel Holle, Product Manager</i></p>

<p>At Google I/O back in June, we provided a preview of Android Auto. Today, we’re excited to announce the availability of our first <a href="http://developer.android.com/training/auto/start/index.html?utm_campaign=android-auto-1114&utm_source=dac&utm_medium=blog">APIs</a> for building Auto-enabled apps for audio and messaging.  Android apps can now be extended to the car in a way that is optimized for the driving experience. </p> 

<p>For users, this means they simply connect their Android handheld to a compatible vehicle and begin utilizing a car-optimized Android experience that works with the car’s head unit display, steering wheel buttons, and more. For developers, the APIs and UX guidelines make it easy to provide a simple way for users to get the information they need while on the road.  As an added bonus, the Android Auto APIs let developers easily extend their existing apps targeting Android 5.0 (API level 21) or higher to work in the car without having to worry about vehicle-specific hardware differences. This gives developers wide reach across manufacturers, model and regions, by just developing with one set of APIs and UX standards.</p>

<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/ctiaVxgclsg" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:2em; margin-left: 70px;" width="560"></iframe>  

<p>There are two use cases that Android Auto supports today:</p>

<ul><li><a href="https://developer.android.com/training/auto/audio/index.html?utm_campaign=android-auto-1114&utm_source=dac&utm_medium=blog"><i>Audio apps</i></a> that expose content for users to browse and allow audio playback from the car, such as music, podcasts, news, etc.</li>
<li><a href="https://developer.android.com/training/auto/messaging/index.html?utm_campaign=android-auto-1114&utm_source=dac&utm_medium=blog"><i>Messaging apps</i></a> that receive incoming notifications, read messages aloud, and send replies via voice from the car.</li></ul>

<p>To help you get started with Android Auto, check out our <a href="http://developer.android.com/training/auto/start/index.html?utm_campaign=android-auto-1114&utm_source=dac&utm_medium=blog">Getting Started guide</a>. It’s important to note that while the APIs are available today, apps extended with Android Auto cannot be published quite yet.  More app categories will be supported in the future, providing more opportunities for developers and drivers of Android Auto. We encourage you to join the <a href="http://g.co/AndroidAutoDev">Android Auto Developers Google+ community</a> to stay up-to-date on the latest news and timelines. </p>

<p>We’ve already started working with partners to develop experiences for Android Auto: iHeartRadio, Joyride, Kik, MLB.com, NPR, Pandora, PocketCasts, Songza, SoundCloud, Spotify, Stitcher, TextMe, textPlus, TuneIn, Umano, and WhatsApp.  If you happen to be in the Los Angeles area, stop by the <a href="http://laautoshow.com/">LA Auto Show</a> through November 30 and visit us in the Hyundai booth to take Android Auto and an app or two for a test drive. </p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/TkgHUhHQUF4" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/TkgHUhHQUF4" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/TkgHUhHQUF4" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/begin-developing-with-android-auto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Keeping Your Saved Games in the Cloud</title>
		<link>https://googledata.org/google-android/keeping-your-saved-games-in-the-cloud/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=keeping-your-saved-games-in-the-cloud</link>
		<comments>https://googledata.org/google-android/keeping-your-saved-games-in-the-cloud/#comments</comments>
		<pubDate>Tue, 18 Nov 2014 14:37:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=01d8be36280145322b9c3eb275f8c57d</guid>
		<description><![CDATA[Posted by Todd Kerpelman, Developer Advocate

Saved Games Are the Future!

I think most of us have at least one or two games we play obsessively. Me? I'm a Sky Force 2014 guy. But maybe you're into matching colorful objects, battling monsters, or helpi...]]></description>
				<content:encoded><![CDATA[<p><i>Posted by <a href="https://plus.google.com/b/108967384991768947849/+ToddKerpelman/posts">Todd Kerpelman</a>, Developer Advocate</i></p>

<h3>Saved Games Are the Future!</h3>

<p>I think most of us have at least one or two games we play obsessively. Me? I'm a <a href="https://play.google.com/store/apps/details?id=pl.idreams.skyforcehd">Sky Force 2014</a> guy. But maybe you're into matching colorful objects, battling monsters, or helping avians with their rage management issues. Either way, there's probably some game where you've spent hours upon hours upgrading your squad, reaching higher and higher levels, or unlocking every piece of bonus content in the game. </p>

<p>Now imagine losing all of that progress when you decide to get a new phone. Or reinstall your game. Yikes!</p>

<p>That's why, when Google Play Games launched, one of the very first features we included was the ability for users to save their game to the cloud using a service called the AppState API. For developers who didn't need an entire server-based infrastructure to run their game, but didn't want to lose players when they upgraded their devices, this feature was a real life-saver.</p>

<p>But many developers wanted even more. With AppState, you were limited to 4 slots of 256k of data each, and for some games, this just wasn't enough. So this past year at Google I/O, we <a href="http://android-developers.blogspot.com/2014/06/google-io-and-games.html">launched an entirely new Saved Games feature</a>, powered by Google Drive. This gave you huge amounts of space (up to 3MB per saved game with unlimited save slots), the ability to save a screenshot and metadata with your saved games, and some nice features like showing your player's saved games directly in the Google Play app. </p>

<h3>...But AppState is Yesterday's News</h3>

<p>Since the introduction of Saved Games, we've seen enough titles happily using the service and heard enough positive feedback from developers that we're convinced that Saved Games is the better offering and the way to go in the future. With that in mind, we've decided to start deprecating the old cloud save system using AppState and are encouraging everybody who's still using it to switch over to the new <a href="https://developers.google.com/games/services/common/concepts/savedgames?utm_campaign=cloud-save-1114&utm_source=dac&utm_medium=blog">Saved Games feature</a> (referred to in our libraries as "Snapshots"). </p>

<p>What does this mean for you as a game developer?</p>

<p><i>If you haven't yet added Saved Games to your game</i>, now would be the perfect time! The holidays are coming up and your players are going to start getting new devices over the next couple of months. Wouldn't it be great if they could take your game's progress with them? Unless, I guess, "not retaining users" is part of your business plan. </p>

<p><i>If you're already using the new Saved Games / Snapshot system</i>, put your feet up and relax. None of these changes affect you. Okay, now put your feet down, and get back to work. You probably have a seasonal update to work on, don't you? </p>

<p><i>If you're using the old AppState system</i>, you should start migrating your player's data over to the new Saved Games service. Luckily, it's easy to include both systems in the same game, so you should be able to migrate your users' data with their ever knowing. The process would probably work a little something like this:</p>
<ul><li>Enable the new Saved Game service for your game by
<ul><li>Adding the <code>Drive.SCOPE_APPFOLDER</code> scope to your list of scopes in your GoogleApiClient.</li> 
<li>Turning on Saved Games for your game in the <a href="http://play.google.com/apps/publish/">Google Play Developer Console</a>.</li></ul></li>
<li>Next, when your app tries to load the user's saved game
<ul><li>First see if any saved game exists using the new Saved Games service. If there is, go ahead and use it.</li>
<li>Otherwise, grab their saved game from the AppState service.</li></ul></li>
<li>When you save the user's game back to the cloud, save it using the new Saved Games service.</li>
<li>And that should be it! The next time your user loads up your game, it will find their saved data in the new Saved Games service, and they'll be all set.</li>
<li>We've built a <a href="https://github.com/playgameservices/android-basic-samples/tree/master/BasicSamples/SavedGames">sample app</a> that demonstrates how to perform these steps in your application, so we encourage you to check it out.</li></ul>

<p>In a few months, we will be modifying the old AppState service to be read-only. You'll still be able to read your user's old cloud save games and transfer them to the new Saved Games service, but you'll no longer be able to save games using the old service. We are evaluating  early Q2 of 2015 to make this change, which should give you enough time to push your "start using Saved Games" update to the world.</p>

<p>If you want to find out more about Saved Games and how they work, feel free to review our <a href="https://developers.google.com/games/services/common/concepts/savedgames?utm_campaign=cloud-save-1114&utm_source=dac&utm_medium=blog">documentation</a>, our <a href="https://github.com/playgameservices/android-basic-samples">sample applications</a>, or our <a href="https://www.youtube.com/watch?v=iHc2RBZs5T0">Game On! videos</a>. And we look forward to many more hours of gaming, no matter how many times we switch devices.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/Hgk47YWvTn8" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/Hgk47YWvTn8" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/Hgk47YWvTn8" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/keeping-your-saved-games-in-the-cloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Google Play services 6.5</title>
		<link>https://googledata.org/google-android/google-play-services-6-5-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=google-play-services-6-5-2</link>
		<comments>https://googledata.org/google-android/google-play-services-6-5-2/#comments</comments>
		<pubDate>Mon, 17 Nov 2014 23:34:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=874a7fdb724b11eaa7b65cbaf8873caf</guid>
		<description><![CDATA[<i>Posted by <a href="https://plus.google.com/u/0/+IanLake">Ian Lake</a>, Developer Advocate</i>

<p>To offer more seamless integration of Google products within your app, <b>we've now rolled out Google Play services 6.5</b>.</p>

<p>Google Play services 6.5 includes new features in Google Maps, Google Drive and Google Wallet as well as the recently launched Google Fit API. We are also providing developers with more granular control over which Google Play services APIs your app depends on to help you maintain a lean app.</p>

<h3>Google Maps</h3>
<p>We&#8217;re making it easier to get directions to places from your app! The Google Maps Android API now offers a map toolbar to let users open Google Maps and immediately get directions and turn by turn navigation to the selected marker. This map toolbar will show by default when you compile against Google Play services 6.5.</p>

<div><a href="http://1.bp.blogspot.com/-4BNREC0Jojo/VGo7ahW35wI/AAAAAAAABAc/9thZl94F6fY/s1600/GMS%2B-%2BRelease%2BBlog%2BNacho%2B-%2BMap%2BToolbar.png"><img border="0" src="http://1.bp.blogspot.com/-4BNREC0Jojo/VGo7ahW35wI/AAAAAAAABAc/9thZl94F6fY/s640/GMS%2B-%2BRelease%2BBlog%2BNacho%2B-%2BMap%2BToolbar.png"></a></div>

<p>In addition, there is also a new &#8216;lite mode&#8217; map option, ideal for situations where you want to provide a number of smaller maps, or a map that is so small that meaningful interaction is impractical, such as a thumbnail in a list. A lite mode map is a bitmap image of a map at a specified location and zoom level. </p>

<p>In lite mode, markers and shapes are drawn client-side on top of the static image, so you still have full control over them. Lite mode supports all of the map types, the <a href="https://developers.google.com/maps/documentation/android/location?utm_campaign=playservices65-1114&#38;utm_source=gdbc&#38;utm_medium=blog#the_my_location_layer">My Location</a> layer, and a subset of the functionality of a fully-interactive map. Users can tap on the map to launch Google Maps when they need more details.</p>

<p>The Google Maps Android API also exposes a new <code>getMapAsync(OnMapReadyCallback)</code> method to <code>MapFragment</code> and <code>MapView</code> which will notify you exactly when the map is ready. This serves as a replacement for the now deprecated <code>getMap()</code> method. </p>

<p>We&#8217;re also exposing the Google Maps for Android app intents available to your apps including displaying the map, searching, starting turn by turn navigation, and opening Street View so you can build upon the familiar and powerful maps already available on the device.</p><p></p>

<h3>Drive</h3>
<p>You can now add both public and application private custom file properties to a Drive file which can be used to build very efficient search queries and allow apps to save information which is guaranteed to persist across editing by other apps.</p>

<p>We&#8217;ve also made it even easier to make syncing your files to Drive both user and battery friendly with the ability to control when files are uploaded by network type or charging status and cancel pending uploads.</p>

<h3>Google Wallet</h3>
<p>In addition to the existing &#8216;Buy with Google&#8217; button available to quickly purchase goods &#38; services using Google Wallet, this release adds a &#8216;Donate with Google&#8217; button for providing the same ease of use in collecting donations.</p>

<h3>Google Fit</h3>

<p>The Google Fit SDK was recently <a href="http://googledevelopers.blogspot.com/2014/10/google-fit-sdk-available-now.html">officially released</a> as part of Google Play services and can be used to super-charge your fitness apps with a simple API for working with sensors, recording activity data, and reading the user&#8217;s aggregated fitness data.</p>

<p>In this release, we&#8217;ve made it easier for developers to add activity segments (predefined time periods of running, walking, cycling, etc) when inserting <a href="https://developers.google.com/fit/android/sessions?utm_campaign=playservices65-1114&#38;utm_source=gdbc&#38;utm_medium=blog">sessions</a>, making it easy to support pauses or multiple activity type workouts. We&#8217;ll also be adding additional samples to help kick-start your Google Fit integration.</p>

<h3>Granular Dependency Management</h3>

<p>As we&#8217;ve continued to add more APIs across the wide range of Google services, it can be hard to maintain a lean app, particularly if you're only using a portion of the available APIs. Now with Google Play services 6.5, you&#8217;ll be able to depend only on a minimal common library and the exact APIs your app needs. This makes it very lightweight to get started with Google Play services.</p>

<h3>SDK Now Available</h3>
<p>You can get started developing today by downloading the <b>Google Play services SDK from the Android SDK Manager</b>.</p>

<p>To learn more about Google Play services and the APIs available to you through it, visit the <a href="http://developer.android.com/google/play-services/index.html?utm_campaign=playservices65-1114&#38;utm_source=dac&#38;utm_medium=blog">Google Play Services section on the Android Developer site</a>.</p>

<!--[Interactive video]  --> 

<div><div><a href="https://plus.google.com/108967384991768947849/posts/1CnbSy2ud7w"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/1CnbSy2ud7w"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/1CnbSy2ud7w"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<i>Posted by <a href="https://plus.google.com/u/0/+IanLake">Ian Lake</a>, Developer Advocate</i>

<p>To offer more seamless integration of Google products within your app, <b>we've now rolled out Google Play services 6.5</b>.</p>

<p>Google Play services 6.5 includes new features in Google Maps, Google Drive and Google Wallet as well as the recently launched Google Fit API. We are also providing developers with more granular control over which Google Play services APIs your app depends on to help you maintain a lean app.</p>

<h3>Google Maps</h3>
<p>We’re making it easier to get directions to places from your app! The Google Maps Android API now offers a map toolbar to let users open Google Maps and immediately get directions and turn by turn navigation to the selected marker. This map toolbar will show by default when you compile against Google Play services 6.5.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-4BNREC0Jojo/VGo7ahW35wI/AAAAAAAABAc/9thZl94F6fY/s1600/GMS%2B-%2BRelease%2BBlog%2BNacho%2B-%2BMap%2BToolbar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-4BNREC0Jojo/VGo7ahW35wI/AAAAAAAABAc/9thZl94F6fY/s640/GMS%2B-%2BRelease%2BBlog%2BNacho%2B-%2BMap%2BToolbar.png" /></a></div>

<p>In addition, there is also a new ‘lite mode’ map option, ideal for situations where you want to provide a number of smaller maps, or a map that is so small that meaningful interaction is impractical, such as a thumbnail in a list. A lite mode map is a bitmap image of a map at a specified location and zoom level. </p>

<p>In lite mode, markers and shapes are drawn client-side on top of the static image, so you still have full control over them. Lite mode supports all of the map types, the <a href="https://developers.google.com/maps/documentation/android/location?utm_campaign=playservices65-1114&utm_source=gdbc&utm_medium=blog#the_my_location_layer">My Location</a> layer, and a subset of the functionality of a fully-interactive map. Users can tap on the map to launch Google Maps when they need more details.</p>

<p>The Google Maps Android API also exposes a new <code>getMapAsync(OnMapReadyCallback)</code> method to <code>MapFragment</code> and <code>MapView</code> which will notify you exactly when the map is ready. This serves as a replacement for the now deprecated <code>getMap()</code> method. </p>

<p>We’re also exposing the Google Maps for Android app intents available to your apps including displaying the map, searching, starting turn by turn navigation, and opening Street View so you can build upon the familiar and powerful maps already available on the device.<p/>

<h3>Drive</h3>
<p>You can now add both public and application private custom file properties to a Drive file which can be used to build very efficient search queries and allow apps to save information which is guaranteed to persist across editing by other apps.</p>

<p>We’ve also made it even easier to make syncing your files to Drive both user and battery friendly with the ability to control when files are uploaded by network type or charging status and cancel pending uploads.</p>

<h3>Google Wallet</h3>
<p>In addition to the existing ‘Buy with Google’ button available to quickly purchase goods & services using Google Wallet, this release adds a ‘Donate with Google’ button for providing the same ease of use in collecting donations.</p>

<h3>Google Fit</h3>

<p>The Google Fit SDK was recently <a href="http://googledevelopers.blogspot.com/2014/10/google-fit-sdk-available-now.html">officially released</a> as part of Google Play services and can be used to super-charge your fitness apps with a simple API for working with sensors, recording activity data, and reading the user’s aggregated fitness data.</p>

<p>In this release, we’ve made it easier for developers to add activity segments (predefined time periods of running, walking, cycling, etc) when inserting <a href="https://developers.google.com/fit/android/sessions?utm_campaign=playservices65-1114&utm_source=gdbc&utm_medium=blog">sessions</a>, making it easy to support pauses or multiple activity type workouts. We’ll also be adding additional samples to help kick-start your Google Fit integration.</p>

<h3>Granular Dependency Management</h3>

<p>As we’ve continued to add more APIs across the wide range of Google services, it can be hard to maintain a lean app, particularly if you're only using a portion of the available APIs. Now with Google Play services 6.5, you’ll be able to depend only on a minimal common library and the exact APIs your app needs. This makes it very lightweight to get started with Google Play services.</p>

<h3>SDK Now Available</h3>
<p>You can get started developing today by downloading the <b>Google Play services SDK from the Android SDK Manager</b>.</p>

<p>To learn more about Google Play services and the APIs available to you through it, visit the <a href="http://developer.android.com/google/play-services/index.html?utm_campaign=playservices65-1114&utm_source=dac&utm_medium=blog">Google Play Services section on the Android Developer site</a>.</p>

<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/fvtMtfCuEpw" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:2em; margin-left: 70px;" width="560"></iframe> 

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/1CnbSy2ud7w" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/1CnbSy2ud7w" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/1CnbSy2ud7w" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/google-play-services-6-5-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>EyeEm Improves User Engagement through Android Design</title>
		<link>https://googledata.org/google-android/eyeem-improves-user-engagement-through-android-design/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=eyeem-improves-user-engagement-through-android-design</link>
		<comments>https://googledata.org/google-android/eyeem-improves-user-engagement-through-android-design/#comments</comments>
		<pubDate>Wed, 12 Nov 2014 18:24:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=caf66997c7e29f3fc252d2552736f7b6</guid>
		<description><![CDATA[<p><em>By Leticia Lago, Google Play team</em></p>
<p><a href="http://www.eyeem.com/">EyeEm</a> is a global community for photographers that goes beyond sharing photos with friends: photographers can share tips, take part in missions, and sell their photos. To win more customers, a design that best showcases photos from the community is very important for this Berlin-based company. </p>

<p>With the idea of bringing a beautiful, simple experience to their fast growing base of Android users, the team recently embarked on a redesign of their <a href="https://play.google.com/store/apps/details?id=com.baseapp.eyeem&#38;hl=en">app</a>. Following the <a href="http://developer.android.com/design/get-started/principles.html?utm_campaign=eyeem-1114&#38;utm_source=dac&#38;utm_medium=blog">Android design principles</a>, they stripped back the UI and simplified navigation. This allowed them to deliver a more streamlined app experience, along with  a clean, crisp design that presents photos beautifully. And it paid off. According to Ramzi Rizk, EyeEm co-founder and CTO, &#8220;Our new design helped improve user growth and retention across the board, in every single metric we have.&#8221; </p>

<p>In the following video, Rizk and colleague Matias Castello, Product Head of Mobile, talk about their experience applying Android design to their app and the improvements in user engagement it has achieved:</p>

<!--[Interactive video]  -->  <br /><h3>Resources to help you with design</h3>

<p>To learn more about how to design your apps for Android devices and achieve great user engagement and retention, be sure to check out these resources: </p>

<ul><li><a href="https://developer.android.com/design/index.html?utm_campaign=eyeem-1114&#38;utm_source=dac&#38;utm_medium=blog">Android Design</a> &#8212; all the information you need to understand and implement Android design principles in your app. </li> 

<li><a href="https://www.youtube.com/watch?v=p4gmvHyuZzw&#38;list=PLOU2XLYxmsIJFcNKpAV9B_aQmz2h68fw_">Design.Bytes</a> &#8212; presented by the Google designers who created Material Design and apps, such as the Google I/O 2014 app, these videos provide a fun and informative introduction to Android design.</li></ul><div><div><a href="https://plus.google.com/108967384991768947849/posts/KMbjLcFi5An"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/KMbjLcFi5An"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/KMbjLcFi5An"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><em>By Leticia Lago, Google Play team</em></p>
<p><a href="http://www.eyeem.com/">EyeEm</a> is a global community for photographers that goes beyond sharing photos with friends: photographers can share tips, take part in missions, and sell their photos. To win more customers, a design that best showcases photos from the community is very important for this Berlin-based company. </p>

<p>With the idea of bringing a beautiful, simple experience to their fast growing base of Android users, the team recently embarked on a redesign of their <a href="https://play.google.com/store/apps/details?id=com.baseapp.eyeem&hl=en">app</a>. Following the <a href="http://developer.android.com/design/get-started/principles.html?utm_campaign=eyeem-1114&utm_source=dac&utm_medium=blog">Android design principles</a>, they stripped back the UI and simplified navigation. This allowed them to deliver a more streamlined app experience, along with  a clean, crisp design that presents photos beautifully. And it paid off. According to Ramzi Rizk, EyeEm co-founder and CTO, “Our new design helped improve user growth and retention across the board, in every single metric we have.” </p>

<p>In the following video, Rizk and colleague Matias Castello, Product Head of Mobile, talk about their experience applying Android design to their app and the improvements in user engagement it has achieved:</p>

<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/6i-efBe75BA?list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:2em; margin-left: 70px;" width="560"></iframe>  <br />

<h3>Resources to help you with design</h3>

<p>To learn more about how to design your apps for Android devices and achieve great user engagement and retention, be sure to check out these resources: </p>

<ul><li><a href="https://developer.android.com/design/index.html?utm_campaign=eyeem-1114&utm_source=dac&utm_medium=blog">Android Design</a> — all the information you need to understand and implement Android design principles in your app. </li> 

<li><a href="https://www.youtube.com/watch?v=p4gmvHyuZzw&list=PLOU2XLYxmsIJFcNKpAV9B_aQmz2h68fw_">Design.Bytes</a> — presented by the Google designers who created Material Design and apps, such as the Google I/O 2014 app, these videos provide a fun and informative introduction to Android design.</li></ul>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/KMbjLcFi5An" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/KMbjLcFi5An" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/KMbjLcFi5An" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/eyeem-improves-user-engagement-through-android-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Utilities for C/C++ Android Developers: fplutil 1.0</title>
		<link>https://googledata.org/google-android/utilities-for-cc-android-developers-fplutil-1-0-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=utilities-for-cc-android-developers-fplutil-1-0-2</link>
		<comments>https://googledata.org/google-android/utilities-for-cc-android-developers-fplutil-1-0-2/#comments</comments>
		<pubDate>Mon, 10 Nov 2014 18:04:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=b604c9e537089ae4e9f365e0543716f5</guid>
		<description><![CDATA[<p><i>By <a href="https://www.google.com/+StewartMiles">Stewart Miles</a>, Fun Propulsion Labs at Google*</i></p>

<p>Today we're announcing the 1.0 release of <a href="http://google.github.io/fplutil">fplutil</a>, a set of small libraries and tools by Fun Propulsion Labs at Google (the FPL in fplutil) that is useful when developing <a href="https://developer.android.com/tools/sdk/ndk/index.html">C/C++ applications</a> for <a href="http://www.android.com/">Android</a>.</p>

<p><a href="http://google.github.io/fplutil">fplutil</a> introduces the following:</p><p>

</p><ul><li><b>build_all_android.py</b>, an all-in-one build script that allows you to build (with the Android NDK), install and run native (C/C++) Android apps from the command line. This is ideal for build automation, but is also useful in a developer&#8217;s compile/run loop.</li>
<li><b>buildutil</b> performs the configuration, build and archive steps of Android and Linux C/C++ applications using a suite of Python modules. This suite of modules can automate builds in a continuous integration environment. This framework uses legacy tools in the Android Development Toolkit.</li>
<li><b>libfplutil</b> enables C/C++ developers to write traditional applications (like <a href="http://en.wikipedia.org/wiki/%22Hello,_world!%22_program">Hello World</a>) using "main()" and "printf()" on Android.</li>
<li><b>android_ndk_perf.py</b> is a desktop tool that enables native (C/C++) developers to measure the CPU utilization of their applications on Android, guiding their optimization efforts.  An example report is shown below:</li></ul><div><a href="http://3.bp.blogspot.com/-hI0C-kcHZ9A/VF1crUhr4JI/AAAAAAAABAM/hyGr4uQD2Mo/s1600/fplutil-profiler.png"><img border="0" src="http://3.bp.blogspot.com/-hI0C-kcHZ9A/VF1crUhr4JI/AAAAAAAABAM/hyGr4uQD2Mo/s640/fplutil-profiler.png"></a></div>

<p>android_ndk_perf.py example HTML report</p>


<p>You can download the latest open source release from our github page. We invite you to contribute to the project and join our discussion list! </p>

<p>*Fun Propulsion Labs is a team within Google that's dedicated to advancing gaming on Android and other platforms.</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/NNbwMkQS2nf"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/NNbwMkQS2nf"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/NNbwMkQS2nf"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><i>By <a href="https://www.google.com/+StewartMiles">Stewart Miles</a>, Fun Propulsion Labs at Google*</i></p>

<p>Today we're announcing the 1.0 release of <a href="http://google.github.io/fplutil">fplutil</a>, a set of small libraries and tools by Fun Propulsion Labs at Google (the FPL in fplutil) that is useful when developing <a href="https://developer.android.com/tools/sdk/ndk/index.html">C/C++ applications</a> for <a href="http://www.android.com/">Android</a>.</p>

<p><a href="http://google.github.io/fplutil">fplutil</a> introduces the following:<p>

<ul><li><b>build_all_android.py</b>, an all-in-one build script that allows you to build (with the Android NDK), install and run native (C/C++) Android apps from the command line. This is ideal for build automation, but is also useful in a developer’s compile/run loop.</li>
<li><b>buildutil</b> performs the configuration, build and archive steps of Android and Linux C/C++ applications using a suite of Python modules. This suite of modules can automate builds in a continuous integration environment. This framework uses legacy tools in the Android Development Toolkit.</li>
<li><b>libfplutil</b> enables C/C++ developers to write traditional applications (like <a href="http://en.wikipedia.org/wiki/%22Hello,_world!%22_program">Hello World</a>) using "main()" and "printf()" on Android.</li>
<li><b>android_ndk_perf.py</b> is a desktop tool that enables native (C/C++) developers to measure the CPU utilization of their applications on Android, guiding their optimization efforts.  An example report is shown below:</li></ul>

<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-hI0C-kcHZ9A/VF1crUhr4JI/AAAAAAAABAM/hyGr4uQD2Mo/s1600/fplutil-profiler.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-hI0C-kcHZ9A/VF1crUhr4JI/AAAAAAAABAM/hyGr4uQD2Mo/s640/fplutil-profiler.png" /></a></div>

<p style="clear: both; text-align: center; color:#666;">android_ndk_perf.py example HTML report</p>


<p>You can download the latest open source release from our github page. We invite you to contribute to the project and join our discussion list! </p>

<p>*Fun Propulsion Labs is a team within Google that's dedicated to advancing gaming on Android and other platforms.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/NNbwMkQS2nf" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/NNbwMkQS2nf" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/NNbwMkQS2nf" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/utilities-for-cc-android-developers-fplutil-1-0-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Improved Game Testing with Google Play Games Management API</title>
		<link>https://googledata.org/google-android/improved-game-testing-with-google-play-games-management-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=improved-game-testing-with-google-play-games-management-api</link>
		<comments>https://googledata.org/google-android/improved-game-testing-with-google-play-games-management-api/#comments</comments>
		<pubDate>Thu, 06 Nov 2014 22:30:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=082bf3e39c1460a976820632a9f2cd70</guid>
		<description><![CDATA[<p><em>By Ben Frenkel, Google Play Games team</em></p>

<div>

 <img border="0" src="http://3.bp.blogspot.com/-k33rf398Lqw/UlRUMQQRUNI/AAAAAAAAClM/pSwz2YgQpmY/s800/gps-play_games_logo.png" width="260" alt=""></div>

<p>We&#8217;re always looking to help developers improve the gaming experience for their users on Google Play. So today, we've expanded our existing suite of <a href="https://developers.google.com/games/services/management/api/">Management APIs</a> to let you fully control all resources in your Google Play Games-enabled game during development and testing, with better support for alpha and beta groups.

</p><p>Let&#8217;s take a quick dive into the expanded offering. 

</p><ul><li><b>Reset a single tester&#8217;s state for any resource</b> (e.g., achievements, leaderboards), or do it for all resources at once. For example, you can now completely reset a given tester&#8217;s data if they&#8217;ve ended up in a bad state due to an experimental build. You can do this for individual instances or all instances of achievements, events, quests, or leaderboards scores. </li>

<li><b>Reset the state of a single draft resource</b> for all testers, or do it for all draft resources at once. You can now reset all draft leaderboards in your game before publishing with a single API call. This ensures the members of your alpha or beta communities don&#8217;t have an unfair advantage on release day. You can do this for individual instances or all instances of achievements, events, quests, or leaderboards scores. </li>

<li><b>Clear global match state</b> for all real time or turn based matches composed solely of testers. You can now reset all turn-based matches on release day. This will ensure that all matches from that point on are on the release version of the game. This is available for both real-time or turn-based games.</li>
</ul><p>These updates make it far less complex and error prone to manage data during testing, saving you time and improving the rate at which you can make and test changes to your games.</p>

<h3>Play Games Management API background</h3>

<p>The Management API is a set of tools that enable developers to do things like manage tester data and clean up bogus leaderboard score submissions. Developers can also use the API to control and manipulate resources (e.g., achievements, events, multiplayer match data).

</p><h3>Getting started</h3>

<p>You can get started with the  latest version of the Management API right now. Review the updated <a href="https://developers.google.com/games/services/management/api/">API reference</a> documentation, <a href="https://github.com/playgameservices/management-tools/tree/master/demo-management-tools">start with an example management interface</a>, or download the sample client libraries to get on your way.</p>





<div><div><a href="https://plus.google.com/108967384991768947849/posts/P49QwMN2hqG"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/P49QwMN2hqG"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/P49QwMN2hqG"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><em>By Ben Frenkel, Google Play Games team</em></p>

<div style="float:right;padding-top:0em;margin:1em 0 2em 2em;max-width:45%;">

 <img border="0" src="http://3.bp.blogspot.com/-k33rf398Lqw/UlRUMQQRUNI/AAAAAAAAClM/pSwz2YgQpmY/s800/gps-play_games_logo.png" width="260" alt="" 
style="border-radius: 6px;padding:0;margin:0;">

</div>

<p>We’re always looking to help developers improve the gaming experience for their users on Google Play. So today, we've expanded our existing suite of <a href="https://developers.google.com/games/services/management/api/">Management APIs</a> to let you fully control all resources in your Google Play Games-enabled game during development and testing, with better support for alpha and beta groups.

<p>Let’s take a quick dive into the expanded offering. 

<ul>
<li><b>Reset a single tester’s state for any resource</b> (e.g., achievements, leaderboards), or do it for all resources at once. For example, you can now completely reset a given tester’s data if they’ve ended up in a bad state due to an experimental build. You can do this for individual instances or all instances of achievements, events, quests, or leaderboards scores. </li>

<li><b>Reset the state of a single draft resource</b> for all testers, or do it for all draft resources at once. You can now reset all draft leaderboards in your game before publishing with a single API call. This ensures the members of your alpha or beta communities don’t have an unfair advantage on release day. You can do this for individual instances or all instances of achievements, events, quests, or leaderboards scores. </li>

<li><b>Clear global match state</b> for all real time or turn based matches composed solely of testers. You can now reset all turn-based matches on release day. This will ensure that all matches from that point on are on the release version of the game. This is available for both real-time or turn-based games.</li>
</ul>

<p>These updates make it far less complex and error prone to manage data during testing, saving you time and improving the rate at which you can make and test changes to your games.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Play Games Management API background</h3>

<p>The Management API is a set of tools that enable developers to do things like manage tester data and clean up bogus leaderboard score submissions. Developers can also use the API to control and manipulate resources (e.g., achievements, events, multiplayer match data).

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Getting started</h3>

<p>You can get started with the  latest version of the Management API right now. Review the updated <a href="https://developers.google.com/games/services/management/api/">API reference</a> documentation, <a href="https://github.com/playgameservices/management-tools/tree/master/demo-management-tools">start with an example management interface</a>, or download the sample client libraries to get on your way.</p>





<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/P49QwMN2hqG" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/P49QwMN2hqG" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/P49QwMN2hqG" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/improved-game-testing-with-google-play-games-management-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Introducing a New Guide, “The Secrets to App Success on Google Play”</title>
		<link>https://googledata.org/google-android/introducing-a-new-guide-the-secrets-to-app-success-on-google-play/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=introducing-a-new-guide-the-secrets-to-app-success-on-google-play</link>
		<comments>https://googledata.org/google-android/introducing-a-new-guide-the-secrets-to-app-success-on-google-play/#comments</comments>
		<pubDate>Thu, 06 Nov 2014 16:31:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=9163829527bcbed274d82a6c2ffd229e</guid>
		<description><![CDATA[<p><em>By Dom Elliott, Google Play team</em></p>

<p>With more than 50 billion apps and games downloaded in total, Google Play is helping developers and content creators around the world build successful businesses. In fact, we paid out more than <a href="http://android-developers.blogspot.com/2014/06/google-io-design-develop-distribute.html">$5 billion</a> over the last year to developers for creating incredible apps that are changing the way people communicate, live, work, and play.</p>

<p>Developing an app or game and distributing it on Google Play is a good start, but it&#8217;s only the first step to building a sustainable business. That&#8217;s why we&#8217;ve written &#8220;<a href="https://developer.android.com/distribute/googleplay/guide.html">The Secrets to App Success on Google Play</a>,&#8221; a detailed playbook on the best practices and tools you can use to maximize the reach, retention, and revenue of your new app.</p>

<a href="http://developer.android.com/distribute/googleplay/guide.html"><img border="0" src="http://3.bp.blogspot.com/-jDTK0pbaHp4/VFrTWBc0KhI/AAAAAAAAA_c/jU_XFOYW3RA/s800/playguide.png"></a>

<p>The guide is separated into the following sections:</p>

<ul><li><b>Publishing on Google Play</b> &#8212; using the Google Play Developer Console to distribute your app to over 1 billion Android users worldwide.</li>
<li><b>Quality</b> &#8212; The fundamentals of building a great app and an insight into the Google Play guidelines and policies.</li>
<li><b>Discoverability &#38; reach</b> &#8212; Maximizing your app's discoverability and reaching the widest audience possible.</li>
<li><b>Engagement &#38; retention</b> &#8212; Converting installations into active users and improving user retention.</li>
<li><b>Monetization</b> &#8212; Monetization strategies to generate ongoing, growing revenue streams.</li>
<li><b>Measurement with Google Analytics</b> &#8212; Understanding your users and improving your app experience, conversions, and marketing.</li>
<li><b>Going global</b> &#8212;  Launching your app in local markets around the world.</li>
</ul><p><a href="http://developer.android.com/shareables/distribute/play_dev_guide_secrets_en.pdf" target="_android">Download the guide now in English</a> (PDF, 11MB) or <a href="http://goo.gl/DFjbrS">get it on Google Play</a>. We&#8217;ll release the guide in more languages in the coming months. If you&#8217;re in the US or the UK, we also have a limited number of printed copies that we are offering to send for free. <a href="http://goo.gl/Tqj7TS">Request a printed copy here</a>. </p>

<p>Once you&#8217;ve checked out the guide, we&#8217;d love to hear your feedback so we can continue to improve, <a href="http://goo.gl/kULrYR">let us know what you think</a>.</p>

<div><div><a href="https://plus.google.com/+AndroidDevelopers/posts/"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/+AndroidDevelopers/posts/"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/+AndroidDevelopers/posts/"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><em>By Dom Elliott, Google Play team</em></p>

<p>With more than 50 billion apps and games downloaded in total, Google Play is helping developers and content creators around the world build successful businesses. In fact, we paid out more than <a href="http://android-developers.blogspot.com/2014/06/google-io-design-develop-distribute.html">$5 billion</a> over the last year to developers for creating incredible apps that are changing the way people communicate, live, work, and play.</p>

<p>Developing an app or game and distributing it on Google Play is a good start, but it’s only the first step to building a sustainable business. That’s why we’ve written “<a href="https://developer.android.com/distribute/googleplay/guide.html">The Secrets to App Success on Google Play</a>,” a detailed playbook on the best practices and tools you can use to maximize the reach, retention, and revenue of your new app.</p>

<a href="http://developer.android.com/distribute/googleplay/guide.html"><img border="0" src="http://3.bp.blogspot.com/-jDTK0pbaHp4/VFrTWBc0KhI/AAAAAAAAA_c/jU_XFOYW3RA/s800/playguide.png" /></a>

<p>The guide is separated into the following sections:</p>

<ul>
<li><b>Publishing on Google Play</b> &mdash; using the Google Play Developer Console to distribute your app to over 1 billion Android users worldwide.</li>
<li><b>Quality</b> &mdash; The fundamentals of building a great app and an insight into the Google Play guidelines and policies.</li>
<li><b>Discoverability &amp; reach</b> &mdash; Maximizing your app's discoverability and reaching the widest audience possible.</li>
<li><b>Engagement &amp; retention</b> &mdash; Converting installations into active users and improving user retention.</li>
<li><b>Monetization</b> &mdash; Monetization strategies to generate ongoing, growing revenue streams.</li>
<li><b>Measurement with Google Analytics</b> &mdash; Understanding your users and improving your app experience, conversions, and marketing.</li>
<li><b>Going global</b> &mdash;  Launching your app in local markets around the world.</li>
</ul>

<p><a href="http://developer.android.com/shareables/distribute/play_dev_guide_secrets_en.pdf" >Download the guide now in English</a> (PDF, 11MB) or <a href="http://goo.gl/DFjbrS">get it on Google Play</a>. We’ll release the guide in more languages in the coming months. If you’re in the US or the UK, we also have a limited number of printed copies that we are offering to send for free. <a href="http://goo.gl/Tqj7TS">Request a printed copy here</a>. </p>

<p>Once you’ve checked out the guide, we’d love to hear your feedback so we can continue to improve, <a href="http://goo.gl/kULrYR">let us know what you think</a>.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/+AndroidDevelopers/posts/" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/+AndroidDevelopers/posts/" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/+AndroidDevelopers/posts/" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/introducing-a-new-guide-the-secrets-to-app-success-on-google-play/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Going Global: Space Ape Games Finds Success in Japan</title>
		<link>https://googledata.org/google-android/going-global-space-ape-games-finds-success-in-japan/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=going-global-space-ape-games-finds-success-in-japan</link>
		<comments>https://googledata.org/google-android/going-global-space-ape-games-finds-success-in-japan/#comments</comments>
		<pubDate>Wed, 05 Nov 2014 18:49:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=0c8f73a7250d362cde7b244a2da24dd3</guid>
		<description><![CDATA[<p><em>By Leticia Lago, Google Play team</em></p>


<p>There are many ways to find success for a game on the international stage: it&#8217;s not a simple formula, it&#8217;s a combination of things, ranging from localizing effectively to choosing the right price. London-based <a href="http://www.spaceapegames.com/">Space Ape Games</a> brought together a range of resources and tactics to take <a href="https://play.google.com/store/apps/details?id=com.spaceapegames.samuraisiege">Samurai Siege</a> into Japan, growing that market to contribute up to 15% of the game&#8217;s average $55,000 daily earnings. </p>

<p>John Earner, Simon Hade, and Toby Moore founded Space Ape Games in 2012 with just 12 people. Their goal, to create amazing multiplayer mobile games. Samurai Siege is their first game and they found that Android players have great retention and monetize well. &#8220;Our experience has been great with Google Play. We have found that it is half of our audience and half of our business,&#8221; says John.</p>

<p>Check out the video below to hear more about how Space Ape expanded to Japan. </p>


<!--[Interactive video]  -->  <br /><h3>Resources to help you grow globally</h3>

<p>You can grow your games business worldwide too, and maximize your distribution potential with Google Play. Be sure to check out these resources: </p>

<ul><li><a href="https://www.youtube.com/watch?v=q9c2RiicFQA">Reaching players in new territories panel [VIDEO]</a> &#8212; Hear first hand experiences from game developers who have successfully taken games to international markets. Antonin Lhuillier (Gameloft), Anatoly Ropotov (Game Insight), Saad Choudri (Miniclip), Eyal Rabinovich (Playscape), and Joe Raeburn (Space Ape Games) share their tips for localization, culturalization, and more.</li>

<li><a href="https://www.youtube.com/watch?v=fCugnJZnWsI">Go Global session [VIDEO]</a> &#8212; Hyunse Chang, from the Google Play Apps and Games team in Korea, shares key insights into APAC markets and trends among successful apps and games in the region. Leverage these pro tips and best practices to expand your reach to a wider audience.</li>

<li><a href="http://developer.android.com/distribute/tools/localization-checklist.html">Localization checklist</a> &#8212; This document identifies the essential aspects of localization, to help you get your app ready for a successful worldwide launch on Google Play.</li>

</ul><div><div><a href="https://plus.google.com/108967384991768947849/posts/43Th3F1Kf2Z"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/43Th3F1Kf2Z"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/43Th3F1Kf2Z"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><em>By Leticia Lago, Google Play team</em></p>


<p>There are many ways to find success for a game on the international stage: it’s not a simple formula, it’s a combination of things, ranging from localizing effectively to choosing the right price. London-based <a href="http://www.spaceapegames.com/">Space Ape Games</a> brought together a range of resources and tactics to take <a href="https://play.google.com/store/apps/details?id=com.spaceapegames.samuraisiege">Samurai Siege</a> into Japan, growing that market to contribute up to 15% of the game’s average $55,000 daily earnings. </p>

<p>John Earner, Simon Hade, and Toby Moore founded Space Ape Games in 2012 with just 12 people. Their goal, to create amazing multiplayer mobile games. Samurai Siege is their first game and they found that Android players have great retention and monetize well. “Our experience has been great with Google Play. We have found that it is half of our audience and half of our business,” says John.</p>

<p style="margin-bottom:2em;">Check out the video below to hear more about how Space Ape expanded to Japan. </p>


<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/tCdvGgiX5cs" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:2em; margin-left: 70px;" width="560"></iframe>  <br />



<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:0em;">Resources to help you grow globally</h3>

<p>You can grow your games business worldwide too, and maximize your distribution potential with Google Play. Be sure to check out these resources: </p>

<ul>
<li><a href="https://www.youtube.com/watch?v=q9c2RiicFQA">Reaching players in new territories panel [VIDEO]</a> &mdash; Hear first hand experiences from game developers who have successfully taken games to international markets. Antonin Lhuillier (Gameloft), Anatoly Ropotov (Game Insight), Saad Choudri (Miniclip), Eyal Rabinovich (Playscape), and Joe Raeburn (Space Ape Games) share their tips for localization, culturalization, and more.</li>

<li><a href="https://www.youtube.com/watch?v=fCugnJZnWsI">Go Global session [VIDEO]</a> &mdash; Hyunse Chang, from the Google Play Apps and Games team in Korea, shares key insights into APAC markets and trends among successful apps and games in the region. Leverage these pro tips and best practices to expand your reach to a wider audience.</li>

<li><a href="http://developer.android.com/distribute/tools/localization-checklist.html">Localization checklist</a> &mdash; This document identifies the essential aspects of localization, to help you get your app ready for a successful worldwide launch on Google Play.</li>

</ul>
<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/43Th3F1Kf2Z" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/43Th3F1Kf2Z" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/43Th3F1Kf2Z" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>







]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/going-global-space-ape-games-finds-success-in-japan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Your Chance to be on TV!</title>
		<link>https://googledata.org/google-android/your-chance-to-be-on-tv/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=your-chance-to-be-on-tv</link>
		<comments>https://googledata.org/google-android/your-chance-to-be-on-tv/#comments</comments>
		<pubDate>Mon, 03 Nov 2014 21:38:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=f2e4fa2f6e3afe249acc84596c58bb60</guid>
		<description><![CDATA[<p><em>By <a href="http://plus.google.com/+TarjeiVassbotn">Tarjei Vassbotn</a> and <a href="https://plus.google.com/+DanGalpin">Dan Galpin</a>, Developer Advocates, Android TV</em></p>



<p>We&#8217;re excited to see the launch of <a href="http://www.google.com/intl/all/nexus/player/">Nexus Player</a>, the first consumer streaming media player running Android TV. Android TV delivers an entertainment experience tailored for users, including movies, shows, games and more.<br />Now is a great time to develop apps for Android TV that reach a whole new audience.</p>


<p>Starting today, you can <b>publish your apps for Android TV on Google Play</b>, the largest digital store for apps and games. We&#8217;ve provided guidance on how to get started building great apps for Android TV in this post.</p>


<div>
<img src="http://3.bp.blogspot.com/-KnIeHC2nYqw/VEC4VL5zXlI/AAAAAAAAA2Y/046vNwlDWHU/s700/ATV_Dev_Site_Image.png"></div>

<div><em><p>"Google has done an insanely good job to ease the developer&#8217;s task of creating a TV application, mainly thanks to the Leanback support library. It literally takes 2 hours to create a fully working and possibly fancy app, which is awesome."</p>

<p> - <a href="https://medium.com/building-for-android-tv/building-for-android-tv-episode-1-2d03f9ba541e">Sebastiano Gottardo</a></p></em>
</div>

<h3>A high bar for quality experiences</h3>

<p>We want to offer the best possible experience for users to enjoy your apps and games. To make this possible, your Android TV app must <a href="http://developer.android.com/distribute/essentials/quality/tv.html">meet the basic requirements for usability</a>. When your app meets these requirements, users will be able to discover and download it directly on their Android TV devices.</p>



<p>Even if you have already uploaded your app to the Google Play Developer Console, you will need to add TV graphics and screenshots, and opt-in to distribution on TV on the Pricing &#38; Distribution page. For complete information about the requirements and process of publishing your Android TV app for Google Play, make sure to check out the <a href="http://developer.android.com/distribute/googleplay/tv.html">publishing documentation</a>.</p>

<h3>Get started!</h3>

<p>With our Leanback Library we&#8217;ve made it easy for you to extend your existing app to the TV screen or even build a completely new app for Android TV. For a quick look at the Leanback Library, check out this <a href="https://www.youtube.com/watch?v=72K1VhjoL98&#38;utm_campaign=android-TV-1114&#38;utm_source=dac&#38;utm_medium=blog">DevBytes video</a>.</p>


<p>We&#8217;ve only begun scratching the surface of what&#8217;s possible with this new form factor, and we are very excited to see what you will build, <a href="https://developer.android.com/tv/index.html">start developing today</a>!</p>


<div><div><a href="https://plus.google.com/+AndroidDevelopers/posts/XCtTwBRFEh7"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/+AndroidDevelopers/posts/XCtTwBRFEh7"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/+AndroidDevelopers/posts/XCtTwBRFEh7"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><em>By <a href="http://plus.google.com/+TarjeiVassbotn">Tarjei Vassbotn</a> and <a href="https://plus.google.com/+DanGalpin">Dan Galpin</a>, Developer Advocates, Android TV</em></p>



<p>We’re excited to see the launch of <a href="http://www.google.com/intl/all/nexus/player/">Nexus Player</a>, the first consumer streaming media player running Android TV. Android TV delivers an entertainment experience tailored for users, including movies, shows, games and more.<br>Now is a great time to develop apps for Android TV that reach a whole new audience.</p>


<p>Starting today, you can <b>publish your apps for Android TV on Google Play</b>, the largest digital store for apps and games. We’ve provided guidance on how to get started building great apps for Android TV in this post.</p>


<div style="margin-left:0">
<img style="display: block;margin-left:auto;margin-right:auto;" src="http://3.bp.blogspot.com/-KnIeHC2nYqw/VEC4VL5zXlI/AAAAAAAAA2Y/046vNwlDWHU/s700/ATV_Dev_Site_Image.png" />
</div>

<div style="width:35%;float:right;font-size:14pt;padding:1.5em 0 0 1.5em"><em><p>"Google has done an insanely good job to ease the developer’s task of creating a TV application, mainly thanks to the Leanback support library. It literally takes 2 hours to create a fully working and possibly fancy app, which is awesome."</p>

<p> - <a href="https://medium.com/building-for-android-tv/building-for-android-tv-episode-1-2d03f9ba541e">Sebastiano Gottardo</a></em>
</div>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">A high bar for quality experiences</h3>

<p>We want to offer the best possible experience for users to enjoy your apps and games. To make this possible, your Android TV app must <a href="http://developer.android.com/distribute/essentials/quality/tv.html">meet the basic requirements for usability</a>. When your app meets these requirements, users will be able to discover and download it directly on their Android TV devices.</p>



<p>Even if you have already uploaded your app to the Google Play Developer Console, you will need to add TV graphics and screenshots, and opt-in to distribution on TV on the Pricing & Distribution page. For complete information about the requirements and process of publishing your Android TV app for Google Play, make sure to check out the <a href="http://developer.android.com/distribute/googleplay/tv.html">publishing documentation</a>.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Get started!</h3>

<p>With our Leanback Library we’ve made it easy for you to extend your existing app to the TV screen or even build a completely new app for Android TV. For a quick look at the Leanback Library, check out this <a href="https://www.youtube.com/watch?v=72K1VhjoL98&utm_campaign=android-TV-1114&utm_source=dac&utm_medium=blog">DevBytes video</a>.</p>


<p>We’ve only begun scratching the surface of what’s possible with this new form factor, and we are very excited to see what you will build, <a href="https://developer.android.com/tv/index.html">start developing today</a>!</p>


<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/+AndroidDevelopers/posts/XCtTwBRFEh7" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/+AndroidDevelopers/posts/XCtTwBRFEh7" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/+AndroidDevelopers/posts/XCtTwBRFEh7" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/your-chance-to-be-on-tv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>The fastest route between voice search and your app</title>
		<link>https://googledata.org/google-android/the-fastest-route-between-voice-search-and-your-app/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-fastest-route-between-voice-search-and-your-app</link>
		<comments>https://googledata.org/google-android/the-fastest-route-between-voice-search-and-your-app/#comments</comments>
		<pubDate>Wed, 29 Oct 2014 19:46:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=57a71e1433c5c8a0bb6a4295592aa3b0</guid>
		<description><![CDATA[<i>By <a href="https://www.google.com/+JarekWilkiewicz">Jarek Wilkiewicz</a>, Developer Advocate, Google Search</i>

<p>How many lines of code will it take to let your users say <i>Ok Google</i>, and search for something in your app? Hardly any. Starting today, all you need is a small addition to your <code>AndroidManifest.xml</code> in order to connect the Google Now <code><a href="http://developer.android.com/guide/components/intents-common.html?utm_campaign=voice-search-1014&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=gdbc&#38;utm_medium=blog#Search">SEARCH_ACTION</a></code> with your <a href="http://developer.android.com/guide/topics/search/search-dialog.html?utm_campaign=voice-search-1014&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=gdbc&#38;utm_medium=blog#DeclaringSearchableActivity">searchable activity</a>: </p>

<pre>&#60;activity android:name=".SearchableActivity"&#62;
    &#60;intent-filter&#62;
        <b>&#60;action android:name="com.google.android.gms.actions.SEARCH_ACTION"/&#62;
        &#60;category android:name="android.intent.category.DEFAULT"/&#62;</b>
    &#60;/intent-filter&#62;
&#60;/activity&#62;</pre>

<p>Once you make these changes, your app can receive the <code><a href="http://developer.android.com/guide/components/intents-common.html?utm_campaign=voice-search-1014&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=gdbc&#38;utm_medium=blog#Search">SEARCH_ACTION</a></code> intent containing the <code><a href="http://developer.android.com/reference/android/app/SearchManager.html?utm_campaign=voice-search-1014&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=gdbc&#38;utm_medium=blog#QUERY">SearchManager.QUERY</a></code> extra with the search expression. </p>

<p>At Google, we always look for innovative ways to help you improve mobile search and drive user engagement back to your app. For example, users can now say to the Google app: &#8220;<b>Ok Google, search</b> pizza <b>on</b> Eat24&#8221; or &#8220;<b>Ok Google, search for</b> hotels in Maui <b>on</b> TripAdvisor.&#8221; </p>

<div><a href="http://4.bp.blogspot.com/-KL8JQZ8VeCw/VFEoMQxzUfI/AAAAAAAAA_E/XtraIHefdVM/s1600/XYcombinedSmall.gif"><img border="0" src="http://4.bp.blogspot.com/-KL8JQZ8VeCw/VFEoMQxzUfI/AAAAAAAAA_E/XtraIHefdVM/s1600/XYcombinedSmall.gif"></a></div>

<p>This feature is available on English locale Android devices running Jelly Bean and above with the Google <a href="https://play.google.com/store/apps/details?id=com.google.android.googlequicksearchbox&#38;hl=en">app</a> v3.5 or greater. Last but not least, users can enable the <i>Ok Google</i> <a href="http://insidesearch.blogspot.com/2014/06/ok-google-from-any-screen.html">hot-word detection from any screen</a>, which offers them the fastest route between their search command and your app! </p>

<div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/afSRdDQiy1N"><span>Join the discussion on</span></a><br /><a href="https://plus.google.com/108967384991768947849/posts/afSRdDQiy1N"><span>+Android Developers</span></a><br /></div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/afSRdDQiy1N"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a><br /></div></div>]]></description>
				<content:encoded><![CDATA[<i>By <a href="https://www.google.com/+JarekWilkiewicz">Jarek Wilkiewicz</a>, Developer Advocate, Google Search</i>

<p itemprop="description">How many lines of code will it take to let your users say <i>Ok Google</i>, and search for something in your app? Hardly any. Starting today, all you need is a small addition to your <code>AndroidManifest.xml</code> in order to connect the Google Now <code><a href="http://developer.android.com/guide/components/intents-common.html?utm_campaign=voice-search-1014&utm_source=gdbc&utm_medium=blog&utm_source=gdbc&utm_medium=blog#Search">SEARCH_ACTION</a></code> with your <a href="http://developer.android.com/guide/topics/search/search-dialog.html?utm_campaign=voice-search-1014&utm_source=gdbc&utm_medium=blog&utm_source=gdbc&utm_medium=blog#DeclaringSearchableActivity">searchable activity</a>: </p>

<pre class="prettyprint">&lt;activity android:name=".SearchableActivity"&gt;
    &lt;intent-filter&gt;
        <b>&lt;action android:name="com.google.android.gms.actions.SEARCH_ACTION"/&gt;
        &lt;category android:name="android.intent.category.DEFAULT"/&gt;</b>
    &lt;/intent-filter&gt;
&lt;/activity&gt;</pre>

<p>Once you make these changes, your app can receive the <code><a href="http://developer.android.com/guide/components/intents-common.html?utm_campaign=voice-search-1014&utm_source=gdbc&utm_medium=blog&utm_source=gdbc&utm_medium=blog#Search">SEARCH_ACTION</a></code> intent containing the <code><a href="http://developer.android.com/reference/android/app/SearchManager.html?utm_campaign=voice-search-1014&utm_source=gdbc&utm_medium=blog&utm_source=gdbc&utm_medium=blog#QUERY">SearchManager.QUERY</a></code> extra with the search expression. </p>

<p>At Google, we always look for innovative ways to help you improve mobile search and drive user engagement back to your app. For example, users can now say to the Google app: “<b>Ok Google, search</b> pizza <b>on</b> Eat24” or “<b>Ok Google, search for</b> hotels in Maui <b>on</b> TripAdvisor.” </p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-KL8JQZ8VeCw/VFEoMQxzUfI/AAAAAAAAA_E/XtraIHefdVM/s1600/XYcombinedSmall.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-KL8JQZ8VeCw/VFEoMQxzUfI/AAAAAAAAA_E/XtraIHefdVM/s1600/XYcombinedSmall.gif" /></a></div>

<p>This feature is available on English locale Android devices running Jelly Bean and above with the Google <a href="https://play.google.com/store/apps/details?id=com.google.android.googlequicksearchbox&hl=en">app</a> v3.5 or greater. Last but not least, users can enable the <i>Ok Google</i> <a href="http://insidesearch.blogspot.com/2014/06/ok-google-from-any-screen.html">hot-word detection from any screen</a>, which offers them the fastest route between their search command and your app! </p>

<div style="display: inline-block; float: right; line-height: 0;"><br />
<div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/afSRdDQiy1N" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<a href="https://plus.google.com/108967384991768947849/posts/afSRdDQiy1N" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a><br />
</div><br />
<div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/afSRdDQiy1N" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a><br />
</div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/the-fastest-route-between-voice-search-and-your-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Tips for integrating with Google Accounts on Android</title>
		<link>https://googledata.org/google-android/tips-for-integrating-with-google-accounts-on-android/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tips-for-integrating-with-google-accounts-on-android</link>
		<comments>https://googledata.org/google-android/tips-for-integrating-with-google-accounts-on-android/#comments</comments>
		<pubDate>Tue, 28 Oct 2014 17:18:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=d6b7ebb5e818d036f885a004a87c0339</guid>
		<description><![CDATA[<div><a href="http://4.bp.blogspot.com/-8Ovw5EKWxHI/VE_MbUfp9LI/AAAAAAAAA-M/xB0hkHTSSrk/s1600/gps-googleplus.png"><img border="0" src="http://4.bp.blogspot.com/-8Ovw5EKWxHI/VE_MbUfp9LI/AAAAAAAAA-M/xB0hkHTSSrk/s400/gps-googleplus.png"></a></div>

<i>By <a href="https://plus.google.com/b/108967384991768947849/+LaurenceMoroney/posts">Laurence Moroney</a>, Developer Advocate</i>

<p>Happy Tuesday! We've had a few questions come in recently regarding Google Accounts on Android, so we've put this post together to show you some of our best practices. The tips today will focus on Android-based authentication, which is easily achieved through the integration of <a href="https://developer.android.com/google/play-services/index.html?utm_campaign=GA-Android&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=dac&#38;utm_medium=blog">Google Play services</a>. Let's get started.</p>

<h3>Unique Identifiers</h3>

<p>A common confusion happens when developers use the account name (a.k.a. email address) as the primary key to a Google Account.  For instance, when using <a href="https://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.html?utm_campaign=GA-Android&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=dac&#38;utm_medium=blog">GoogleApiClient</a> to sign in a user, a developer might use the following code inside of the <a href="https://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.ConnectionCallbacks.html?utm_campaign=GA-Android&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=dac&#38;utm_medium=blog#onConnected(android.os.Bundle)">onConnected</a> callback for a registered <a href="https://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.ConnectionCallbacks.html?utm_campaign=GA-Android&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=dac&#38;utm_medium=blog">GoogleApiClient.ConnectedCallbacks</a> listener:</p>

<div>[Error prone pseudocode]</div>
<pre>String accountName = Plus.AccountApi.getAccountName(mGoogleApiClient);
// createLocalAccount() is specific to the app's local storage strategy.
createLocalAccount(accountName);</pre>

<p>While it is OK to store the email address for display or caching purposes, it is possible for users to <i>change</i> the primary email address on a Google Account. This can happen with various types of accounts, but these changes happen most often with <a href="http://www.google.com/enterprise/apps/business/">Google Apps For Work accounts</a>.</p>

<p>So what's a developer to do? Use the Google Account ID (as opposed to the Account name) to key any data for your app that is associated to a Google Account. For most apps, this simply means storing the Account ID and comparing the value each time the onConnected callback is invoked to ensure the data locally matches the currently logged in user. The API provides methods that allow you to get the Account ID from the Account Name. Here is an example snippet you might use:</p>

<div>[Google Play Services 6.1+]</div>
<pre>String accountName = Plus.<a href="https://developer.android.com/reference/com/google/android/gms/plus/Account.html?utm_campaign=GA-Android&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=dac&#38;utm_medium=blog">AccountApi</a>.<a href="https://developer.android.com/reference/com/google/android/gms/plus/Account.html?utm_campaign=GA-Android&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=dac&#38;utm_medium=blog#getAccountName(com.google.android.gms.common.api.GoogleApiClient)">getAccountName</a>(mGoogleApiClient);
String accountID = <a href="https://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html?utm_campaign=GA-Android&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=dac&#38;utm_medium=blog">GoogleAuthUtil</a>.<a href="https://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html?utm_campaign=GA-Android&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=dac&#38;utm_medium=blog#getAccountId(java.lang.String)">getAccountId</a>(accountName);
createLocalAccount(accountID);</pre>

<div>[Earlier Versions of Google Play Services (please upgrade your client)]</div>
<pre>Person currentUser = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
String accountID = currentUser.getID();
createLocalAccount(accountID);</pre>

<p>This will key the local data against a Google Account ID, which is unique and stable for the user even after changing an email address. </p>

<p>So, in the above scenario, if your data was keyed on an ID, you wouldn&#8217;t have to worry if your users change their email address. When they sign back in, they&#8217;ll still get the same ID, and you won&#8217;t need to do anything with your data.</p>

<h3>Multiple Accounts</h3>

<p>If your app supports multiple account connections simultaneously (like the Gmail user interface shown below), you are calling <a href="https://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.Builder.html?utm_campaign=GA-Android&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=dac&#38;utm_medium=blog#setAccountName(java.lang.String)">setAccountName</a> on the <a href="https://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.Builder.html?utm_campaign=GA-Android&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=dac&#38;utm_medium=blog">GoogleApiClient.Builder</a> when constructing GoogleApiClients. This requires you to store the account name as well as the Google Account ID within your app. However, the account name you&#8217;ve stored will be different if the user changes their primary email address. The easiest way to deal with this is to prompt the user to re-login. Then, update the account name when onConnected is called after login. Any time a login occurs you, can use code such as this to compare Account IDs and update the email address stored locally for the Account ID.</p>

<div>[Google Play Services 6.1+]</div>
<pre>String accountName = Plus.<a href="https://developer.android.com/reference/com/google/android/gms/plus/Account.html?utm_campaign=GA-Android&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=dac&#38;utm_medium=blog">AccountApi</a>.<a href="https://developer.android.com/reference/com/google/android/gms/plus/Account.html?utm_campaign=GA-Android&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=dac&#38;utm_medium=blog#getAccountName(com.google.android.gms.common.api.GoogleApiClient)">getAccountName</a>(mGoogleApiClient);
String accountID = <a href="https://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html?utm_campaign=GA-Android&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=dac&#38;utm_medium=blog">GoogleAuthUtil</a>.<a href="https://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html?utm_campaign=GA-Android&#38;utm_source=gdbc&#38;utm_medium=blog&#38;utm_source=dac&#38;utm_medium=blog#getAccountId(java.lang.String)">getAccountId</a>(accountName);
// isExistingLocalAccount(), createLocalAccount(), 
// getLocalDataAccountName(), and updateLocalAccountName() 
// are all specific to the app's local storage strategy.
boolean existingLocalAccountData = isExistingLocalAccount(accountID);
if (!existingLocalAccountData) {
    // New Login.
    createLocalAccount(accountID, accountName);
} else {
    // Existing local data for this Google Account.
    String cachedAccountName = getLocalDataAccountName(accountID);    
    if (!cachedAccountName.equals(accountName)) {
        updateLocalAccountName(accountID, accountName);
    }
}</pre>

<div><a href="http://4.bp.blogspot.com/-94Q_i-iI0mQ/VE_FNk-L_MI/AAAAAAAAA98/hxPKIXYY7gY/s1600/tipsshot.png"><img border="0" src="http://4.bp.blogspot.com/-94Q_i-iI0mQ/VE_FNk-L_MI/AAAAAAAAA98/hxPKIXYY7gY/s400/tipsshot.png"></a></div>

<p>This scenario reinforces the importance of using the Account ID to store data all data in your app. </p>

<h3>Online data</h3>

<p>The same best practices above apply to storing data for Google Accounts in web servers for your app. If you are storing data on your servers in this manner and treating the email address as the primary key:</p>

<code><table border="1"><tr><td>ID [Primary Key]</td>
<td>Field 1</td>
<td>Field 2</td>
<td>Field 3</td></tr><tr><td>user1@gmail.com</td>
<td>Value 1</td>
<td>Value 2</td>
<td>Value 3</td></tr></table></code>

<p>You need to migrate to this model where the primary key is the Google Account ID.:</p>

<code><table border="1"><tr><td>ID [Primary Key]</td>
<td>Email</td>
<td>Field 1</td>
<td>Field 2</td>
<td>Field 3</td></tr><tr><td>108759069548186989918</td>
<td>user1@gmail.com</td>
<td>Value 1</td>
<td>Value 2</td>
<td>Value 3</td></tr></table></code>

<p>If you don't make Google API calls from your web server, you might be able to depend on the Android application to notify your web server of changes to the primary email address when implementing the updateLocalAccountName method referenced in the multiple accounts sample code above. If you make Google API calls from your web server, you likely implemented it using the <a href="https://developers.google.com/accounts/docs/CrossClientAuth">Cross-client authentication</a> and can detect changes via the OAuth2 client libraries or REST endpoints on your server as well.</p>

<h3>Conclusion</h3>

<p>When using Google Account authentication for your app, it&#8217;s definitely a best practice to use the account ID, as opposed to the account name to distinguish data for the user. In this post, we saw three scenarios where you may need to make changes to make your apps more robust. With the growing adoption of Google for Work, users who are changing their email address, but keeping the same account ID, may occur more frequently, so we encourage all developers to make plans to update their code as soon as possible.</p>

<div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/Qp61xnCjZ1L"><span>Join the discussion on</span></a><br /><a href="https://plus.google.com/108967384991768947849/posts/Qp61xnCjZ1L"><span>+Android Developers</span></a><br /></div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/Qp61xnCjZ1L"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a><br /></div></div>]]></description>
				<content:encoded><![CDATA[<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-8Ovw5EKWxHI/VE_MbUfp9LI/AAAAAAAAA-M/xB0hkHTSSrk/s1600/gps-googleplus.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-8Ovw5EKWxHI/VE_MbUfp9LI/AAAAAAAAA-M/xB0hkHTSSrk/s400/gps-googleplus.png" /></a></div>

<i>By <a href="https://plus.google.com/b/108967384991768947849/+LaurenceMoroney/posts">Laurence Moroney</a>, Developer Advocate</i>

<p itemprop="description">Happy Tuesday! We've had a few questions come in recently regarding Google Accounts on Android, so we've put this post together to show you some of our best practices. The tips today will focus on Android-based authentication, which is easily achieved through the integration of <a href="https://developer.android.com/google/play-services/index.html?utm_campaign=GA-Android&utm_source=gdbc&utm_medium=blog&utm_source=dac&utm_medium=blog">Google Play services</a>. Let's get started.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Unique Identifiers</h3>

<p>A common confusion happens when developers use the account name (a.k.a. email address) as the primary key to a Google Account.  For instance, when using <a href="https://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.html?utm_campaign=GA-Android&utm_source=gdbc&utm_medium=blog&utm_source=dac&utm_medium=blog">GoogleApiClient</a> to sign in a user, a developer might use the following code inside of the <a href="https://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.ConnectionCallbacks.html?utm_campaign=GA-Android&utm_source=gdbc&utm_medium=blog&utm_source=dac&utm_medium=blog#onConnected(android.os.Bundle)">onConnected</a> callback for a registered <a href="https://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.ConnectionCallbacks.html?utm_campaign=GA-Android&utm_source=gdbc&utm_medium=blog&utm_source=dac&utm_medium=blog">GoogleApiClient.ConnectedCallbacks</a> listener:</p>

<div>[Error prone pseudocode]</div>
<pre class="prettyprint">String accountName = Plus.AccountApi.getAccountName(mGoogleApiClient);
// createLocalAccount() is specific to the app's local storage strategy.
createLocalAccount(accountName);</pre>

<p>While it is OK to store the email address for display or caching purposes, it is possible for users to <i>change</i> the primary email address on a Google Account. This can happen with various types of accounts, but these changes happen most often with <a href="http://www.google.com/enterprise/apps/business/">Google Apps For Work accounts</a>.</p>

<p>So what's a developer to do? Use the Google Account ID (as opposed to the Account name) to key any data for your app that is associated to a Google Account. For most apps, this simply means storing the Account ID and comparing the value each time the onConnected callback is invoked to ensure the data locally matches the currently logged in user. The API provides methods that allow you to get the Account ID from the Account Name. Here is an example snippet you might use:</p>

<div>[Google Play Services 6.1+]</div>
<pre class="prettyprint">String accountName = Plus.<a href="https://developer.android.com/reference/com/google/android/gms/plus/Account.html?utm_campaign=GA-Android&utm_source=gdbc&utm_medium=blog&utm_source=dac&utm_medium=blog">AccountApi</a>.<a href="https://developer.android.com/reference/com/google/android/gms/plus/Account.html?utm_campaign=GA-Android&utm_source=gdbc&utm_medium=blog&utm_source=dac&utm_medium=blog#getAccountName(com.google.android.gms.common.api.GoogleApiClient)">getAccountName</a>(mGoogleApiClient);
String accountID = <a href="https://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html?utm_campaign=GA-Android&utm_source=gdbc&utm_medium=blog&utm_source=dac&utm_medium=blog">GoogleAuthUtil</a>.<a href="https://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html?utm_campaign=GA-Android&utm_source=gdbc&utm_medium=blog&utm_source=dac&utm_medium=blog#getAccountId(java.lang.String)">getAccountId</a>(accountName);
createLocalAccount(accountID);</pre>

<div>[Earlier Versions of Google Play Services (please upgrade your client)]</div>
<pre class="prettyprint">Person currentUser = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
String accountID = currentUser.getID();
createLocalAccount(accountID);</pre>

<p>This will key the local data against a Google Account ID, which is unique and stable for the user even after changing an email address. </p>

<p>So, in the above scenario, if your data was keyed on an ID, you wouldn’t have to worry if your users change their email address. When they sign back in, they’ll still get the same ID, and you won’t need to do anything with your data.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Multiple Accounts</h3>

<p>If your app supports multiple account connections simultaneously (like the Gmail user interface shown below), you are calling <a href="https://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.Builder.html?utm_campaign=GA-Android&utm_source=gdbc&utm_medium=blog&utm_source=dac&utm_medium=blog#setAccountName(java.lang.String)">setAccountName</a> on the <a href="https://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.Builder.html?utm_campaign=GA-Android&utm_source=gdbc&utm_medium=blog&utm_source=dac&utm_medium=blog">GoogleApiClient.Builder</a> when constructing GoogleApiClients. This requires you to store the account name as well as the Google Account ID within your app. However, the account name you’ve stored will be different if the user changes their primary email address. The easiest way to deal with this is to prompt the user to re-login. Then, update the account name when onConnected is called after login. Any time a login occurs you, can use code such as this to compare Account IDs and update the email address stored locally for the Account ID.</p>

<div>[Google Play Services 6.1+]</div>
<pre class="prettyprint">String accountName = Plus.<a href="https://developer.android.com/reference/com/google/android/gms/plus/Account.html?utm_campaign=GA-Android&utm_source=gdbc&utm_medium=blog&utm_source=dac&utm_medium=blog">AccountApi</a>.<a href="https://developer.android.com/reference/com/google/android/gms/plus/Account.html?utm_campaign=GA-Android&utm_source=gdbc&utm_medium=blog&utm_source=dac&utm_medium=blog#getAccountName(com.google.android.gms.common.api.GoogleApiClient)">getAccountName</a>(mGoogleApiClient);
String accountID = <a href="https://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html?utm_campaign=GA-Android&utm_source=gdbc&utm_medium=blog&utm_source=dac&utm_medium=blog">GoogleAuthUtil</a>.<a href="https://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html?utm_campaign=GA-Android&utm_source=gdbc&utm_medium=blog&utm_source=dac&utm_medium=blog#getAccountId(java.lang.String)">getAccountId</a>(accountName);
// isExistingLocalAccount(), createLocalAccount(), 
// getLocalDataAccountName(), and updateLocalAccountName() 
// are all specific to the app's local storage strategy.
boolean existingLocalAccountData = isExistingLocalAccount(accountID);
if (!existingLocalAccountData) {
    // New Login.
    createLocalAccount(accountID, accountName);
} else {
    // Existing local data for this Google Account.
    String cachedAccountName = getLocalDataAccountName(accountID);    
    if (!cachedAccountName.equals(accountName)) {
        updateLocalAccountName(accountID, accountName);
    }
}</pre>

<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-94Q_i-iI0mQ/VE_FNk-L_MI/AAAAAAAAA98/hxPKIXYY7gY/s1600/tipsshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-94Q_i-iI0mQ/VE_FNk-L_MI/AAAAAAAAA98/hxPKIXYY7gY/s400/tipsshot.png" /></a></div>

<p>This scenario reinforces the importance of using the Account ID to store data all data in your app. </p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Online data</h3>

<p>The same best practices above apply to storing data for Google Accounts in web servers for your app. If you are storing data on your servers in this manner and treating the email address as the primary key:</p>

<code><table border="1" style="width:100%"><tr><td>ID [Primary Key]</td>
<td>Field 1</td>
<td>Field 2</td>
<td>Field 3</td></tr>
<tr><td>user1@gmail.com</td>
<td>Value 1</td>
<td>Value 2</td>
<td>Value 3</td></tr></table></code>

<p>You need to migrate to this model where the primary key is the Google Account ID.:</p>

<code><table border="1" style="width:100%"><tr><td>ID [Primary Key]</td>
<td>Email</td>
<td>Field 1</td>
<td>Field 2</td>
<td>Field 3</td></tr>
<tr><td>108759069548186989918</td>
<td>user1@gmail.com</td>
<td>Value 1</td>
<td>Value 2</td>
<td>Value 3</td></tr></table></code>

<p>If you don't make Google API calls from your web server, you might be able to depend on the Android application to notify your web server of changes to the primary email address when implementing the updateLocalAccountName method referenced in the multiple accounts sample code above. If you make Google API calls from your web server, you likely implemented it using the <a href="https://developers.google.com/accounts/docs/CrossClientAuth">Cross-client authentication</a> and can detect changes via the OAuth2 client libraries or REST endpoints on your server as well.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Conclusion</h3>

<p>When using Google Account authentication for your app, it’s definitely a best practice to use the account ID, as opposed to the account name to distinguish data for the user. In this post, we saw three scenarios where you may need to make changes to make your apps more robust. With the growing adoption of Google for Work, users who are changing their email address, but keeping the same account ID, may occur more frequently, so we encourage all developers to make plans to update their code as soon as possible.</p>

<div style="display: inline-block; float: right; line-height: 0;"><br />
<div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/Qp61xnCjZ1L" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<a href="https://plus.google.com/108967384991768947849/posts/Qp61xnCjZ1L" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a><br />
</div><br />
<div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/Qp61xnCjZ1L" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a><br />
</div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/tips-for-integrating-with-google-accounts-on-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Material Design on Android Checklist</title>
		<link>https://googledata.org/google-android/material-design-on-android-checklist/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=material-design-on-android-checklist</link>
		<comments>https://googledata.org/google-android/material-design-on-android-checklist/#comments</comments>
		<pubDate>Tue, 28 Oct 2014 13:00:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=0929a51bf703ffbb23894623f3ce3fc2</guid>
		<description><![CDATA[<p><em>By <a href="https://plus.google.com/+RomanNurik/posts">Roman Nurik</a>, Design Advocate</em></p>

<p>Android 5.0 brings in material design as the new design system for the platform and system apps. Consumers will soon start getting Android 5.0 and they&#8217;re already seeing glimpses of material design with apps like <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.magazines">Google Play Newsstand</a>, <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.inbox">Inbox by Gmail</a> and <a href="https://play.google.com/store/apps/details?id=com.tumblr">Tumblr</a>. Meanwhile, developers now have the <a href="http://android-developers.blogspot.com/2014/10/android-50-lollipop-sdk-and-nexus.html">Android 5.0 SDK</a>, along with <a href="http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html">AppCompat</a> for backward compatibility. And designers <a href="http://googledevelopers.blogspot.com/2014/10/updated-material-design-guidelines-and.html">now have access</a> to Photoshop, Illustrator and Sketch templates. All this means that now&#8212;yes now!&#8212;is the time to start implementing material design in your Android apps. Today, let&#8217;s talk about what implementing material design really boils down to.</p>

<p>Below, you&#8217;ll find a material design checklist that you can use to mark progress as you implement the new design system. The checklist is divided into 4 key sections based on the 4 key aspects of material design.</p>

<p>If you include a good chunk of the items in the checklist below, especially the ones indicated as signature elements, and follow traditional Android design best practices (i.e. <a href="http://developer.android.com/distribute/essentials/quality/core.html">these</a>, <a href="http://developer.android.com/distribute/essentials/quality/tablets.html">these</a>, and things we discussed on <a href="https://www.youtube.com/playlist?list=PLWz5rJ2EKKc8j2B95zGMb8muZvrIy-wcF">ADiA</a>), you&#8217;ll be well on your way to material design awesomeness!</p>

<h3>Tangible Surfaces</h3>

<div>
<img width="70" src="http://4.bp.blogspot.com/-spPzHAY6GjM/VE7JKr79u_I/AAAAAAAAA9g/JRm793QHGyM/s1600/surf.png">
UIs consist of surfaces (pieces of &#8220;digital paper&#8221;) arranged at varying elevations, casting shadows on surfaces behind them.
</div>

<div>
<a href="http://4.bp.blogspot.com/-mvS6XxdSUIY/VE6ohdtKOuI/AAAAAAAAA8M/2YTcch1jNL8/s1600/layering.gif"><img border="0" src="http://4.bp.blogspot.com/-mvS6XxdSUIY/VE6ohdtKOuI/AAAAAAAAA8M/2YTcch1jNL8/s400/layering.gif"></a><br /><strong>Figure 1.</strong> Surfaces and layering.<br /></div>

<ul><li><strong>Signature element</strong>: Shadows are used to communicate which surfaces are in front of others, helping focus attention and establish hierarchy. <a href="http://www.google.com/design/spec/layout/layout-principles.html#layout-principles-dimensionality">Read more on depth and layering in UIs</a>.
<div><em>In code</em>: This is the <code>android:elevation</code> and <code>android:translationZ</code> attribute in Android 5.0. On earlier versions, shadows are normally provided as PNG assets.</div></li>
<li>Shadows and surfaces are used in a consistent and structured way. Each shadow indicates a new surface. Surfaces are created thoughtfully and carefully.</li>
<li>There are generally between 2 and 10 surfaces on the screen at once; avoid too much layering/nesting of surfaces.</li>
<li>Scrollable content either scrolls to the edges of the screen or behind another surface that casts a shadow over the content&#8217;s surface. Never clip an element against an invisible edge&#8212;elements don&#8217;t just scroll off into nowhere. Put another way, you rarely scroll the ink on a surface; you scroll the surface itself.
<div><em>In code</em>: <code>android:clipToPadding=false</code> often helps with this when using <code>ListView</code> and <code>ScrollView</code>.</div></li>
<li>Surfaces have simple, single-color backgrounds.</li>
</ul><h3>A Bold, Print-Like Aesthetic</h3>

<div>
<img border="0" width="70" src="http://3.bp.blogspot.com/-oXLSlC4_0zc/VE7JKTV1DYI/AAAAAAAAA9Y/SJsY1G7YEDU/s1600/print.png">
The &#8220;digital ink&#8221; you draw on those pieces of digital paper is informed by classic print design, with an emphasis on bold use of color and type, contextual imagery, and structured whitespace.
</div>

<div>
<a href="http://1.bp.blogspot.com/-3akABr2CL3E/VE6oigZafdI/AAAAAAAAA80/IwVyML5cdjg/s1600/themecolors.png"><img border="0" src="http://1.bp.blogspot.com/-3akABr2CL3E/VE6oigZafdI/AAAAAAAAA80/IwVyML5cdjg/s400/themecolors.png"></a><br /><strong>Figure 2.</strong> Primary and accent colors.<br /><a href="http://2.bp.blogspot.com/-UFfyUWYkt-o/VE6ohENvMnI/AAAAAAAAA88/FwAseGmlIjk/s1600/keylines.png"><img border="0" src="http://2.bp.blogspot.com/-UFfyUWYkt-o/VE6ohENvMnI/AAAAAAAAA88/FwAseGmlIjk/s400/keylines.png"></a><br /><strong>Figure 3.</strong> Keylines.<br /></div>

<ul><li><strong>Signature element</strong>: Apps use a <a href="http://www.google.com/design/spec/style/color.html#color-ui-color-application">primary color and an accent color</a> (Figure 2) to color surface backgrounds and key UI widgets such as text fields and checkboxes. The accent color contrasts very well with the primary color (for example an app can use a dark blue primary color and a neon pink accent color). The accent color is high-contrast and is used to call attention to key UI elements, like a circular floating action button, selected tab strips, or form fields.
<div><em>In code</em>: Set the <code>android:colorPrimary</code> and <code>android:colorAccent</code> attributes in your theme (drop the <code>android</code> prefix if using AppCompat). AppCompat automatically colors text fields, checkboxes, and more on pre-L devices.</div></li>
<li><strong>Signature element</strong>: On Android 5.0, the status bar is colored to match the app&#8217;s primary color, or the current screen&#8217;s content. For full-bleed imagery, the status bar can be translucent.
<div><em>In code</em>: Set the <code>android:colorPrimaryDark</code> or <code>android:statusBarColor</code> attribute in your theme  (drop the <code>android</code> prefix if using AppCompat) or call <code>Window.setStatusBarColor</code>.</div></li>
<li>Icons, photos/images, text, and other foreground elements are colored &#8220;ink&#8221; on their surfaces. They don&#8217;t have shadows and don&#8217;t use gradients.</li>
<li>Colors extracted from images can be used to color adjacent UI elements or surfaces.
<div><em>In code</em>: This can be done using the <a href="https://developer.android.com/reference/android/support/v7/graphics/Palette.html">Palette</a> support library.</div></li>
<li><strong>Signature element</strong>: Icons in the app follow the <a href="http://www.google.com/design/spec/style/icons.html#icons-system-icons">system icon guidelines</a>, and standard icons use the <a href="http://www.google.com/design/spec/resources/sticker-sheets.html#sticker-sheets-system-icons">material design icon set</a>.</li>
<li>Photos are generally immersive and full-bleed. For example, for detail screens, run edge-to-edge and <a href="http://www.google.com/design/spec/style/imagery.html#imagery-principles">can even appear behind the app bar or status bar</a>.
<div><em>In code</em>: The new <code>Toolbar</code> widget (and its AppCompat equivalent) can be transparent and placed directly in your layout. For the status bar, check <a href="http://stackoverflow.com/questions/26440879/how-do-i-use-drawerlayout-to-display-over-the-actionbar-toolbar-and-under-the-st/26440880">this Stack Overflow post</a>.</div></li>
<li><strong>Signature element</strong>: Where appropriate, elements like body text, thumbnails, app bar titles, etc. are aligned to <a href="http://www.google.com/design/spec/layout/metrics-and-keylines.html#metrics-and-keylines-keylines-and-spacing">3 keylines</a> (Figure 3). On phones, those keylines are 16dp and 72dp from the left edge and 16dp from the right edge of the screen. On tablets those values are 24dp and 80dp.</li>
<li>UI elements are aligned to and sized according to an 8dp baseline grid. For example, app bars are 56dp tall on phones and 64dp tall on tablets. Padding and margins can take on values like 8dp, 16dp, 24dp, etc. More precise text positioning uses a 4dp grid.</li>
</ul><h3>Authentic Motion</h3>

<div>
<img border="0" width="70" src="http://3.bp.blogspot.com/-Ux7CyLtgAQ4/VE7JKT8dIUI/AAAAAAAAA9U/Es2ZTkUcb2E/s1600/motion.png">
Motion helps communicate what&#8217;s happening in the UI, providing visual continuity across app contexts and states. Motion also adds delight using smaller-scale transitions. Motion isn&#8217;t employed simply for motion&#8217;s sake.
</div>

<div>
<a href="http://3.bp.blogspot.com/-dadidlU3muU/VE6og4Ra_BI/AAAAAAAAA8E/uVCWrYMetGI/s1600/herotransition.gif"><img border="0" src="http://3.bp.blogspot.com/-dadidlU3muU/VE6og4Ra_BI/AAAAAAAAA8E/uVCWrYMetGI/s400/herotransition.gif"></a><br /><strong>Figure 4.</strong> "Hero" transitions.<br /></div>

<ul><li>In general, UI and content elements don&#8217;t just appear or disappear&#8212;they <a href="http://www.google.com/design/spec/animation/meaningful-transitions.html">animate into place</a>, either together as a unit, or individually.</li>
<li><strong>Signature element</strong>: When touching an item to see its details, there&#8217;s a &#8220;hero&#8221; transition (Figure 4) that moves and scales the item between its position in the browsing screen and its position in the detail screen.
<div><em>In code</em>: These are called &#8220;<a href="http://developer.android.com/training/material/animations.html#Transitions">shared element transitions</a>&#8221; in the SDK. The support version of <code>FragmentTransaction</code> also includes some shared element support.</div></li>
<li><strong>Signature element</strong>: <a href="http://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-responsive-interaction-examples">Ripple effects</a> originating from where you touched the screen are used to show touch feedback on an item.
<div><em>In code</em>: The default <code>android:selectableItemBackground</code> and <code>android:selectableItemBackgroundBorderless</code> have this, or you can use <code>RippleDrawable</code> (<code>&#60;ripple&#62;</code>) to customize the effect. On pre-5.0 devices, ripples aren&#8217;t an expected feature, so defer to the default <code>android:selectableItemBackground</code> behavior.</div></li>
<li><strong>Signature element</strong>: UI elements can appear using a circular &#8220;reveal&#8221; animation.
<div><em>In code</em>: See <a href="http://developer.android.com/training/material/animations.html#Reveal">this doc</a> or the <code>ViewAnimationUtils</code> class for more.</div></li>
<li><strong>Signature element</strong>: Animations are used in more subtle, delightful ways, such as to convey the <a href="http://www.google.com/design/spec/animation/delightful-details.html#delightful-details-delightful-details">transition between icon states</a> or text states. For example, a &#8220;+&#8221; icon can morph into an &#8220;x&#8221; symbol, or an outlined heart icon can be filled using a paint-bucket fill effect.
<div><em>In code</em>: Icon transitions can be implemented using <code>AnimatedStateListDrawable</code> and its XML counterpart. An example can be found in the <a href="https://github.com/google/iosched">Google I/O app source</a>. There&#8217;s also support for <a href="http://developer.android.com/training/material/animations.html#AnimVector">animated vector icons</a>.</div></li>
<li>Animations and transitions are fast&#8212;generally under 300ms.</li>
<li>Crossfades are often replaced by translate/slide transitions: vertical slides for descendant navigation and horizontal slides for lateral navigation. For slide transitions, prefer quick acceleration and gentle ease-in deceleration over simple linear moves. See the material design spec on <a href="http://www.google.com/design/spec/animation/authentic-motion.html#">motion</a> for more.</li>
</ul><h3>Adaptive Design (and UI Patterns)</h3>

<div>
<img border="0" width="70" src="http://3.bp.blogspot.com/-xWa54wdXIt4/VE7JKanNvPI/AAAAAAAAA9c/DSSmLfSOXik/s1600/adaptive.png">
Tangible surfaces, bold graphic design, and meaningful motion work together to bring a consistent experience across any screen, be it phones, tablets, laptops, desktops, TVs, wearables, or even cars. Additionally, the key UI patterns below help establish a consistent character for the app across devices.
</div>

<div>
<a href="http://1.bp.blogspot.com/-recwqnhet7E/VE6ogYRbXcI/AAAAAAAAA74/WwtzwD_iJlE/s1600/fab.png"><img border="0" src="http://1.bp.blogspot.com/-recwqnhet7E/VE6ogYRbXcI/AAAAAAAAA74/WwtzwD_iJlE/s400/fab.png"></a><br /><strong>Figure 5.</strong> The floating action button.<br /></div>

<ul><li>The app uses <a href="http://www.youtube.com/watch?v=Jl3-lzlzOJI#t=11m41s">responsive design best practices</a> to ensure screens lay themselves out appropriately on <a href="http://www.google.com/design/spec/layout/layout-principles.html#layout-principles-responsive-principles">any screen size</a>, in any orientation. See the <a href="http://developer.android.com/distribute/googleplay/quality/tablet.html">Tablet App Quality Checklist</a> for a list of ways to optimize for tablets, and <a href="http://android-developers.blogspot.com/2012/11/designing-for-tablets-were-here-to-help.html">this blog post</a> for high-level tablet optimization tips.
<ul><li>In material design, detail screens are often presented as popups that appear using &#8220;hero&#8221; transitions (see above).</li>
<li>In multi-pane layouts, the app can use multiple toolbars to place actions contextually next to their related content.</li>
</ul></li>
<li><strong>Signature element</strong>: Where appropriate, the app promotes the key action on a screen using a circular <a href="http://www.google.com/design/spec/patterns/promoted-actions.html#promoted-actions-floating-action-button">floating action button</a> (FAB). The FAB (Figure 5) is a circular surface, so it casts a shadow. It is colored with a bright, accent color (see above). It performs a primary action such as send, compose, create, add, or search. It floats in front of other surfaces, and is normally at an 8dp elevation. It frequently appears at the bottom right of the screen, or centered on an edge where two surfaces meet (a seam or a step).
</li></ul><h4>App bar</h4>

<ul><li><strong>Signature element</strong>: The app uses a standard Android app bar. The app bar doesn&#8217;t have an app icon. Color and typography are used for branding instead. The app bar casts a shadow (or has a shadow cast on it by a surface below  and behind it). The app bar normally has a 4dp elevation.
<div><em>In code</em>: Use the new <code>Toolbar</code> widget in Android 5.0 that is placed directly into the activity&#8217;s view hierarchy. AppCompat also provides <code>android.support.v7.widget.Toolbar</code>, which supports all modern platform versions.</div></li>
<li>The app bar might be for example 2 or 3 times taller than the standard height; on scroll, the app bar can smoothly collapse into its normal height.</li>
<li>The app bar might be <a href="http://www.google.com/design/spec/style/imagery.html#imagery-principles">completely transparent in some cases</a>, with the text and actions overlaying an image behind it. For example, see the <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.magazines">Google Play Newsstand</a> app.</li>
<li>App bar titles align to the 2nd keyline (see more info on keylines above)
<div><em>In code</em>: when using the <code>Toolbar</code> widget, use the <code>android:contentInsetStart</code> attribute.</div></li>
<li>Where appropriate, upon scrolling down, the app bar can scroll off the screen, leaving more vertical space for content. Upon scrolling back up, the app bar should be shown again.</li>
</ul><h4>Tabs</h4>

<div>
<a href="http://2.bp.blogspot.com/-nAgdUlQO9iM/VE6oh7paeBI/AAAAAAAAA8c/k1E8Vbc2tOg/s1600/tabs.png"><img border="0" src="http://2.bp.blogspot.com/-nAgdUlQO9iM/VE6oh7paeBI/AAAAAAAAA8c/k1E8Vbc2tOg/s400/tabs.png"></a><br /><strong>Figure 6.</strong> Tabs with material design.
</div>

<ul><li><strong>Signature element</strong>: Tabs follow the newer material design <a href="http://www.google.com/design/spec/components/tabs.html">interactions and styling</a> (Figure 6). There are no vertical separators between tabs. If the app uses top-level tabs, tabs are <a href="http://www.google.com/design/spec/components/tabs.html#tabs-usage">visually a part of the app bar</a>; tabs are a part of the app bar&#8217;s surface.
<div><em>In code</em>: See the <a href="http://developer.android.com/samples/SlidingTabsBasic/index.html">SlidingTabsBasic</a> sample code in the SDK or the <a href="https://github.com/google/iosched">Google I/O app source</a> (particularly the "My Schedule" section for phones).</div></li>
<li>Tabs should support a swipe gesture for moving between them.
<div><em>In code</em>:  All tabs should be swipeable using the <code>ViewPager</code> widget, which is available in the support library.</div></li>
<li>Selected tabs are <a href="http://www.google.com/design/spec/components/tabs.html#tabs-specs">indicated</a> by a foreground color change and/or a small strip below the tab text (or icon) colored with an accent color. The tab strip should smoothly slide as you swipe between tabs.</li>
</ul><h4>Navigation drawer</h4>

<div>
<a href="http://1.bp.blogspot.com/-Ychs6FLcjGA/VE6og8WgM9I/AAAAAAAAA78/uSFiUm5V8kM/s1600/drawerlayering.gif"><img border="0" src="http://1.bp.blogspot.com/-Ychs6FLcjGA/VE6og8WgM9I/AAAAAAAAA78/uSFiUm5V8kM/s400/drawerlayering.gif"></a><br /><strong>Figure 7.</strong> Navigation drawers<br />with material design.
</div>

<ul><li><strong>Signature element</strong>: If the app uses a navigation drawer, it follows the newer material design interactions and styling (Figure 7). The drawer appears in front of the app bar. It also appears semitransparent behind the status bar.
<div><em>In code</em>: Implement drawers using the <code>DrawerLayout</code> widget from the support library, along with the new Toolbar widget discussed above. See <a href="http://stackoverflow.com/questions/26440879/how-do-i-use-drawerlayout-to-display-over-the-actionbar-toolbar-and-under-the-st/26440880">this Stack Overflow post</a> for more.</div></li>
<li><strong>Signature element</strong>: The leftmost icon in the app bar is a <a href="http://www.google.com/design/spec/layout/structure.html#structure-app-bar">navigation drawer indicator</a>; the app icon is not visible in the app bar. Optionally, on earlier versions of the platform, if the app has a drawer, the top-left icon can remain the app icon and narrower drawer indicator, as in Android 4.0.</li>
<li>The drawer is a standard width: No wider than 320dp on phones and 400dp on tablets, but no narrower than the screen width minus the standard toolbar height (360dp - 56dp = 304dp on the Nexus 5)</li>
<li>Item heights in the drawer follow the baseline grid: 48dp tall rows, 8dp above list sections and 8dp above and below dividers.</li>
<li>Text and icons should follow the keylines discussed above.</li>
</ul><p>More and more apps from Google and across the Google Play ecosystem will be updating with material design soon, so expect Winter 2014 to be a big quarter for design on Android. For more designer resources on material design, check out the <a href="https://www.youtube.com/playlist?list=PLOU2XLYxmsIJFcNKpAV9B_aQmz2h68fw_">DesignBytes series</a>. For additional developer resources, check the <a href="http://developer.android.com/training/material/index.html">Creating Apps with Material Design</a> docs!</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/LCAx8449MR7"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/LCAx8449MR7"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/LCAx8449MR7"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<style>
ul.checklist {
  list-style-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNCIgaGVpZ2h0PSIxMC41IiB2aWV3Qm94PSIwIDYuOSAxNiAxMiI+DQogIDxwYXRoIGQ9Ik01LDE2LjRsLTMuOC0zLjhMMCwxMy45bDUsNUwxNS45LDguMWwtMS4zLTEuM0w1LDE2LjR6Ii8+DQo8L3N2Zz4NCg==');
  clear: left;
}

.sectionintro {
  max-width: 400px;
  border: 1px solid #ccc;
  position: relative;
  padding: 10px 10px 10px 90px;
  font-style: italic;
  margin-top: 10px;
  margin-bottom: 10px;
  min-height: 75px;
}

.sectionintro img {
  position: absolute;
  left: 5px;
  top: 5px;
  border: 0 !important;
  box-shadow: 0 !important;
}

h3 {
  margin-top: 20px;
  font-size: 150%;
}

h4 {
  margin-top: 20px;
}

ul.checklist li {
  margin-top: 10px;
}

div.in-code {
  color: #aaa;
  padding-left: 20px;
}

div.in-code em {
  color: #c60;
  font-weight: bold;
  font-style: normal;
}
</style>

<p><em>By <a href="https://plus.google.com/+RomanNurik/posts">Roman Nurik</a>, Design Advocate</em></p>

<p>Android 5.0 brings in material design as the new design system for the platform and system apps. Consumers will soon start getting Android 5.0 and they’re already seeing glimpses of material design with apps like <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.magazines">Google Play Newsstand</a>, <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.inbox">Inbox by Gmail</a> and <a href="https://play.google.com/store/apps/details?id=com.tumblr">Tumblr</a>. Meanwhile, developers now have the <a href="http://android-developers.blogspot.com/2014/10/android-50-lollipop-sdk-and-nexus.html">Android 5.0 SDK</a>, along with <a href="http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html">AppCompat</a> for backward compatibility. And designers <a href="http://googledevelopers.blogspot.com/2014/10/updated-material-design-guidelines-and.html">now have access</a> to Photoshop, Illustrator and Sketch templates. All this means that now—yes now!—is the time to start implementing material design in your Android apps. Today, let’s talk about what implementing material design really boils down to.</p>

<p itemprop="description">Below, you’ll find a material design checklist that you can use to mark progress as you implement the new design system. The checklist is divided into 4 key sections based on the 4 key aspects of material design.</p>

<p>If you include a good chunk of the items in the checklist below, especially the ones indicated as signature elements, and follow traditional Android design best practices (i.e. <a href="http://developer.android.com/distribute/essentials/quality/core.html">these</a>, <a href="http://developer.android.com/distribute/essentials/quality/tablets.html">these</a>, and things we discussed on <a href="https://www.youtube.com/playlist?list=PLWz5rJ2EKKc8j2B95zGMb8muZvrIy-wcF">ADiA</a>), you’ll be well on your way to material design awesomeness!</p>

<h3>Tangible Surfaces</h3>

<div class="sectionintro">
<img style="border="0" width="70" src="http://4.bp.blogspot.com/-spPzHAY6GjM/VE7JKr79u_I/AAAAAAAAA9g/JRm793QHGyM/s1600/surf.png" />
UIs consist of surfaces (pieces of “digital paper”) arranged at varying elevations, casting shadows on surfaces behind them.
</div>

<div style="float:right; margin:0 0 20px 20px">
<a href="http://4.bp.blogspot.com/-mvS6XxdSUIY/VE6ohdtKOuI/AAAAAAAAA8M/2YTcch1jNL8/s1600/layering.gif"><img border="0" style="width: 200px" src="http://4.bp.blogspot.com/-mvS6XxdSUIY/VE6ohdtKOuI/AAAAAAAAA8M/2YTcch1jNL8/s400/layering.gif"></a><br>
<strong>Figure 1.</strong> Surfaces and layering.<br>
</div>

<ul class="checklist">
<li><strong class="signature">Signature element</strong>: Shadows are used to communicate which surfaces are in front of others, helping focus attention and establish hierarchy. <a href="http://www.google.com/design/spec/layout/layout-principles.html#layout-principles-dimensionality">Read more on depth and layering in UIs</a>.
<div class="in-code"><em>In code</em>: This is the <code>android:elevation</code> and <code>android:translationZ</code> attribute in Android 5.0. On earlier versions, shadows are normally provided as PNG assets.</div></li>
<li>Shadows and surfaces are used in a consistent and structured way. Each shadow indicates a new surface. Surfaces are created thoughtfully and carefully.</li>
<li>There are generally between 2 and 10 surfaces on the screen at once; avoid too much layering/nesting of surfaces.</li>
<li>Scrollable content either scrolls to the edges of the screen or behind another surface that casts a shadow over the content’s surface. Never clip an element against an invisible edge—elements don’t just scroll off into nowhere. Put another way, you rarely scroll the ink on a surface; you scroll the surface itself.
<div class="in-code"><em>In code</em>: <code>android:clipToPadding=false</code> often helps with this when using <code>ListView</code> and <code>ScrollView</code>.</div></li>
<li>Surfaces have simple, single-color backgrounds.</li>
</ul>

<h3>A Bold, Print-Like Aesthetic</h3>

<div class="sectionintro">
<img border="0" width="70" src="http://3.bp.blogspot.com/-oXLSlC4_0zc/VE7JKTV1DYI/AAAAAAAAA9Y/SJsY1G7YEDU/s1600/print.png" />
The “digital ink” you draw on those pieces of digital paper is informed by classic print design, with an emphasis on bold use of color and type, contextual imagery, and structured whitespace.
</div>

<div style="float:right; margin:0 0 20px 20px">
<a href="http://1.bp.blogspot.com/-3akABr2CL3E/VE6oigZafdI/AAAAAAAAA80/IwVyML5cdjg/s1600/themecolors.png"><img border="0" style="width: 200px" src="http://1.bp.blogspot.com/-3akABr2CL3E/VE6oigZafdI/AAAAAAAAA80/IwVyML5cdjg/s400/themecolors.png"></a><br>
<strong>Figure 2.</strong> Primary and accent colors.<br>
<a href="http://2.bp.blogspot.com/-UFfyUWYkt-o/VE6ohENvMnI/AAAAAAAAA88/FwAseGmlIjk/s1600/keylines.png"><img border="0" style="width: 150px" src="http://2.bp.blogspot.com/-UFfyUWYkt-o/VE6ohENvMnI/AAAAAAAAA88/FwAseGmlIjk/s400/keylines.png"></a><br>
<strong>Figure 3.</strong> Keylines.<br>
</div>

<ul class="checklist">
<li><strong class="signature">Signature element</strong>: Apps use a <a href="http://www.google.com/design/spec/style/color.html#color-ui-color-application">primary color and an accent color</a> (Figure 2) to color surface backgrounds and key UI widgets such as text fields and checkboxes. The accent color contrasts very well with the primary color (for example an app can use a dark blue primary color and a neon pink accent color). The accent color is high-contrast and is used to call attention to key UI elements, like a circular floating action button, selected tab strips, or form fields.
<div class="in-code"><em>In code</em>: Set the <code>android:colorPrimary</code> and <code>android:colorAccent</code> attributes in your theme (drop the <code>android</code> prefix if using AppCompat). AppCompat automatically colors text fields, checkboxes, and more on pre-L devices.</div></li>
<li><strong class="signature">Signature element</strong>: On Android 5.0, the status bar is colored to match the app’s primary color, or the current screen’s content. For full-bleed imagery, the status bar can be translucent.
<div class="in-code"><em>In code</em>: Set the <code>android:colorPrimaryDark</code> or <code>android:statusBarColor</code> attribute in your theme  (drop the <code>android</code> prefix if using AppCompat) or call <code>Window.setStatusBarColor</code>.</div></li>
<li>Icons, photos/images, text, and other foreground elements are colored “ink” on their surfaces. They don’t have shadows and don’t use gradients.</li>
<li>Colors extracted from images can be used to color adjacent UI elements or surfaces.
<div class="in-code"><em>In code</em>: This can be done using the <a href="https://developer.android.com/reference/android/support/v7/graphics/Palette.html">Palette</a> support library.</div></li>
<li><strong class="signature">Signature element</strong>: Icons in the app follow the <a href="http://www.google.com/design/spec/style/icons.html#icons-system-icons">system icon guidelines</a>, and standard icons use the <a href="http://www.google.com/design/spec/resources/sticker-sheets.html#sticker-sheets-system-icons">material design icon set</a>.</li>
<li>Photos are generally immersive and full-bleed. For example, for detail screens, run edge-to-edge and <a href="http://www.google.com/design/spec/style/imagery.html#imagery-principles">can even appear behind the app bar or status bar</a>.
<div class="in-code"><em>In code</em>: The new <code>Toolbar</code> widget (and its AppCompat equivalent) can be transparent and placed directly in your layout. For the status bar, check <a href="http://stackoverflow.com/questions/26440879/how-do-i-use-drawerlayout-to-display-over-the-actionbar-toolbar-and-under-the-st/26440880">this Stack Overflow post</a>.</div></li>
<li><strong class="signature">Signature element</strong>: Where appropriate, elements like body text, thumbnails, app bar titles, etc. are aligned to <a href="http://www.google.com/design/spec/layout/metrics-and-keylines.html#metrics-and-keylines-keylines-and-spacing">3 keylines</a> (Figure 3). On phones, those keylines are 16dp and 72dp from the left edge and 16dp from the right edge of the screen. On tablets those values are 24dp and 80dp.</li>
<li>UI elements are aligned to and sized according to an 8dp baseline grid. For example, app bars are 56dp tall on phones and 64dp tall on tablets. Padding and margins can take on values like 8dp, 16dp, 24dp, etc. More precise text positioning uses a 4dp grid.</li>
</ul>

<h3>Authentic Motion</h3>

<div class="sectionintro">
<img border="0" width="70" src="http://3.bp.blogspot.com/-Ux7CyLtgAQ4/VE7JKT8dIUI/AAAAAAAAA9U/Es2ZTkUcb2E/s1600/motion.png" />
Motion helps communicate what’s happening in the UI, providing visual continuity across app contexts and states. Motion also adds delight using smaller-scale transitions. Motion isn’t employed simply for motion’s sake.
</div>

<div style="float:right; margin:0 0 20px 20px">
<a href="http://3.bp.blogspot.com/-dadidlU3muU/VE6og4Ra_BI/AAAAAAAAA8E/uVCWrYMetGI/s1600/herotransition.gif"><img border="0" style="width: 150px" src="http://3.bp.blogspot.com/-dadidlU3muU/VE6og4Ra_BI/AAAAAAAAA8E/uVCWrYMetGI/s400/herotransition.gif"></a><br>
<strong>Figure 4.</strong> "Hero" transitions.<br>
</div>

<ul class="checklist">
<li>In general, UI and content elements don’t just appear or disappear—they <a href="http://www.google.com/design/spec/animation/meaningful-transitions.html">animate into place</a>, either together as a unit, or individually.</li>
<li><strong class="signature">Signature element</strong>: When touching an item to see its details, there’s a “hero” transition (Figure 4) that moves and scales the item between its position in the browsing screen and its position in the detail screen.
<div class="in-code"><em>In code</em>: These are called “<a href="http://developer.android.com/training/material/animations.html#Transitions">shared element transitions</a>” in the SDK. The support version of <code>FragmentTransaction</code> also includes some shared element support.</div></li>
<li><strong class="signature">Signature element</strong>: <a href="http://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-responsive-interaction-examples">Ripple effects</a> originating from where you touched the screen are used to show touch feedback on an item.
<div class="in-code"><em>In code</em>: The default <code>android:selectableItemBackground</code> and <code>android:selectableItemBackgroundBorderless</code> have this, or you can use <code>RippleDrawable</code> (<code>&lt;ripple&gt;</code>) to customize the effect. On pre-5.0 devices, ripples aren’t an expected feature, so defer to the default <code>android:selectableItemBackground</code> behavior.</div></li>
<li><strong class="signature">Signature element</strong>: UI elements can appear using a circular “reveal” animation.
<div class="in-code"><em>In code</em>: See <a href="http://developer.android.com/training/material/animations.html#Reveal">this doc</a> or the <code>ViewAnimationUtils</code> class for more.</div></li>
<li><strong class="signature">Signature element</strong>: Animations are used in more subtle, delightful ways, such as to convey the <a href="http://www.google.com/design/spec/animation/delightful-details.html#delightful-details-delightful-details">transition between icon states</a> or text states. For example, a “+” icon can morph into an “x” symbol, or an outlined heart icon can be filled using a paint-bucket fill effect.
<div class="in-code"><em>In code</em>: Icon transitions can be implemented using <code>AnimatedStateListDrawable</code> and its XML counterpart. An example can be found in the <a href="https://github.com/google/iosched">Google I/O app source</a>. There’s also support for <a href="http://developer.android.com/training/material/animations.html#AnimVector">animated vector icons</a>.</div></li>
<li>Animations and transitions are fast—generally under 300ms.</li>
<li>Crossfades are often replaced by translate/slide transitions: vertical slides for descendant navigation and horizontal slides for lateral navigation. For slide transitions, prefer quick acceleration and gentle ease-in deceleration over simple linear moves. See the material design spec on <a href="http://www.google.com/design/spec/animation/authentic-motion.html#">motion</a> for more.</li>
</ul>

<h3>Adaptive Design (and UI Patterns)</h3>

<div class="sectionintro">
<img border="0" width="70" src="http://3.bp.blogspot.com/-xWa54wdXIt4/VE7JKanNvPI/AAAAAAAAA9c/DSSmLfSOXik/s1600/adaptive.png" />
Tangible surfaces, bold graphic design, and meaningful motion work together to bring a consistent experience across any screen, be it phones, tablets, laptops, desktops, TVs, wearables, or even cars. Additionally, the key UI patterns below help establish a consistent character for the app across devices.
</div>

<div style="float:right; margin:0 0 20px 20px">
<a href="http://1.bp.blogspot.com/-recwqnhet7E/VE6ogYRbXcI/AAAAAAAAA74/WwtzwD_iJlE/s1600/fab.png"><img border="0" style="width: 150px" src="http://1.bp.blogspot.com/-recwqnhet7E/VE6ogYRbXcI/AAAAAAAAA74/WwtzwD_iJlE/s400/fab.png" itemprop="image"></a><br>
<strong>Figure 5.</strong> The floating action button.<br>
</div>

<ul class="checklist">
<li>The app uses <a href="http://www.youtube.com/watch?v=Jl3-lzlzOJI#t=11m41s">responsive design best practices</a> to ensure screens lay themselves out appropriately on <a href="http://www.google.com/design/spec/layout/layout-principles.html#layout-principles-responsive-principles">any screen size</a>, in any orientation. See the <a href="http://developer.android.com/distribute/googleplay/quality/tablet.html">Tablet App Quality Checklist</a> for a list of ways to optimize for tablets, and <a href="http://android-developers.blogspot.com/2012/11/designing-for-tablets-were-here-to-help.html">this blog post</a> for high-level tablet optimization tips.
<ul>
<li>In material design, detail screens are often presented as popups that appear using “hero” transitions (see above).</li>
<li>In multi-pane layouts, the app can use multiple toolbars to place actions contextually next to their related content.</li>
</ul>
</li>
<li><strong class="signature">Signature element</strong>: Where appropriate, the app promotes the key action on a screen using a circular <a href="http://www.google.com/design/spec/patterns/promoted-actions.html#promoted-actions-floating-action-button">floating action button</a> (FAB). The FAB (Figure 5) is a circular surface, so it casts a shadow. It is colored with a bright, accent color (see above). It performs a primary action such as send, compose, create, add, or search. It floats in front of other surfaces, and is normally at an 8dp elevation. It frequently appears at the bottom right of the screen, or centered on an edge where two surfaces meet (a seam or a step).</p>
</ul>

<h4>App bar</h4>

<ul class="checklist">
<li><strong class="signature">Signature element</strong>: The app uses a standard Android app bar. The app bar doesn’t have an app icon. Color and typography are used for branding instead. The app bar casts a shadow (or has a shadow cast on it by a surface below  and behind it). The app bar normally has a 4dp elevation.
<div class="in-code"><em>In code</em>: Use the new <code>Toolbar</code> widget in Android 5.0 that is placed directly into the activity’s view hierarchy. AppCompat also provides <code>android.support.v7.widget.Toolbar</code>, which supports all modern platform versions.</div></li>
<li>The app bar might be for example 2 or 3 times taller than the standard height; on scroll, the app bar can smoothly collapse into its normal height.</li>
<li>The app bar might be <a href="http://www.google.com/design/spec/style/imagery.html#imagery-principles">completely transparent in some cases</a>, with the text and actions overlaying an image behind it. For example, see the <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.magazines">Google Play Newsstand</a> app.</li>
<li>App bar titles align to the 2nd keyline (see more info on keylines above)
<div class="in-code"><em>In code</em>: when using the <code>Toolbar</code> widget, use the <code>android:contentInsetStart</code> attribute.</div></li>
<li>Where appropriate, upon scrolling down, the app bar can scroll off the screen, leaving more vertical space for content. Upon scrolling back up, the app bar should be shown again.</li>
</ul>

<h4>Tabs</h4>

<div style="float:right; margin:20px 0 20px 20px">
<a href="http://2.bp.blogspot.com/-nAgdUlQO9iM/VE6oh7paeBI/AAAAAAAAA8c/k1E8Vbc2tOg/s1600/tabs.png"><img border="0" style="width: 150px" src="http://2.bp.blogspot.com/-nAgdUlQO9iM/VE6oh7paeBI/AAAAAAAAA8c/k1E8Vbc2tOg/s400/tabs.png"></a><br>
<strong>Figure 6.</strong> Tabs with material design.
</div>

<ul class="checklist">
<li><strong class="signature">Signature element</strong>: Tabs follow the newer material design <a href="http://www.google.com/design/spec/components/tabs.html">interactions and styling</a> (Figure 6). There are no vertical separators between tabs. If the app uses top-level tabs, tabs are <a href="http://www.google.com/design/spec/components/tabs.html#tabs-usage">visually a part of the app bar</a>; tabs are a part of the app bar’s surface.
<div class="in-code"><em>In code</em>: See the <a href="http://developer.android.com/samples/SlidingTabsBasic/index.html">SlidingTabsBasic</a> sample code in the SDK or the <a href="https://github.com/google/iosched">Google I/O app source</a> (particularly the "My Schedule" section for phones).</div></li>
<li>Tabs should support a swipe gesture for moving between them.
<div class="in-code"><em>In code</em>:  All tabs should be swipeable using the <code>ViewPager</code> widget, which is available in the support library.</div></li>
<li>Selected tabs are <a href="http://www.google.com/design/spec/components/tabs.html#tabs-specs">indicated</a> by a foreground color change and/or a small strip below the tab text (or icon) colored with an accent color. The tab strip should smoothly slide as you swipe between tabs.</li>
</ul>

<h4>Navigation drawer</h4>

<div style="float:right; margin:20px 0 20px 20px">
<a href="http://1.bp.blogspot.com/-Ychs6FLcjGA/VE6og8WgM9I/AAAAAAAAA78/uSFiUm5V8kM/s1600/drawerlayering.gif"><img border="0" style="width: 150px" src="http://1.bp.blogspot.com/-Ychs6FLcjGA/VE6og8WgM9I/AAAAAAAAA78/uSFiUm5V8kM/s400/drawerlayering.gif"></a><br>
<strong>Figure 7.</strong> Navigation drawers<br>with material design.
</div>

<ul class="checklist">
<li><strong class="signature">Signature element</strong>: If the app uses a navigation drawer, it follows the newer material design interactions and styling (Figure 7). The drawer appears in front of the app bar. It also appears semitransparent behind the status bar.
<div class="in-code"><em>In code</em>: Implement drawers using the <code>DrawerLayout</code> widget from the support library, along with the new Toolbar widget discussed above. See <a href="http://stackoverflow.com/questions/26440879/how-do-i-use-drawerlayout-to-display-over-the-actionbar-toolbar-and-under-the-st/26440880">this Stack Overflow post</a> for more.</div></li>
<li><strong class="signature">Signature element</strong>: The leftmost icon in the app bar is a <a href="http://www.google.com/design/spec/layout/structure.html#structure-app-bar">navigation drawer indicator</a>; the app icon is not visible in the app bar. Optionally, on earlier versions of the platform, if the app has a drawer, the top-left icon can remain the app icon and narrower drawer indicator, as in Android 4.0.</li>
<li>The drawer is a standard width: No wider than 320dp on phones and 400dp on tablets, but no narrower than the screen width minus the standard toolbar height (360dp - 56dp = 304dp on the Nexus 5)</li>
<li>Item heights in the drawer follow the baseline grid: 48dp tall rows, 8dp above list sections and 8dp above and below dividers.</li>
<li>Text and icons should follow the keylines discussed above.</li>
</ul>

<p>More and more apps from Google and across the Google Play ecosystem will be updating with material design soon, so expect Winter 2014 to be a big quarter for design on Android. For more designer resources on material design, check out the <a href="https://www.youtube.com/playlist?list=PLOU2XLYxmsIJFcNKpAV9B_aQmz2h68fw_">DesignBytes series</a>. For additional developer resources, check the <a href="http://developer.android.com/training/material/index.html">Creating Apps with Material Design</a> docs!</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/LCAx8449MR7" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/LCAx8449MR7" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/LCAx8449MR7" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/material-design-on-android-checklist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Implementing Material Design in Your Android app</title>
		<link>https://googledata.org/google-android/implementing-material-design-in-your-android-app/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=implementing-material-design-in-your-android-app</link>
		<comments>https://googledata.org/google-android/implementing-material-design-in-your-android-app/#comments</comments>
		<pubDate>Fri, 24 Oct 2014 19:14:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=aab9e370d2c86369ae573bc41109a376</guid>
		<description><![CDATA[<i>By <a href="https://plus.google.com/b/108967384991768947849/+ChrisBanes/posts">Chris Banes</a> and <a href="https://plus.google.com/b/108967384991768947849/+NickButcher/posts">Nick Butcher</a>, Android Developer Relations</i>

<div><a href="http://4.bp.blogspot.com/-FdszmBuyYLY/VEqSiys-9dI/AAAAAAAAA7k/td6QUgxrPgo/s1600/Screen%2BShot%2B2014-10-24%2Bat%2B6.41.54%2BPM.png"><img border="0" src="http://4.bp.blogspot.com/-FdszmBuyYLY/VEqSiys-9dI/AAAAAAAAA7k/td6QUgxrPgo/s640/Screen%2BShot%2B2014-10-24%2Bat%2B6.41.54%2BPM.png"></a></div>

<p><a href="http://www.google.com/design/spec/#utm_campaign=L-Developer-launch">Material design</a> is a comprehensive approach to visual, interaction and motion design for the multi-screen world.  Android 5.0 Lollipop and the updated support libraries help you to create material UIs.  Here&#8217;s a rundown of some of the major elements of material design and the APIs and widgets that you can use to implement them in <i>your app</i>.</p>

<h3>Tangible surfaces</h3>

<p>In material design, UIs are composed of pieces of digital <a href="https://www.youtube.com/watch?v=YaG_ljfzeUw">paper &#38; ink</a>.  The surfaces and the shadows they cast provide visual cues to the structure of the application, what you can touch and how it will move.  This digital material can move, expand and reform to create flexible UIs.</p>

<h3>Shadows</h3>

<p>A surface&#8217;s position and depth result in subtle changes in lighting and shadows.  The new elevation property lets you specify a view&#8217;s position on the Z-axis and the framework then casts a real-time dynamic shadow on items behind it.   You can set the elevation declaratively in your layouts, defined in dips:</p>

<pre>
&#60;ImageView &#8230;
    android:elevation="8dp" /&#62;</pre>

<p>You can also set this from code using <code>getElevation()/setElevation()</code> (with shims in <a href="https://developer.android.com/reference/android/support/v4/view/ViewCompat.html?utm_campaign=L-Developer-launch">ViewCompat</a>).  The shadow a view casts is defined by its outline, which by default is derived from its background.  For example if you set a circular shape drawable as the background for a <a href="http://www.google.com/design/spec/patterns/promoted-actions.html?utm_campaign=L-Developer-launch#promoted-actions-floating-action-button">floating action button</a>, then it would cast an appropriate shadow. If you need finer control of a view&#8217;s shadow, you can set a <a href="https://developer.android.com/reference/android/view/ViewOutlineProvider.html?utm_campaign=L-Developer-launch"><code>ViewOutlineProvider</code></a> which can customise the <a href="https://developer.android.com/reference/android/graphics/Outline.html?utm_campaign=L-Developer-launch"><code>Outline</code></a> in <code>getOutline()</code>.</p>

<h3>Cards</h3>

<p><a href="http://www.google.com/design/spec/components/cards.html#utm_campaign=L-Developer-launch">Cards</a> are a common pattern for creating surfaces holding a distinct piece of information.  The new <a href="https://developer.android.com/reference/android/support/v7/widget/CardView.html?utm_campaign=L-Developer-launch">CardView</a> support library allows you to create them easily, providing outlines and shadows for you (with equivalent behaviour on prior platforms).</p>
<pre>&#60;android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"&#62;
    &#60;!-- Your card content --&#62;

&#60;/android.support.v7.widget.CardView&#62;</pre>
<p><code>CardView</code> extends <code>FrameLayout</code> and provides default elevation and corner radius for you so that cards have a consistent appearance across the platform.  You can customise these via the <code>cardElevation</code> and <code>cardCornerRadius</code> attributes, if required.  Note that Cards are not the only way of achieving dimensionality and you should be wary of <a href="http://www.google.com/design/spec/components/cards.html#cards-usage">over-cardifying</a> your UI!</p>

<h3>Print-like Design</h3>
<p>Material utilises classic principles from print design to create clean, simple layouts that put your content front and center.  Bold deliberate color choices, intentional whitespace, tasteful typography and a strong baseline grid create hierarchy, meaning and focus.</p>

<h3>Typography</h3>

<p>Android 5.0 updates the system font Roboto to beautifully and clearly display text no matter the display size.  A new medium weight has been added (<code>android:fontFamily=&#8221;sans-serif-medium&#8221;</code>) and new TextAppearance styles implement the recommended <a href="http://www.google.com/design/spec/style/typography.html#typography-standard-styles">typographic scale</a> for balancing content density and reading comfort.  For instance you can easily use the &#8216;Title&#8217; style by setting <code>android:textAppearance=&#8221;@android:style/TextAppearance.Material.Title&#8221;</code>. These styles are available on older platforms through the AppCompat support library, e.g. &#8220;<code>@style/TextAppearance.AppCompat.Title</code>&#8221;.</p>

<h3>Color</h3>

<div><a href="http://4.bp.blogspot.com/-5_R8pdvZ6fs/VEqAeTMuIhI/AAAAAAAAA6s/HJQt6IYaY4o/s1600/color_attribs.png"><img border="0" src="http://4.bp.blogspot.com/-5_R8pdvZ6fs/VEqAeTMuIhI/AAAAAAAAA6s/HJQt6IYaY4o/s640/color_attribs.png"></a></div>

<p>Your application&#8217;s <a href="http://www.google.com/design/spec/style/color.html#color-ui-color-application">color palette</a> brings branding and personality to your app so we&#8217;ve made it simple to colorize UI controls by using the following theme attributes:</p>

<ul><li><code>colorPrimary</code>. The primary branding color for the app; used as the action bar background, recents task title and in edge effects.</li>
<li><code>colorAccent</code>. Vibrant complement to the primary branding color.  Applied to framework controls such as EditText and Switch.</li>
<li><code>colorPrimaryDark</code>. Darker variant of the primary branding color; applied to the status bar.</li></ul><p>Further attributes give fine grained control over colorizing controls, see: <code>colorControlNormal</code>, <code>colorControlActivated</code>, <code>colorControlHighlight</code>, <code>colorButtonNormal</code>, <code>colorSwitchThumbNormal</code>, <code>colorEdgeEffect</code>, <code>statusBarColor</code> and <code>navigationBarColor</code>.</p>

<p>AppCompat provides a large subset of the functionality above, allowing you to colorize controls on pre-Lollipop platforms.</p>

<h3>Dynamic color</h3>

<div><a href="http://4.bp.blogspot.com/-qX9XNcFEQlQ/VEngSGP2ZyI/AAAAAAAAA6E/PbORZ-3ex-Y/s1600/palette2.gif">
<img border="0" src="http://4.bp.blogspot.com/-qX9XNcFEQlQ/VEngSGP2ZyI/AAAAAAAAA6E/PbORZ-3ex-Y/s400/palette2.gif"></a>
</div>

<p>Material Design encourages dynamic use of color, especially when you have rich images to work with.  The new Palette support library lets you extract a small set of colors from an image to style your UI controls to match; creating an immersive experience. The extracted palette will include vibrant and muted tones as well as foreground text colors for optimal legibility. For example:</p>
<pre>Palette.generateAsync(bitmap,
        new Palette.PaletteAsyncListener() {
    @Override
    public void onGenerated(Palette palette) {
         Palette.Swatch vibrant =
                 palette.getVibrantSwatch();
          if (swatch != null) {
              // If we have a vibrant color
              // update the title TextView
              titleView.setBackgroundColor(
                  vibrant.getRgb());
              titleView.setTextColor(
                  vibrant.getTitleTextColor());
          }
    }
});</pre>

<h3>Authentic Motion</h3>

<p>Tangible surfaces don&#8217;t just appear out of nowhere like a jump-cut in a movie; they move into place helping to focus attention, establish spatial relationships and maintain continuity.  Materials respond to touch to confirm your interaction and all changes radiate outward from your touch point.  All motion is meaningful and intimate, aiding the user&#8217;s comprehension.</p>

<h3>Activity + Fragment Transitions</h3>

<p>By declaring &#8216;shared elements&#8217; that are common across two screens you can create a smooth transition between the two states.</p>

<div><a href="http://1.bp.blogspot.com/-Vv4SxVSI2DY/VEqQxAf3PWI/AAAAAAAAA7c/mfq7XBrIGgo/s1600/activity_transitions%2B(1).gif"><img border="0" src="http://1.bp.blogspot.com/-Vv4SxVSI2DY/VEqQxAf3PWI/AAAAAAAAA7c/mfq7XBrIGgo/s400/activity_transitions%2B(1).gif"></a></div>


<pre><b>album_grid.xml</b>
&#8230;
    &#60;ImageView
        &#8230;
        android:transitionName="@string/transition_album_cover" /&#62;
<b>album_details.xml</b>
&#8230;
    &#60;ImageView
        &#8230;
        android:transitionName="@string/transition_album_cover" /&#62;

<b>AlbumActivity.java</b>
Intent intent = new Intent();
String transitionName = getString(R.string.transition_album_cover);
&#8230;
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
    albumCoverImageView,   // The view which starts the transition
    transitionName    // The transitionName of the view we&#8217;re transitioning to
    );
ActivityCompat.startActivity(activity, intent, options.toBundle());</pre>

<p>Here we define the same <code>transitionName</code> in two screens. When starting the new Activity and this transition is animated automatically.  In addition to shared elements, you can now also choreograph <a href="https://developer.android.com/reference/android/view/Window.html?utm_campaign=L-Developer-launch#setEnterTransition(android.transition.Transition)">entering</a> and <a href="https://developer.android.com/reference/android/view/Window.html?utm_campaign=L-Developer-launch#setExitTransition(android.transition.Transition)">exiting</a> elements.</p>

<h3>Ripples</h3>

<div><a href="http://3.bp.blogspot.com/-6UtZxpuhI-Q/VEqCMq6q17I/AAAAAAAAA68/oVt3vMIwJs0/s1600/animation-responsiveinteraction-inkreactions-notouchripplepressandrelease_large_xhdpi.gif"><img border="0" src="http://3.bp.blogspot.com/-6UtZxpuhI-Q/VEqCMq6q17I/AAAAAAAAA68/oVt3vMIwJs0/s640/animation-responsiveinteraction-inkreactions-notouchripplepressandrelease_large_xhdpi.gif"></a></div>

<p>Materials respond to users&#8217; touch with an ink ripple <a href="http://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-ink-reactions">surface reaction</a>.  Interactive controls such as Buttons exhibit this behaviour by default when you use or inherit from <code>Theme.Material</code> (as will <code>?android:selectableItemBackground</code>).  You can add this feedback to your own drawables by simply wrapping them in a ripple element:</p>

<pre>&#60;ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/accent_dark"&#62;
    &#60;item&#62;
        &#60;shape
            android:shape="oval"&#62;
            &#60;solid android:color="?android:colorAccent" /&#62;
        &#60;/shape&#62;
    &#60;/item&#62;
&#60;/ripple&#62;</pre>



<p>Custom views should propagate touch location down to their drawables in the <a href="http://developer.android.com/reference/android/view/View.html?utm_campaign=L-Developer-launch#drawableHotspotChanged(float,%20float)"><code>View#drawableHotspotChanged</code></a> callback so that the ripple can start from the touch point.</p>

<h3>StateListAnimator</h3>

<p>Materials also respond to touch by <a href="http://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-surface-response">raising up</a> to meet your finger, like a magnetic attraction.  You can achieve this effect by animating the translationZ attribute which is analogous to elevation but intended for transient use; such that <code>Z = elevation + translationZ</code>.  The new <code>stateListAnimator</code> attribute allows you to easily animate the <code>translationZ</code> on touch (Buttons do this by default):</p>

<pre><b>layout/your_layout.xml</b>
&#60;ImageButton &#8230;
    android:stateListAnimator="@anim/raise" /&#62;
<b>anim/raise.xml</b>
&#60;selector xmlns:android="http://schemas.android.com/apk/res/android"&#62;
    &#60;item android:state_enabled="true" android:state_pressed="true"&#62;
        &#60;objectAnimator
            android:duration="@android:integer/config_shortAnimTime"
            android:propertyName="translationZ"
            android:valueTo="@dimen/touch_raise"
            android:valueType="floatType" /&#62;
    &#60;/item&#62;
    &#60;item&#62;
        &#60;objectAnimator
            android:duration="@android:integer/config_shortAnimTime"
            android:propertyName="translationZ"
            android:valueTo="0dp"
            android:valueType="floatType" /&#62;
    &#60;/item&#62;
&#60;/selector&#62;</pre>

<h3>Reveal</h3>

<p>A hallmark material transition for showing new content is to reveal it with an expanding circular mask.  This helps to reinforce the user&#8217;s touchpoint as the start of all transitions, with its effects radiating <a href="http://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-radial-action">outward radially</a>.  You can implement this using the following Animator:</p>

<pre>Animator reveal = ViewAnimationUtils.createCircularReveal(
                    viewToReveal, // The new View to reveal
                    centerX,      // x co-ordinate to start the mask from
                    centerY,      // y co-ordinate to start the mask from
                    startRadius,  // radius of the starting mask
                    endRadius);   // radius of the final mask
reveal.start();</pre>

<h3>Interpolators</h3>

<p>Motion should be deliberate, swift and precise.  Unlike typical ease-in-ease-out transitions, in Material Design, objects tend to start quickly and ease into their final position. Over the course of the animation, the object spends more time near its final destination. As a result, the user isn&#8217;t left waiting for the animation to finish, and the negative effects of motion are minimized.  A new <a href="https://developer.android.com/reference/android/R.interpolator.html?utm_campaign=L-Developer-launch#fast_out_slow_in">fast-in-slow-out interpolator</a> has been added to achieve this motion.</p>

<div><a href="http://3.bp.blogspot.com/-h1tGDao-XK4/VEqCGLnpyQI/AAAAAAAAA60/LE4NO1X_gzk/s1600/animation-authentic-motion-authenticMotion_massAndWeight_ex1_large_xhdpi.gif"><img border="0" src="http://3.bp.blogspot.com/-h1tGDao-XK4/VEqCGLnpyQI/AAAAAAAAA60/LE4NO1X_gzk/s640/animation-authentic-motion-authenticMotion_massAndWeight_ex1_large_xhdpi.gif"></a></div>

<p>For elements entering and exiting the screen (which <a href="http://www.google.com/design/spec/animation/authentic-motion.html#authentic-motion-mass-weight">should do so at peak velocity</a>), check out the <a href="https://developer.android.com/reference/android/R.interpolator.html?utm_campaign=L-Developer-launch#linear_out_slow_in">linear-out-slow-in</a> and <a href="https://developer.android.com/reference/android/R.interpolator.html?utm_campaign=L-Developer-launch#fast_out_linear_in">fast-out-linear-in</a> interpolators respectively.</p>

<h3>Adaptive design</h3>

<p>Our final core concept of material is creating a single adaptive design that works across devices of all sizes and shapes, from watches to giant TVs.  Adaptive design techniques help us realize the vision that each device reflects a different view of the same underlying system. Each view is tailored to the size and interaction appropriate for that device. Colors, iconography, hierarchy, and spatial relationships remain constant.  The material design system provides flexible components and patterns to help you build a design that scales.</p>

<h3>Toolbar</h3>

<p>The toolbar is a generalization of the action bar pattern, providing similar functionality, but much more flexibility. Unlike the standard action bar, toolbar is a view in your hierarchy just like any other, so you can place instances wherever you like, interleave them with the rest of your views, animate, react to scroll events and so on. You can make the Toolbar act as your Activity&#8217;s Action Bar by calling Activity.setActionBar().</p>

<div><a href="http://1.bp.blogspot.com/-np39I5VrQTQ/VEnnefqkroI/AAAAAAAAA6c/--kVt_Wi1vk/s1600/contacts_toolbars.png"><img border="0" src="http://1.bp.blogspot.com/-np39I5VrQTQ/VEnnefqkroI/AAAAAAAAA6c/--kVt_Wi1vk/s640/contacts_toolbars.png"></a></div>

<p>In this example, the blue toolbar is an extended height, overlaid by the screen content and provides the navigation button.  Note that two further toolbars are used in the list and detail views.</p>

<p>For details of implementing toolbars, see <a href="http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html">this post</a>.</p>

<h3>Go Forth and Materialize</h3>

<p>Material Design helps you to build understandable, beautiful and adaptive apps, which are alive with motion.  Hopefully, this post has inspired you to apply these principles to your app and signposted some of the new (and compatibility) APIs to achieve this.</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/YJmhaCHA61j"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/YJmhaCHA61j"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/YJmhaCHA61j"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<i>By <a href="https://plus.google.com/b/108967384991768947849/+ChrisBanes/posts">Chris Banes</a> and <a href="https://plus.google.com/b/108967384991768947849/+NickButcher/posts">Nick Butcher</a>, Android Developer Relations</i>

<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-FdszmBuyYLY/VEqSiys-9dI/AAAAAAAAA7k/td6QUgxrPgo/s1600/Screen%2BShot%2B2014-10-24%2Bat%2B6.41.54%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img itemprop="image" border="0" src="http://4.bp.blogspot.com/-FdszmBuyYLY/VEqSiys-9dI/AAAAAAAAA7k/td6QUgxrPgo/s640/Screen%2BShot%2B2014-10-24%2Bat%2B6.41.54%2BPM.png" /></a></div>

<p itemprop="description"><a href="http://www.google.com/design/spec/#utm_campaign=L-Developer-launch">Material design</a> is a comprehensive approach to visual, interaction and motion design for the multi-screen world.  Android 5.0 Lollipop and the updated support libraries help you to create material UIs.  Here’s a rundown of some of the major elements of material design and the APIs and widgets that you can use to implement them in <i>your app</i>.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Tangible surfaces</h3>

<p>In material design, UIs are composed of pieces of digital <a href="https://www.youtube.com/watch?v=YaG_ljfzeUw">paper & ink</a>.  The surfaces and the shadows they cast provide visual cues to the structure of the application, what you can touch and how it will move.  This digital material can move, expand and reform to create flexible UIs.</p>

<h3>Shadows</h3>

<p>A surface’s position and depth result in subtle changes in lighting and shadows.  The new elevation property lets you specify a view’s position on the Z-axis and the framework then casts a real-time dynamic shadow on items behind it.   You can set the elevation declaratively in your layouts, defined in dips:</p>

<pre class="prettyprint">
&lt;ImageView …
    android:elevation="8dp" /&gt;</pre>

<p>You can also set this from code using <code>getElevation()/setElevation()</code> (with shims in <a href="https://developer.android.com/reference/android/support/v4/view/ViewCompat.html?utm_campaign=L-Developer-launch">ViewCompat</a>).  The shadow a view casts is defined by its outline, which by default is derived from its background.  For example if you set a circular shape drawable as the background for a <a href="http://www.google.com/design/spec/patterns/promoted-actions.html?utm_campaign=L-Developer-launch#promoted-actions-floating-action-button">floating action button</a>, then it would cast an appropriate shadow. If you need finer control of a view’s shadow, you can set a <a href="https://developer.android.com/reference/android/view/ViewOutlineProvider.html?utm_campaign=L-Developer-launch"><code>ViewOutlineProvider</code></a> which can customise the <a href="https://developer.android.com/reference/android/graphics/Outline.html?utm_campaign=L-Developer-launch"><code>Outline</code></a> in <code>getOutline()</code>.</p>

<h3>Cards</h3>

<p><a href="http://www.google.com/design/spec/components/cards.html#utm_campaign=L-Developer-launch">Cards</a> are a common pattern for creating surfaces holding a distinct piece of information.  The new <a href="https://developer.android.com/reference/android/support/v7/widget/CardView.html?utm_campaign=L-Developer-launch">CardView</a> support library allows you to create them easily, providing outlines and shadows for you (with equivalent behaviour on prior platforms).</p>
<pre class="prettyprint">&lt;android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"&gt;
    &lt;!-- Your card content --&gt;

&lt;/android.support.v7.widget.CardView&gt;</pre>
<p><code>CardView</code> extends <code>FrameLayout</code> and provides default elevation and corner radius for you so that cards have a consistent appearance across the platform.  You can customise these via the <code>cardElevation</code> and <code>cardCornerRadius</code> attributes, if required.  Note that Cards are not the only way of achieving dimensionality and you should be wary of <a href="http://www.google.com/design/spec/components/cards.html#cards-usage">over-cardifying</a> your UI!</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Print-like Design</h3>
<p>Material utilises classic principles from print design to create clean, simple layouts that put your content front and center.  Bold deliberate color choices, intentional whitespace, tasteful typography and a strong baseline grid create hierarchy, meaning and focus.</p>

<h3>Typography</h3>

<p>Android 5.0 updates the system font Roboto to beautifully and clearly display text no matter the display size.  A new medium weight has been added (<code>android:fontFamily=”sans-serif-medium”</code>) and new TextAppearance styles implement the recommended <a href="http://www.google.com/design/spec/style/typography.html#typography-standard-styles">typographic scale</a> for balancing content density and reading comfort.  For instance you can easily use the ‘Title’ style by setting <code>android:textAppearance=”@android:style/TextAppearance.Material.Title”</code>. These styles are available on older platforms through the AppCompat support library, e.g. “<code>@style/TextAppearance.AppCompat.Title</code>”.</p>

<h3>Color</h3>

<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-5_R8pdvZ6fs/VEqAeTMuIhI/AAAAAAAAA6s/HJQt6IYaY4o/s1600/color_attribs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-5_R8pdvZ6fs/VEqAeTMuIhI/AAAAAAAAA6s/HJQt6IYaY4o/s640/color_attribs.png" /></a></div>

<p>Your application’s <a href="http://www.google.com/design/spec/style/color.html#color-ui-color-application">color palette</a> brings branding and personality to your app so we’ve made it simple to colorize UI controls by using the following theme attributes:</p>

<ul><li><code>colorPrimary</code>. The primary branding color for the app; used as the action bar background, recents task title and in edge effects.</li>
<li><code>colorAccent</code>. Vibrant complement to the primary branding color.  Applied to framework controls such as EditText and Switch.</li>
<li><code>colorPrimaryDark</code>. Darker variant of the primary branding color; applied to the status bar.</li></ul>

<p>Further attributes give fine grained control over colorizing controls, see: <code>colorControlNormal</code>, <code>colorControlActivated</code>, <code>colorControlHighlight</code>, <code>colorButtonNormal</code>, <code>colorSwitchThumbNormal</code>, <code>colorEdgeEffect</code>, <code>statusBarColor</code> and <code>navigationBarColor</code>.</p>

<p>AppCompat provides a large subset of the functionality above, allowing you to colorize controls on pre-Lollipop platforms.</p>

<h3>Dynamic color</h3>

<div style="float:right;padding-top:1em;margin-left:2em;max-width:40%;"><a href="http://4.bp.blogspot.com/-qX9XNcFEQlQ/VEngSGP2ZyI/AAAAAAAAA6E/PbORZ-3ex-Y/s1600/palette2.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">
<img border="0" src="http://4.bp.blogspot.com/-qX9XNcFEQlQ/VEngSGP2ZyI/AAAAAAAAA6E/PbORZ-3ex-Y/s400/palette2.gif" /></a>
</div>

<p>Material Design encourages dynamic use of color, especially when you have rich images to work with.  The new Palette support library lets you extract a small set of colors from an image to style your UI controls to match; creating an immersive experience. The extracted palette will include vibrant and muted tones as well as foreground text colors for optimal legibility. For example:</p>
<pre class="prettyprint">Palette.generateAsync(bitmap,
        new Palette.PaletteAsyncListener() {
    @Override
    public void onGenerated(Palette palette) {
         Palette.Swatch vibrant =
                 palette.getVibrantSwatch();
          if (swatch != null) {
              // If we have a vibrant color
              // update the title TextView
              titleView.setBackgroundColor(
                  vibrant.getRgb());
              titleView.setTextColor(
                  vibrant.getTitleTextColor());
          }
    }
});</pre>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Authentic Motion</h3>

<p>Tangible surfaces don’t just appear out of nowhere like a jump-cut in a movie; they move into place helping to focus attention, establish spatial relationships and maintain continuity.  Materials respond to touch to confirm your interaction and all changes radiate outward from your touch point.  All motion is meaningful and intimate, aiding the user’s comprehension.</p>

<h3>Activity + Fragment Transitions</h3>

<p>By declaring ‘shared elements’ that are common across two screens you can create a smooth transition between the two states.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-Vv4SxVSI2DY/VEqQxAf3PWI/AAAAAAAAA7c/mfq7XBrIGgo/s1600/activity_transitions%2B(1).gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-Vv4SxVSI2DY/VEqQxAf3PWI/AAAAAAAAA7c/mfq7XBrIGgo/s400/activity_transitions%2B(1).gif" /></a></div>


<pre class="prettyprint"><b>album_grid.xml</b>
…
    &lt;ImageView
        …
        android:transitionName="@string/transition_album_cover" /&gt;
<b>album_details.xml</b>
…
    &lt;ImageView
        …
        android:transitionName="@string/transition_album_cover" /&gt;

<b>AlbumActivity.java</b>
Intent intent = new Intent();
String transitionName = getString(R.string.transition_album_cover);
…
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
    albumCoverImageView,   // The view which starts the transition
    transitionName    // The transitionName of the view we’re transitioning to
    );
ActivityCompat.startActivity(activity, intent, options.toBundle());</pre>

<p>Here we define the same <code>transitionName</code> in two screens. When starting the new Activity and this transition is animated automatically.  In addition to shared elements, you can now also choreograph <a href="https://developer.android.com/reference/android/view/Window.html?utm_campaign=L-Developer-launch#setEnterTransition(android.transition.Transition)">entering</a> and <a href="https://developer.android.com/reference/android/view/Window.html?utm_campaign=L-Developer-launch#setExitTransition(android.transition.Transition)">exiting</a> elements.</p>

<h3>Ripples</h3>

<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-6UtZxpuhI-Q/VEqCMq6q17I/AAAAAAAAA68/oVt3vMIwJs0/s1600/animation-responsiveinteraction-inkreactions-notouchripplepressandrelease_large_xhdpi.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-6UtZxpuhI-Q/VEqCMq6q17I/AAAAAAAAA68/oVt3vMIwJs0/s640/animation-responsiveinteraction-inkreactions-notouchripplepressandrelease_large_xhdpi.gif" /></a></div>

<p>Materials respond to users’ touch with an ink ripple <a href="http://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-ink-reactions">surface reaction</a>.  Interactive controls such as Buttons exhibit this behaviour by default when you use or inherit from <code>Theme.Material</code> (as will <code>?android:selectableItemBackground</code>).  You can add this feedback to your own drawables by simply wrapping them in a ripple element:</p>

<pre class="prettyprint">&lt;ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/accent_dark"&gt;
    &lt;item&gt;
        &lt;shape
            android:shape="oval"&gt;
            &lt;solid android:color="?android:colorAccent" /&gt;
        &lt;/shape&gt;
    &lt;/item&gt;
&lt;/ripple&gt;</pre>



<p>Custom views should propagate touch location down to their drawables in the <a href="http://developer.android.com/reference/android/view/View.html?utm_campaign=L-Developer-launch#drawableHotspotChanged(float,%20float)"><code>View#drawableHotspotChanged</code></a> callback so that the ripple can start from the touch point.</p>

<h3>StateListAnimator</h3>

<p>Materials also respond to touch by <a href="http://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-surface-response">raising up</a> to meet your finger, like a magnetic attraction.  You can achieve this effect by animating the translationZ attribute which is analogous to elevation but intended for transient use; such that <code>Z = elevation + translationZ</code>.  The new <code>stateListAnimator</code> attribute allows you to easily animate the <code>translationZ</code> on touch (Buttons do this by default):</p>

<pre class="prettyprint"><b>layout/your_layout.xml</b>
&lt;ImageButton …
    android:stateListAnimator="@anim/raise" /&gt;
<b>anim/raise.xml</b>
&lt;selector xmlns:android="http://schemas.android.com/apk/res/android"&gt;
    &lt;item android:state_enabled="true" android:state_pressed="true"&gt;
        &lt;objectAnimator
            android:duration="@android:integer/config_shortAnimTime"
            android:propertyName="translationZ"
            android:valueTo="@dimen/touch_raise"
            android:valueType="floatType" /&gt;
    &lt;/item&gt;
    &lt;item&gt;
        &lt;objectAnimator
            android:duration="@android:integer/config_shortAnimTime"
            android:propertyName="translationZ"
            android:valueTo="0dp"
            android:valueType="floatType" /&gt;
    &lt;/item&gt;
&lt;/selector&gt;</pre>

<h3>Reveal</h3>

<p>A hallmark material transition for showing new content is to reveal it with an expanding circular mask.  This helps to reinforce the user’s touchpoint as the start of all transitions, with its effects radiating <a href="http://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-radial-action">outward radially</a>.  You can implement this using the following Animator:</p>

<pre class="prettyprint">Animator reveal = ViewAnimationUtils.createCircularReveal(
                    viewToReveal, // The new View to reveal
                    centerX,      // x co-ordinate to start the mask from
                    centerY,      // y co-ordinate to start the mask from
                    startRadius,  // radius of the starting mask
                    endRadius);   // radius of the final mask
reveal.start();</pre>

<h3>Interpolators</h3>

<p>Motion should be deliberate, swift and precise.  Unlike typical ease-in-ease-out transitions, in Material Design, objects tend to start quickly and ease into their final position. Over the course of the animation, the object spends more time near its final destination. As a result, the user isn’t left waiting for the animation to finish, and the negative effects of motion are minimized.  A new <a href="https://developer.android.com/reference/android/R.interpolator.html?utm_campaign=L-Developer-launch#fast_out_slow_in">fast-in-slow-out interpolator</a> has been added to achieve this motion.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-h1tGDao-XK4/VEqCGLnpyQI/AAAAAAAAA60/LE4NO1X_gzk/s1600/animation-authentic-motion-authenticMotion_massAndWeight_ex1_large_xhdpi.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-h1tGDao-XK4/VEqCGLnpyQI/AAAAAAAAA60/LE4NO1X_gzk/s640/animation-authentic-motion-authenticMotion_massAndWeight_ex1_large_xhdpi.gif" /></a></div>

<p>For elements entering and exiting the screen (which <a href="http://www.google.com/design/spec/animation/authentic-motion.html#authentic-motion-mass-weight">should do so at peak velocity</a>), check out the <a href="https://developer.android.com/reference/android/R.interpolator.html?utm_campaign=L-Developer-launch#linear_out_slow_in">linear-out-slow-in</a> and <a href="https://developer.android.com/reference/android/R.interpolator.html?utm_campaign=L-Developer-launch#fast_out_linear_in">fast-out-linear-in</a> interpolators respectively.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Adaptive design</h3>

<p>Our final core concept of material is creating a single adaptive design that works across devices of all sizes and shapes, from watches to giant TVs.  Adaptive design techniques help us realize the vision that each device reflects a different view of the same underlying system. Each view is tailored to the size and interaction appropriate for that device. Colors, iconography, hierarchy, and spatial relationships remain constant.  The material design system provides flexible components and patterns to help you build a design that scales.</p>

<h3>Toolbar</h3>

<p>The toolbar is a generalization of the action bar pattern, providing similar functionality, but much more flexibility. Unlike the standard action bar, toolbar is a view in your hierarchy just like any other, so you can place instances wherever you like, interleave them with the rest of your views, animate, react to scroll events and so on. You can make the Toolbar act as your Activity’s Action Bar by calling Activity.setActionBar().</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-np39I5VrQTQ/VEnnefqkroI/AAAAAAAAA6c/--kVt_Wi1vk/s1600/contacts_toolbars.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-np39I5VrQTQ/VEnnefqkroI/AAAAAAAAA6c/--kVt_Wi1vk/s640/contacts_toolbars.png" /></a></div>

<p>In this example, the blue toolbar is an extended height, overlaid by the screen content and provides the navigation button.  Note that two further toolbars are used in the list and detail views.</p>

<p>For details of implementing toolbars, see <a href="http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html">this post</a>.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Go Forth and Materialize</h3>

<p>Material Design helps you to build understandable, beautiful and adaptive apps, which are alive with motion.  Hopefully, this post has inspired you to apply these principles to your app and signposted some of the new (and compatibility) APIs to achieve this.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/YJmhaCHA61j" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/YJmhaCHA61j" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/YJmhaCHA61j" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/implementing-material-design-in-your-android-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Getting Your Apps Ready for Nexus 6 and Nexus 9</title>
		<link>https://googledata.org/google-android/getting-your-apps-ready-for-nexus-6-and-nexus-9/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=getting-your-apps-ready-for-nexus-6-and-nexus-9</link>
		<comments>https://googledata.org/google-android/getting-your-apps-ready-for-nexus-6-and-nexus-9/#comments</comments>
		<pubDate>Thu, 23 Oct 2014 23:44:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=1337e3d8f606ecad17f5ff19dc5895b6</guid>
		<description><![CDATA[<p><em>By <a href="https://plus.google.com/b/108967384991768947849/+KatherineKuanPlus/posts">Katherine Kuan</a>, Developer Advocate</em></p>

<div>
<img border="0" src="http://1.bp.blogspot.com/-QrDTeqz1DWg/VElLTwKj2DI/AAAAAAAAA5s/TJeK8BDnxTk/s400/Nexus_6_Tumbler_v2.png"><p>Updated material design Tumblr app on Nexus 6.</p>
</div>

<p>
Last week, we unveiled the Nexus 6 and Nexus 9, the newest additions to our Nexus family that will ship with Android 5.0 Lollipop. Together, they deliver a pure Google experience, showcasing fresh visual styles with material design, improved performance, and additional features.</p>

<p>Let&#8217;s make sure your apps and games are optimized to give your users the best mobile experience on these devices. We&#8217;ve outlined some best practices below.</p>



<h3>
Nexus 6</h3>

<h3>
Screen</h3>

<p>The Nexus 6 boasts an impressive 5.96&#8221; Quad HD screen display at a resolution of 2560 x 1440 (493 ppi). This translates to ~ <strong>730 x 410 dp</strong> (density independent pixels).</p>

<h3>Check your assets</h3>

<p>It has a quantized density of <b>560 dpi</b>, which falls in between the <code>xxhdpi</code> and <code>xxxhdpi</code> primary density buckets. For the Nexus 6, the platform will scale down <code>xxxhdpi</code> assets, but if those aren&#8217;t available, then it will scale up <code>xxhdpi</code> assets.</p>

<p>Provide at least an <a href="http://developer.android.com/design/style/iconography.html?utm_campaign=L-Developer-launch#xxxhdpi-launcher"><code>xxxhdpi</code> app icon</a> because devices can display large app icons on the launcher. It&#8217;s best practice to place your app icons in <code>mipmap-</code> folders (not the <code>drawable-</code> folders) because they are used at resolutions different from the device&#8217;s current density. For example, an <code>xxxhdpi</code> app icon can be used on the launcher for an <code>xxhdpi</code> device.</p>


<pre>res/
   mipmap-mdpi/
      ic_launcher.png
   mipmap-hdpi/
      ic_launcher.png
   mipmap-xhdpi/
      ic_launcher.png  
   mipmap-xxhdpi/
      ic_launcher.png
   mipmap-xxxhdpi/   
      ic_launcher.png  # App icon used on Nexus 6 device launcher</pre>

<p>Choosing to add <code>xxxhdpi</code> versions for the rest of your assets will provide a sharper visual experience on the Nexus 6, but does increase apk size, so you should make an appropriate decision for your app.</p>

<pre>res/
   drawable-mdpi/
      ic_sunny.png
   drawable-hdpi/
      ic_sunny.png
   drawable-xhdpi/   
      ic_sunny.png
   drawable-xxhdpi/  # Fall back to these if xxxhdpi versions aren&#8217;t available
      ic_sunny.png 
   drawable-xxxhdpi/ # Higher resolution assets for Nexus 6
      ic_sunny.png</pre>


<h3>Make sure you are not filtered on Google Play</h3>
&#60;!-- <h3>Stop using compatible-screens</h3> --&#62;

<p>If you are using the <a href="http://developer.android.com/guide/topics/manifest/compatible-screens-element.html?utm_campaign=L-Developer-launch"><code>&#60;compatible-screens&#62;</code></a> element in the <code>AndroidManifest.xml</code> file, you should <a href="https://plus.google.com/108967384991768947849/posts/9Z8qB1mCoW4">stop using it</a> because it&#8217;s not scalable to re-compile and publish your app each time new devices come out. However, if you must use it, make sure to update the manifest to <b>add the configuration for these devices</b> (by screen size and density). Otherwise your app may be excluded from Google Play search results on these devices.</p>


<h3>
Nexus 9</h3>

<h3>Screen</h3>

<p>The Nexus 9 is a premium 8.9&#8221; tablet with a screen size of 2048 x 1536 pixels (288 ppi), which translates to <strong>1024 x 768 dip</strong>. This is a 4:3 aspect ratio, which is unique compared to earlier tablets. The Nexus 9 falls into the <code>xhdpi</code> density bucket, and you should already have assets in the <code>drawable-xhdpi</code> folder. </p>


<div>
<a href="http://2.bp.blogspot.com/-CMYXO1y5vOw/VElLcOjkn5I/AAAAAAAAA50/iH0iNezGDAg/s1600/Nexus_9_WSJ_v2.png"><img border="0" src="http://2.bp.blogspot.com/-CMYXO1y5vOw/VElLcOjkn5I/AAAAAAAAA50/iH0iNezGDAg/s600/Nexus_9_WSJ_v2.png"></a></div>
<p>Updated Material Design Wall Street Journal app on Nexus 9.</p>




<h3>Enable NDK apps for 64-bit</h3>

<p>The Nexus 9 runs on a 64-bit Dual Core processor, which makes it the first Android device to ship with a 64-bit ARM instruction set. Support for 64-bit processors was just added in Android 5.0, so if you have an NDK app, enable it by updating the <code>APP_ABI</code> value in your <code>Application.mk</code> file:</p>

<pre>APP_ABI := armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64</pre>

<p>More detailed instructions are provided in the <a href="http://developer.android.com/about/versions/android-5.0.html?utm_campaign=L-Developer-launch#64BitSupport">developer site</a>. You can test your 64-bit enabled app on a physical device with a 64-bit processor running Android 5.0, or take advantage of the recently announced <a href="https://plus.google.com/108967384991768947849/posts/XG1WmNDMe8H">64-bit emulator</a> in Android Studio. </p>

<h3>Update your hardware keyboard support</h3>

<p>The Nexus 9 Keyboard Folio will be available as an accessory in Google Play. It&#8217;s very important that you <strong>don&#8217;t lock your app to a single orientation</strong>. The Nexus 9&#8217;s natural orientation is portrait mode, while it&#8217;s used in landscape mode with the keyboard. If you lock to the device&#8217;s natural orientation, the app may appear sideways for devices with keyboards.</p>

<p>Users should be able to navigate around the main content of the app with the keyboard, while relying on touch input or keyboard shortcuts for toolbar actions and button bars. Therefore, <b>ensure that your app has proper <a href="http://developer.android.com/training/keyboard-input/navigation.html?utm_campaign=L-Developer-launch">keyboard navigation</a> and shortcuts</b> for primary actions. Keyboard shortcuts that are invoked with Ctrl + [shortcut] combo can be defined via menu items using:</p>

<pre>&#60;menu xmlns:android="http://schemas.android.com/apk/res/android"&#62;
    &#60;item
        android:id="@+id/menu_create"
        android:title="@string/menu_create"
        android:alphabeticShortcut="c&#8221; /&#62;
&#60;/menu/&#62;</pre>

<p>Alternatively, shortcuts can be defined using <a href="http://developer.android.com/reference/android/app/Activity.html#onKeyShortcut(int,%20android.view.KeyEvent)"><code>Activity#onKeyShortcut</code></a> or <a href="http://developer.android.com/reference/android/view/View.html#onKeyShortcut(int,%20android.view.KeyEvent)"><code>View#onKeyShortcut</code></a>. Learn more about keyboard actions <a href="http://developer.android.com/training/keyboard-input/commands.html?utm_campaign=L-Developer-launch">here</a>.</p>

<pre>In MainActivity.java:

@Override
public boolean onKeyShortcut(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_R:
            Toast.makeText(this, "Reply", Toast.LENGTH_SHORT).show();
            return true;
        default:
            return super.onKeyShortcut(keyCode, event);
    }
}</pre>

<h3>
Responsive layouts with w- and sw- qualifiers</h3>

<p>In order to take advantage of the screen real estate on the Nexus 6 and Nexus 9, we emphasize the importance of responsive design. In the past, if you assumed that landscape mode is significantly wider than portrait mode, you may run into problems on a device like the Nexus 9, which has an aspect ratio of 4:3. Instead of declaring layouts using the <code>layout-land</code> or <code>layout-port</code> resource folder qualifiers, we strongly recommend switching to the <code>w&#60;N&#62;dp</code> <a href="http://developer.android.com/guide/practices/screens_support.html?utm_campaign=L-Developer-launch#NewQualifiers">width resource folder qualifier</a> so that content is laid out based on available screen width. </p>

<p>Think about content first and foremost. Decide on min and max screen real estate that your content requires, and determine cutoff points at different screen widths where you can modify the layout composition for your app (# of grid columns, multi-pane layout, etc&#8230;). </p>

<p>For example, a single pane layout for your main activity on phones can be defined in:</p>

<pre>res/layout/activity_main.xml</pre>

<p>On larger screen devices, where the current orientation is at least 600dp in width, a new two-pane layout with a list alongside a detail pane could be declared in:</p>

<pre>res/layout-w600dp/activity_main.xml</pre>

<p>On even larger screen devices, where the current orientation is at least 720dp in width, a new multi-pane layout where the detail pane requires even more horizontal space could be declared in:</p>

<pre>res/layout-w720dp/activity_main.xml</pre>

<p>As for attributes based on form factor, instead of declaring them in values-large or values-xlarge resource directories, use the <code>sw&#60;N&#62;dp</code> <a href="http://developer.android.com/guide/practices/screens_support.html?utm_campaign=L-Developer-launch#NewQualifiers">smallest width qualifier</a>. For example, you could style your TextViews to have a medium font size on phones.</p>

<pre>In res/values/styles.xml:

&#60;style name="DescriptionTextStyle"&#62;
  &#60;item name="android:textAppearance"&#62;?android:attr/textAppearanceMedium&#60;/item&#62;
&#60;/style&#62;</pre>

<p>Meanwhile, TextViews could have a large font size when the smallest width of the device (taking the minimum of the landscape and portrait widths) is 600dp or wider. This ensures the font size of your app doesn&#8217;t change when you rotate this large screen device. </p>

<pre>In res/values-sw600dp/styles.xml:

&#60;style name="DescriptionTextStyle"&#62;
  &#60;item name="android:textAppearance"&#62;?android:attr/textAppearanceLarge&#60;/item&#62;
&#60;/style&#62; </pre>

<h3>
Take advantage of 5.0 and Material</h3>

<p>Set your <a href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch"><code>android:targetSdkVersion</code></a> to <code>"21"</code>. Take note of the <a href="http://developer.android.com/about/versions/android-5.0.html?utm_campaign=L-Developer-launch#Behaviors">important behavior changes</a> in Android 5.0 Lollipop including ART, the new Android runtime, to ensure that your app continues to run well. You can also leverage <a href="http://android-developers.blogspot.com/2014/10/whats-new-in-android-50-lollipop.html?utm_campaign=L-Developer-launch">new platform APIs</a> like richer <a href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY">notifications</a>. </p>

<p>Nexus 6 and Nexus 9 users will be immersed in the new world of <a href="http://google.com/design/spec#utm_campaign=L-Developer-launch">material design</a>, and they&#8217;ll expect the same seamless transitions, bold colors, and delightful details from your app. As you invest time in bringing your app up to date with our latest design language, there&#8217;s a whole host of resources to help you make the leap, including important new updates to the <a href="http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html">support library</a>, <a href="https://www.youtube.com/playlist?list=PLOU2XLYxmsIJFcNKpAV9B_aQmz2h68fw_">videos</a>, and a <a href="http://developer.android.com/training/material/index.html?utm_campaign=L-Developer-launch">getting started</a> guide. Good luck and we can&#8217;t wait to see your apps!</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/4fPaqYUZ6Uh"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/4fPaqYUZ6Uh"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><em>By <a href="https://plus.google.com/b/108967384991768947849/+KatherineKuanPlus/posts">Katherine Kuan</a>, Developer Advocate</em></p>

<div style="float:right;padding-top:1em;margin-left:2em;max-width:40%;">
<img border="0" src="http://1.bp.blogspot.com/-QrDTeqz1DWg/VElLTwKj2DI/AAAAAAAAA5s/TJeK8BDnxTk/s400/Nexus_6_Tumbler_v2.png" />
<p style="margin: 0em auto auto 1.25em;font-size: 13px;color:#666;width:90%">Updated material design Tumblr app on Nexus 6.</p>
</div>

<p itemprop="description">
Last week, we unveiled the Nexus 6 and Nexus 9, the newest additions to our Nexus family that will ship with Android 5.0 Lollipop. Together, they deliver a pure Google experience, showcasing fresh visual styles with material design, improved performance, and additional features.</p>

<p>Let’s make sure your apps and games are optimized to give your users the best mobile experience on these devices. We’ve outlined some best practices below.</p>



<h3 style="font-family: Roboto,sans-serif; font-size: 20px; font-weight: 400; line-height: 1.25em; margin-top: 1.1em;">
Nexus 6</h3>

<h3 style="margin-top:1em;">
Screen</h3>

<p>The Nexus 6 boasts an impressive 5.96” Quad HD screen display at a resolution of 2560 x 1440 (493 ppi). This translates to ~ <strong>730 x 410 dp</strong> (density independent pixels).</p>

<h3>Check your assets</h3>

<p>It has a quantized density of <b>560 dpi</b>, which falls in between the <code>xxhdpi</code> and <code>xxxhdpi</code> primary density buckets. For the Nexus 6, the platform will scale down <code>xxxhdpi</code> assets, but if those aren’t available, then it will scale up <code>xxhdpi</code> assets.</p>

<p>Provide at least an <a href="http://developer.android.com/design/style/iconography.html?utm_campaign=L-Developer-launch#xxxhdpi-launcher"><code>xxxhdpi</code> app icon</a> because devices can display large app icons on the launcher. It’s best practice to place your app icons in <code>mipmap-</code> folders (not the <code>drawable-</code> folders) because they are used at resolutions different from the device’s current density. For example, an <code>xxxhdpi</code> app icon can be used on the launcher for an <code>xxhdpi</code> device.</p>


<pre class="prettyprint">res/
   mipmap-mdpi/
      ic_launcher.png
   mipmap-hdpi/
      ic_launcher.png
   mipmap-xhdpi/
      ic_launcher.png  
   mipmap-xxhdpi/
      ic_launcher.png
   mipmap-xxxhdpi/   
      ic_launcher.png  # App icon used on Nexus 6 device launcher</pre>

<p>Choosing to add <code>xxxhdpi</code> versions for the rest of your assets will provide a sharper visual experience on the Nexus 6, but does increase apk size, so you should make an appropriate decision for your app.</p>

<pre class="prettyprint">res/
   drawable-mdpi/
      ic_sunny.png
   drawable-hdpi/
      ic_sunny.png
   drawable-xhdpi/   
      ic_sunny.png
   drawable-xxhdpi/  # Fall back to these if xxxhdpi versions aren’t available
      ic_sunny.png 
   drawable-xxxhdpi/ # Higher resolution assets for Nexus 6
      ic_sunny.png</pre>


<h3>Make sure you are not filtered on Google Play</h3>
<!-- <h3>Stop using compatible-screens</h3> -->

<p>If you are using the <a href="http://developer.android.com/guide/topics/manifest/compatible-screens-element.html?utm_campaign=L-Developer-launch"><code>&lt;compatible-screens&gt;</code></a> element in the <code>AndroidManifest.xml</code> file, you should <a href="https://plus.google.com/108967384991768947849/posts/9Z8qB1mCoW4">stop using it</a> because it’s not scalable to re-compile and publish your app each time new devices come out. However, if you must use it, make sure to update the manifest to <b>add the configuration for these devices</b> (by screen size and density). Otherwise your app may be excluded from Google Play search results on these devices.</p>


<h3 style="clear:both;font-family: Roboto,sans-serif; font-size: 20px; font-weight: 400; line-height: 1.25em; margin-top: 1.1em;">
Nexus 9</h3>

<h3 style="margin-top:1em;">Screen</h3>

<p>The Nexus 9 is a premium 8.9” tablet with a screen size of 2048 x 1536 pixels (288 ppi), which translates to <strong>1024 x 768 dip</strong>. This is a 4:3 aspect ratio, which is unique compared to earlier tablets. The Nexus 9 falls into the <code>xhdpi</code> density bucket, and you should already have assets in the <code>drawable-xhdpi</code> folder. </p>


<div style="padding-top:0em;margin-left:2em;max-width:95%;">
<a href="http://2.bp.blogspot.com/-CMYXO1y5vOw/VElLcOjkn5I/AAAAAAAAA50/iH0iNezGDAg/s1600/Nexus_9_WSJ_v2.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-CMYXO1y5vOw/VElLcOjkn5I/AAAAAAAAA50/iH0iNezGDAg/s600/Nexus_9_WSJ_v2.png" /></a></div>
<p style="margin: 0em auto 1.25em 12em;font-size: 13px;color:#666;">Updated Material Design Wall Street Journal app on Nexus 9.</p>




<h3>Enable NDK apps for 64-bit</h3>

<p>The Nexus 9 runs on a 64-bit Dual Core processor, which makes it the first Android device to ship with a 64-bit ARM instruction set. Support for 64-bit processors was just added in Android 5.0, so if you have an NDK app, enable it by updating the <code>APP_ABI</code> value in your <code>Application.mk</code> file:</p>

<pre class="prettyprint">APP_ABI := armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64</pre>

<p>More detailed instructions are provided in the <a href="http://developer.android.com/about/versions/android-5.0.html?utm_campaign=L-Developer-launch#64BitSupport">developer site</a>. You can test your 64-bit enabled app on a physical device with a 64-bit processor running Android 5.0, or take advantage of the recently announced <a href="https://plus.google.com/108967384991768947849/posts/XG1WmNDMe8H">64-bit emulator</a> in Android Studio. </p>

<h3>Update your hardware keyboard support</h3>

<p>The Nexus 9 Keyboard Folio will be available as an accessory in Google Play. It’s very important that you <strong>don’t lock your app to a single orientation</strong>. The Nexus 9’s natural orientation is portrait mode, while it’s used in landscape mode with the keyboard. If you lock to the device’s natural orientation, the app may appear sideways for devices with keyboards.</p>

<p>Users should be able to navigate around the main content of the app with the keyboard, while relying on touch input or keyboard shortcuts for toolbar actions and button bars. Therefore, <b>ensure that your app has proper <a href="http://developer.android.com/training/keyboard-input/navigation.html?utm_campaign=L-Developer-launch">keyboard navigation</a> and shortcuts</b> for primary actions. Keyboard shortcuts that are invoked with Ctrl + [shortcut] combo can be defined via menu items using:</p>

<pre class="prettyprint">&lt;menu xmlns:android="http://schemas.android.com/apk/res/android"&gt;
    &lt;item
        android:id="@+id/menu_create"
        android:title="@string/menu_create"
        android:alphabeticShortcut="c” /&gt;
&lt;/menu/&gt;</pre>

<p>Alternatively, shortcuts can be defined using <a href="http://developer.android.com/reference/android/app/Activity.html#onKeyShortcut(int,%20android.view.KeyEvent)"><code>Activity#onKeyShortcut</code></a> or <a href="http://developer.android.com/reference/android/view/View.html#onKeyShortcut(int,%20android.view.KeyEvent)"><code>View#onKeyShortcut</code></a>. Learn more about keyboard actions <a href="http://developer.android.com/training/keyboard-input/commands.html?utm_campaign=L-Developer-launch">here</a>.</p>

<pre class="prettyprint">In MainActivity.java:

@Override
public boolean onKeyShortcut(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_R:
            Toast.makeText(this, "Reply", Toast.LENGTH_SHORT).show();
            return true;
        default:
            return super.onKeyShortcut(keyCode, event);
    }
}</pre>

<h3 style="font-family: Roboto,sans-serif; font-size: 20px; font-weight: 400; line-height: 1.25em; margin-top: 1.1em;">
Responsive layouts with w- and sw- qualifiers</h3>

<p>In order to take advantage of the screen real estate on the Nexus 6 and Nexus 9, we emphasize the importance of responsive design. In the past, if you assumed that landscape mode is significantly wider than portrait mode, you may run into problems on a device like the Nexus 9, which has an aspect ratio of 4:3. Instead of declaring layouts using the <code>layout-land</code> or <code>layout-port</code> resource folder qualifiers, we strongly recommend switching to the <code>w&lt;N&gt;dp</code> <a href="http://developer.android.com/guide/practices/screens_support.html?utm_campaign=L-Developer-launch#NewQualifiers">width resource folder qualifier</a> so that content is laid out based on available screen width. </p>

<p>Think about content first and foremost. Decide on min and max screen real estate that your content requires, and determine cutoff points at different screen widths where you can modify the layout composition for your app (# of grid columns, multi-pane layout, etc…). </p>

<p>For example, a single pane layout for your main activity on phones can be defined in:</p>

<pre class="prettyprint">res/layout/activity_main.xml</pre>

<p>On larger screen devices, where the current orientation is at least 600dp in width, a new two-pane layout with a list alongside a detail pane could be declared in:</p>

<pre class="prettyprint">res/layout-w600dp/activity_main.xml</pre>

<p>On even larger screen devices, where the current orientation is at least 720dp in width, a new multi-pane layout where the detail pane requires even more horizontal space could be declared in:</p>

<pre class="prettyprint">res/layout-w720dp/activity_main.xml</pre>

<p>As for attributes based on form factor, instead of declaring them in values-large or values-xlarge resource directories, use the <code>sw&lt;N&gt;dp</code> <a href="http://developer.android.com/guide/practices/screens_support.html?utm_campaign=L-Developer-launch#NewQualifiers">smallest width qualifier</a>. For example, you could style your TextViews to have a medium font size on phones.</p>

<pre class="prettyprint">In res/values/styles.xml:

&lt;style name="DescriptionTextStyle"&gt;
  &lt;item name="android:textAppearance"&gt;?android:attr/textAppearanceMedium&lt;/item&gt;
&lt;/style&gt;</pre>

<p>Meanwhile, TextViews could have a large font size when the smallest width of the device (taking the minimum of the landscape and portrait widths) is 600dp or wider. This ensures the font size of your app doesn’t change when you rotate this large screen device. </p>

<pre class="prettyprint">In res/values-sw600dp/styles.xml:

&lt;style name="DescriptionTextStyle"&gt;
  &lt;item name="android:textAppearance"&gt;?android:attr/textAppearanceLarge&lt;/item&gt;
&lt;/style&gt; </pre>

<h3 style="font-family: Roboto,sans-serif; font-size: 20px; font-weight: 400; line-height: 1.25em; margin-top: 1.1em;">
Take advantage of 5.0 and Material</h3>

<p>Set your <a href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html?utm_source=final-sdk-blog-post&amp;utm_medium=social&amp;utm_campaign=L-Developer-launch"><code>android:targetSdkVersion</code></a> to <code>"21"</code>. Take note of the <a href="http://developer.android.com/about/versions/android-5.0.html?utm_campaign=L-Developer-launch#Behaviors">important behavior changes</a> in Android 5.0 Lollipop including ART, the new Android runtime, to ensure that your app continues to run well. You can also leverage <a href="http://android-developers.blogspot.com/2014/10/whats-new-in-android-50-lollipop.html?utm_campaign=L-Developer-launch">new platform APIs</a> like richer <a href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY">notifications</a>. </p>

<p>Nexus 6 and Nexus 9 users will be immersed in the new world of <a href="http://google.com/design/spec#utm_campaign=L-Developer-launch">material design</a>, and they’ll expect the same seamless transitions, bold colors, and delightful details from your app. As you invest time in bringing your app up to date with our latest design language, there’s a whole host of resources to help you make the leap, including important new updates to the <a href="http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html">support library</a>, <a href="https://www.youtube.com/playlist?list=PLOU2XLYxmsIJFcNKpAV9B_aQmz2h68fw_">videos</a>, and a <a href="http://developer.android.com/training/material/index.html?utm_campaign=L-Developer-launch">getting started</a> guide. Good luck and we can’t wait to see your apps!</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/4fPaqYUZ6Uh" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/4fPaqYUZ6Uh" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/getting-your-apps-ready-for-nexus-6-and-nexus-9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>GPS on Android Wear Devices</title>
		<link>https://googledata.org/google-android/gps-on-android-wear-devices/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gps-on-android-wear-devices</link>
		<comments>https://googledata.org/google-android/gps-on-android-wear-devices/#comments</comments>
		<pubDate>Thu, 23 Oct 2014 16:06:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=6d2ff6d594b9723e7be341edf3fdab12</guid>
		<description><![CDATA[<p><em>By <a href="https://plus.google.com/+WaynePiekarski">Wayne Piekarski</a>, Developer Advocate</em></p>

<p>With the latest release of Android Wear, wearables with built-in GPS like the <a href="http://blogs.sonymobile.com/2014/10/23/SmartWatch-3-launch-availability/">Sony Smartwatch 3</a> can now give you a GPS location update directly from the wearable, without a paired phone nearby. You can now build an app like <a href="https://play.google.com/store/apps/details?id=com.google.android.maps.mytracks&#38;hl=en">MyTracks</a> that lets a user track their run even when they leave their phone at home. For wearable devices that do not have built-in GPS, a software solution has always existed in Google Play Services that automatically uses the GPS from your connected phone.</p>

<div><a href="http://4.bp.blogspot.com/-vlXttvbLYNc/VEie-6GSu1I/AAAAAAAAA5c/kcN_fmsNUaI/s1600/golfshot-1.jpg"><img border="0" src="http://4.bp.blogspot.com/-vlXttvbLYNc/VEie-6GSu1I/AAAAAAAAA5c/kcN_fmsNUaI/s640/golfshot-1.jpg"></a></div>

<p>The <a href="https://play.google.com/store/apps/details?id=com.shotzoom.golfshot2&#38;hl=en">Golfshot</a> wearable app uses built-in GPS to calculate your distance to the next hole, even when you don&#8217;t have your phone with you.</p><br /><h3>Implementing GPS location updates</h3>

<p>Implementing GPS location updates for Android Wear is simple. On the wearable, use the <a href="https://developer.android.com/reference/com/google/android/gms/location/FusedLocationProviderApi.html"><code>FusedLocationProviderApi</code></a> from <a href="https://developer.android.com/training/location/receive-location-updates.html">Google Play services</a> to request location updates. This is the same API that has been available on mobile, so you can easily reuse your existing code and samples.</p>

<p><a href="https://developer.android.com/reference/com/google/android/gms/location/FusedLocationProviderApi.html"><code>FusedLocationProviderApi</code></a> automatically makes the most power-efficient decision about where to get location updates. If the phone is connected to the wearable, it uses the GPS on the phone and sends the updates to the wearable. If the phone is not connected to the wearable and the wearable has a built-in GPS, then it uses the wearable&#8217;s GPS.</p>

<p>One case you&#8217;ll need to handle is if the phone is not connected to the wearable and the wearable does not have built-in GPS. You will need to <a href="https://developer.android.com/training/wearables/data-layer/events.html">detect this</a> and provide a graceful recovery mechanism, such as a message telling the user to bring their phone with them. However, for the most part, deciding which GPS to use, and sending the position from the phone to the wearable, is handled automatically. You do not need to deal with the low-level implementation details yourself.</p>

<h3>Data synchronization</h3>

<p>When writing an app that runs on the wearable, you will eventually want to synchronize the data it collects with the paired phone. When the wearable is being taken out for a run, especially with the built-in GPS, there may not be a phone present. So you will want to store your location data using the <a href="http://developer.android.com/training/wearables/data-layer/index.html">Data Layer API</a>, and when the phone reconnects with the wearable later, the data will be automatically synchronized.</p>

<p>For more details about how to use the location API, check out the extensive documentation and sample <a href="https://developer.android.com/training/articles/wear-location-detection.html">here</a>.</p>

<h3>Android Wear apps on Google Play</h3>

<p>Also, as a heads up, starting on November 3 with the public release of <a href="http://www.android.com/versions/lollipop-5-0/">Android 5.0</a>, you will be able to submit your apps for clearer designation as Android Wear apps on Google Play. If your apps follow the criteria in the <a href="http://developer.android.com/distribute/essentials/quality/wear.html">Wear App Quality checklist</a> and are accepted as Wear apps on Play, it will be easier for Android Wear users to discover your apps. Stay tuned for more information about how to submit your apps for Android Wear review through the Google Play Developer Console.</p>

<div><div><a href="https://plus.google.com/108967384991768947849/posts/2ZQFV8t42SE"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/HRn1aDEZfni"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/HRn1aDEZfni"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><em>By <a href="https://plus.google.com/+WaynePiekarski">Wayne Piekarski</a>, Developer Advocate</em></p>

<p>With the latest release of Android Wear, wearables with built-in GPS like the <a href="http://blogs.sonymobile.com/2014/10/23/SmartWatch-3-launch-availability/">Sony Smartwatch 3</a> can now give you a GPS location update directly from the wearable, without a paired phone nearby. You can now build an app like <a href="https://play.google.com/store/apps/details?id=com.google.android.maps.mytracks&hl=en">MyTracks</a> that lets a user track their run even when they leave their phone at home. For wearable devices that do not have built-in GPS, a software solution has always existed in Google Play Services that automatically uses the GPS from your connected phone.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-vlXttvbLYNc/VEie-6GSu1I/AAAAAAAAA5c/kcN_fmsNUaI/s1600/golfshot-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-vlXttvbLYNc/VEie-6GSu1I/AAAAAAAAA5c/kcN_fmsNUaI/s640/golfshot-1.jpg" /></a></div>

<p style="margin: 0em auto auto 1.25em;font-size: 13px;color:#666;">The <a href="https://play.google.com/store/apps/details?id=com.shotzoom.golfshot2&hl=en">Golfshot</a> wearable app uses built-in GPS to calculate your distance to the next hole, even when you don’t have your phone with you.</p><br />

<h3>Implementing GPS location updates</h3>

<p>Implementing GPS location updates for Android Wear is simple. On the wearable, use the <a href="https://developer.android.com/reference/com/google/android/gms/location/FusedLocationProviderApi.html"><code>FusedLocationProviderApi</code></a> from <a href="https://developer.android.com/training/location/receive-location-updates.html">Google Play services</a> to request location updates. This is the same API that has been available on mobile, so you can easily reuse your existing code and samples.</p>

<p><a href="https://developer.android.com/reference/com/google/android/gms/location/FusedLocationProviderApi.html"><code>FusedLocationProviderApi</code></a> automatically makes the most power-efficient decision about where to get location updates. If the phone is connected to the wearable, it uses the GPS on the phone and sends the updates to the wearable. If the phone is not connected to the wearable and the wearable has a built-in GPS, then it uses the wearable’s GPS.</p>

<p>One case you’ll need to handle is if the phone is not connected to the wearable and the wearable does not have built-in GPS. You will need to <a href="https://developer.android.com/training/wearables/data-layer/events.html">detect this</a> and provide a graceful recovery mechanism, such as a message telling the user to bring their phone with them. However, for the most part, deciding which GPS to use, and sending the position from the phone to the wearable, is handled automatically. You do not need to deal with the low-level implementation details yourself.</p>

<h3>Data synchronization</h3>

<p>When writing an app that runs on the wearable, you will eventually want to synchronize the data it collects with the paired phone. When the wearable is being taken out for a run, especially with the built-in GPS, there may not be a phone present. So you will want to store your location data using the <a href="http://developer.android.com/training/wearables/data-layer/index.html">Data Layer API</a>, and when the phone reconnects with the wearable later, the data will be automatically synchronized.</p>

<p>For more details about how to use the location API, check out the extensive documentation and sample <a href="https://developer.android.com/training/articles/wear-location-detection.html">here</a>.</p>

<h3>Android Wear apps on Google Play</h3>

<p>Also, as a heads up, starting on November 3 with the public release of <a href="http://www.android.com/versions/lollipop-5-0/">Android 5.0</a>, you will be able to submit your apps for clearer designation as Android Wear apps on Google Play. If your apps follow the criteria in the <a href="http://developer.android.com/distribute/essentials/quality/wear.html">Wear App Quality checklist</a> and are accepted as Wear apps on Play, it will be easier for Android Wear users to discover your apps. Stay tuned for more information about how to submit your apps for Android Wear review through the Google Play Developer Console.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/2ZQFV8t42SE" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/HRn1aDEZfni" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/HRn1aDEZfni" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/gps-on-android-wear-devices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>AppCompat v21 — Material Design for Pre-Lollipop Devices!</title>
		<link>https://googledata.org/google-android/appcompat-v21-material-design-for-pre-lollipop-devices/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=appcompat-v21-material-design-for-pre-lollipop-devices</link>
		<comments>https://googledata.org/google-android/appcompat-v21-material-design-for-pre-lollipop-devices/#comments</comments>
		<pubDate>Wed, 22 Oct 2014 21:30:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=3f010e86279a178f919474b37bebd445</guid>
		<description><![CDATA[<p><em>By Chris Banes, Android Developer Relations</em></p>

<div><a href="http://2.bp.blogspot.com/-7fF9ayZ6PgI/U9iFpk5FNEI/AAAAAAAAAs0/4P4SCvdB_4M/s1600/image00.png"><img border="0" src="http://2.bp.blogspot.com/-7fF9ayZ6PgI/U9iFpk5FNEI/AAAAAAAAAs0/4P4SCvdB_4M/s600/image00.png"></a></div>

<p>The <a href="http://android-developers.blogspot.co.uk/2014/10/android-50-lollipop-sdk-and-nexus.html">Android 5.0 SDK</a> was released last Friday, featuring new UI widgets and material design, our visual language focused on good design. To enable you to bring your latest designs to older Android platforms we have expanded our support libraries, including a major update to <a href="https://developer.android.com/tools/support-library/features.html#v7-appcompat">AppCompat</a>, as well as new <a href="https://developer.android.com/tools/support-library/features.html#v7-recyclerview">RecyclerView</a>, <a href="https://developer.android.com/tools/support-library/features.html#v7-recyclerview">CardView</a> and <a href="https://developer.android.com/tools/support-library/features.html#v7-palette">Palette</a> libraries.</p>

<p>In this post we'll take a look at what&#8217;s new in AppCompat and how you can use it to support material design in your apps.</p>

<h3>What's new in AppCompat?</h3>

<p>AppCompat (aka ActionBarCompat) started out as a backport of the Android 4.0 ActionBar API for devices running on Gingerbread, providing a common API layer on top of the backported implementation and the framework implementation.  AppCompat v21 delivers an API and feature-set that is up-to-date with Android 5.0</p>

<p>In this release, Android  introduces a new <a href="https://developer.android.com/reference/android/support/v7/widget/Toolbar.html"><code>Toolbar</code></a> widget. This is a generalization of the Action Bar pattern that gives you much more control and flexibility.  <code>Toolbar</code> is a view in your hierarchy just like any other, making it easier to interleave with the rest of your views, animate it, and react to scroll events. You can also set it as your Activity&#8217;s action bar, meaning that your standard options menu actions will be display within it.</p>

<p>You&#8217;ve likely already been using the latest update to AppCompat for a while, it has been included in various Google app updates over the past few weeks, including Play Store and Play Newsstand. It has also been integrated into the Google I/O Android app, pictured above, which is <a href="https://github.com/google/iosched">open-source</a>.</p>



<h3>Setup</h3>

<p>If you&#8217;re using Gradle, add appcompat as a dependency in your build.gradle file:</p>

<pre>dependencies {
    compile "com.android.support:appcompat-v7:21.0.+"
}</pre>

<h3>New integration</h3>

<p>If you are not currently using AppCompat, or you are starting from scratch, here's how to set it up:</p>

<ul><li>All of your Activities must extend from <a href="https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html">ActionBarActivity</a>, which extends from <a href="https://developer.android.com/reference/android/support/v4/app/FragmentActivity.html">FragmentActivity</a> from the v4 support library, so you can continue to use fragments.</li>
<li>All of your themes (that want an Action Bar/Toolbar) must inherit from <code>Theme.AppCompat</code>. There are variants available, including <code>Light</code> and <code>NoActionBar</code>.</li>
<li>When inflating anything to be displayed on the action bar (such as a <code>SpinnerAdapter</code> for list navigation in the toolbar), make sure you use the action bar&#8217;s themed context, retrieved via <code>getSupportActionBar().getThemedContext()</code>.</li>
<li>You must use the static methods in <a href="https://developer.android.com/reference/android/support/v4/view/MenuItemCompat.html"><code>MenuItemCompat</code></a> for any action-related calls on a <code>MenuItem</code>.</li>
</ul><p>For more information, see the <a href="http://developer.android.com/guide/topics/ui/actionbar.html">Action Bar API guide</a> which is a comprehensive guide on AppCompat.</p>

<h3>Migration from previous setup</h3>

<p>For most apps, you now only need one theme declaration, in <code>values/</code>:</p>

<pre>values/themes.xml:

&#60;style name="Theme.MyTheme" parent="Theme.AppCompat.Light"&#62;
    &#60;!-- Set AppCompat&#8217;s actionBarStyle --&#62;
    &#60;item name="actionBarStyle"&#62;@style/MyActionBarStyle&#60;/item&#62;

    &#60;!-- Set AppCompat&#8217;s color theming attrs --&#62;
    &#60;item name=&#8221;colorPrimary&#8221;&#62;@color/my_awesome_red&#60;/item&#62;
    &#60;item name=&#8221;colorPrimaryDark&#8221;&#62;@color/my_awesome_darker_red&#60;/item&#62;
    
    &#60;!-- The rest of your attributes --&#62;
&#60;/style&#62;</pre>

<p>You can now remove all of your <code>values-v14+</code> Action Bar styles.</p>

<h3>Theming</h3>

<p>AppCompat has support for the new <a href="http://developer.android.com/training/material/theme.html#ColorPalette">color palette theme</a> attributes which allow you to easily customize your theme to fit your brand with <a href="http://www.google.com/design/spec/style/color.html#color-ui-color-application">primary and accent colors</a>. For example:</p>

<pre>values/themes.xml:

&#60;style name="Theme.MyTheme" parent="Theme.AppCompat.Light"&#62;
    &#60;!-- colorPrimary is used for the default action bar background --&#62;
    &#60;item name=&#8221;colorPrimary&#8221;&#62;@color/my_awesome_color&#60;/item&#62;

    &#60;!-- colorPrimaryDark is used for the status bar --&#62;
    &#60;item name=&#8221;colorPrimaryDark&#8221;&#62;@color/my_awesome_darker_color&#60;/item&#62;

    &#60;!-- colorAccent is used as the default value for colorControlActivated,
         which is used to tint widgets --&#62;
    &#60;item name=&#8221;colorAccent&#8221;&#62;@color/accent&#60;/item&#62;

    &#60;!-- You can also set colorControlNormal, colorControlActivated
         colorControlHighlight, and colorSwitchThumbNormal. --&#62;
    
&#60;/style&#62;</pre>

<p>When you set these attributes, AppCompat automatically propagates their values to the framework attributes on API 21+. This automatically colors the status bar and Overview (Recents) task entry. </p>

<p>On older platforms, AppCompat emulates the color theming where possible. At the moment this is limited to coloring the action bar and some widgets.</p>

<h3>Widget tinting</h3>

<p>When running on devices with Android 5.0, all of the widgets are tinted using the color theme attributes we just talked about. There are two main features which allow this on Lollipop: drawable tinting, and referencing theme attributes (of the form ?attr/foo) in drawables.</p>

<p>AppCompat provides similar behaviour on earlier versions of Android for a subset of UI widgets:</p>
<ul><li>Everything provided by AppCompat&#8217;s toolbar (action modes, etc)</li>
<li><code>EditText</code></li>
<li><code>Spinner</code></li>
<li><code>CheckBox</code></li>
<li><code>RadioButton</code></li>
<li><code>Switch</code> (use the new <a href="https://developer.android.com/reference/android/support/v7/widget/SwitchCompat.html"><code>android.support.v7.widget.SwitchCompat</code></a>)</li>
<li><code>CheckedTextView</code></li>
</ul><p>You don&#8217;t need to do anything special to make these work, just use these controls in your layouts as usual and AppCompat will do the rest (with some caveats; see the FAQ below).</p>

<h3>Toolbar Widget</h3>




<img src="http://2.bp.blogspot.com/-opO8On-LSWU/VEgoMYJiAOI/AAAAAAAAA3I/i0eM6kUktkU/s1600/md.png"><p><code>Toolbar</code> is fully supported in AppCompat and has feature and API parity with the framework widget. In AppCompat, <code>Toolbar</code> is implemented in the <a href="https://developer.android.com/reference/android/support/v7/widget/Toolbar.html">android.support.v7.widget.Toolbar</a> class. There are two ways to use <code>Toolbar</code>:</p>

<ul><li>Use a <code>Toolbar</code> as an Action Bar when you want to use the existing Action Bar facilities (such as menu inflation and selection, <code>ActionBarDrawerToggle</code>, and so on) but want to have more control over its appearance.</li>

<li>Use a standalone <code>Toolbar</code> when you want to use the pattern in your app for situations that an Action Bar would not support; for example, showing multiple toolbars on the screen, spanning only part of the width, and so on.</li>
</ul><h3>Action Bar</h3>

<p>To use <code>Toolbar</code> as an Action Bar,  first disable the decor-provided Action Bar. The easiest way is to have your theme extend from <code>Theme.AppCompat.NoActionBar</code> (or its light variant).</p>

<p>Second, create a <code>Toolbar</code> instance, usually via your layout XML:</p>

<pre>&#60;android.support.v7.widget.Toolbar
    android:id=&#8221;@+id/my_awesome_toolbar&#8221;
    android:layout_height=&#8221;wrap_content&#8221;
    android:layout_width=&#8221;match_parent&#8221;
    android:minHeight=&#8221;?attr/actionBarSize&#8221;
    android:background=&#8221;?attr/colorPrimary&#8221; /&#62;</pre>

<p>The height, width, background, and so on are totally up to you; these are just good examples. As <code>Toolbar</code> is just a <code>ViewGroup</code>, you can style and position it however you want.</p>

<p>Then in your <code>Activity</code> or <code>Fragment</code>, set the <code>Toolbar</code> to act as your Action Bar:</p>

<pre>@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.blah);

    Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
    setSupportActionBar(toolbar);
}</pre>

<p>From this point on, all menu items are displayed in your <code>Toolbar</code>, populated via the standard options menu callbacks.</p>

<h3>Standalone</h3>

<p>The difference in standalone mode is that you do not set the <code>Toolbar</code> to act as your action bar. For this reason, you can use any AppCompat theme and you do not need to disable the decor-provided Action Bar.</p>

<p>In standalone mode, you need to manually populate the Toolbar with content/actions. For instance, if you want it to display actions, you need to inflate a menu into it:</p>

<pre>@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.blah);

    Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);

    // Set an OnMenuItemClickListener to handle menu item clicks
    toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            // Handle the menu item
            return true;
        }
    });

    // Inflate a menu to be displayed in the toolbar
    toolbar.inflateMenu(R.menu.your_toolbar_menu);
}</pre>

<p>There are many other things you can do with <code>Toolbar</code>. For more information, see the <a href="https://developer.android.com/reference/android/support/v7/widget/Toolbar.html">Toolbar API reference</a>.</p>

<h3>Styling</h3>

<p>Styling of <code>Toolbar</code> is done differently to the standard action bar, and is set directly onto the view.</p>

<p>Here's a basic style you should be using when you're using a <code>Toolbar</code> as your action bar:</p>

<pre>&#60;android.support.v7.widget.Toolbar  
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    app:theme="@style/ThemeOverlay.AppCompat.ActionBar" /&#62;</pre>

<p>The <code>app:theme</code> declaration will make sure that your text and items are using solid colors (i.e 100% opacity white).</p>

<h4>DarkActionBar</h4>

<p>You can style <code>Toolbar</code> instances directly using layout attributes. To achieve a <code>Toolbar</code> which looks like 'DarkActionBar' (dark content, light overflow menu), provide the <code>theme</code> and <code>popupTheme</code> attributes:</p>

<pre>&#60;android.support.v7.widget.Toolbar
    android:layout_height=&#8221;wrap_content&#8221;
    android:layout_width=&#8221;match_parent&#8221;
    android:minHeight=&#8221;@dimen/triple_height_toolbar&#8221;
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /&#62;</pre>

<h3>SearchView Widget</h3>

<p>AppCompat offers Lollipop&#8217;s updated <code>SearchView</code> API, which is far more customizable and styleable (queue the applause). We now use the Lollipop style structure instead of the old <code>searchView*</code> theme attributes.</p>

<p>Here&#8217;s how you style <code>SearchView</code>:</p>

<pre>values/themes.xml:
&#60;style name=&#8221;Theme.MyTheme&#8221; parent=&#8221;Theme.AppCompat&#8221;&#62;
    &#60;item name=&#8221;searchViewStyle&#8221;&#62;@style/MySearchViewStyle&#60;/item&#62;
&#60;/style&#62;
&#60;style name=&#8221;MySearchViewStyle&#8221; parent=&#8221;Widget.AppCompat.SearchView&#8221;&#62;
    &#60;!-- Background for the search query section (e.g. EditText) --&#62;
    &#60;item name="queryBackground"&#62;...&#60;/item&#62;
    &#60;!-- Background for the actions section (e.g. voice, submit) --&#62;
    &#60;item name="submitBackground"&#62;...&#60;/item&#62;
    &#60;!-- Close button icon --&#62;
    &#60;item name="closeIcon"&#62;...&#60;/item&#62;
    &#60;!-- Search button icon --&#62;
    &#60;item name="searchIcon"&#62;...&#60;/item&#62;
    &#60;!-- Go/commit button icon --&#62;
    &#60;item name="goIcon"&#62;...&#60;/item&#62;
    &#60;!-- Voice search button icon --&#62;
    &#60;item name="voiceIcon"&#62;...&#60;/item&#62;
    &#60;!-- Commit icon shown in the query suggestion row --&#62;
    &#60;item name="commitIcon"&#62;...&#60;/item&#62;
    &#60;!-- Layout for query suggestion rows --&#62;
    &#60;item name="suggestionRowLayout"&#62;...&#60;/item&#62;
&#60;/style&#62;</pre>

<p>You do not need to set all (or any) of these, the defaults will work for the majority of apps.</p>

<h3>Toolbar is coming...</h3>

<p>Hopefully this post will help you get up and running with AppCompat and let you create some awesome material apps.  Let us know in the comments/G+/Twitter if you&#8217;re have questions about AppCompat or any of the support libraries, or where we could provide more documentation.</p>

<h3>FAQ</h3>

<dl><dt>Why is my <code>EditText</code> (or other widget listed above) not being tinted correctly on my pre-Lollipop device?</dt>

<dd><p>The widget tinting in AppCompat works by intercepting any layout inflation and inserting a special tint-aware version of the widget in its place. For most people this will work fine, but I can think of a few scenarios where this won&#8217;t work, including:</p>

<ul><li>You have your own custom version of the widget (i.e. you&#8217;ve extended <code>EditText</code>)</li>
<li>You are creating the EditText without a LayoutInflater (i.e., calling <code>new EditText()</code>).</li>
</ul><p>The special tint-aware widgets are currently hidden as they&#8217;re an unfinished implementation detail. This may change in the future.</p></dd>

<dt>Why has X widget not been material-styled when running on pre-Lollipop?</dt>

<dd>Only some of the most common widgets have been updated so far. There are more coming in future releases of AppCompat.</dd>

<dt>Why does my Action Bar have a shadow on Android Lollipop? I&#8217;ve set <code>android:windowContentOverlay</code> to null.</dt>

<dd>On Lollipop, the action bar shadow is provided using the new elevation API.  To remove it, either call <code>getSupportActionBar().setElevation(0)</code>, or set the elevation attribute in your Action Bar style.</dd>

<dt>Why are there no ripples on pre-Lollipop?</dt>

<dd>A lot of what allows RippleDrawable to run smoothly is Android 5.0&#8217;s new RenderThread. To optimize for performance on previous versions of Android, we've left RippleDrawable out for now.</dd>

<dt>How do I use AppCompat with Preferences?</dt>

<dd>You can continue to use <a href="https://developer.android.com/reference/android/preference/PreferenceFragment.html"><code>PreferenceFragment</code></a> in your <code>ActionBarActivity</code> when running on an API v11+ device. For devices before that, you will need to provide a normal PreferenceActivity which is <em>not</em> material-styled.</dd>
</dl><div><div><a href="https://plus.google.com/108967384991768947849/posts/2ZQFV8t42SE"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/2ZQFV8t42SE"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/2ZQFV8t42SE"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<p><em>By Chris Banes, Android Developer Relations</em></p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-7fF9ayZ6PgI/U9iFpk5FNEI/AAAAAAAAAs0/4P4SCvdB_4M/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img itemprop="image" border="0" src="http://2.bp.blogspot.com/-7fF9ayZ6PgI/U9iFpk5FNEI/AAAAAAAAAs0/4P4SCvdB_4M/s600/image00.png" /></a></div>

<p itemprop="description">The <a href="http://android-developers.blogspot.co.uk/2014/10/android-50-lollipop-sdk-and-nexus.html">Android 5.0 SDK</a> was released last Friday, featuring new UI widgets and material design, our visual language focused on good design. To enable you to bring your latest designs to older Android platforms we have expanded our support libraries, including a major update to <a href="https://developer.android.com/tools/support-library/features.html#v7-appcompat">AppCompat</a>, as well as new <a href="https://developer.android.com/tools/support-library/features.html#v7-recyclerview">RecyclerView</a>, <a href="https://developer.android.com/tools/support-library/features.html#v7-recyclerview">CardView</a> and <a href="https://developer.android.com/tools/support-library/features.html#v7-palette">Palette</a> libraries.</p>

<p>In this post we'll take a look at what’s new in AppCompat and how you can use it to support material design in your apps.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1em;">What's new in AppCompat?</h3>

<p>AppCompat (aka ActionBarCompat) started out as a backport of the Android 4.0 ActionBar API for devices running on Gingerbread, providing a common API layer on top of the backported implementation and the framework implementation.  AppCompat v21 delivers an API and feature-set that is up-to-date with Android 5.0</p>

<p>In this release, Android  introduces a new <a href="https://developer.android.com/reference/android/support/v7/widget/Toolbar.html"><code>Toolbar</code></a> widget. This is a generalization of the Action Bar pattern that gives you much more control and flexibility.  <code>Toolbar</code> is a view in your hierarchy just like any other, making it easier to interleave with the rest of your views, animate it, and react to scroll events. You can also set it as your Activity’s action bar, meaning that your standard options menu actions will be display within it.</p>

<p>You’ve likely already been using the latest update to AppCompat for a while, it has been included in various Google app updates over the past few weeks, including Play Store and Play Newsstand. It has also been integrated into the Google I/O Android app, pictured above, which is <a href="https://github.com/google/iosched">open-source</a>.</p>



<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1em;">Setup</h3>

<p>If you’re using Gradle, add appcompat as a dependency in your build.gradle file:</p>

<pre>dependencies {
    compile "com.android.support:appcompat-v7:21.0.+"
}</pre>

<h3>New integration</h3>

<p>If you are not currently using AppCompat, or you are starting from scratch, here's how to set it up:</p>

<ul>
<li>All of your Activities must extend from <a href="https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html">ActionBarActivity</a>, which extends from <a href="https://developer.android.com/reference/android/support/v4/app/FragmentActivity.html">FragmentActivity</a> from the v4 support library, so you can continue to use fragments.</li>
<li>All of your themes (that want an Action Bar/Toolbar) must inherit from <code>Theme.AppCompat</code>. There are variants available, including <code>Light</code> and <code>NoActionBar</code>.</li>
<li>When inflating anything to be displayed on the action bar (such as a <code>SpinnerAdapter</code> for list navigation in the toolbar), make sure you use the action bar’s themed context, retrieved via <code>getSupportActionBar().getThemedContext()</code>.</li>
<li>You must use the static methods in <a href="https://developer.android.com/reference/android/support/v4/view/MenuItemCompat.html"><code>MenuItemCompat</code></a> for any action-related calls on a <code>MenuItem</code>.</li>
</ul>

<p>For more information, see the <a href="http://developer.android.com/guide/topics/ui/actionbar.html">Action Bar API guide</a> which is a comprehensive guide on AppCompat.</p>

<h3>Migration from previous setup</h3>

<p>For most apps, you now only need one theme declaration, in <code>values/</code>:</p>

<pre>values/themes.xml:

&lt;style name="Theme.MyTheme" parent="Theme.AppCompat.Light"&gt;
    &lt;!-- Set AppCompat’s actionBarStyle --&gt;
    &lt;item name="actionBarStyle"&gt;@style/MyActionBarStyle&lt;/item&gt;

    &lt;!-- Set AppCompat’s color theming attrs --&gt;
    &lt;item name=”colorPrimary”&gt;@color/my_awesome_red&lt;/item&gt;
    &lt;item name=”colorPrimaryDark”&gt;@color/my_awesome_darker_red&lt;/item&gt;
    
    &lt;!-- The rest of your attributes --&gt;
&lt;/style&gt;</pre>

<p>You can now remove all of your <code>values-v14+</code> Action Bar styles.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1em;">Theming</h3>

<p>AppCompat has support for the new <a href="http://developer.android.com/training/material/theme.html#ColorPalette">color palette theme</a> attributes which allow you to easily customize your theme to fit your brand with <a href="http://www.google.com/design/spec/style/color.html#color-ui-color-application">primary and accent colors</a>. For example:</p>

<pre>values/themes.xml:

&lt;style name="Theme.MyTheme" parent="Theme.AppCompat.Light"&gt;
    &lt;!-- colorPrimary is used for the default action bar background --&gt;
    &lt;item name=”colorPrimary”&gt;@color/my_awesome_color&lt;/item&gt;

    &lt;!-- colorPrimaryDark is used for the status bar --&gt;
    &lt;item name=”colorPrimaryDark”&gt;@color/my_awesome_darker_color&lt;/item&gt;

    &lt;!-- colorAccent is used as the default value for colorControlActivated,
         which is used to tint widgets --&gt;
    &lt;item name=”colorAccent”&gt;@color/accent&lt;/item&gt;

    &lt;!-- You can also set colorControlNormal, colorControlActivated
         colorControlHighlight, and colorSwitchThumbNormal. --&gt;
    
&lt;/style&gt;</pre>

<p>When you set these attributes, AppCompat automatically propagates their values to the framework attributes on API 21+. This automatically colors the status bar and Overview (Recents) task entry. </p>

<p>On older platforms, AppCompat emulates the color theming where possible. At the moment this is limited to coloring the action bar and some widgets.</p>

<h3>Widget tinting</h3>

<p>When running on devices with Android 5.0, all of the widgets are tinted using the color theme attributes we just talked about. There are two main features which allow this on Lollipop: drawable tinting, and referencing theme attributes (of the form ?attr/foo) in drawables.</p>

<p>AppCompat provides similar behaviour on earlier versions of Android for a subset of UI widgets:</p>
<ul>
<li>Everything provided by AppCompat’s toolbar (action modes, etc)</li>
<li><code>EditText</code></li>
<li><code>Spinner</code></li>
<li><code>CheckBox</code></li>
<li><code>RadioButton</code></li>
<li><code>Switch</code> (use the new <a href="https://developer.android.com/reference/android/support/v7/widget/SwitchCompat.html"><code>android.support.v7.widget.SwitchCompat</code></a>)</li>
<li><code>CheckedTextView</code></li>
</ul>

<p>You don’t need to do anything special to make these work, just use these controls in your layouts as usual and AppCompat will do the rest (with some caveats; see the FAQ below).</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1em;">Toolbar Widget</h3>




<img itemprop="image" src="http://2.bp.blogspot.com/-opO8On-LSWU/VEgoMYJiAOI/AAAAAAAAA3I/i0eM6kUktkU/s1600/md.png" style="width:96%;">

<p><code>Toolbar</code> is fully supported in AppCompat and has feature and API parity with the framework widget. In AppCompat, <code>Toolbar</code> is implemented in the <a href="https://developer.android.com/reference/android/support/v7/widget/Toolbar.html">android.support.v7.widget.Toolbar</a> class. There are two ways to use <code>Toolbar</code>:</p>

<ul>
<li>Use a <code>Toolbar</code> as an Action Bar when you want to use the existing Action Bar facilities (such as menu inflation and selection, <code>ActionBarDrawerToggle</code>, and so on) but want to have more control over its appearance.</li>

<li>Use a standalone <code>Toolbar</code> when you want to use the pattern in your app for situations that an Action Bar would not support; for example, showing multiple toolbars on the screen, spanning only part of the width, and so on.</li>
</ul>

<h3>Action Bar</h3>

<p>To use <code>Toolbar</code> as an Action Bar,  first disable the decor-provided Action Bar. The easiest way is to have your theme extend from <code>Theme.AppCompat.NoActionBar</code> (or its light variant).</p>

<p>Second, create a <code>Toolbar</code> instance, usually via your layout XML:</p>

<pre>&lt;android.support.v7.widget.Toolbar
    android:id=”@+id/my_awesome_toolbar”
    android:layout_height=”wrap_content”
    android:layout_width=”match_parent”
    android:minHeight=”?attr/actionBarSize”
    android:background=”?attr/colorPrimary” /&gt;</pre>

<p>The height, width, background, and so on are totally up to you; these are just good examples. As <code>Toolbar</code> is just a <code>ViewGroup</code>, you can style and position it however you want.</p>

<p>Then in your <code>Activity</code> or <code>Fragment</code>, set the <code>Toolbar</code> to act as your Action Bar:</p>

<pre>@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.blah);

    Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
    setSupportActionBar(toolbar);
}</pre>

<p>From this point on, all menu items are displayed in your <code>Toolbar</code>, populated via the standard options menu callbacks.</p>

<h3>Standalone</h3>

<p>The difference in standalone mode is that you do not set the <code>Toolbar</code> to act as your action bar. For this reason, you can use any AppCompat theme and you do not need to disable the decor-provided Action Bar.</p>

<p>In standalone mode, you need to manually populate the Toolbar with content/actions. For instance, if you want it to display actions, you need to inflate a menu into it:</p>

<pre>@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.blah);

    Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);

    // Set an OnMenuItemClickListener to handle menu item clicks
    toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            // Handle the menu item
            return true;
        }
    });

    // Inflate a menu to be displayed in the toolbar
    toolbar.inflateMenu(R.menu.your_toolbar_menu);
}</pre>

<p>There are many other things you can do with <code>Toolbar</code>. For more information, see the <a href="https://developer.android.com/reference/android/support/v7/widget/Toolbar.html">Toolbar API reference</a>.</p>

<h3>Styling</h3>

<p>Styling of <code>Toolbar</code> is done differently to the standard action bar, and is set directly onto the view.</p>

<p>Here's a basic style you should be using when you're using a <code>Toolbar</code> as your action bar:</p>

<pre>&lt;android.support.v7.widget.Toolbar  
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    app:theme="@style/ThemeOverlay.AppCompat.ActionBar" /&gt;</pre>

<p>The <code>app:theme</code> declaration will make sure that your text and items are using solid colors (i.e 100% opacity white).</p>

<h4>DarkActionBar</h4>

<p>You can style <code>Toolbar</code> instances directly using layout attributes. To achieve a <code>Toolbar</code> which looks like 'DarkActionBar' (dark content, light overflow menu), provide the <code>theme</code> and <code>popupTheme</code> attributes:</p>

<pre>&lt;android.support.v7.widget.Toolbar
    android:layout_height=”wrap_content”
    android:layout_width=”match_parent”
    android:minHeight=”@dimen/triple_height_toolbar”
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /&gt;</pre>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1em;">SearchView Widget</h3>

<p>AppCompat offers Lollipop’s updated <code>SearchView</code> API, which is far more customizable and styleable (queue the applause). We now use the Lollipop style structure instead of the old <code>searchView*</code> theme attributes.</p>

<p>Here’s how you style <code>SearchView</code>:</p>

<pre>values/themes.xml:
&lt;style name=”Theme.MyTheme” parent=”Theme.AppCompat”&gt;
    &lt;item name=”searchViewStyle”&gt;@style/MySearchViewStyle&lt;/item&gt;
&lt;/style&gt;
&lt;style name=”MySearchViewStyle” parent=”Widget.AppCompat.SearchView”&gt;
    &lt;!-- Background for the search query section (e.g. EditText) --&gt;
    &lt;item name="queryBackground"&gt;...&lt;/item&gt;
    &lt;!-- Background for the actions section (e.g. voice, submit) --&gt;
    &lt;item name="submitBackground"&gt;...&lt;/item&gt;
    &lt;!-- Close button icon --&gt;
    &lt;item name="closeIcon"&gt;...&lt;/item&gt;
    &lt;!-- Search button icon --&gt;
    &lt;item name="searchIcon"&gt;...&lt;/item&gt;
    &lt;!-- Go/commit button icon --&gt;
    &lt;item name="goIcon"&gt;...&lt;/item&gt;
    &lt;!-- Voice search button icon --&gt;
    &lt;item name="voiceIcon"&gt;...&lt;/item&gt;
    &lt;!-- Commit icon shown in the query suggestion row --&gt;
    &lt;item name="commitIcon"&gt;...&lt;/item&gt;
    &lt;!-- Layout for query suggestion rows --&gt;
    &lt;item name="suggestionRowLayout"&gt;...&lt;/item&gt;
&lt;/style&gt;</pre>

<p>You do not need to set all (or any) of these, the defaults will work for the majority of apps.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1em;">Toolbar is coming...</h3>

<p>Hopefully this post will help you get up and running with AppCompat and let you create some awesome material apps.  Let us know in the comments/G+/Twitter if you’re have questions about AppCompat or any of the support libraries, or where we could provide more documentation.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1em;">FAQ</h3>

<dl>
<dt>Why is my <code>EditText</code> (or other widget listed above) not being tinted correctly on my pre-Lollipop device?</dt>

<dd><p>The widget tinting in AppCompat works by intercepting any layout inflation and inserting a special tint-aware version of the widget in its place. For most people this will work fine, but I can think of a few scenarios where this won’t work, including:</p>

<ul>
<li>You have your own custom version of the widget (i.e. you’ve extended <code>EditText</code>)</li>
<li>You are creating the EditText without a LayoutInflater (i.e., calling <code>new EditText()</code>).</li>
</ul>

<p>The special tint-aware widgets are currently hidden as they’re an unfinished implementation detail. This may change in the future.</p></dd>

<dt>Why has X widget not been material-styled when running on pre-Lollipop?</dt>

<dd>Only some of the most common widgets have been updated so far. There are more coming in future releases of AppCompat.</dd>

<dt>Why does my Action Bar have a shadow on Android Lollipop? I’ve set <code>android:windowContentOverlay</code> to null.</dt>

<dd>On Lollipop, the action bar shadow is provided using the new elevation API.  To remove it, either call <code>getSupportActionBar().setElevation(0)</code>, or set the elevation attribute in your Action Bar style.</dd>

<dt>Why are there no ripples on pre-Lollipop?</dt>

<dd>A lot of what allows RippleDrawable to run smoothly is Android 5.0’s new RenderThread. To optimize for performance on previous versions of Android, we've left RippleDrawable out for now.</dd>

<dt>How do I use AppCompat with Preferences?</dt>

<dd>You can continue to use <a href="https://developer.android.com/reference/android/preference/PreferenceFragment.html"><code>PreferenceFragment</code></a> in your <code>ActionBarActivity</code> when running on an API v11+ device. For devices before that, you will need to provide a normal PreferenceActivity which is <em>not</em> material-styled.</dd>
</dl>



<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/2ZQFV8t42SE" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/2ZQFV8t42SE" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/2ZQFV8t42SE" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/appcompat-v21-material-design-for-pre-lollipop-devices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>What&#8217;s New in Android 5.0 Lollipop</title>
		<link>https://googledata.org/google-android/whats-new-in-android-5-0-lollipop/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=whats-new-in-android-5-0-lollipop</link>
		<comments>https://googledata.org/google-android/whats-new-in-android-5-0-lollipop/#comments</comments>
		<pubDate>Mon, 20 Oct 2014 19:18:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=57a8730d27f62e46dd31375c35579738</guid>
		<description><![CDATA[<p><em>By <a href="http://google.com/+AnkurKotwal">Ankur Kotwal</a>, Developer Advocate</em></p>

<img border="0" src="http://4.bp.blogspot.com/-frseIdMGzMA/VERV_uvB6FI/AAAAAAAAA24/n-JcNWe5CL0/s800/lollipop-blog.png"><p>Android 5.0 Lollipop is the biggest update of Android to date, introducing an all new visual style, improved performance, and much more. Android 5.0 Lollipop also extends across screens big and small, including phones, tablets, wearables, TVs and cars, to give your users access to information when they need it most. </p>

<p>To get you started on developing and testing on Android 5.0 Lollipop, here are some of the developer highlights with links to related videos and documentation.</p>

<h3>User experience</h3>
<ul><li><a href="http://goo.gl/zEgvPh"><b>Material design</b></a> for the multiscreen world &#8212; Material Design is a new approach for designing apps in today&#8217;s multi-device world that takes a comprehensive strategy to visual, motion, and interaction design across a number of platforms and form factors. Android 5.0 brings Material Design to the platform, with a full set of tools for <a href="http://goo.gl/NMO32C">implementing material design</a> in your apps. The system is incredibly flexible, allowing your app to express its individual character and brand with bold colors and a variety of responsive UI patterns and themeable elements.</li>

<li><a href="http://developer.android.com/about/versions/android-5.0.html#Notifications"><b>Enhanced notifications</b></a> &#8212; New lockscreen notifications let you surface content, updates, and actions to users at a glance, without needing to unlock their device. Heads-up notifications let you display content and actions in a small floating window managed by the system, no matter which app is in the foreground. Notifications are refreshed for Material Design and you can use accent colors to express your brand. </li>

<li><a href="http://developer.android.com/about/versions/android-5.0.html#Recents"><b>Concurrent documents in Overview</b></a> &#8212; Now you can organize your app by tasks and present these concurrently as individual &#8220;documents&#8221; on the Overview screen. For example, instant messaging apps could declare each chat as a separate document. Users can flip through these on the Overview screen to find the specific chat they want and jump straight to it.</li>
</ul><h3>Performance</h3>

<ul><li><a href="https://source.android.com/devices/tech/dalvik/art.html"><b>Android Runtime (ART)</b></a> &#8212; Android 5.0 runs exclusively on the ART runtime. ART offers ahead-of-time (AOT) compilation, more efficient garbage collection, and improved development and debugging features. In many cases it improves performance of the device, without you having to change your code.</li>

<li><b>64-bit support</b> &#8212; Support for 64-bit ABIs provides additional address space and improved performance with certain compute workloads. Apps written in the Java language can run immediately on 64-bit architectures with no modifications required. <a href="http://goo.gl/3PnUWd">NDK r10c</a> includes 64-bit support, for apps and games using native code.</li>

<li><a href="http://developer.android.com/about/versions/android-5.0.html#Power"><b>Project Volta</b></a> &#8212; New tools and APIs help you build battery-efficient apps. Battery Historian, a tool included in the SDK, lets you visualize power events over time and understand how your app is using battery. The JobScheduler API lets you set the conditions under which your background tasks and other jobs should run, such as when the device is idle or connected to an unmetered network or to a charger, to minimize battery impact. More in this <a href="https://www.youtube.com/watch?v=KzSKIpJepUw&#38;feature=youtu.be">I/O video</a>.</li>

<li><a href="http://developer.android.com/about/versions/android-5.0.html#Graphics"><b>OpenGL ES 3.1 and Android Extension Pack</b></a> &#8212; With OpenGL ES 3.1, you get compute shaders, stencil textures, and texture gather for your games. Android Extension Pack (AEP) is a new set of extensions to OpenGL ES that bring desktop-class graphics to Android including tessellation and geometry shaders, and use ASTC texture compression across GPU technologies. More on what's new for game developers in this <a href="http://youtu.be/qW3Ufg1JNRE">DevBytes video</a>.</li>

<li><b>WebView updates</b> &#8212; We&#8217;ve updated WebView to support WebRTC, WebAudio and WebGL will be supported. WebView also includes native support for all of the Web Components specifications: Custom Elements, Shadow DOM, HTML Imports, and Templates. WebView is now unbundled from the system and will be regularly updated through Google Play.</li>
</ul><h3>Workplace</h3>
<ul><li><a href="http://developer.android.com/about/versions/android-5.0.html#Enterprise"><b>Managed provisioning and unified view of apps</b></a> &#8212; to make it easier for employees to have a single device for personal and work use, framework enhancements offer a unified view of apps, notifications &#38; recents across work apps and personal apps. Profile owner APIs, in the workplace context, let administrators create and manage work profiles and defined as part of a new managed provisioning process. More in this <a href="http://youtu.be/FbVWtYPpzIs">I/O video</a>.</li> 
</ul><h3>Media</h3>
<ul><li><a href="http://developer.android.com/about/versions/android-5.0.html#Camera-v2"><b>Advanced camera capabilities</b></a> &#8212; A new camera API gives you new capabilities for advanced image capture and processing. On supported devices, your app can capture uncompressed YUV capture at full 8 megapixel resolution at 30 FPS. You can also capture raw sensor data and control parameters such as exposure time, ISO sensitivity, and frame duration, on a per-frame basis. </li>

<li><a href="http://developer.android.com/about/versions/lollipop.html#Audio"><b>Audio improvements</b></a> &#8212; The sound architecture has been enhanced, with lower input latency in OpenSL, the addition of multichannel-mixing, and USB digital audio mode support. More in this <a href="https://www.youtube.com/watch?v=qW3Ufg1JNRE#t=246">I/O video</a>.</li>
</ul><h3>Connectivity</h3>
<ul><li><a href="http://developer.android.com/about/versions/android-5.0.html#BluetoothBroadcasting"><b>BLE Peripheral Mode</b></a> &#8212; Android devices can now function in Bluetooth Low Energy (BLE) peripheral mode. Apps can use this capability to broadcast their presence to nearby devices &#8212; for example, you can now build apps that let a device function as a beacon and transmit data to another BLE device. More in this <a href="http://youtu.be/2fZThdNbHcQ">I/O video</a>.</li>

<li><a href="http://developer.android.com/about/versions/android-5.0.html#Multinetwork"><b>Multi-networking</b></a> &#8212; Apps can dynamically request networks based on capabilities such as metered or unmetered. This is useful when you want to use a specific network, such as cellular. Apps can also request platform to re-evaluate networks for an internet connection. This is useful when your app sees unusually high latency on a particular network, it can enable the platform to switch to a better network (if available) sooner with a graceful handoff.</li>
</ul><h3>Get started!</h3>

<p>You can get started <a href="http://android-developers.blogspot.com/2014/10/android-50-lollipop-sdk-and-nexus.html">developing and testing on Android 5.0</a> right away by downloading the Android 5.0 Platform (API level 21), as well as the SDK Tools, Platform Tools, and Support Package from the <a href="http://developer.android.com/tools/help/sdk-manager.html">Android SDK Manager</a>. </p>

<!-- Please be sure to review behavior changes as you test your apps on Android 5.0 Lollipop. -->

<p>Check out the DevByte video below for more of what&#8217;s new in Lollipop!</p>


<!--[Interactive video]  -->  <br /><div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/CiEh6ms1aZ6"><span>Join the discussion on</span></a><br /><a href="https://plus.google.com/108967384991768947849/posts/CiEh6ms1aZ6"><span>+Android Developers</span></a><br /></div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/CiEh6ms1aZ6"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a><br /></div></div>]]></description>
				<content:encoded><![CDATA[<p><em>By <a href="http://google.com/+AnkurKotwal">Ankur Kotwal</a>, Developer Advocate</em></p>

<img border="0" src="http://4.bp.blogspot.com/-frseIdMGzMA/VERV_uvB6FI/AAAAAAAAA24/n-JcNWe5CL0/s800/lollipop-blog.png" style="width:96%;"/>


<p itemprop="description">Android 5.0 Lollipop is the biggest update of Android to date, introducing an all new visual style, improved performance, and much more. Android 5.0 Lollipop also extends across screens big and small, including phones, tablets, wearables, TVs and cars, to give your users access to information when they need it most. </p>

<p>To get you started on developing and testing on Android 5.0 Lollipop, here are some of the developer highlights with links to related videos and documentation.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1em;">User experience</h3>
<ul>
<li><a href="http://goo.gl/zEgvPh"><b>Material design</b></a> for the multiscreen world — Material Design is a new approach for designing apps in today’s multi-device world that takes a comprehensive strategy to visual, motion, and interaction design across a number of platforms and form factors. Android 5.0 brings Material Design to the platform, with a full set of tools for <a href="http://goo.gl/NMO32C">implementing material design</a> in your apps. The system is incredibly flexible, allowing your app to express its individual character and brand with bold colors and a variety of responsive UI patterns and themeable elements.</li>

<li><a href="http://developer.android.com/about/versions/android-5.0.html#Notifications"><b>Enhanced notifications</b></a> — New lockscreen notifications let you surface content, updates, and actions to users at a glance, without needing to unlock their device. Heads-up notifications let you display content and actions in a small floating window managed by the system, no matter which app is in the foreground. Notifications are refreshed for Material Design and you can use accent colors to express your brand. </li>

<li><a href="http://developer.android.com/about/versions/android-5.0.html#Recents"><b>Concurrent documents in Overview</b></a> — Now you can organize your app by tasks and present these concurrently as individual “documents” on the Overview screen. For example, instant messaging apps could declare each chat as a separate document. Users can flip through these on the Overview screen to find the specific chat they want and jump straight to it.</li>
</ul>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1em;">Performance</h3>

<ul>
<li><a href="https://source.android.com/devices/tech/dalvik/art.html"><b>Android Runtime (ART)</b></a> — Android 5.0 runs exclusively on the ART runtime. ART offers ahead-of-time (AOT) compilation, more efficient garbage collection, and improved development and debugging features. In many cases it improves performance of the device, without you having to change your code.</li>

<li><b>64-bit support</b> — Support for 64-bit ABIs provides additional address space and improved performance with certain compute workloads. Apps written in the Java language can run immediately on 64-bit architectures with no modifications required. <a href="http://goo.gl/3PnUWd">NDK r10c</a> includes 64-bit support, for apps and games using native code.</li>

<li><a href="http://developer.android.com/about/versions/android-5.0.html#Power"><b>Project Volta</b></a> — New tools and APIs help you build battery-efficient apps. Battery Historian, a tool included in the SDK, lets you visualize power events over time and understand how your app is using battery. The JobScheduler API lets you set the conditions under which your background tasks and other jobs should run, such as when the device is idle or connected to an unmetered network or to a charger, to minimize battery impact. More in this <a href="https://www.youtube.com/watch?v=KzSKIpJepUw&feature=youtu.be">I/O video</a>.</li>

<li><a href="http://developer.android.com/about/versions/android-5.0.html#Graphics"><b>OpenGL ES 3.1 and Android Extension Pack</b></a> — With OpenGL ES 3.1, you get compute shaders, stencil textures, and texture gather for your games. Android Extension Pack (AEP) is a new set of extensions to OpenGL ES that bring desktop-class graphics to Android including tessellation and geometry shaders, and use ASTC texture compression across GPU technologies. More on what's new for game developers in this <a href="http://youtu.be/qW3Ufg1JNRE">DevBytes video</a>.</li>

<li><b>WebView updates</b> — We’ve updated WebView to support WebRTC, WebAudio and WebGL will be supported. WebView also includes native support for all of the Web Components specifications: Custom Elements, Shadow DOM, HTML Imports, and Templates. WebView is now unbundled from the system and will be regularly updated through Google Play.</li>
</ul>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1em;">Workplace</h3>
<ul>
<li><a href="http://developer.android.com/about/versions/android-5.0.html#Enterprise"><b>Managed provisioning and unified view of apps</b></a> — to make it easier for employees to have a single device for personal and work use, framework enhancements offer a unified view of apps, notifications & recents across work apps and personal apps. Profile owner APIs, in the workplace context, let administrators create and manage work profiles and defined as part of a new managed provisioning process. More in this <a href="http://youtu.be/FbVWtYPpzIs">I/O video</a>.</li> 
</ul>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1em;">Media</h3>
<ul>
<li><a href="http://developer.android.com/about/versions/android-5.0.html#Camera-v2"><b>Advanced camera capabilities</b></a> — A new camera API gives you new capabilities for advanced image capture and processing. On supported devices, your app can capture uncompressed YUV capture at full 8 megapixel resolution at 30 FPS. You can also capture raw sensor data and control parameters such as exposure time, ISO sensitivity, and frame duration, on a per-frame basis. </li>

<li><a href="http://developer.android.com/about/versions/lollipop.html#Audio"><b>Audio improvements</b></a> — The sound architecture has been enhanced, with lower input latency in OpenSL, the addition of multichannel-mixing, and USB digital audio mode support. More in this <a href="https://www.youtube.com/watch?v=qW3Ufg1JNRE#t=246">I/O video</a>.</li>
</ul>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1em;">Connectivity</h3>
<ul>
<li><a href="http://developer.android.com/about/versions/android-5.0.html#BluetoothBroadcasting"><b>BLE Peripheral Mode</b></a> — Android devices can now function in Bluetooth Low Energy (BLE) peripheral mode. Apps can use this capability to broadcast their presence to nearby devices — for example, you can now build apps that let a device function as a beacon and transmit data to another BLE device. More in this <a href="http://youtu.be/2fZThdNbHcQ">I/O video</a>.</li>

<li><a href="http://developer.android.com/about/versions/android-5.0.html#Multinetwork"><b>Multi-networking</b></a> — Apps can dynamically request networks based on capabilities such as metered or unmetered. This is useful when you want to use a specific network, such as cellular. Apps can also request platform to re-evaluate networks for an internet connection. This is useful when your app sees unusually high latency on a particular network, it can enable the platform to switch to a better network (if available) sooner with a graceful handoff.</li>
</ul>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1em;">Get started!</h3>

<p>You can get started <a href="http://android-developers.blogspot.com/2014/10/android-50-lollipop-sdk-and-nexus.html">developing and testing on Android 5.0</a> right away by downloading the Android 5.0 Platform (API level 21), as well as the SDK Tools, Platform Tools, and Support Package from the <a href="http://developer.android.com/tools/help/sdk-manager.html">Android SDK Manager</a>. </p>

<!-- Please be sure to review behavior changes as you test your apps on Android 5.0 Lollipop. -->

<p style="margin-bottom:2em">Check out the DevByte video below for more of what’s new in Lollipop!</p>


<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/um1S2u022HA" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:2em; margin-left: 70px;" width="560"></iframe>  <br />


<div style="display: inline-block; float: right; line-height: 0;"><br />
<div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/CiEh6ms1aZ6" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<a href="https://plus.google.com/108967384991768947849/posts/CiEh6ms1aZ6" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a><br />
</div><br />
<div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/CiEh6ms1aZ6" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a><br />
</div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/whats-new-in-android-5-0-lollipop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android 5.0 Lollipop SDK and Nexus Preview Images</title>
		<link>https://googledata.org/google-android/android-5-0-lollipop-sdk-and-nexus-preview-images/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=android-5-0-lollipop-sdk-and-nexus-preview-images</link>
		<comments>https://googledata.org/google-android/android-5-0-lollipop-sdk-and-nexus-preview-images/#comments</comments>
		<pubDate>Fri, 17 Oct 2014 16:21:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android sdk]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=d0b2a8b05e870c07dd93f5609fde2d13</guid>
		<description><![CDATA[<div>

<img src="http://1.bp.blogspot.com/-U9MP8MVJfRc/VECiwuK8QmI/AAAAAAAAA1w/27T9dWOLdhg/s400/l_image.png" alt=""><p>Two more weeks!</p> 
</div>


                  
<p><em>By <a href="https://www.google.com/+JamalEason">Jamal Eason</a>, Product Manager, Android</em></p>


<p>At Google I/O last June, we gave you an early version of Android 5.0 with the <a href="http://android-developers.blogspot.com/2014/06/android-l-developer-preview-and-android.html">L Developer Preview</a>, running on Nexus 5, Nexus 7 and Android TV. Over the course of the L Developer Preview program, you&#8217;ve given us great feedback and we appreciate the engagement from you, our developer community. Thanks!</p>

<p>This week, <a href="http://googleblog.blogspot.com/2014/10/android-be-together-not-same.html">we announced Android 5.0 Lollipop</a>. Starting today, you can download the <b>full release of the Android 5.0 SDK</b>, along with updated developer images for Nexus 5, Nexus 7 (2013), ADT-1, and the Android emulator.  </p>

<p>The first set of devices to run this new version of Android -- Nexus 6, Nexus 9, and Nexus Player -- will be available in early November. In the same timeframe, we'll also roll out the Android 5.0 update worldwide to Nexus 4, 5, 7 (2012 &#38; 2013), and 10 devices, as well as to Google Play edition devices.  </p>

<p>Therefore, <b>now is the time to test your apps</b> on the new platform. You have <b>two more weeks</b> to get ready! </p>

<h3>What&#8217;s in Lollipop?</h3>

<p>Android 5.0 Lollipop introduces a host of new APIs and features including:</p>

<ul><li><a href="http://developer.android.com/about/versions/android-5.0.html#NotificationsMaterialDesignStyle">Material Design theme &#38; APIs</a></li>
<li><a href="http://developer.android.com/about/versions/android-5.0.html#Notifications">Enhanced Notifications</a> for your apps</li>
<li><a href="http://developer.android.com/about/versions/android-5.0.html#Power">Project Volta</a> and <a href="http://developer.android.com/about/versions/android-5.0.html#PowerMeasurementTools">Battery Historian</a> for better power efficiency for apps</li>
<li>Enhanced app runtime with <a href="http://developer.android.com/about/versions/android-5.0.html#ART">Android Runtime (ART)</a></li>
<li><a href="http://developer.android.com/about/versions/android-5.0.html#OpenGLES-3-1">OpenGL ES 3.1</a>, <a href="http://developer.android.com/about/versions/android-5.0.html#AndroidExtensionPack">Android Extension Pack</a> &#38; <a href="http://developer.android.com/about/versions/android-5.0.html#64BitSupport">64-bit</a> support for better game &#38; app performance </li>
</ul><p>There's much more, so check out the <a href="http://developer.android.com/about/versions/lollipop.html">Android 5.0 platform highlights</a> for a complete overview. </p>

<h3>What&#8217;s in the Android 5.0 SDK?</h3>

<p>The Android 5.0 SDK includes updated tools and new developer system images for testing. You can develop against the latest Android platform using API level 21 and take advantage of the updated support library to implement Material Design as well as the leanback user interface for TV apps. </p>

<p>You can download these components through the <a href="http://developer.android.com/sdk/installing/adding-packages.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">Android SDK Manager</a> and develop your app in <a href="https://developer.android.com/sdk/installing/studio.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">Android Studio</a>:</p>
<ul><li>Android 5.0 SDK Platform &#38; Tools</li>
<li>Android 5.0 Emulator System Image - 32-bit &#38; 64-bit (x86)</li>
<li>Android 5.0 Emulator System Image for Android TV (32-bit)</li>
<li>Android <a href="http://developer.android.com/tools/support-library/features.html#v7-appcompat">v7 appcompat Support Library</a> for Material Design theme backwards capability</li>
<li>Android <a href="http://developer.android.com/tools/support-library/features.html#v17-leanback">v17 leanback library</a> for Android TV app support </li>
</ul><p>For developers using the Android NDK for native C/C++ Android apps we have:</p>
<ul><li><a href="https://developer.android.com/tools/sdk/ndk/index.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">NDK r10c</a> with API level 21 support</li>
</ul><p>For developers on Android TV devices we have:</p>
<ul><li>Android 5.0 system image over the air (OTA) update for <a href="http://developer.android.com/tv/adt-1/index.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">ADT-1 Developer Kit</a>. OTA updates will appear over the next few days.</li>
</ul><p>Similar to our previous release of the preview, we are also providing updated <a href="http://developer.android.com/preview/index.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">system image downloads</a> for Nexus 5 &#38; Nexus 7 (2013) devices to help with your testing as well. These images support the Android 5.0 SDK, but only have the minimal apps pre-installed in order to enable developer testing:</p>

<ul><li>Nexus 5 (GSM/LTE) &#8220;hammerhead&#8221; Device System Image </li>
<li>Nexus 7 (2013) - (Wifi) &#8220;razor&#8221; Device System Image </li>
</ul><p>For the developer preview versions, there will not be an over the air (OTA) update. You will need to <a href="https://developers.google.com/android/nexus/images#instructions?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">wipe and reflash</a> your developer device to use the latest developer preview versions. If you want to receive the official consumer OTA update in November and any other official updates, you will have to have a <a href="https://developers.google.com/android/nexus/images?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">factory image</a> on your Nexus device.  </p>

<h3>Validate your apps with the Android 5.0 SDK</h3>

<p>With the consumer availability of Android 5.0 and the Nexus 6, Nexus 9, and Nexus Player right around the corner, here are a few things you should do to prepare:</p>
<ol><li>Get the emulator system images through the SDK Manager or download the Nexus device system images.</li>
<li>Recompile your apps against Android 5.0 SDK, especially if you used any preview APIs. Note: <a href="https://developer.android.com/sdk/api_diff/preview-21/changes.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">APIs have changed</a> between the preview SDK and the final SDK.</li>
<li>Validate that your current Android apps run on the new API 21 level with <a href="https://source.android.com/devices/tech/dalvik/art.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">ART enabled</a>. And if you use the NDK for your C/C++ Android apps, validate against the 64-bit emulator. ART is enabled by default on API 21 &#38; new Android devices with Android 5.0.</li>
</ol><p>Once you validate your current app, explore the <a href="https://developer.android.com/about/versions/android-5.0.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">new APIs and features</a> for Android 5.0. </p>

<h3>Migrate Your Existing App to Material Design</h3>

<p>Android 5.0 Lollipop introduces <a href="http://www.google.com/design/spec/material-design/introduction.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">Material Design</a>, which enables your apps to adopt a bold, colorful, and flexible design, while remaining true to a small set of key principles that guide user interaction across multiple screens and devices. </p>

<p>After making sure your current apps work with Android 5.0, now is the time to enable the Material theme in your app with the <a href="http://developer.android.com/tools/support-library/features.html#v7-appcompat">AppCompat support library</a>. For quick tips &#38; recommendations for making your app shine with Material Design, check out our <a href="http://www.google.com/design/spec/material-design/introduction.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">Material Design guidelines</a> and <a href="http://developer.android.com/distribute/essentials/quality/tablets.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">tablet optimization tips</a>. For those of you new to Material Design, check out our <a href="https://developer.android.com/training/material/get-started.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">Getting Started</a> guide.</p>





<div>
<img src="http://4.bp.blogspot.com/-giSnmgAOhww/VECeiXBI-3I/AAAAAAAAA1Y/BiG047gQdis/s600/Nexus%2BFamily_6_9_and%2Bwear.png"></div>


<h3>Get your apps ready for Google Play!</h3>

<p>Starting today, you can publish your apps that are targeting Android 5.0 Lollipop to Google Play. In your app manifest, update <code><a href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">android:targetSdkVersion</a></code> to <code>"21"</code>, test your app, and upload it to the <a href="https://developer.android.com/distribute/googleplay/developer-console.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">Google Play Developer Console</a>. </p>

<p>Starting November 3rd, Nexus 9 will be the first device available to consumers that will run Android 5.0. Therefore, it is a great time to publish on Google Play, once you've updated and tested your app. Even if your apps target earlier versions of Android, take a few moments to test them on the Android 5.0 system images, and publish any updates needed in advance of the Android 5.0 rollout. </p>

<p>Stay tuned for more details on the Nexus 6 and Nexus 9 devices, and how to make sure your apps look their best on them. </p>

<div>
<img src="http://3.bp.blogspot.com/-KnIeHC2nYqw/VEC4VL5zXlI/AAAAAAAAA2Y/046vNwlDWHU/s700/ATV_Dev_Site_Image.png"></div>

<h3>Next up, Android TV!</h3>

<p>We also announced the first consumer Android TV device, Nexus Player. It&#8217;s a streaming media player for movies, music and videos, and also a first-of-its-kind Android gaming device. Users can play games on their HDTVs with a gamepad, then keep playing on their phones while they&#8217;re on the road. The device is also Google Cast-enabled, so users can cast your app from their phones or tablets to their TV. </p>

<p>If you&#8217;re developing for Android TV, watch for more information on November 3rd about how to distribute your apps to Android TV users through the Google Play Developer Console. You can start getting your app ready by making sure it meets all of the <a href="http://developer.android.com/distribute/essentials/quality/tv.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">TV Quality Guidelines</a>&#60;!-- and Google Play <a href="http://developer.android.com/preview/tv/publish/index.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">publishing requirements</a>--&#62;. </p>

<h3>Get started with Android 5.0 Lollipop platform</h3>

<p>If you haven&#8217;t had a chance to take a look at this new version of Android yet, <a href="http://developer.android.com/preview/index.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">download the SDK</a> and <a href="https://developer.android.com/training/material/get-started.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">get started</a> today. You can learn more about what&#8217;s new in the <a href="http://developer.android.com/about/versions/lollipop.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">Android 5.0 platform highlights</a> and get all the details on new APIs and changed behaviors in the <a href="http://developer.android.com/about/versions/android-5.0.html?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">API Overview</a>. You can also check out the latest <a href="https://www.youtube.com/user/GoogleDevelopers?utm_source=final-sdk-blog-post&#38;utm_medium=social&#38;utm_campaign=L-Developer-launch">DevBytes videos</a> to learn more about Android 5.0 features.</p>

<p>Enjoy this new release of Android!</p>


<div><div><a href="https://plus.google.com/108967384991768947849/posts/EW6FBD8sD1Y"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/EW6FBD8sD1Y"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/EW6FBD8sD1Y"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[
<div style="float:right;padding-top:0em;margin-left:3em;margin-right:1em;">

<img src="http://1.bp.blogspot.com/-U9MP8MVJfRc/VECiwuK8QmI/AAAAAAAAA1w/27T9dWOLdhg/s400/l_image.png" alt="" 
style="border-radius: 6px;padding:0;margin:0;" />
<p style="margin: .5em auto auto 5.5em;font-size: 13px;color:#666;">Two more weeks!</p> 
</div>


                  
<p><em>By <a href="https://www.google.com/+JamalEason">Jamal Eason</a>, Product Manager, Android</em></p>


<p>At Google I/O last June, we gave you an early version of Android 5.0 with the <a href="http://android-developers.blogspot.com/2014/06/android-l-developer-preview-and-android.html">L Developer Preview</a>, running on Nexus 5, Nexus 7 and Android TV. Over the course of the L Developer Preview program, you’ve given us great feedback and we appreciate the engagement from you, our developer community. Thanks!</p>

<p>This week, <a href="http://googleblog.blogspot.com/2014/10/android-be-together-not-same.html">we announced Android 5.0 Lollipop</a>. Starting today, you can download the <b>full release of the Android 5.0 SDK</b>, along with updated developer images for Nexus 5, Nexus 7 (2013), ADT-1, and the Android emulator.  </p>

<p>The first set of devices to run this new version of Android -- Nexus 6, Nexus 9, and Nexus Player -- will be available in early November. In the same timeframe, we'll also roll out the Android 5.0 update worldwide to Nexus 4, 5, 7 (2012 & 2013), and 10 devices, as well as to Google Play edition devices.  </p>

<p>Therefore, <b>now is the time to test your apps</b> on the new platform. You have <b>two more weeks</b> to get ready! </p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">What’s in Lollipop?</h3>

<p>Android 5.0 Lollipop introduces a host of new APIs and features including:</p>

<ul>
<li><a href="http://developer.android.com/about/versions/android-5.0.html#NotificationsMaterialDesignStyle">Material Design theme & APIs</a></li>
<li><a href="http://developer.android.com/about/versions/android-5.0.html#Notifications">Enhanced Notifications</a> for your apps</li>
<li><a href="http://developer.android.com/about/versions/android-5.0.html#Power">Project Volta</a> and <a href="http://developer.android.com/about/versions/android-5.0.html#PowerMeasurementTools">Battery Historian</a> for better power efficiency for apps</li>
<li>Enhanced app runtime with <a href="http://developer.android.com/about/versions/android-5.0.html#ART">Android Runtime (ART)</a></li>
<li><a href="http://developer.android.com/about/versions/android-5.0.html#OpenGLES-3-1">OpenGL ES 3.1</a>, <a href="http://developer.android.com/about/versions/android-5.0.html#AndroidExtensionPack">Android Extension Pack</a> & <a href="http://developer.android.com/about/versions/android-5.0.html#64BitSupport">64-bit</a> support for better game & app performance </li>
</ul>

<p>There's much more, so check out the <a href="http://developer.android.com/about/versions/lollipop.html">Android 5.0 platform highlights</a> for a complete overview. </p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">What’s in the Android 5.0 SDK?</h3>

<p>The Android 5.0 SDK includes updated tools and new developer system images for testing. You can develop against the latest Android platform using API level 21 and take advantage of the updated support library to implement Material Design as well as the leanback user interface for TV apps. </p>

<p>You can download these components through the <a href="http://developer.android.com/sdk/installing/adding-packages.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">Android SDK Manager</a> and develop your app in <a href="https://developer.android.com/sdk/installing/studio.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">Android Studio</a>:</p>
<ul>
<li>Android 5.0 SDK Platform & Tools</li>
<li>Android 5.0 Emulator System Image - 32-bit & 64-bit (x86)</li>
<li>Android 5.0 Emulator System Image for Android TV (32-bit)</li>
<li>Android <a href="http://developer.android.com/tools/support-library/features.html#v7-appcompat">v7 appcompat Support Library</a> for Material Design theme backwards capability</li>
<li>Android <a href="http://developer.android.com/tools/support-library/features.html#v17-leanback">v17 leanback library</a> for Android TV app support </li>
</ul>

<p>For developers using the Android NDK for native C/C++ Android apps we have:</p>
<ul>
<li><a href="https://developer.android.com/tools/sdk/ndk/index.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">NDK r10c</a> with API level 21 support</li>
</ul>

<p>For developers on Android TV devices we have:</p>
<ul>
<li>Android 5.0 system image over the air (OTA) update for <a href="http://developer.android.com/tv/adt-1/index.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">ADT-1 Developer Kit</a>. OTA updates will appear over the next few days.</li>
</ul>

<p>Similar to our previous release of the preview, we are also providing updated <a href="http://developer.android.com/preview/index.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">system image downloads</a> for Nexus 5 & Nexus 7 (2013) devices to help with your testing as well. These images support the Android 5.0 SDK, but only have the minimal apps pre-installed in order to enable developer testing:</p>

<ul>
<li>Nexus 5 (GSM/LTE) “hammerhead” Device System Image </li>
<li>Nexus 7 (2013) - (Wifi) “razor” Device System Image </li>
</ul>

<p>For the developer preview versions, there will not be an over the air (OTA) update. You will need to <a href="https://developers.google.com/android/nexus/images#instructions?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">wipe and reflash</a> your developer device to use the latest developer preview versions. If you want to receive the official consumer OTA update in November and any other official updates, you will have to have a <a href="https://developers.google.com/android/nexus/images?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">factory image</a> on your Nexus device.  </p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Validate your apps with the Android 5.0 SDK</h3>

<p>With the consumer availability of Android 5.0 and the Nexus 6, Nexus 9, and Nexus Player right around the corner, here are a few things you should do to prepare:</p>
<ol>
<li>Get the emulator system images through the SDK Manager or download the Nexus device system images.</li>
<li>Recompile your apps against Android 5.0 SDK, especially if you used any preview APIs. Note: <a href="https://developer.android.com/sdk/api_diff/preview-21/changes.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">APIs have changed</a> between the preview SDK and the final SDK.</li>
<li>Validate that your current Android apps run on the new API 21 level with <a href="https://source.android.com/devices/tech/dalvik/art.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">ART enabled</a>. And if you use the NDK for your C/C++ Android apps, validate against the 64-bit emulator. ART is enabled by default on API 21 & new Android devices with Android 5.0.</li>
</ol>

<p>Once you validate your current app, explore the <a href="https://developer.android.com/about/versions/android-5.0.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">new APIs and features</a> for Android 5.0. </p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Migrate Your Existing App to Material Design</h3>

<p>Android 5.0 Lollipop introduces <a href="http://www.google.com/design/spec/material-design/introduction.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">Material Design</a>, which enables your apps to adopt a bold, colorful, and flexible design, while remaining true to a small set of key principles that guide user interaction across multiple screens and devices. </p>

<p>After making sure your current apps work with Android 5.0, now is the time to enable the Material theme in your app with the <a href="http://developer.android.com/tools/support-library/features.html#v7-appcompat">AppCompat support library</a>. For quick tips & recommendations for making your app shine with Material Design, check out our <a href="http://www.google.com/design/spec/material-design/introduction.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">Material Design guidelines</a> and <a href="http://developer.android.com/distribute/essentials/quality/tablets.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">tablet optimization tips</a>. For those of you new to Material Design, check out our <a href="https://developer.android.com/training/material/get-started.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">Getting Started</a> guide.</p>





<div style="margin-left:0">
<img src="http://4.bp.blogspot.com/-giSnmgAOhww/VECeiXBI-3I/AAAAAAAAA1Y/BiG047gQdis/s600/Nexus%2BFamily_6_9_and%2Bwear.png" />
</div>


<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Get your apps ready for Google Play!</h3>

<p>Starting today, you can publish your apps that are targeting Android 5.0 Lollipop to Google Play. In your app manifest, update <code><a href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">android:targetSdkVersion</a></code> to <code style="color:red">"21"</code>, test your app, and upload it to the <a href="https://developer.android.com/distribute/googleplay/developer-console.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">Google Play Developer Console</a>. </p>

<p>Starting November 3rd, Nexus 9 will be the first device available to consumers that will run Android 5.0. Therefore, it is a great time to publish on Google Play, once you've updated and tested your app. Even if your apps target earlier versions of Android, take a few moments to test them on the Android 5.0 system images, and publish any updates needed in advance of the Android 5.0 rollout. </p>

<p>Stay tuned for more details on the Nexus 6 and Nexus 9 devices, and how to make sure your apps look their best on them. </p>

<div style="margin-left:0">
<img src="http://3.bp.blogspot.com/-KnIeHC2nYqw/VEC4VL5zXlI/AAAAAAAAA2Y/046vNwlDWHU/s700/ATV_Dev_Site_Image.png" />






</div>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Next up, Android TV!</h3>

<p>We also announced the first consumer Android TV device, Nexus Player. It’s a streaming media player for movies, music and videos, and also a first-of-its-kind Android gaming device. Users can play games on their HDTVs with a gamepad, then keep playing on their phones while they’re on the road. The device is also Google Cast-enabled, so users can cast your app from their phones or tablets to their TV. </p>

<p>If you’re developing for Android TV, watch for more information on November 3rd about how to distribute your apps to Android TV users through the Google Play Developer Console. You can start getting your app ready by making sure it meets all of the <a href="http://developer.android.com/distribute/essentials/quality/tv.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">TV Quality Guidelines</a><!-- and Google Play <a href="http://developer.android.com/preview/tv/publish/index.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">publishing requirements</a>-->. </p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Get started with Android 5.0 Lollipop platform</h3>

<p>If you haven’t had a chance to take a look at this new version of Android yet, <a href="http://developer.android.com/preview/index.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">download the SDK</a> and <a href="https://developer.android.com/training/material/get-started.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">get started</a> today. You can learn more about what’s new in the <a href="http://developer.android.com/about/versions/lollipop.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">Android 5.0 platform highlights</a> and get all the details on new APIs and changed behaviors in the <a href="http://developer.android.com/about/versions/android-5.0.html?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">API Overview</a>. You can also check out the latest <a href="https://www.youtube.com/user/GoogleDevelopers?utm_source=final-sdk-blog-post&utm_medium=social&utm_campaign=L-Developer-launch">DevBytes videos</a> to learn more about Android 5.0 features.</p>

<p>Enjoy this new release of Android!</p>


<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/EW6FBD8sD1Y" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/EW6FBD8sD1Y" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/EW6FBD8sD1Y" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-5-0-lollipop-sdk-and-nexus-preview-images/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Updated Cross-Platform Tools in Google Play Game Services</title>
		<link>https://googledata.org/google-android/updated-cross-platform-tools-in-google-play-game-services/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=updated-cross-platform-tools-in-google-play-game-services</link>
		<comments>https://googledata.org/google-android/updated-cross-platform-tools-in-google-play-game-services/#comments</comments>
		<pubDate>Tue, 07 Oct 2014 19:54:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=5039239ab698717f4bbc19fde77cef0b</guid>
		<description><![CDATA[<p><em>By Ben Frenkel, Google Play Games team</em></p>

<div>

<img src="http://2.bp.blogspot.com/-7r-8CjYg5dM/VDM8_ZwFh9I/AAAAAAAAA1E/gr3e1gN-1Ic/s500/gpgs-leaders.png" alt=""><p>Game services UIs are now updated for material design, across all of the SDKs. </p>
</div>



<p>Game developers, we've updated some of our popular developer tools to give you a consistent set of game services across platforms, a refreshed UI based on material design, and new tools to give you better visibility into what users are doing in your games.</p>

<p>Let&#8217;s take a look at the new features.</p>

<h3>Real-time Multiplayer in the Play Games cross-platform C++ SDK</h3>
 
<p>To make it easier to build cross-platform games, we&#8217;ve added <strong>Real-Time Multiplayer</strong> (RTMP)  to the latest Google Play Games C++ SDK. The addition of RTMP brings the C++ SDK to feature parity with the Play services SDK on Android and the Play Games iOS SDK. <a href="https://developers.google.com/games/services/cpp/GettingStartedNativeClient">Learn more &#187;</a></p>


<h3>Material Design refresh across Android, cross-platform C++, and iOS SDKs</h3>

<p>We&#8217;ve incorporated <strong>material design</strong> into the user-interface of the latest Play Games services SDKs for Android, cross-platform C++, and iOS. This gives you a bold, colorful design that&#8217;s consistent across all of your games, for all of your users. <a href="http://youtu.be/p4gmvHyuZzw">Learn more &#187;</a></p>


<h3>New quests features and completion statistics</h3>

<p><em>Quests</em> are a popular way to increase player engagement by adding fresh content without updating your game. We&#8217;ve added some new features to quests to make them easier to implement and manage. </p>

<p>First, we&#8217;ve simplified quests implementations by providing <b>out-of-the-box toasts</b> for &#8220;quest accepted&#8221; and &#8220;quest completed&#8221; events. You can invoke these toasts from your game with just a single call, on any platform. This removes the need to create your own custom toasts, though you are still free to do so.</p>

<p>You also have more insight into how your quests are performing through new <b>in-line quest stats</b> in the Developer Console. With these stats, you can better monitor how many people are completing their quests, so you can adjust the criteria to make them easier to achieve, if needed. <a href="https://support.google.com/googleplay/android-developer/answer/3423625?hl=en">Learn more &#187;</a></p>

<p>Last, we&#8217;ve <b>eliminated the 24-hour lead-time requirement</b> for publishing and allowing repeating quests to have the same name. You now have the freedom to publish quests whenever you want with whatever name you want.</p>

<div>
<a href="http://3.bp.blogspot.com/-7Y0psbTIrRE/VCyrfP1jkcI/AAAAAAAAA0E/SfVDrpwZrzM/s600/gpgs_quests.png"><img src="http://3.bp.blogspot.com/-7Y0psbTIrRE/VCyrfP1jkcI/AAAAAAAAA0E/SfVDrpwZrzM/s600/gpgs_quests.png"></a>

<div>
<p>New <strong>quest stats</strong> let you see how many users are completing their quests.</p>
</div>
</div>


<h3>Multiplayer game statistics</h3>

<p>Now when you add multiplayer support through Google Play game services, you get <b>multiplayer stats</b> for free, without having to implement a custom logging solution. You can simply visit the Developer Console to see how players are using your multiplayer integration and look at trends in overall usage. The new stats are available as tabs under the Engagement section. <a href="https://support.google.com/googleplay/android-developer/answer/3423625?hl=en">Learn more &#187;</a></p>

<div>
<a href="http://4.bp.blogspot.com/-QAGU1Bn4do4/VCyreRVruDI/AAAAAAAAAzw/8My9iwW4hQw/s600/gpgs_mpstats.png"><img src="http://4.bp.blogspot.com/-QAGU1Bn4do4/VCyreRVruDI/AAAAAAAAAzw/8My9iwW4hQw/s600/gpgs_mpstats.png"></a>
<div>
<p><strong>Multiplayer stats</strong> let you see trends in how players are using your app's multiplayer integration.</p>
</div>
</div>


<h3>New game services insights and alerts</h3>

<p>We&#8217;re continuing to expand the types of alerts we offer the Developer Console to let you know about more types of issues that might be affecting your users' gameplay experiences. You&#8217;ll now get an alert when you have a broken implementation of real-time and turn-based multiplayer, and we&#8217;ll also notify you if your Achievements and Leaderboard implementations use too many duplicate images. <a href="https://support.google.com/googleplay/android-developer/answer/3433208?hl=en&#38;ref_topic=3450988">Learn more &#187;</a> </p>

<h3>Get Started</h3>

<p>You can get started with all of these new features right away. Visit the <a href="http://developers.google.com/games/services/downloads/">Google Play game services developer site</a> to download the updated SDKs. For migration details on the Game Services SDK for iOS, see the <a href="https://developers.google.com/games/services/ios/releaseNotes">release notes</a>. You can take a look at the new stats and alerts by visiting the <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a>. </p>


<div><div><a href="https://plus.google.com/108967384991768947849/posts/45LKfMLSvKf"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/108967384991768947849/posts/45LKfMLSvKf"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/108967384991768947849/posts/45LKfMLSvKf"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[                  
<p><em>By Ben Frenkel, Google Play Games team</em></p>

<div style="float:right;padding-top:0em;margin-left:2em;max-width:45%;">

<img src="http://2.bp.blogspot.com/-7r-8CjYg5dM/VDM8_ZwFh9I/AAAAAAAAA1E/gr3e1gN-1Ic/s500/gpgs-leaders.png" alt="" 
style="border-radius: 6px;padding:0;margin:0;" />
<p style="margin: 0em auto auto 1.25em;font-size: 13px;color:#666;">Game services UIs are now updated for material design, across all of the SDKs. </p>
</div>



<p>Game developers, we've updated some of our popular developer tools to give you a consistent set of game services across platforms, a refreshed UI based on material design, and new tools to give you better visibility into what users are doing in your games.</p>

<p>Let’s take a look at the new features.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Real-time Multiplayer in the Play Games cross-platform C++ SDK</h3>
 
<p>To make it easier to build cross-platform games, we’ve added <strong>Real-Time Multiplayer</strong> (RTMP)  to the latest Google Play Games C++ SDK. The addition of RTMP brings the C++ SDK to feature parity with the Play services SDK on Android and the Play Games iOS SDK. <a href="https://developers.google.com/games/services/cpp/GettingStartedNativeClient">Learn more &raquo;</a></p>


<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Material Design refresh across Android, cross-platform C++, and iOS SDKs</h3>

<p>We’ve incorporated <strong>material design</strong> into the user-interface of the latest Play Games services SDKs for Android, cross-platform C++, and iOS. This gives you a bold, colorful design that’s consistent across all of your games, for all of your users. <a href="http://youtu.be/p4gmvHyuZzw">Learn more &raquo;</a></p>


<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">New quests features and completion statistics</h3>

<p><em>Quests</em> are a popular way to increase player engagement by adding fresh content without updating your game. We’ve added some new features to quests to make them easier to implement and manage. </p>

<p>First, we’ve simplified quests implementations by providing <b>out-of-the-box toasts</b> for “quest accepted” and “quest completed” events. You can invoke these toasts from your game with just a single call, on any platform. This removes the need to create your own custom toasts, though you are still free to do so.</p>

<p>You also have more insight into how your quests are performing through new <b>in-line quest stats</b> in the Developer Console. With these stats, you can better monitor how many people are completing their quests, so you can adjust the criteria to make them easier to achieve, if needed. <a href="https://support.google.com/googleplay/android-developer/answer/3423625?hl=en">Learn more &raquo;</a></p>

<p>Last, we’ve <b>eliminated the 24-hour lead-time requirement</b> for publishing and allowing repeating quests to have the same name. You now have the freedom to publish quests whenever you want with whatever name you want.</p>

<div style="clear: both;padding:1em 1em 1em 1em;">
<a href="http://3.bp.blogspot.com/-7Y0psbTIrRE/VCyrfP1jkcI/AAAAAAAAA0E/SfVDrpwZrzM/s600/gpgs_quests.png" imageanchor="1" ><img itemprop="image" style="border:2px solid #ddd" src="http://3.bp.blogspot.com/-7Y0psbTIrRE/VCyrfP1jkcI/AAAAAAAAA0E/SfVDrpwZrzM/s600/gpgs_quests.png" /></a>

<div style="width: 500px;">
<p class="caption" style="margin-top:4px;font-size: 12px;color:#666;margin-left:6px;margin-bottom:0">New <strong>quest stats</strong> let you see how many users are completing their quests.</p>
</div>
</div>


<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1em;margin-top:1.1em;">Multiplayer game statistics</h3>

<p>Now when you add multiplayer support through Google Play game services, you get <b>multiplayer stats</b> for free, without having to implement a custom logging solution. You can simply visit the Developer Console to see how players are using your multiplayer integration and look at trends in overall usage. The new stats are available as tabs under the Engagement section. <a href="https://support.google.com/googleplay/android-developer/answer/3423625?hl=en">Learn more &raquo;</a></p>

<div style="clear: both;padding:1em 1em 1em 1em;">
<a href="http://4.bp.blogspot.com/-QAGU1Bn4do4/VCyreRVruDI/AAAAAAAAAzw/8My9iwW4hQw/s600/gpgs_mpstats.png" imageanchor="1" ><img style="border:2px solid #ddd;" src="http://4.bp.blogspot.com/-QAGU1Bn4do4/VCyreRVruDI/AAAAAAAAAzw/8My9iwW4hQw/s600/gpgs_mpstats.png" /></a>
<div style="width: 700px;">
<p class="caption" style="margin-top:4px;font-size: 12px;color:#666;margin-left:6px;margin-bottom:0"><strong>Multiplayer stats</strong> let you see trends in how players are using your app's multiplayer integration.</p>
</div>
</div>


<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1em;">New game services insights and alerts</h3>

<p>We’re continuing to expand the types of alerts we offer the Developer Console to let you know about more types of issues that might be affecting your users' gameplay experiences. You’ll now get an alert when you have a broken implementation of real-time and turn-based multiplayer, and we’ll also notify you if your Achievements and Leaderboard implementations use too many duplicate images. <a href="https://support.google.com/googleplay/android-developer/answer/3433208?hl=en&ref_topic=3450988">Learn more &raquo;</a> </p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;line-height:1.25em;margin-top:1.1em;">Get Started</h3>

<p>You can get started with all of these new features right away. Visit the <a href="http://developers.google.com/games/services/downloads/">Google Play game services developer site</a> to download the updated SDKs. For migration details on the Game Services SDK for iOS, see the <a href="https://developers.google.com/games/services/ios/releaseNotes">release notes</a>. You can take a look at the new stats and alerts by visiting the <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a>. </p>


<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/45LKfMLSvKf" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/45LKfMLSvKf" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/45LKfMLSvKf" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/updated-cross-platform-tools-in-google-play-game-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Tips for Error Handling with Android Wear APIs</title>
		<link>https://googledata.org/google-android/tips-for-error-handling-with-android-wear-apis/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tips-for-error-handling-with-android-wear-apis</link>
		<comments>https://googledata.org/google-android/tips-for-error-handling-with-android-wear-apis/#comments</comments>
		<pubDate>Fri, 03 Oct 2014 23:44:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=80d8455e628e9b2852d5172fc4f4dea5</guid>
		<description><![CDATA[By +Wayne Piekarski, Developer Advocate, Android Wear

For developers using the Android Wear APIs in Google Play services, it is important to correctly handle all the error conditions that can occur on legacy phones or when users do not have a wearable...]]></description>
				<content:encoded><![CDATA[<p><em>By <a href="https://plus.google.com/+WaynePiekarski/posts?e=-RedirectToSandbox">+Wayne Piekarski</a>, Developer Advocate, Android Wear</em></p>

<p>For developers using the Android Wear APIs in Google Play services, it is important to correctly handle all the error conditions that can occur on legacy phones or when users do not have a wearable device. This post describes the best practice in handling error conditions with the GoogleApiClient <a href="http://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.html#connect()"><code>connect()</code></a> method. If you do not implement this correctly, your existing application functionality may fail for non-wearable users.</p>

<p>There are two ways that the <a href="http://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.html#connect()"><code>connect()</code></a> method can return <code>ConnectionResult.API_UNAVAILABLE</code> for wearable support with Google Play services:</p>

<ul>
<li>When requesting <code>Wearable.API</code> on any device running Android 4.2 (API level 17) or earlier</li>
<li>When requesting <code>Wearable.API</code> when no Android Wear companion application or device is available</li>
</ul>

<p>Google Play services provides a wide range of <a href="http://android-developers.blogspot.com/2014/02/new-client-api-model-in-google-play.html">useful features</a> such as integration with Google Drive, Wallet, Google+, and Google Play games services (just to name a few!). During initialization, the application uses <a href="http://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.Builder.html"><code>GoogleApiClient.Builder()</code></a> to make calls to <code>addApi()</code> to request the features that are necessary. The <code>connect()</code> method is then called to establish a connection to the Google Play services library, and it can return error codes if any API is not available.</p>

<p>If you request multiple APIs from a single <code>GoogleApiClient</code>, such as Drive and Wear, and the Wear support returns <code>API_UNAVAILABLE</code>, then the Drive request will also fail. Since Wear support is not guaranteed to be available on all devices, you should make sure to use a separate client for this request.</p>

<p>The best practice for developers is to implement <strong>two separate GoogleApiClient connections</strong>: </p>

<ul>
<li>One connection for Android Wear support, and </li>
<li>A separate connection for all of the other APIs you need</li>
</ul>

<p>This will ensure that the functionality of your app will remain for all users, whether or not there is wearable support available on their devices, as well as on older legacy devices. 

<p>It's important that you implement this best practice immediately, because your current users may be affected if not handled correctly in your app.</p>

<div style="display: inline-block; float: right; line-height: 0;clear:both;"><div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/c3mCynXB6d3" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<br />
<a href="https://plus.google.com/108967384991768947849/posts/c3mCynXB6d3" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/c3mCynXB6d3" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/tips-for-error-handling-with-android-wear-apis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Allthecooks on Android Wear</title>
		<link>https://googledata.org/google-android/allthecooks-on-android-wear/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=allthecooks-on-android-wear</link>
		<comments>https://googledata.org/google-android/allthecooks-on-android-wear/#comments</comments>
		<pubDate>Wed, 24 Sep 2014 20:43:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=ffb0f3d2274f39dfcc2aabdbfcc5f0da</guid>
		<description><![CDATA[<p><em>By <a href="https://plus.google.com/+HoiLam/">Hoi Lam</a>, Developer Advocate, Android Wear</em></p>


<a href="http://2.bp.blogspot.com/-40P-fDCCYhM/VCIo4ig4PRI/AAAAAAAAAys/d2srUoOSFiU/s1600/image05.jpg"><img border="0" src="http://2.bp.blogspot.com/-40P-fDCCYhM/VCIo4ig4PRI/AAAAAAAAAys/d2srUoOSFiU/s800/image05.jpg"></a>

<p><em>The best cooking companion since the apron?</em></p>

<p>Android Wear is designed for serving up useful information at just the right time and in the right place. A neat example of this is <a href="https://play.google.com/store/apps/details?id=com.mufumbo.android.recipe.search">Allthecooks Recipes</a>. It gives you the right recipe, right when you need it. </p>

<div>
<a href="http://2.bp.blogspot.com/-zkag61MWU7c/VCIo3qyCa-I/AAAAAAAAAyc/RKyDMeAyWp0/s1600/image00.png"><img border="0" src="http://2.bp.blogspot.com/-zkag61MWU7c/VCIo3qyCa-I/AAAAAAAAAyc/RKyDMeAyWp0/s800/image00.png"></a>
</div>

<p>This app is a great illustration of <a href="https://developer.android.com/design/wear/creative-vision.html">the four creative visions for Android Wear</a>:</p>

<ol><li><em>Launched automatically</em></li>
<li><em>Glanceable</em> </li>
<li><em>Suggest and demand</em> </li>
<li><em>Zero or low interaction</em></li>
</ol><p>Allthecooks also shows what developers can do by combining both the power of the mobile device and the convenience of Android Wear.</p>


<h3>Pick the best tool for the job</h3>

<p>One particularly well-designed aspect of Allthecooks is their approach to the multi-device experience. Allthecooks lets the user search and browse the different recipes on their Android phone or tablet. When the user is ready, there is a clearly labelled blue action link to send the recipe to the watch.</p>

<p>The integration is natural. Using the on-screen keyboard and the larger screen real estate, Allthecooks is using the best screen to browse through the recipes. On the wearables side, the recipe is synchronised by using the <a href="https://developer.android.com/training/wearables/data-layer/events.html">DataApi</a> and is <em>launched automatically</em>, fulfilling one of the key creative visions for Android Wear.</p>

<p>The end result? The mobile / Wear integration is seamless.</p>

<h3>Thoughtful navigation</h3>

<p>Once the recipe has been sent to the Android Wear device, Allthecooks splits the steps into easily glanceable pages. At the end of that list of steps, it allows the user to jump back to the beginning with a clearly marked button. </p>



<div>
<a href="http://4.bp.blogspot.com/-YlklVygZ_TQ/VCIo5Nkh5pI/AAAAAAAAAy4/PVBe_N9tnjU/s1600/image08.png"><img border="0" src="http://4.bp.blogspot.com/-YlklVygZ_TQ/VCIo5Nkh5pI/AAAAAAAAAy4/PVBe_N9tnjU/s400/image08.png"></a>

<a href="http://4.bp.blogspot.com/-ITr1U7jWGyY/VCIo3YrizZI/AAAAAAAAAyY/kwyr2twxGOg/s1600/image01.png"><img border="0" src="http://4.bp.blogspot.com/-ITr1U7jWGyY/VCIo3YrizZI/AAAAAAAAAyY/kwyr2twxGOg/s400/image01.png"></a>

<a href="http://2.bp.blogspot.com/-sewxJYQgNgA/VCIo43AmObI/AAAAAAAAAy0/nYNoA9PfNos/s1600/image07.png"><img border="0" src="http://2.bp.blogspot.com/-sewxJYQgNgA/VCIo43AmObI/AAAAAAAAAy0/nYNoA9PfNos/s400/image07.png"></a>

<a href="http://3.bp.blogspot.com/-jlN6nZhfQoc/VCIo4z3qxBI/AAAAAAAAAzM/7kuYFLz8QYA/s1600/image06.png"><img border="0" src="http://3.bp.blogspot.com/-jlN6nZhfQoc/VCIo4z3qxBI/AAAAAAAAAzM/7kuYFLz8QYA/s400/image06.png"></a>

<a href="http://2.bp.blogspot.com/-CvHLUu2j4SY/VCIo4HkaaFI/AAAAAAAAAyk/EGsCeS4v5HE/s1600/image03.png"><img border="0" src="http://2.bp.blogspot.com/-CvHLUu2j4SY/VCIo4HkaaFI/AAAAAAAAAyk/EGsCeS4v5HE/s400/image03.png"></a>
</div>



<p>This means if you would like to browse through the steps before starting to cook, you can effortlessly get to the beginning again without swiping through all the pages. This is a great example of two other points in the vision: <em>glanceable</em> and <em>zero or low interaction</em>.</p>

<h3>A great (cooking) assistant</h3>

<p>One of the key ingredients of great cooking is timing, and Allthecooks is always on hand to do all the inputs for you when you are ready to start the clock. A simple tap on the blue &#8220;1&#8221; and Allthecooks will automatically set the timer to one hour. It is a gentle suggestion that Allthecooks can set the timer for you if you want.</p>

<div>
<a href="http://2.bp.blogspot.com/-TxeVex0BWq0/VCIo4VphYCI/AAAAAAAAAyo/7sRg3ymshsk/s1600/image04.png"><img border="0" src="http://2.bp.blogspot.com/-TxeVex0BWq0/VCIo4VphYCI/AAAAAAAAAyo/7sRg3ymshsk/s400/image04.png"></a>


<a href="http://1.bp.blogspot.com/-y-9KadnsCFk/VCIo3d5jJ4I/AAAAAAAAAyg/XtQ3K3Busic/s1600/image02.png"><img border="0" src="http://1.bp.blogspot.com/-y-9KadnsCFk/VCIo3d5jJ4I/AAAAAAAAAyg/XtQ3K3Busic/s400/image02.png"></a>
</div>


<p>Alternatively, if you want to use your egg timer, why not? It is a small detail but it really demonstrates the last and final element of Android Wear&#8217;s vision of <em>suggest and demand</em>. It is an ever ready assistant when the user wants it. At the same time, it is respectful and does not force the user to go down a route that the user does not want.</p>

<h3>It&#8217;s about the details</h3>

<p>Great design is about being user-centric and paying attention to details. Allthecooks could have just shrunk their mobile app for wear. Instead the Allthecooks team put a lot of thoughts into the design and leveraged all four points of the Android Wear creative vision. The end result is that the user can get the best experience out of both their Android mobile device and their Android Wear device. So developers, what will you be cooking next on Android Wear?</p>

<p>For more inspiring Android Wear user experiences, check out the <a href="https://play.google.com/store/apps/collection/promotion_3000cf4_android_wear_all">Android Wear collection on Google Play</a>!</p>


<div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/JNZ9SJfcXsh"><span>Join the discussion on</span></a><br /><a href="https://plus.google.com/108967384991768947849/posts/JNZ9SJfcXsh"><span>+Android Developers</span></a><br /></div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/JNZ9SJfcXsh"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a><br /></div></div>]]></description>
				<content:encoded><![CDATA[<p><em>By <a href="https://plus.google.com/+HoiLam/">Hoi Lam</a>, Developer Advocate, Android Wear</em></p>


<a href="http://2.bp.blogspot.com/-40P-fDCCYhM/VCIo4ig4PRI/AAAAAAAAAys/d2srUoOSFiU/s1600/image05.jpg" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-40P-fDCCYhM/VCIo4ig4PRI/AAAAAAAAAys/d2srUoOSFiU/s800/image05.jpg" style="width:96%;"/></a>

<p><em>The best cooking companion since the apron?</em></p>

<p>Android Wear is designed for serving up useful information at just the right time and in the right place. A neat example of this is <a href="https://play.google.com/store/apps/details?id=com.mufumbo.android.recipe.search">Allthecooks Recipes</a>. It gives you the right recipe, right when you need it. </p>

<div style="float:right">
<a href="http://2.bp.blogspot.com/-zkag61MWU7c/VCIo3qyCa-I/AAAAAAAAAyc/RKyDMeAyWp0/s1600/image00.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-zkag61MWU7c/VCIo3qyCa-I/AAAAAAAAAyc/RKyDMeAyWp0/s800/image00.png" style="width:280px;padding:1em 2em 1em 3em;" /></a>
</div>

<p>This app is a great illustration of <a href="https://developer.android.com/design/wear/creative-vision.html">the four creative visions for Android Wear</a>:</p>

<ol>
<li><em>Launched automatically</em></li>
<li><em>Glanceable</em> </li>
<li><em>Suggest and demand</em> </li>
<li><em>Zero or low interaction</em></li>
</ol>
<p>Allthecooks also shows what developers can do by combining both the power of the mobile device and the convenience of Android Wear.</p>


<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">Pick the best tool for the job</h3>

<p>One particularly well-designed aspect of Allthecooks is their approach to the multi-device experience. Allthecooks lets the user search and browse the different recipes on their Android phone or tablet. When the user is ready, there is a clearly labelled blue action link to send the recipe to the watch.</p>

<p>The integration is natural. Using the on-screen keyboard and the larger screen real estate, Allthecooks is using the best screen to browse through the recipes. On the wearables side, the recipe is synchronised by using the <a href="https://developer.android.com/training/wearables/data-layer/events.html">DataApi</a> and is <em>launched automatically</em>, fulfilling one of the key creative visions for Android Wear.</p>

<p>The end result? The mobile / Wear integration is seamless.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">Thoughtful navigation</h3>

<p>Once the recipe has been sent to the Android Wear device, Allthecooks splits the steps into easily glanceable pages. At the end of that list of steps, it allows the user to jump back to the beginning with a clearly marked button. </p>



<div style="width:96%;">
<a href="http://4.bp.blogspot.com/-YlklVygZ_TQ/VCIo5Nkh5pI/AAAAAAAAAy4/PVBe_N9tnjU/s1600/image08.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-YlklVygZ_TQ/VCIo5Nkh5pI/AAAAAAAAAy4/PVBe_N9tnjU/s400/image08.png" style="width:168px" /></a>

<a href="http://4.bp.blogspot.com/-ITr1U7jWGyY/VCIo3YrizZI/AAAAAAAAAyY/kwyr2twxGOg/s1600/image01.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-ITr1U7jWGyY/VCIo3YrizZI/AAAAAAAAAyY/kwyr2twxGOg/s400/image01.png" style="width:168px" /></a>

<a href="http://2.bp.blogspot.com/-sewxJYQgNgA/VCIo43AmObI/AAAAAAAAAy0/nYNoA9PfNos/s1600/image07.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-sewxJYQgNgA/VCIo43AmObI/AAAAAAAAAy0/nYNoA9PfNos/s400/image07.png" style="width:168px" /></a>

<a href="http://3.bp.blogspot.com/-jlN6nZhfQoc/VCIo4z3qxBI/AAAAAAAAAzM/7kuYFLz8QYA/s1600/image06.png" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-jlN6nZhfQoc/VCIo4z3qxBI/AAAAAAAAAzM/7kuYFLz8QYA/s400/image06.png" style="width:168px" /></a>

<a href="http://2.bp.blogspot.com/-CvHLUu2j4SY/VCIo4HkaaFI/AAAAAAAAAyk/EGsCeS4v5HE/s1600/image03.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-CvHLUu2j4SY/VCIo4HkaaFI/AAAAAAAAAyk/EGsCeS4v5HE/s400/image03.png" style="width:168px" /></a>
</div>



<p>This means if you would like to browse through the steps before starting to cook, you can effortlessly get to the beginning again without swiping through all the pages. This is a great example of two other points in the vision: <em>glanceable</em> and <em>zero or low interaction</em>.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">A great (cooking) assistant</h3>

<p>One of the key ingredients of great cooking is timing, and Allthecooks is always on hand to do all the inputs for you when you are ready to start the clock. A simple tap on the blue “1” and Allthecooks will automatically set the timer to one hour. It is a gentle suggestion that Allthecooks can set the timer for you if you want.</p>

<div style="width:96%;margin-top:1.25em;">
<a href="http://2.bp.blogspot.com/-TxeVex0BWq0/VCIo4VphYCI/AAAAAAAAAyo/7sRg3ymshsk/s1600/image04.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-TxeVex0BWq0/VCIo4VphYCI/AAAAAAAAAyo/7sRg3ymshsk/s400/image04.png" style="width:168px" /></a>


<a href="http://1.bp.blogspot.com/-y-9KadnsCFk/VCIo3d5jJ4I/AAAAAAAAAyg/XtQ3K3Busic/s1600/image02.png" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-y-9KadnsCFk/VCIo3d5jJ4I/AAAAAAAAAyg/XtQ3K3Busic/s400/image02.png" style="width:168px" /></a>
</div>


<p>Alternatively, if you want to use your egg timer, why not? It is a small detail but it really demonstrates the last and final element of Android Wear’s vision of <em>suggest and demand</em>. It is an ever ready assistant when the user wants it. At the same time, it is respectful and does not force the user to go down a route that the user does not want.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">It’s about the details</h3>

<p>Great design is about being user-centric and paying attention to details. Allthecooks could have just shrunk their mobile app for wear. Instead the Allthecooks team put a lot of thoughts into the design and leveraged all four points of the Android Wear creative vision. The end result is that the user can get the best experience out of both their Android mobile device and their Android Wear device. So developers, what will you be cooking next on Android Wear?</p>

<p>For more inspiring Android Wear user experiences, check out the <a href="https://play.google.com/store/apps/collection/promotion_3000cf4_android_wear_all">Android Wear collection on Google Play</a>!</p>


<div style="display: inline-block; float: right; line-height: 0;"><br />
<div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/JNZ9SJfcXsh" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<a href="https://plus.google.com/108967384991768947849/posts/JNZ9SJfcXsh" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a><br />
</div><br />
<div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/JNZ9SJfcXsh" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a><br />
</div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/allthecooks-on-android-wear/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Messaging on Android Wear</title>
		<link>https://googledata.org/google-android/messaging-on-android-wear/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=messaging-on-android-wear</link>
		<comments>https://googledata.org/google-android/messaging-on-android-wear/#comments</comments>
		<pubDate>Wed, 17 Sep 2014 17:29:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=8ddaac0d58d6ea5e58d6d289a384933d</guid>
		<description><![CDATA[<p><em>By Timothy Jordan, Developer Advocate</em></p>

<p>Sending messages on Android Wear feels as easy as it was to pass notes back in school.  Remember when your friends always felt nearby?  That feeling is why I love staying in touch with friends and family using my wearable.  </p>

<p>Your messaging app likely already works on Android Wear.  With just a few more lines of code you can unlock simple but powerful features that let your users communicate even more effortlessly.</p>

<h3>Message notifications for free</h3>

<p>If your Android app uses notifications to let the user know about new messages, these will work automatically on their wearable.  That is, when you build notifications with the <code>NotificationCompat.Builder</code> class, the system takes care of displaying them properly, whether they appear on a handheld or wearable.  Also, an "Open on phone" action will be added so it's easy for the user to reply via the app on their handheld.</p>

<div>
<img border="0" src="http://3.bp.blogspot.com/-RO8xIm3Hlew/VBjyIlstKoI/AAAAAAAADTI/Ia0vDtBhcKk/s600/g%2Bhangouts_wear.png"><p>Google+ Hangouts message.</p></div>


<h3>Reply like a champ</h3>

<p>Messages on Wear get really exciting when you can reply directly from the watch with your voice.  In addition to being super convenient, this always gives me a Dick Tracy thrill&#8230; but maybe that's just me. =]

</p><p>To add this functionality, it's as simple as adding an action to the notification via <code>WearableExtender</code> that includes a RemoteInput to your notification.  After the user replies, you'll just grab their voice input as a string from the RemoteInput included in the Intent.  You can even include text responses the user can easily select from a list by passing an array of them to the setChoices method of the RemoteInput.  More details and code can be found <a href="http://developer.android.com/training/wearables/notifications/voice-input.html">here</a>.</p>

<div>
<img border="0" src="http://1.bp.blogspot.com/-CsaqyludkAI/VBjyJYS7N4I/AAAAAAAADTQ/QiRJwSsZDOQ/s600/whatsapp_wear.png"><p>WhatsApp message with the reply by voice action.</p></div>


<h3>See who is texting</h3>

<p>Messages are more meaningful when you are connected to the sender.  That's why we recommend you include the photo of the sender as the background of the notification.  As soon as the user taps into the message, they also see who it's from, which will make it matter more (or maybe that other thing, depending on who it is).</p>

<p>You should add a photo with a resolution of at least 400x400, but we recommend 640x400.  With the larger size, the background will be given parallax scrolling.  If the background is to be included in the apk, place it in the res/drawable-nodpi directory.  Then call <code>setBackground()</code> on your <code>WearableExtender</code> and add it to your notification.  More details and code can be found <a href="http://developer.android.com/training/wearables/notifications/creating.html#AddWearableFeatures">here</a>.</p>

<div>
<img border="0" src="http://3.bp.blogspot.com/-Je6DtLGu3GI/VBjyIrSuhWI/AAAAAAAADTE/37S8IZRZc58/s600/pathtalk_wear.png"><p>Path Talk message with a clear picture of the sender.
</p></div>


<h3>Custom actions</h3>

<p>Basic notifications with reply by voice and a good background image are the most important parts to get done right away.  But why stop there?  It's easy to extend the unique parts of your service to the wearable.  A simple first step is adding in a custom action the way Omlet does.  These are just actions <a href="https://developer.android.com/training/wearables/notifications/creating.html#ActionButtons">defined</a> with the <code>WearableExtender</code> that raise an intent on the handheld.</p>

<div>
<img border="0" src="http://1.bp.blogspot.com/-0GM8gjmMFlA/VBjyIlfD9SI/AAAAAAAADTA/Y7RhrcheClw/s600/omlet_wear.png"><p>Omlet includes two extra actions with every message: Like and Check-In.  Check-In sends along the user's current location.</p></div>


<h3>Custom Layouts</h3>

<p>Custom interaction on the wearable, like the following example from TextMe, is straightforward to implement.  They have what appears to be a simple notification with an action that allows the user to select an emoticon.  However, to show this emoticon picker, they are actually issuing a notification from the wearable.  The round trip looks something like this:</p>

<ol><li>The handheld gets a new message, issues a notification <code>setLocalOnly(True)</code>, and sends a message to the wearable using the Data Layer API</li>
<li>The wearable receives that message using the <code>WearableListenerService</code> and issues a custom notification with a <code>PendingIntent</code> to launch an activity when the user views the notification</li>
<li>That activity has a custom layout defined with the Wearable UI Library</li>
<li>Once the user selects an emoticon, the wearable sends a message back to the handheld</li>
<li>The handheld receives that message and sends it along to the server</li>
</ol><p>Custom layouts are documented in more depth <a href="https://developer.android.com/training/wearables/apps/layouts.html">here</a>.</p>

<div>
<img border="0" src="http://4.bp.blogspot.com/-Z79k7BOgR3o/VBjyJIoiwoI/AAAAAAAADTM/P-hsbvzUXzM/s600/textme_wear.png"><p>TextMe allows users to reply with a quick emoticon.</p></div>


<h3>Next steps</h3>

<p>Make your messaging service awesome by providing rich functionality on the user's wearable.  It's easy to get started and easy to go further.  It all starts at <a href="http://developer.android.com/wear">developer.android.com/wear</a>.</p>


<div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/3RAWNYoZpVQ"><span>Join the discussion on</span></a><br /><a href="https://plus.google.com/108967384991768947849/posts/3RAWNYoZpVQ"><span>+Android Developers</span></a><br /></div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/3RAWNYoZpVQ"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a><br /></div></div>]]></description>
				<content:encoded><![CDATA[<p><em>By Timothy Jordan, Developer Advocate</em></p>

<p>Sending messages on Android Wear feels as easy as it was to pass notes back in school.  Remember when your friends always felt nearby?  That feeling is why I love staying in touch with friends and family using my wearable.  </p>

<p>Your messaging app likely already works on Android Wear.  With just a few more lines of code you can unlock simple but powerful features that let your users communicate even more effortlessly.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">Message notifications for free</h3>

<p>If your Android app uses notifications to let the user know about new messages, these will work automatically on their wearable.  That is, when you build notifications with the <code>NotificationCompat.Builder</code> class, the system takes care of displaying them properly, whether they appear on a handheld or wearable.  Also, an "Open on phone" action will be added so it's easy for the user to reply via the app on their handheld.</p>

<div style="padding-top:0em;margin-left:2em;">
<img style="" border="0" src="http://3.bp.blogspot.com/-RO8xIm3Hlew/VBjyIlstKoI/AAAAAAAADTI/Ia0vDtBhcKk/s600/g%2Bhangouts_wear.png" />
<p class="caption" style="margin-left:1em;margin-bottom:1.5em;margin-top:2px;font-size: 13px;color:#666;width:80%">Google+ Hangouts message.</p></div>


<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">Reply like a champ</h3>

<p>Messages on Wear get really exciting when you can reply directly from the watch with your voice.  In addition to being super convenient, this always gives me a Dick Tracy thrill… but maybe that's just me. =]

<p>To add this functionality, it's as simple as adding an action to the notification via <code>WearableExtender</code> that includes a RemoteInput to your notification.  After the user replies, you'll just grab their voice input as a string from the RemoteInput included in the Intent.  You can even include text responses the user can easily select from a list by passing an array of them to the setChoices method of the RemoteInput.  More details and code can be found <a href="http://developer.android.com/training/wearables/notifications/voice-input.html">here</a>.</p>

<div style="padding-top:0em;width:600px;margin-left:2em;">
<img border="0" src="http://1.bp.blogspot.com/-CsaqyludkAI/VBjyJYS7N4I/AAAAAAAADTQ/QiRJwSsZDOQ/s600/whatsapp_wear.png" />
<p class="caption" style="margin-left:1em;margin-bottom:1.5em;margin-top:2px;font-size: 13px;color:#666;">WhatsApp message with the reply by voice action.</p></div>


<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">See who is texting</h3>

<p>Messages are more meaningful when you are connected to the sender.  That's why we recommend you include the photo of the sender as the background of the notification.  As soon as the user taps into the message, they also see who it's from, which will make it matter more (or maybe that other thing, depending on who it is).</p>

<p>You should add a photo with a resolution of at least 400x400, but we recommend 640x400.  With the larger size, the background will be given parallax scrolling.  If the background is to be included in the apk, place it in the res/drawable-nodpi directory.  Then call <code>setBackground()</code> on your <code>WearableExtender</code> and add it to your notification.  More details and code can be found <a href="http://developer.android.com/training/wearables/notifications/creating.html#AddWearableFeatures">here</a>.</p>

<div style="padding-top:0em;width:600px;margin-left:2em;">
<img border="0" src="http://3.bp.blogspot.com/-Je6DtLGu3GI/VBjyIrSuhWI/AAAAAAAADTE/37S8IZRZc58/s600/pathtalk_wear.png" />
<p class="caption" style="margin-left:1em;margin-bottom:1.5em;margin-top:2px;font-size: 13px;color:#666;">Path Talk message with a clear picture of the sender.
</p></div>


<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">Custom actions</h3>

<p>Basic notifications with reply by voice and a good background image are the most important parts to get done right away.  But why stop there?  It's easy to extend the unique parts of your service to the wearable.  A simple first step is adding in a custom action the way Omlet does.  These are just actions <a href="https://developer.android.com/training/wearables/notifications/creating.html#ActionButtons">defined</a> with the <code>WearableExtender</code> that raise an intent on the handheld.</p>

<div style="padding-top:0em;width:600px;margin-left:2em;">
<img border="0" src="http://1.bp.blogspot.com/-0GM8gjmMFlA/VBjyIlfD9SI/AAAAAAAADTA/Y7RhrcheClw/s600/omlet_wear.png" />
<p class="caption" style="margin-left:1em;margin-bottom:1.5em;margin-top:2px;font-size: 13px;color:#666;">Omlet includes two extra actions with every message: Like and Check-In.  Check-In sends along the user's current location.</p></div>


<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">Custom Layouts</h3>

<p>Custom interaction on the wearable, like the following example from TextMe, is straightforward to implement.  They have what appears to be a simple notification with an action that allows the user to select an emoticon.  However, to show this emoticon picker, they are actually issuing a notification from the wearable.  The round trip looks something like this:</p>

<ol>
<li>The handheld gets a new message, issues a notification <code>setLocalOnly(True)</code>, and sends a message to the wearable using the Data Layer API</li>
<li>The wearable receives that message using the <code>WearableListenerService</code> and issues a custom notification with a <code>PendingIntent</code> to launch an activity when the user views the notification</li>
<li>That activity has a custom layout defined with the Wearable UI Library</li>
<li>Once the user selects an emoticon, the wearable sends a message back to the handheld</li>
<li>The handheld receives that message and sends it along to the server</li>
</ol>

<p>Custom layouts are documented in more depth <a href="https://developer.android.com/training/wearables/apps/layouts.html">here</a>.</p>

<div style="padding-top:0em;width:600px;margin-left:2em;">
<img border="0" src="http://4.bp.blogspot.com/-Z79k7BOgR3o/VBjyJIoiwoI/AAAAAAAADTM/P-hsbvzUXzM/s600/textme_wear.png" />
<p class="caption" style="margin-left:1em;margin-bottom:1.5em;margin-top:2px;font-size: 13px;color:#666;">TextMe allows users to reply with a quick emoticon.</p></div>


<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">Next steps</h3>

<p>Make your messaging service awesome by providing rich functionality on the user's wearable.  It's easy to get started and easy to go further.  It all starts at <a href="http://developer.android.com/wear">developer.android.com/wear</a>.</p>


<div style="display: inline-block; float: right; line-height: 0;"><br />
<div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/3RAWNYoZpVQ" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<a href="https://plus.google.com/108967384991768947849/posts/3RAWNYoZpVQ" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a><br />
</div><br />
<div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/3RAWNYoZpVQ" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a><br />
</div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/messaging-on-android-wear/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Google Play Services 6.1</title>
		<link>https://googledata.org/google-analytics/google-play-services-6-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=google-play-services-6-1</link>
		<comments>https://googledata.org/google-analytics/google-play-services-6-1/#comments</comments>
		<pubDate>Tue, 16 Sep 2014 21:34:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=d8381603585a74cba631aa444c33fc19</guid>
		<description><![CDATA[<div><img src="http://4.bp.blogspot.com/-w79yMws1sXY/Utgp1xuYEfI/AAAAAAAACx0/g8Cyd4gZfYc/s1600/gps.png" alt="gps" width="260"></div>

<p>Google Play services 6.1 is <strong>now rolled out to devices worldwide</strong>, bringing you the newest features from Google to help you optimize your apps. You can get started developing today by downloading the Google Play services SDK from the <strong>Android SDK Manager</strong>.</p>

<p><span>Google Play services 6.1 adds Enhanced Ecommerce analytics support from Google Tag Manager and offers new improvements to the Google Drive Android API. With the latest release, we&#8217;re also including a refresh of the Google Fit developer preview, so that you can test your fitness apps on any Android device. </span></p>

<h3>Analytics</h3>

<p>Launched in <a href="http://android-developers.blogspot.com/2014/07/google-play-services-5.html">Google Play services 5.0</a>, Enhanced Ecommerce is an analytics extension designed to provide richer insights into pre-purchase shopping behavior and into product performance.  It&#8217;s a great way to gain visibility into the full customer journey, helping you understand how different user acquisition campaigns are performing at a granular level. By including support for Enhanced Ecommerce in Google Tag Manager with the latest release of Google Play services, we are supercharging your ability to regularly update and manage tags on mobile apps more easily, so that you can consistently measure product impressions, shopping funnel events, and more.</p>

<h3>Drive</h3>

<p>To make it easier to use Drive, we added enhancements to the Google Drive Android API. With the new Completion Events feature, you can see when actions are committed to the server and improve the response time to conflicts. Material design elements have been incorporated into the File Picker UI, along with the addition of Recent and Starred views. A new setParents() method enables you to organize files and folders, while the previous Contents class has been replaced with a simpler DriveContents class.</p>

<p>Learn more about how to use these new features in <a href="https://www.youtube.com/watch?v=BUP34M8NHr0">this DevBytes video</a>.</p>

<h3>Google Fit</h3>

<p>Initially <a href="http://googledevelopers.blogspot.com/2014/08/google-fit-preview-sdk-now-available.html">introduced in August</a>, the Google Fit Developer Preview has been refreshed to enable you to test your new fitness apps on any Android device. We expect to make additional changes to the APIs, so please check back with us on new developments.</p>

<h3>Get Started</h3>

<p>To get started developing, download the latest Google Play services SDK from the <strong>Android SDK Manager</strong>. For details on the new APIs, take a look at the <a href="http://developer.android.com/google/play-services/index.html#newfeatures">New Features</a> documentation. For setup information, see <a href="http://developer.android.com/google/play-services/setup.html">Set Up Google Play Services SDK</a>.</p>

<p>To learn more about Google Play services and the APIs available to you through it, visit the <a href="http://developer.android.com/google/index.html">Google Services section on the Android Developers site</a>.</p>

<p>We hope you enjoy this release of Google Play services!</p><br /><!--[Interactive video]  -->  <br /><div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/2MaMXFhVB5E"><span>Join the discussion on</span></a><br /><a href="https://plus.google.com/108967384991768947849/posts/2MaMXFhVB5E"><span>+Android Developers</span></a><br /></div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/2MaMXFhVB5E"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a><br /></div></div>]]></description>
				<content:encoded><![CDATA[<div style="float:right;padding-right:0"><img itemprop="image" src="http://4.bp.blogspot.com/-w79yMws1sXY/Utgp1xuYEfI/AAAAAAAACx0/g8Cyd4gZfYc/s1600/gps.png" alt="gps" width="260" style="margin-bottom:0;margin-right:1em;padding:0 1.5em 1.75em 1.5em;"></div>

<p>Google Play services 6.1 is <strong>now rolled out to devices worldwide</strong>, bringing you the newest features from Google to help you optimize your apps. You can get started developing today by downloading the Google Play services SDK from the <strong>Android SDK Manager</strong>.</p>

<p><span itemprop="description">Google Play services 6.1 adds Enhanced Ecommerce analytics support from Google Tag Manager and offers new improvements to the Google Drive Android API. With the latest release, we’re also including a refresh of the Google Fit developer preview, so that you can test your fitness apps on any Android device. </span></p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">Analytics</h3>

<p>Launched in <a href="http://android-developers.blogspot.com/2014/07/google-play-services-5.html">Google Play services 5.0</a>, Enhanced Ecommerce is an analytics extension designed to provide richer insights into pre-purchase shopping behavior and into product performance.  It’s a great way to gain visibility into the full customer journey, helping you understand how different user acquisition campaigns are performing at a granular level. By including support for Enhanced Ecommerce in Google Tag Manager with the latest release of Google Play services, we are supercharging your ability to regularly update and manage tags on mobile apps more easily, so that you can consistently measure product impressions, shopping funnel events, and more.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">Drive</h3>

<p>To make it easier to use Drive, we added enhancements to the Google Drive Android API. With the new Completion Events feature, you can see when actions are committed to the server and improve the response time to conflicts. Material design elements have been incorporated into the File Picker UI, along with the addition of Recent and Starred views. A new setParents() method enables you to organize files and folders, while the previous Contents class has been replaced with a simpler DriveContents class.</p>

<p>Learn more about how to use these new features in <a href="https://www.youtube.com/watch?v=BUP34M8NHr0">this DevBytes video</a>.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">Google Fit</h3>

<p>Initially <a href="http://googledevelopers.blogspot.com/2014/08/google-fit-preview-sdk-now-available.html">introduced in August</a>, the Google Fit Developer Preview has been refreshed to enable you to test your new fitness apps on any Android device. We expect to make additional changes to the APIs, so please check back with us on new developments.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">Get Started</h3>

<p>To get started developing, download the latest Google Play services SDK from the <strong>Android SDK Manager</strong>. For details on the new APIs, take a look at the <a href="http://developer.android.com/google/play-services/index.html#newfeatures">New Features</a> documentation. For setup information, see <a href="http://developer.android.com/google/play-services/setup.html">Set Up Google Play Services SDK</a>.</p>

<p>To learn more about Google Play services and the APIs available to you through it, visit the <a href="http://developer.android.com/google/index.html">Google Services section on the Android Developers site</a>.</p>

<p>We hope you enjoy this release of Google Play services!</p><br />

<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/7E-sqJkrlJ0" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:2em; margin-left: 70px;" width="560"></iframe>  <br />



<div style="display: inline-block; float: right; line-height: 0;"><br />
<div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/2MaMXFhVB5E" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<a href="https://plus.google.com/108967384991768947849/posts/2MaMXFhVB5E" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a><br />
</div><br />
<div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/2MaMXFhVB5E" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a><br />
</div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-analytics/google-play-services-6-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android One: Bringing Your Apps to the Next Five Billion</title>
		<link>https://googledata.org/google-android/android-one-bringing-your-apps-to-the-next-five-billion/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=android-one-bringing-your-apps-to-the-next-five-billion</link>
		<comments>https://googledata.org/google-android/android-one-bringing-your-apps-to-the-next-five-billion/#comments</comments>
		<pubDate>Tue, 16 Sep 2014 17:35:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=34699a1cd4eca2e306de5e0b5fef2610</guid>
		<description><![CDATA[<em>Posted by <a href="https://plus.google.com/+RichHyndman/posts">Rich Hyndman</a>, Developer Advocate</em>

<div>
<a href="http://officialandroid.blogspot.co.uk/2014/09/for-next-five-billion-android-one.html"><img border="0" src="http://2.bp.blogspot.com/-I_0jnXod1Zg/VBhhpFg3PwI/AAAAAAAAAxU/yWyscV7P3cI/s320/image01.png"></a></div>

<p>With the launch of <a href="http://officialandroid.blogspot.co.uk/2014/09/for-next-five-billion-android-one.html">Android One</a>, more people across the world will have access to high-quality and affordable smartphones, packed with plenty of processing power and running the latest version of Android. These devices are available now in India and soon in Indonesia, the Philippines, and South Asia, so now is a good time to make sure your apps are ready for these new markets. This post highlights a few areas to consider. </p>

<p>These days, we often talk about smooth, 60fps transitions and keeping apps jank-free, and rightly so &#8212; performance is a critical metric for app quality. But in the user experience hierarchy of needs, an app should first and foremost do its job reliably and consistently. </p>

<p>If your app has search functionality, will user requests time out entirely? Do you think it is more important that a result is returned in a timely manner, or that the result is returned at all? If you're trying to build a robust app to reach the next five billion, it might be less about returning a result immediately, and more about returning a result at all. To address this challenge, why not include an option to users to &#8220;notify me with the results&#8221; when a search query is running on a slow network? Your app can then take as long as it needs to successfully retrieve the data in the background and show a notification when complete. The difference in user experience between an app that times out on a slower network and one that caters to user-specific needs will be very impactful for driving mobile app adoption.</p>

<p>There are also ways to test app performance without flying around the globe. The Android Emulator has <a href="http://developer.android.com/tools/devices/emulator.html#netdelay">network speed and network delay emulation</a> settings, which can become an integral part of your testing strategy. If you&#8217;re testing on physical hardware, try turning off WiFi and switching the network to 2G only; how well does your app perform? Do search pages load? Does data refresh? These issues can often be fixed with relatively minor changes to your app logic or by leveraging a <a href="http://developer.android.com/training/sync-adapters/creating-sync-adapter.html">SyncAdapter</a>. Check out our blog post on <a href="http://android-developers.blogspot.com/2014/09/conference-data-sync-gcm-google-io.html">sync in the Google I/O app</a> for more ideas.</p>

<figure><a href="http://3.bp.blogspot.com/-NrLfzpPEO1U/VBhhpHUxARI/AAAAAAAAAxQ/lCHch3c9PQI/s1600/image00.png"><img border="0" src="http://3.bp.blogspot.com/-NrLfzpPEO1U/VBhhpHUxARI/AAAAAAAAAxQ/lCHch3c9PQI/s320/image00.png"></a>
</figure><p>Another key area for you to be aware of is app memory utilization. As part of the KitKat launch, we added new tools to the SDK for <a href="https://developer.android.com/about/versions/kitkat.html#44-tools">analyzing memory use</a> and new APIs like <a href="http://developer.android.com/reference/android/app/ActivityManager.html#isLowRamDevice()">isLowRamDevice()</a>. We also just added a <a href="http://tools.android.com/recent/androidstudio0810released">Memory Monitor</a> to Android Studio 0.8.10 (currently in Canary). Much of this is documented in our <a href="http://developer.android.com/training/best-performance.html">Best Practices for Performance</a> guide.</p>

<p>Moving forward, the Android L release has a strong focus on battery usage and analysis. <a href="https://www.youtube.com/watch?v=KzSKIpJepUw">Project Volta</a> introduces new tools, such as <a href="http://developer.android.com/preview/api-overview.html#PowerMeasurementTools">Battery Historian</a> and new APIs like <a href="http://developer.android.com/preview/api-overview.html#JobScheduler">JobScheduler</a>, that can really help optimize battery use of your app.</p>

<p>By ensuring your app works well on slower networks, uses minimal memory, minimizes battery usage and doesn&#8217;t have a larger-than-necessary APK, you will help the next five billion discover, use and love your app.</p>]]></description>
				<content:encoded><![CDATA[<em>Posted by <a href="https://plus.google.com/+RichHyndman/posts">Rich Hyndman</a>, Developer Advocate</em>

<div style="float:right">
<a href="http://officialandroid.blogspot.co.uk/2014/09/for-next-five-billion-android-one.html" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-I_0jnXod1Zg/VBhhpFg3PwI/AAAAAAAAAxU/yWyscV7P3cI/s320/image01.png" /></a></div>

<p>With the launch of <a href="http://officialandroid.blogspot.co.uk/2014/09/for-next-five-billion-android-one.html">Android One</a>, more people across the world will have access to high-quality and affordable smartphones, packed with plenty of processing power and running the latest version of Android. These devices are available now in India and soon in Indonesia, the Philippines, and South Asia, so now is a good time to make sure your apps are ready for these new markets. This post highlights a few areas to consider. </p>

<p>These days, we often talk about smooth, 60fps transitions and keeping apps jank-free, and rightly so &mdash; performance is a critical metric for app quality. But in the user experience hierarchy of needs, an app should first and foremost do its job reliably and consistently. </p>

<p>If your app has search functionality, will user requests time out entirely? Do you think it is more important that a result is returned in a timely manner, or that the result is returned at all? If you're trying to build a robust app to reach the next five billion, it might be less about returning a result immediately, and more about returning a result at all. To address this challenge, why not include an option to users to “notify me with the results” when a search query is running on a slow network? Your app can then take as long as it needs to successfully retrieve the data in the background and show a notification when complete. The difference in user experience between an app that times out on a slower network and one that caters to user-specific needs will be very impactful for driving mobile app adoption.</p>

<p>There are also ways to test app performance without flying around the globe. The Android Emulator has <a href="http://developer.android.com/tools/devices/emulator.html#netdelay">network speed and network delay emulation</a> settings, which can become an integral part of your testing strategy. If you’re testing on physical hardware, try turning off WiFi and switching the network to 2G only; how well does your app perform? Do search pages load? Does data refresh? These issues can often be fixed with relatively minor changes to your app logic or by leveraging a <a href="http://developer.android.com/training/sync-adapters/creating-sync-adapter.html">SyncAdapter</a>. Check out our blog post on <a href="http://android-developers.blogspot.com/2014/09/conference-data-sync-gcm-google-io.html">sync in the Google I/O app</a> for more ideas.</p>

<figure style="float: right">
<a href="http://3.bp.blogspot.com/-NrLfzpPEO1U/VBhhpHUxARI/AAAAAAAAAxQ/lCHch3c9PQI/s1600/image00.png" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-NrLfzpPEO1U/VBhhpHUxARI/AAAAAAAAAxQ/lCHch3c9PQI/s320/image00.png" /></a>
</figure>

<p>Another key area for you to be aware of is app memory utilization. As part of the KitKat launch, we added new tools to the SDK for <a href="https://developer.android.com/about/versions/kitkat.html#44-tools">analyzing memory use</a> and new APIs like <a href="http://developer.android.com/reference/android/app/ActivityManager.html#isLowRamDevice()">isLowRamDevice()</a>. We also just added a <a href="http://tools.android.com/recent/androidstudio0810released">Memory Monitor</a> to Android Studio 0.8.10 (currently in Canary). Much of this is documented in our <a href="http://developer.android.com/training/best-performance.html">Best Practices for Performance</a> guide.</p>

<p>Moving forward, the Android L release has a strong focus on battery usage and analysis. <a href="https://www.youtube.com/watch?v=KzSKIpJepUw">Project Volta</a> introduces new tools, such as <a href="http://developer.android.com/preview/api-overview.html#PowerMeasurementTools">Battery Historian</a> and new APIs like <a href="http://developer.android.com/preview/api-overview.html#JobScheduler">JobScheduler</a>, that can really help optimize battery use of your app.</p>

<p>By ensuring your app works well on slower networks, uses minimal memory, minimizes battery usage and doesn’t have a larger-than-necessary APK, you will help the next five billion discover, use and love your app.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-one-bringing-your-apps-to-the-next-five-billion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Conference Data Sync and GCM in the Google I/O App</title>
		<link>https://googledata.org/google-android/conference-data-sync-and-gcm-in-the-google-io-app/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=conference-data-sync-and-gcm-in-the-google-io-app</link>
		<comments>https://googledata.org/google-android/conference-data-sync-and-gcm-in-the-google-io-app/#comments</comments>
		<pubDate>Wed, 10 Sep 2014 14:57:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=452c88493b0603dc830eda9be42ff323</guid>
		<description><![CDATA[<em>By <a href="https://plus.google.com/+BrunoOliveira/posts">Bruno Oliveira</a>, tech lead of the 2014 Google I/O mobile app</em>

<p>Keeping data in sync with the cloud is an important part of many applications, and the Google I/O App is no exception. To do this, we leverage the standard Android mechanism for this purpose: a <a href="http://developer.android.com/training/sync-adapters/creating-sync-adapter.html">Sync Adapter</a>. Using a Sync Adapter has many benefits over using a more rudimentary mechanism such as setting up recurring alarms, because the system automatically handles the scheduling of Sync Adapters to optimize battery life.</p>

<p>We store the data in a local SQLite database. However, rather than having the whole application access that database directly, the application employs another standard Android mechanism to control and organize access to that data. This structure is, naturally, a <a href="http://developer.android.com/reference/android/content/ContentProvider.html">Content Provider</a>. Only the content provider's implementation has direct access to the SQLite database. All other parts of the app can only access data through the Content Resolver. This allows for a very flexible decoupling between the representation of the data in the database and the more abstract view of that data that is used throughout the app.</p>

<p>The I/O app maintains with two main kinds of data: conference data (sessions, speakers, rooms, etc) and user data (the user's personalized schedule). Conference data is kept up to date with a one-way sync from a set of JSON files stored in <a href="https://cloud.google.com/products/cloud-storage/">Google Cloud Storage</a>, whereas user data goes through a two-way sync with a file stored in the user's <a href="https://developers.google.com/drive/web/appdata">Google Drive AppData folder</a>.</p>

<p>
<a href="http://4.bp.blogspot.com/-OIQUs4H9mCU/VBBirNX5T1I/AAAAAAAAAw4/svY-MwcLlMA/s1600/image00.png"><img border="0" src="http://4.bp.blogspot.com/-OIQUs4H9mCU/VBBirNX5T1I/AAAAAAAAAw4/svY-MwcLlMA/s640/image00.png"></a>
</p>

<h3>Downloading Conference Data Efficiently</h3>

<p>For a conference like Google I/O, conference data can be somewhat large. It consists of information about all the sessions, rooms, speakers, map locations, social hashtags, video library items and others. Downloading the whole data set repeatedly would be wasteful both in terms of battery and bandwidth, so we adopt a strategy to minimize the amount of data we download and process.</p>

<p>This strategy is separating the data into several different JSON files, and having them be referenced by a central master JSON file called the <em>manifest file</em>. The URL of the manifest file is the only URL that is hard-coded into the app (it is defined by the <code>MANIFEST_URL</code> constant in <code>Config.java</code>). Note that the I/O app uses <a href="https://cloud.google.com/products/cloud-storage/">Google Cloud Storage</a> to store and serve these files, but any robust hosting service accessible via HTTP can be used for the same purpose.</p>

<p>The first part of the sync process is checking if the manifest file was changed since the app last downloaded it, and processing it only if it's newer. This logic is implemented by the <code>fetchConfenceDataIfNewer</code> method in <code>RemoteConferenceDataFetcher</code>.</p>

<pre>
public class RemoteConferenceDataFetcher {
    // (...)
    public String[] fetchConferenceDataIfNewer(String refTimestamp) throws IOException {
        BasicHttpClient httpClient = new BasicHttpClient();
        httpClient.setRequestLogger(mQuietLogger);
        // (...)

        // Only download if data is newer than refTimestamp
        if (!TextUtils.isEmpty(refTimestamp) &#38;&#38; TimeUtils
            .isValidFormatForIfModifiedSinceHeader(refTimestamp)) {
                httpClient.addHeader("If-Modified-Since", refTimestamp);
            }
        }

        HttpResponse response = httpClient.get(mManifestUrl, null);
        int status = response.getStatus();
        if (status == HttpURLConnection.HTTP_OK) {
            // Data modified since we last checked -- process it!
        } else if (status == HttpURLConnection.HTTP_NOT_MODIFIED) {
            // data on the server is not newer than our data - no work to do!
            return null;
        } else {
            // (handle error)
        }
    }
    // (...)
}
</pre>

<p>Notice that we submit the HTTP <code>If-Modified-Since</code> header with our request, so that if the manifest hasn't changed since we last checked it, we will get an HTTP response code of HTTP_NOT_MODIFIED rather than HTTP_OK, we will react by skipping the download and parsing process. This means that unless the manifest has changed since we last saw it, the sync process is very economical: it consists only of a single HTTP request and a short response.</p>

<p>The manifest file's format is straightforward: it consists of references to other JSON files that contain the relevant pieces of the conference data:</p>

<pre>
{
  "format": "iosched-json-v1",
  "data_files": [
    "past_io_videolibrary_v5.json",
    "experts_v11.json",
    "hashtags_v8.json",
    "blocks_v10.json",
    "map_v11.json",
    "keynote_v10.json",
    "partners_v2.json",
    "session_data_v2.681.json"
  ]
}
</pre>

<p>The sync process then proceeds to process each of the listed data files in order. This part is also implemented to be as economical as possible: if we detect that we already have a cached version of a specific data file, we skip it entirely and use our local cache instead. This task is done by the <code>processManifest</code> method.</p>

<p>Then, each JSON file is parsed and the entities present in each one are accumulated in memory. At the end of this process, the data is written to the Content Provider.</p>

<h3>Issuing Content Provider Operations Efficiently</h3>

<p>The conference data sync needs to be efficient not only in the amount of data it downloads, but also in the amount of operations it performs on the database. This must be done as economically as possible, so this step is also optimized: instead of overwriting the whole database with the new data, the Sync Adapter attempts to preserve the existing entities and only update the ones that have changed. In our tests, this optimization step reduced the total sync time from 16 seconds to around 2 seconds on our test devices.</p>

<p>In order to accomplish this important third layer of optimization, the application needs to know, given an entity in memory and its version in the Content Provider, whether or not we need to issue content provider operations to update that entity. Comparing the entity in memory to the entity in the database field by field is one option, but is cumbersome and slow, since it would require us to read every field. Instead, we add a field to each entity called the import hashcode. The import hashcode is a weak hash value generated from its data. For example, here is how the import hashcode for a speaker is computed:</p>

<pre>
public class Speaker {
    public String id;
    public String publicPlusId;
    public String bio;
    public String name;
    public String company;
    public String plusoneUrl;
    public String thumbnailUrl;

    public String getImportHashcode() {
        StringBuilder sb = new StringBuilder();
        sb.append("id").append(id == null ? "" : id)
                .append("publicPlusId")
                .append(publicPlusId == null ? "" : publicPlusId)
                .append("bio")
                .append(bio == null ? "" : bio)
                .append("name")
                .append(name == null ? "" : name)
                .append("company")
                .append(company== null ? "" : company)
                .append("plusoneUrl")
                .append(plusoneUrl == null ? "" : plusoneUrl)
                .append("thumbnailUrl")
                .append(thumbnailUrl == null ? "" : thumbnailUrl);
        String result = sb.toString();
        return String.format(Locale.US, "%08x%08x", 
            result.hashCode(), result.length());
    }
}
</pre>

<p>Every time an entity is updated in the database, its import hashcode is saved with it as a database column. Later, when we have a candidate for an updated version of that entity, all we need to do is compute the import hashcode of the candidate and compare it to the import hashcode of the entity in the database. If they differ, then we issue Content Provider operations to update the entity in the database. If they are the same, we skip that entity. This incremental update logic can be seen, for example, in the <code>makeContentProviderOperations</code> method of the <code>SpeakersHandler</code> class:</p>

<pre>
public class SpeakersHandler extends JSONHandler {
    private HashMap mSpeakers = new HashMap();

    // (...)
    @Override
    public void makeContentProviderOperations(ArrayList list) {
        // (...)
        int updatedSpeakers = 0;
        for (Speaker speaker : mSpeakers.values()) {
            String hashCode = speaker.getImportHashcode();
            speakersToKeep.add(speaker.id);

            if (!isIncrementalUpdate &#124;&#124; !speakerHashcodes.containsKey(speaker.id) &#124;&#124;
                    !speakerHashcodes.get(speaker.id).equals(hashCode)) {
                // speaker is new/updated, so issue content provider operations
                ++updatedSpeakers;
                boolean isNew = !isIncrementalUpdate &#124;&#124; 
                    !speakerHashcodes.containsKey(speaker.id);
                buildSpeaker(isNew, speaker, list);
            }
        }

        // delete obsolete speakers
        int deletedSpeakers = 0;
        if (isIncrementalUpdate) {
            for (String speakerId : speakerHashcodes.keySet()) {
                if (!speakersToKeep.contains(speakerId)) {
                    buildDeleteOperation(speakerId, list);
                    ++deletedSpeakers;
                }
            }
        }
    }
}
</pre>

<p>The <code>buildSpeaker</code> and <code>buildDeleteOperation</code> methods (omitted here for brevity) simply build the Content Provider operations necessary to, respectively, insert/update a speaker or delete a speaker from the Content Provider. Notice that this approach means we only issue Content Provider operations to update a speaker if the import hashcode has changed. We also deal with obsolete speakers, that is, speakers that were in the database but were not referenced by the incoming data, and we issue delete operations for those speakers.</p>

<h3>Making Sync Robust</h3>

<p>The sync adapter in the I/O app is responsible for several tasks, amongst which are the remote conference data sync, the user schedule sync and also the user feedback sync. Failures can happen in any of them because of network conditions and other factors. However, a failure in one of the tasks should not impact the execution of the other tasks. This is why we structure the sync process as a series of independent tasks, each protected by a try/catch block, as can be seen in the <code>performSync</code> method of the <code>SyncHelper</code> class:</p>

<pre>
// remote sync consists of these operations, which we try one by one (and
// tolerate individual failures on each)
final int OP_REMOTE_SYNC = 0;
final int OP_USER_SCHEDULE_SYNC = 1;
final int OP_USER_FEEDBACK_SYNC = 2;

int[] opsToPerform = userDataOnly ?
        new int[] { OP_USER_SCHEDULE_SYNC } :
        new int[] { OP_REMOTE_SYNC, OP_USER_SCHEDULE_SYNC, OP_USER_FEEDBACK_SYNC};

for (int op : opsToPerform) {
    try {
        switch (op) {
            case OP_REMOTE_SYNC:
                dataChanged &#124;= doRemoteSync();
                break;
            case OP_USER_SCHEDULE_SYNC:
                dataChanged &#124;= doUserScheduleSync(account.name);
                break;
            case OP_USER_FEEDBACK_SYNC:
                doUserFeedbackSync();
                break;
        }
    } catch (AuthException ex) {
        // (... handle auth error...)
    } catch (Throwable throwable) {
        // (... handle other error...)

        // Let system know an exception happened:
        if (syncResult != null &#38;&#38; syncResult.stats != null) {
            ++syncResult.stats.numIoExceptions;
        }
    }
}
</pre>

<p>When one particular part of the sync process fails, we let the system know about it by increasing <code>syncResult.stats.numIoExceptions</code>. This will cause the system to retry the sync at a later time, using exponential backoff.
</p>

<h3>When Should We Sync? Enter GCM.</h3>

<p>It's very important for users to be able to get updates about conference data in a timely manner, especially during (and in the few days leading up to) Google I/O. A na&#239;ve way to solve this problem is simply making the app poll the server repeatedly for updates. Naturally, this causes problems with bandwidth and battery consumption.</p>

<p>To solve this problem in a more elegant way, we use GCM (Google Cloud Messaging). Whenever there is an update to the data on the server side, the server sends a GCM message to all registered devices. Upon receipt of this GCM message, the device performs a sync to download the new conference data. The <code>GCMIntentService</code> class handles the incoming GCM messages:</p>

<p><em>Update (23 September 2014): Since this blog post was first published, the <code>GCMBaseIntentService</code> class has been deprecated. Please use the <a href="http://developer.android.com/reference/com/google/android/gms/gcm/GoogleCloudMessaging.html"><code>GoogleCloudMessaging</code></a> API instead.
 </em></p>

<pre>
public class GCMIntentService extends GCMBaseIntentService {
    private static final String TAG = makeLogTag("GCM");

    private static final Map MESSAGE_RECEIVERS;
    static {
        // Known messages and their GCM message receivers
        Map  receivers = new HashMap();
        receivers.put("test", new TestCommand());
        receivers.put("announcement", new AnnouncementCommand());
        receivers.put("sync_schedule", new SyncCommand());
        receivers.put("sync_user", new SyncUserCommand());
        receivers.put("notification", new NotificationCommand());
        MESSAGE_RECEIVERS = Collections.unmodifiableMap(receivers);
    }

    // (...)

    @Override
    protected void onMessage(Context context, Intent intent) {
        String action = intent.getStringExtra("action");
        String extraData = intent.getStringExtra("extraData");
        LOGD(TAG, "Got GCM message, action=" + action + ", extraData=" + extraData);

        if (action == null) {
            LOGE(TAG, "Message received without command action");
            return;
        }

        action = action.toLowerCase();
        GCMCommand command = MESSAGE_RECEIVERS.get(action);
        if (command == null) {
            LOGE(TAG, "Unknown command received: " + action);
        } else {
            command.execute(this, action, extraData);
        }

    }
    // (...)
}
</pre>

<p>Notice that the <code>onMessage</code> method delivers the message to the appropriate handler depending on the GCM message's "action" field. If the action field is "sync_schedule", the application delivers the message to an instance of the <code>SyncCommand</code> class, which causes a sync to happen. Incidentally, notice that the implementation of the SyncCommand class allows the GCM message to specify a jitter parameter, which causes it to trigger a sync not immediately but at a random time in the future within the jitter interval. This spreads out the syncs evenly over a period of time rather than forcing all clients to sync simultaneously, and thus prevents a sudden peak in requests on the server side.</p>

<h3>Syncing User Data</h3>

<p>
<a href="http://1.bp.blogspot.com/-qezD6oh4Cjw/VBBjiYgKmEI/AAAAAAAAAxA/7h4HWQEsTr0/s1600/image01.png"><img border="0" src="http://1.bp.blogspot.com/-qezD6oh4Cjw/VBBjiYgKmEI/AAAAAAAAAxA/7h4HWQEsTr0/s320/image01.png"></a>
</p>

<p>The I/O app allows the user to build their own personalized schedule by choosing which sessions they are interested in attending. This data must be shared across the user's Android devices, and also between the I/O website and Android. This means this data has to be stored in the cloud, in the user's Google account. We chose to use the <a href="https://developers.google.com/drive/web/appdata">Google Drive AppData folder</a> for this task.</p>

<p>User data is synced to Google Drive by the <code>doUserScheduleSync</code> method of the <code>SyncHelper</code> class. If you dive into the source code, you will notice that this method essentially accesses the Google Drive AppData folder through the Google Drive HTTP API, then reconciles the set of sessions in the data with the set of sessions starred by the user on the device, and issues the necessary modifications to the cloud if there are locally updated sessions.</p>

<p>This means that if the user selects one session on their Android device and then selects another session on the I/O website, the result should be that both the Android device and the I/O website will show that both sessions are in the user's schedule.</p>

<p>Also, whenever the user adds or removes a session on the I/O website, the data on all their Android devices should be updated, and vice versa. To accomplish that, the I/O website sends our GCM server a notification every time the user makes a change to their schedule; the GCM server, in turn, sends a GCM message to all the devices owned by that user in order to cause them to sync their user data. The same mechanism works across the user's devices as well: when one device updates the data, it issues a GCM message to all other devices.</p>

<h3>Conclusion</h3>

<p>Serving fresh data is a key component of many Android apps. This article showed how the I/O app deals with the challenges of keeping the data up-to-date while minimizing network traffic and database changes, and also keeping this data in sync across different platforms and devices through the use of Google Cloud Storage, Google Drive and Google Cloud Messaging.</p>]]></description>
				<content:encoded><![CDATA[<em>By <a href="https://plus.google.com/+BrunoOliveira/posts">Bruno Oliveira</a>, tech lead of the 2014 Google I/O mobile app</em>

<p>Keeping data in sync with the cloud is an important part of many applications, and the Google I/O App is no exception. To do this, we leverage the standard Android mechanism for this purpose: a <a href="http://developer.android.com/training/sync-adapters/creating-sync-adapter.html">Sync Adapter</a>. Using a Sync Adapter has many benefits over using a more rudimentary mechanism such as setting up recurring alarms, because the system automatically handles the scheduling of Sync Adapters to optimize battery life.</p>

<p>We store the data in a local SQLite database. However, rather than having the whole application access that database directly, the application employs another standard Android mechanism to control and organize access to that data. This structure is, naturally, a <a href="http://developer.android.com/reference/android/content/ContentProvider.html">Content Provider</a>. Only the content provider's implementation has direct access to the SQLite database. All other parts of the app can only access data through the Content Resolver. This allows for a very flexible decoupling between the representation of the data in the database and the more abstract view of that data that is used throughout the app.</p>

<p>The I/O app maintains with two main kinds of data: conference data (sessions, speakers, rooms, etc) and user data (the user's personalized schedule). Conference data is kept up to date with a one-way sync from a set of JSON files stored in <a href="https://cloud.google.com/products/cloud-storage/">Google Cloud Storage</a>, whereas user data goes through a two-way sync with a file stored in the user's <a href="https://developers.google.com/drive/web/appdata">Google Drive AppData folder</a>.</p>

<p style="margin-bottom:20px; text-align:center">
<a href="http://4.bp.blogspot.com/-OIQUs4H9mCU/VBBirNX5T1I/AAAAAAAAAw4/svY-MwcLlMA/s1600/image00.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-OIQUs4H9mCU/VBBirNX5T1I/AAAAAAAAAw4/svY-MwcLlMA/s640/image00.png" /></a>
</p>

<h3>Downloading Conference Data Efficiently</h3>

<p>For a conference like Google I/O, conference data can be somewhat large. It consists of information about all the sessions, rooms, speakers, map locations, social hashtags, video library items and others. Downloading the whole data set repeatedly would be wasteful both in terms of battery and bandwidth, so we adopt a strategy to minimize the amount of data we download and process.</p>

<p>This strategy is separating the data into several different JSON files, and having them be referenced by a central master JSON file called the <em>manifest file</em>. The URL of the manifest file is the only URL that is hard-coded into the app (it is defined by the <code>MANIFEST_URL</code> constant in <code>Config.java</code>). Note that the I/O app uses <a href="https://cloud.google.com/products/cloud-storage/">Google Cloud Storage</a> to store and serve these files, but any robust hosting service accessible via HTTP can be used for the same purpose.</p>

<p>The first part of the sync process is checking if the manifest file was changed since the app last downloaded it, and processing it only if it's newer. This logic is implemented by the <code>fetchConfenceDataIfNewer</code> method in <code>RemoteConferenceDataFetcher</code>.</p>

<pre class="prettyprint">
public class RemoteConferenceDataFetcher {
    // (...)
    public String[] fetchConferenceDataIfNewer(String refTimestamp) throws IOException {
        BasicHttpClient httpClient = new BasicHttpClient();
        httpClient.setRequestLogger(mQuietLogger);
        // (...)

        // Only download if data is newer than refTimestamp
        if (!TextUtils.isEmpty(refTimestamp) && TimeUtils
            .isValidFormatForIfModifiedSinceHeader(refTimestamp)) {
                httpClient.addHeader("If-Modified-Since", refTimestamp);
            }
        }

        HttpResponse response = httpClient.get(mManifestUrl, null);
        int status = response.getStatus();
        if (status == HttpURLConnection.HTTP_OK) {
            // Data modified since we last checked -- process it!
        } else if (status == HttpURLConnection.HTTP_NOT_MODIFIED) {
            // data on the server is not newer than our data - no work to do!
            return null;
        } else {
            // (handle error)
        }
    }
    // (...)
}
</pre>

<p>Notice that we submit the HTTP <code>If-Modified-Since</code> header with our request, so that if the manifest hasn't changed since we last checked it, we will get an HTTP response code of HTTP_NOT_MODIFIED rather than HTTP_OK, we will react by skipping the download and parsing process. This means that unless the manifest has changed since we last saw it, the sync process is very economical: it consists only of a single HTTP request and a short response.</p>

<p>The manifest file's format is straightforward: it consists of references to other JSON files that contain the relevant pieces of the conference data:</p>

<pre class="prettyprint">
{
  "format": "iosched-json-v1",
  "data_files": [
    "past_io_videolibrary_v5.json",
    "experts_v11.json",
    "hashtags_v8.json",
    "blocks_v10.json",
    "map_v11.json",
    "keynote_v10.json",
    "partners_v2.json",
    "session_data_v2.681.json"
  ]
}
</pre>

<p>The sync process then proceeds to process each of the listed data files in order. This part is also implemented to be as economical as possible: if we detect that we already have a cached version of a specific data file, we skip it entirely and use our local cache instead. This task is done by the <code>processManifest</code> method.</p>

<p>Then, each JSON file is parsed and the entities present in each one are accumulated in memory. At the end of this process, the data is written to the Content Provider.</p>

<h3>Issuing Content Provider Operations Efficiently</h3>

<p>The conference data sync needs to be efficient not only in the amount of data it downloads, but also in the amount of operations it performs on the database. This must be done as economically as possible, so this step is also optimized: instead of overwriting the whole database with the new data, the Sync Adapter attempts to preserve the existing entities and only update the ones that have changed. In our tests, this optimization step reduced the total sync time from 16 seconds to around 2 seconds on our test devices.</p>

<p>In order to accomplish this important third layer of optimization, the application needs to know, given an entity in memory and its version in the Content Provider, whether or not we need to issue content provider operations to update that entity. Comparing the entity in memory to the entity in the database field by field is one option, but is cumbersome and slow, since it would require us to read every field. Instead, we add a field to each entity called the import hashcode. The import hashcode is a weak hash value generated from its data. For example, here is how the import hashcode for a speaker is computed:</p>

<pre class="prettyprint">
public class Speaker {
    public String id;
    public String publicPlusId;
    public String bio;
    public String name;
    public String company;
    public String plusoneUrl;
    public String thumbnailUrl;

    public String getImportHashcode() {
        StringBuilder sb = new StringBuilder();
        sb.append("id").append(id == null ? "" : id)
                .append("publicPlusId")
                .append(publicPlusId == null ? "" : publicPlusId)
                .append("bio")
                .append(bio == null ? "" : bio)
                .append("name")
                .append(name == null ? "" : name)
                .append("company")
                .append(company== null ? "" : company)
                .append("plusoneUrl")
                .append(plusoneUrl == null ? "" : plusoneUrl)
                .append("thumbnailUrl")
                .append(thumbnailUrl == null ? "" : thumbnailUrl);
        String result = sb.toString();
        return String.format(Locale.US, "%08x%08x", 
            result.hashCode(), result.length());
    }
}
</pre>

<p>Every time an entity is updated in the database, its import hashcode is saved with it as a database column. Later, when we have a candidate for an updated version of that entity, all we need to do is compute the import hashcode of the candidate and compare it to the import hashcode of the entity in the database. If they differ, then we issue Content Provider operations to update the entity in the database. If they are the same, we skip that entity. This incremental update logic can be seen, for example, in the <code>makeContentProviderOperations</code> method of the <code>SpeakersHandler</code> class:</p>

<pre class="prettyprint">
public class SpeakersHandler extends JSONHandler {
    private HashMap<String, Speaker> mSpeakers = new HashMap<String, Speaker>();

    // (...)
    @Override
    public void makeContentProviderOperations(ArrayList<ContentProviderOperation> list) {
        // (...)
        int updatedSpeakers = 0;
        for (Speaker speaker : mSpeakers.values()) {
            String hashCode = speaker.getImportHashcode();
            speakersToKeep.add(speaker.id);

            if (!isIncrementalUpdate || !speakerHashcodes.containsKey(speaker.id) ||
                    !speakerHashcodes.get(speaker.id).equals(hashCode)) {
                // speaker is new/updated, so issue content provider operations
                ++updatedSpeakers;
                boolean isNew = !isIncrementalUpdate || 
                    !speakerHashcodes.containsKey(speaker.id);
                buildSpeaker(isNew, speaker, list);
            }
        }

        // delete obsolete speakers
        int deletedSpeakers = 0;
        if (isIncrementalUpdate) {
            for (String speakerId : speakerHashcodes.keySet()) {
                if (!speakersToKeep.contains(speakerId)) {
                    buildDeleteOperation(speakerId, list);
                    ++deletedSpeakers;
                }
            }
        }
    }
}
</pre>

<p>The <code>buildSpeaker</code> and <code>buildDeleteOperation</code> methods (omitted here for brevity) simply build the Content Provider operations necessary to, respectively, insert/update a speaker or delete a speaker from the Content Provider. Notice that this approach means we only issue Content Provider operations to update a speaker if the import hashcode has changed. We also deal with obsolete speakers, that is, speakers that were in the database but were not referenced by the incoming data, and we issue delete operations for those speakers.</p>

<h3>Making Sync Robust</h3>

<p>The sync adapter in the I/O app is responsible for several tasks, amongst which are the remote conference data sync, the user schedule sync and also the user feedback sync. Failures can happen in any of them because of network conditions and other factors. However, a failure in one of the tasks should not impact the execution of the other tasks. This is why we structure the sync process as a series of independent tasks, each protected by a try/catch block, as can be seen in the <code>performSync</code> method of the <code>SyncHelper</code> class:</p>

<pre class="prettyprint">
// remote sync consists of these operations, which we try one by one (and
// tolerate individual failures on each)
final int OP_REMOTE_SYNC = 0;
final int OP_USER_SCHEDULE_SYNC = 1;
final int OP_USER_FEEDBACK_SYNC = 2;

int[] opsToPerform = userDataOnly ?
        new int[] { OP_USER_SCHEDULE_SYNC } :
        new int[] { OP_REMOTE_SYNC, OP_USER_SCHEDULE_SYNC, OP_USER_FEEDBACK_SYNC};

for (int op : opsToPerform) {
    try {
        switch (op) {
            case OP_REMOTE_SYNC:
                dataChanged |= doRemoteSync();
                break;
            case OP_USER_SCHEDULE_SYNC:
                dataChanged |= doUserScheduleSync(account.name);
                break;
            case OP_USER_FEEDBACK_SYNC:
                doUserFeedbackSync();
                break;
        }
    } catch (AuthException ex) {
        // (... handle auth error...)
    } catch (Throwable throwable) {
        // (... handle other error...)

        // Let system know an exception happened:
        if (syncResult != null && syncResult.stats != null) {
            ++syncResult.stats.numIoExceptions;
        }
    }
}
</pre>

<p>When one particular part of the sync process fails, we let the system know about it by increasing <code>syncResult.stats.numIoExceptions</code>. This will cause the system to retry the sync at a later time, using exponential backoff.
</p>

<h3>When Should We Sync? Enter GCM.</h3>

<p>It's very important for users to be able to get updates about conference data in a timely manner, especially during (and in the few days leading up to) Google I/O. A naïve way to solve this problem is simply making the app poll the server repeatedly for updates. Naturally, this causes problems with bandwidth and battery consumption.</p>

<p>To solve this problem in a more elegant way, we use GCM (Google Cloud Messaging). Whenever there is an update to the data on the server side, the server sends a GCM message to all registered devices. Upon receipt of this GCM message, the device performs a sync to download the new conference data. The <code>GCMIntentService</code> class handles the incoming GCM messages:</p>

<p style="margin-bottom:1.5em"><em>Update (23 September 2014): Since this blog post was first published, the <code>GCMBaseIntentService</code> class has been deprecated. Please use the <a href="http://developer.android.com/reference/com/google/android/gms/gcm/GoogleCloudMessaging.html"><code>GoogleCloudMessaging</code></a> API instead.
 </em></p>

<pre>
public class GCMIntentService extends GCMBaseIntentService {
    private static final String TAG = makeLogTag("GCM");

    private static final Map<String, GCMCommand> MESSAGE_RECEIVERS;
    static {
        // Known messages and their GCM message receivers
        Map <String, GCMCommand> receivers = new HashMap<String, GCMCommand>();
        receivers.put("test", new TestCommand());
        receivers.put("announcement", new AnnouncementCommand());
        receivers.put("sync_schedule", new SyncCommand());
        receivers.put("sync_user", new SyncUserCommand());
        receivers.put("notification", new NotificationCommand());
        MESSAGE_RECEIVERS = Collections.unmodifiableMap(receivers);
    }

    // (...)

    @Override
    protected void onMessage(Context context, Intent intent) {
        String action = intent.getStringExtra("action");
        String extraData = intent.getStringExtra("extraData");
        LOGD(TAG, "Got GCM message, action=" + action + ", extraData=" + extraData);

        if (action == null) {
            LOGE(TAG, "Message received without command action");
            return;
        }

        action = action.toLowerCase();
        GCMCommand command = MESSAGE_RECEIVERS.get(action);
        if (command == null) {
            LOGE(TAG, "Unknown command received: " + action);
        } else {
            command.execute(this, action, extraData);
        }

    }
    // (...)
}
</pre>

<p>Notice that the <code>onMessage</code> method delivers the message to the appropriate handler depending on the GCM message's "action" field. If the action field is "sync_schedule", the application delivers the message to an instance of the <code>SyncCommand</code> class, which causes a sync to happen. Incidentally, notice that the implementation of the SyncCommand class allows the GCM message to specify a jitter parameter, which causes it to trigger a sync not immediately but at a random time in the future within the jitter interval. This spreads out the syncs evenly over a period of time rather than forcing all clients to sync simultaneously, and thus prevents a sudden peak in requests on the server side.</p>

<h3>Syncing User Data</h3>

<p style="float:right; margin: 10px 0 10px 10px">
<a href="http://1.bp.blogspot.com/-qezD6oh4Cjw/VBBjiYgKmEI/AAAAAAAAAxA/7h4HWQEsTr0/s1600/image01.png" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-qezD6oh4Cjw/VBBjiYgKmEI/AAAAAAAAAxA/7h4HWQEsTr0/s320/image01.png" /></a>
</p>

<p>The I/O app allows the user to build their own personalized schedule by choosing which sessions they are interested in attending. This data must be shared across the user's Android devices, and also between the I/O website and Android. This means this data has to be stored in the cloud, in the user's Google account. We chose to use the <a href="https://developers.google.com/drive/web/appdata">Google Drive AppData folder</a> for this task.</p>

<p>User data is synced to Google Drive by the <code>doUserScheduleSync</code> method of the <code>SyncHelper</code> class. If you dive into the source code, you will notice that this method essentially accesses the Google Drive AppData folder through the Google Drive HTTP API, then reconciles the set of sessions in the data with the set of sessions starred by the user on the device, and issues the necessary modifications to the cloud if there are locally updated sessions.</p>

<p>This means that if the user selects one session on their Android device and then selects another session on the I/O website, the result should be that both the Android device and the I/O website will show that both sessions are in the user's schedule.</p>

<p>Also, whenever the user adds or removes a session on the I/O website, the data on all their Android devices should be updated, and vice versa. To accomplish that, the I/O website sends our GCM server a notification every time the user makes a change to their schedule; the GCM server, in turn, sends a GCM message to all the devices owned by that user in order to cause them to sync their user data. The same mechanism works across the user's devices as well: when one device updates the data, it issues a GCM message to all other devices.</p>

<h3>Conclusion</h3>

<p>Serving fresh data is a key component of many Android apps. This article showed how the I/O app deals with the challenges of keeping the data up-to-date while minimizing network traffic and database changes, and also keeping this data in sync across different platforms and devices through the use of Google Cloud Storage, Google Drive and Google Cloud Messaging.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/conference-data-sync-and-gcm-in-the-google-io-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>The Beautiful Design Summer 2014 Collection on Google Play</title>
		<link>https://googledata.org/google-android/the-beautiful-design-summer-2014-collection-on-google-play/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-beautiful-design-summer-2014-collection-on-google-play</link>
		<comments>https://googledata.org/google-android/the-beautiful-design-summer-2014-collection-on-google-play/#comments</comments>
		<pubDate>Tue, 02 Sep 2014 15:00:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=8f41c3262b053acb31eb77b793a5c474</guid>
		<description><![CDATA[<em>Posted by <a href="https://plus.google.com/+MarcoPaglia/posts">Marco Paglia</a>, Android Design Team</em><br /><div>

<a href="https://play.google.com/store/apps/collection/promotion_3000235_beautiful_apps_s2014"><img border="0" src="http://1.bp.blogspot.com/-DvUPhk2TXzc/VAXXEaRWqyI/AAAAAAAAAwo/aifkZnZVHic/s320/hero.png" width="280"></a></div>

<p>It&#8217;s that time again! Last <a href="http://android-developers.blogspot.com/2013/07/beautiful-design-collection-summer-2013.html">summer</a>, we published the first Beautiful Design collection on Google Play, and updated it in the <a href="http://android-developers.blogspot.com/2013/12/beautiful-design-collection-winter-2013.html">winter</a> with a fresh set of beautifully crafted apps.</p>

<p>Since then, developers have been hard at work updating their existing apps with new design ideas, and many new apps targeted to phones and tablets have launched on Google Play sporting exquisite detail in their UIs. Some apps are even starting to incorporate elements from material design, which is great to see. We&#8217;re on the lookout for even more material design concepts applied across the Google Play ecosystem!</p>

<p>Today, we're refreshing the <a href="https://play.google.com/store/apps/collection/promotion_3000235_beautiful_apps_s2014">Beautiful Design</a> collection with our latest favorite specimens of delightful design from Google Play. As a reminder, the goal of this collection is to highlight beautiful apps with masterfully crafted design details such as beautiful presentation of photos, crisp and meaningful layout and typography, and delightful yet intuitive gestures and transitions.</p>

<p>The newly updated Beautiful Design Summer 2014 collection includes:</p>

<div><div><a href="http://2.bp.blogspot.com/-YHNrunY6IJU/VAXQv1-PsaI/AAAAAAAAAwE/ZCHlHe7DjqU/s1600/_flighttrack.png"><img border="0" src="http://2.bp.blogspot.com/-YHNrunY6IJU/VAXQv1-PsaI/AAAAAAAAAwE/ZCHlHe7DjqU/s640/_flighttrack.png" width="500"></a></div>
<p><strong><a href="https://play.google.com/store/apps/details?id=com.mobiata.flighttrack.five">Flight Track 5</a></strong>, whose gorgeously detailed flight info, full of maps and interactive charts, stylishly keeps you in the know.</p></div>

<div><div><a href="http://4.bp.blogspot.com/-1r_18RdWMUo/VAXQwlqLElI/AAAAAAAAAwY/ToEY7QWLHUg/s1600/_oyster.png"><img border="0" src="http://4.bp.blogspot.com/-1r_18RdWMUo/VAXQwlqLElI/AAAAAAAAAwY/ToEY7QWLHUg/s640/_oyster.png" width="300"></a></div>
<p><strong><a href="https://play.google.com/store/apps/details?id=com.oysterbooks.oyster.android">Oyster</a></strong>, a book-reading app whose clean, focused reading experience and delightful discovery makes it a joy to take your library with you, wherever you go.</p></div>

<div><div><a href="http://3.bp.blogspot.com/-zMfI-Ivdgps/VAXQxC5JaRI/AAAAAAAAAwc/SJgkvtOVNWY/s1600/_gogo.png"><img border="0" src="http://3.bp.blogspot.com/-zMfI-Ivdgps/VAXQxC5JaRI/AAAAAAAAAwc/SJgkvtOVNWY/s640/_gogo.png" width="500"></a></div>
<p><strong><a href="https://play.google.com/store/apps/details?id=com.gogobot.gogodroid">Gogobot</a></strong>, an app whose bright colors and big images make exploring your next city delightful and fun.</p></div>

<div><div><a href="http://2.bp.blogspot.com/-En2TYb7SaFk/VAXTXAQ9U5I/AAAAAAAAAwg/vS2f6-hAEq4/s3200/_others.png"><img border="0" src="http://2.bp.blogspot.com/-En2TYb7SaFk/VAXTXAQ9U5I/AAAAAAAAAwg/vS2f6-hAEq4/s640/_others.png" width="500"></a></div>
<p><strong><a href="https://play.google.com/store/apps/details?id=com.lumoslabs.lumosity">Lumosity</a></strong>,
<strong><a href="https://play.google.com/store/apps/details?id=vivino.web.app">Vivino</a></strong>,
<strong><a href="https://play.google.com/store/apps/details?id=com.fifa.fifaapp.android">FIFA</a></strong>,
<strong><a href="https://play.google.com/store/apps/details?id=com.duolingo">Duolingo</a></strong>,
<strong><a href="https://play.google.com/store/apps/details?id=com.battlelancer.seriesguide">SeriesGuide</a></strong>,
<strong><a href="https://play.google.com/store/apps/details?id=com.spotify.music">Spotify</a></strong>,
<strong><a href="https://play.google.com/store/apps/details?id=com.runtastic.android.pro2">Runtastic</a></strong>,
<strong><a href="https://play.google.com/store/apps/details?id=com.yahoo.mobile.client.android.atom">Yahoo News Digest</a></strong>&#8230; each with delightful design details.</p></div>

<div><div><a href="http://4.bp.blogspot.com/-z2l2La8c0n4/VAXQv4rGaHI/AAAAAAAAAwI/gn-tCNxg7pE/s1600/_air.png"><img border="0" src="http://4.bp.blogspot.com/-z2l2La8c0n4/VAXQv4rGaHI/AAAAAAAAAwI/gn-tCNxg7pE/s640/_air.png" width="500"></a></div>
<p><strong><a href="https://play.google.com/store/apps/details?id=com.airbnb.android">Airbnb</a></strong>, a veteran of the collection from this past winter, remains as they continue to finesse their app.</p></div>

<p>If you&#8217;re an Android designer or developer, make sure to play with some of these apps to get a sense for the types of design details that can separate good apps from great ones. And remember to review the <a href="http://www.google.com/design/spec">material design spec</a> for ideas on how to design your next beautiful Android app!.</p><br /><div><div><a href="https://plus.google.com/+AndroidDevelopers/posts/Nmx8y474c9A"><span>Join the discussion on</span></a><br /><br /><a href="https://plus.google.com/+AndroidDevelopers/posts/Nmx8y474c9A"><span>+Android Developers</span></a></div><div><a href="https://plus.google.com/+AndroidDevelopers/posts/Nmx8y474c9A"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a></div></div>]]></description>
				<content:encoded><![CDATA[<em>Posted by <a href="https://plus.google.com/+MarcoPaglia/posts">Marco Paglia</a>, Android Design Team</em><br />

<div style="float:right;margin-left:2em;margin-bottom:2em">

<a href="https://play.google.com/store/apps/collection/promotion_3000235_beautiful_apps_s2014" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-DvUPhk2TXzc/VAXXEaRWqyI/AAAAAAAAAwo/aifkZnZVHic/s320/hero.png" width="280" /></a></div>

<p>It’s that time again! Last <a href="http://android-developers.blogspot.com/2013/07/beautiful-design-collection-summer-2013.html">summer</a>, we published the first Beautiful Design collection on Google Play, and updated it in the <a href="http://android-developers.blogspot.com/2013/12/beautiful-design-collection-winter-2013.html">winter</a> with a fresh set of beautifully crafted apps.</p>

<p>Since then, developers have been hard at work updating their existing apps with new design ideas, and many new apps targeted to phones and tablets have launched on Google Play sporting exquisite detail in their UIs. Some apps are even starting to incorporate elements from material design, which is great to see. We’re on the lookout for even more material design concepts applied across the Google Play ecosystem!</p>

<p>Today, we're refreshing the <a href="https://play.google.com/store/apps/collection/promotion_3000235_beautiful_apps_s2014">Beautiful Design</a> collection with our latest favorite specimens of delightful design from Google Play. As a reminder, the goal of this collection is to highlight beautiful apps with masterfully crafted design details such as beautiful presentation of photos, crisp and meaningful layout and typography, and delightful yet intuitive gestures and transitions.</p>

<p>The newly updated Beautiful Design Summer 2014 collection includes:</p>

<div style="clear:both"><div style="float:right;margin:0 0 0 2em"><a href="http://2.bp.blogspot.com/-YHNrunY6IJU/VAXQv1-PsaI/AAAAAAAAAwE/ZCHlHe7DjqU/s1600/_flighttrack.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-YHNrunY6IJU/VAXQv1-PsaI/AAAAAAAAAwE/ZCHlHe7DjqU/s640/_flighttrack.png" width="500"></a></div>
<p style="padding-top:2em"><strong><a href="https://play.google.com/store/apps/details?id=com.mobiata.flighttrack.five">Flight Track 5</a></strong>, whose gorgeously detailed flight info, full of maps and interactive charts, stylishly keeps you in the know.</p></div>

<div style="clear:both;margin-top:2em;width:70%"><div style="float:left;margin:2em 2em 0 0"><a href="http://4.bp.blogspot.com/-1r_18RdWMUo/VAXQwlqLElI/AAAAAAAAAwY/ToEY7QWLHUg/s1600/_oyster.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-1r_18RdWMUo/VAXQwlqLElI/AAAAAAAAAwY/ToEY7QWLHUg/s640/_oyster.png" width="300" /></a></div>
<p style="padding-top:2em"><strong><a href="https://play.google.com/store/apps/details?id=com.oysterbooks.oyster.android">Oyster</a></strong>, a book-reading app whose clean, focused reading experience and delightful discovery makes it a joy to take your library with you, wherever you go.</p></div>

<div style="clear:both;margin-top:2em"><div style="float:right;margin:0 0 0 2em"><a href="http://3.bp.blogspot.com/-zMfI-Ivdgps/VAXQxC5JaRI/AAAAAAAAAwc/SJgkvtOVNWY/s1600/_gogo.png" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-zMfI-Ivdgps/VAXQxC5JaRI/AAAAAAAAAwc/SJgkvtOVNWY/s640/_gogo.png" width="500" /></a></div>
<p style="padding-top:2em"><strong><a href="https://play.google.com/store/apps/details?id=com.gogobot.gogodroid">Gogobot</a></strong>, an app whose bright colors and big images make exploring your next city delightful and fun.</p></div>

<div style="clear:both;margin-top:2em"><div style="float:left;margin:0 2em 0 0"><a href="http://2.bp.blogspot.com/-En2TYb7SaFk/VAXTXAQ9U5I/AAAAAAAAAwg/vS2f6-hAEq4/s3200/_others.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-En2TYb7SaFk/VAXTXAQ9U5I/AAAAAAAAAwg/vS2f6-hAEq4/s640/_others.png" width="500" /></a></div>
<p style="padding-top:2em"><strong><a href="https://play.google.com/store/apps/details?id=com.lumoslabs.lumosity">Lumosity</a></strong>,
<strong><a href="https://play.google.com/store/apps/details?id=vivino.web.app">Vivino</a></strong>,
<strong><a href="https://play.google.com/store/apps/details?id=com.fifa.fifaapp.android">FIFA</a></strong>,
<strong><a href="https://play.google.com/store/apps/details?id=com.duolingo">Duolingo</a></strong>,
<strong><a href="https://play.google.com/store/apps/details?id=com.battlelancer.seriesguide">SeriesGuide</a></strong>,
<strong><a href="https://play.google.com/store/apps/details?id=com.spotify.music">Spotify</a></strong>,
<strong><a href="https://play.google.com/store/apps/details?id=com.runtastic.android.pro2">Runtastic</a></strong>,
<strong><a href="https://play.google.com/store/apps/details?id=com.yahoo.mobile.client.android.atom">Yahoo News Digest</a></strong>&hellip; each with delightful design details.</p></div>

<div style="clear:both;margin-top:2em"><div style="float:right;margin:0 0 2em 2em"><a href="http://4.bp.blogspot.com/-z2l2La8c0n4/VAXQv4rGaHI/AAAAAAAAAwI/gn-tCNxg7pE/s1600/_air.png" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-z2l2La8c0n4/VAXQv4rGaHI/AAAAAAAAAwI/gn-tCNxg7pE/s640/_air.png" width="500" /></a></div>
<p style="padding-top:2em"><strong><a href="https://play.google.com/store/apps/details?id=com.airbnb.android">Airbnb</a></strong>, a veteran of the collection from this past winter, remains as they continue to finesse their app.</p></div>

<p style="clear:both;width:80%">If you’re an Android designer or developer, make sure to play with some of these apps to get a sense for the types of design details that can separate good apps from great ones. And remember to review the <a href="http://www.google.com/design/spec">material design spec</a> for ideas on how to design your next beautiful Android app!.</p><br />


<div style="display: inline-block; float: right; line-height: 0;"><div style="float: left;"><a href="https://plus.google.com/+AndroidDevelopers/posts/Nmx8y474c9A" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />

<br />
<a href="https://plus.google.com/+AndroidDevelopers/posts/Nmx8y474c9A" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a></div><div style="float: right;"><a href="https://plus.google.com/+AndroidDevelopers/posts/Nmx8y474c9A" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a></div></div>
]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/the-beautiful-design-summer-2014-collection-on-google-play/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Powerful New Messaging Features with GCM</title>
		<link>https://googledata.org/google-android/powerful-new-messaging-features-with-gcm/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=powerful-new-messaging-features-with-gcm</link>
		<comments>https://googledata.org/google-android/powerful-new-messaging-features-with-gcm/#comments</comments>
		<pubDate>Mon, 25 Aug 2014 17:26:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=ac7d0330b0720bc5e48012c868f8d6e6</guid>
		<description><![CDATA[<div><img border="0" src="http://3.bp.blogspot.com/-Dr05ByTFN6s/U_fF_eMDKZI/AAAAAAAAAvk/UaZjQfW6wJQ/s1000/gcm.png"></div>

<p><em>By Subir Jhanb, Google Cloud Messaging team</em></p>



<p>Developers from all segments are increasingly relying on Google Cloud Messaging (GCM) to handle their messaging needs and make sure that their apps stay battery-friendly. GCM has been experiencing incredible momentum, with more than 100,000 apps registered, 700,000 QPS, and 300% QPS growth over the past year. </p>

<p>At Google I/O we announced the <b>general availability</b> of several GCM capabilities, including the GCM <b>Cloud Connection Server</b>, <b>User Notifications</b>, and a new API called <b>Delivery Receipt</b>. This post highlights the new features and how you can use them in your apps. You can watch these and other GCM announcements at our <a href="https://www.youtube.com/watch?v=aJNzuxhZSxQ">I/O presentation</a>. </p>

<h3>Two-way XMPP messaging with Cloud Connection Server</h3>

<p>XMPP-based <a href="http://developer.android.com/google/gcm/ccs.html">Cloud Connection Server</a> (CCS) provides a persistent, asynchronous, bidirectional connection to Google servers. You can use the connection to send and receive messages between your server and your users' GCM-connected devices. Apps can now send upstream messages using CCS, without needing to manage network connections. This helps keep battery and data usage to a minimum. You can establish up to 100 XMPP connections and have up to 100 outstanding messages per connection. CCS is available for both Android and Chrome. </p>

<h3>User notifications managed across multiple devices</h3>

<p>Nowadays users have multiple devices and hence receive notifications multiple times. This can reduce notifications from being a useful feature to being an annoyance. Thankfully, the GCM <a href="http://developer.android.com/google/gcm/notifications.html">User Notifications API</a> provides a convenient way to reach all devices for a user and help you synchronise notifications including dismissals - when the user dismisses a notification on one device, the notification disappears automatically from all the other devices. User Notifications is available on both HTTP and XMPP. </p>

<h3>Insight into message status through delivery receipts</h3>

<p>When sending messages to a device, a common request from developers is to get more insight on the state of the message and to know if it was delivered. This is now available using CCS with the new <a href="http://developer.android.com/google/gcm/ccs.html#receipts">Delivery Receipt API</a>. A receipt is sent as soon as the message is sent to the endpoint, and you can also use upstream for app level delivery receipt. </p>

<h3>How to get started</h3>

<p>If you&#8217;re already using GCM, you can take advantage of these new features right away. If you haven't used GCM yet, you&#8217;ll be surprised at how easy it is to set up &#8212; <a href="http://developer.android.com/google/gcm/gs.html">get started today</a>! And remember, GCM is completely free no matter how big your messaging needs are. </p>

<p>To learn more about GCM and its new features &#8212; CCS, user notifications, and Delivery Receipt &#8212; take a look at the I/O Bytes video below and read our <a href="http://developer.android.com/google/gcm/index.html">developer documentation</a>.</p>

<!--[Interactive video]-->    

<!-- Join Discussion on +AD block -->
<div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/GvuwhD7QQvp"><span>Join the discussion on</span></a><br /><a href="https://plus.google.com/108967384991768947849/posts/GvuwhD7QQvp"><span>+Android Developers</span></a><br /></div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/GvuwhD7QQvp"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a><br /></div></div>]]></description>
				<content:encoded><![CDATA[
<div itemprop="image" style="float:right;margin-left:1.5em"><img border="0" src="http://3.bp.blogspot.com/-Dr05ByTFN6s/U_fF_eMDKZI/AAAAAAAAAvk/UaZjQfW6wJQ/s1000/gcm.png" />
</div>

<p><em>By Subir Jhanb, Google Cloud Messaging team</em></p>



<p>Developers from all segments are increasingly relying on Google Cloud Messaging (GCM) to handle their messaging needs and make sure that their apps stay battery-friendly. GCM has been experiencing incredible momentum, with more than 100,000 apps registered, 700,000 QPS, and 300% QPS growth over the past year. </p>

<p itemprop="description">At Google I/O we announced the <b>general availability</b> of several GCM capabilities, including the GCM <b>Cloud Connection Server</b>, <b>User Notifications</b>, and a new API called <b>Delivery Receipt</b>. This post highlights the new features and how you can use them in your apps. You can watch these and other GCM announcements at our <a href="https://www.youtube.com/watch?v=aJNzuxhZSxQ">I/O presentation</a>. </p>

<h3>Two-way XMPP messaging with Cloud Connection Server</h3>

<p>XMPP-based <a href="http://developer.android.com/google/gcm/ccs.html">Cloud Connection Server</a> (CCS) provides a persistent, asynchronous, bidirectional connection to Google servers. You can use the connection to send and receive messages between your server and your users' GCM-connected devices. Apps can now send upstream messages using CCS, without needing to manage network connections. This helps keep battery and data usage to a minimum. You can establish up to 100 XMPP connections and have up to 100 outstanding messages per connection. CCS is available for both Android and Chrome. </p>

<h3>User notifications managed across multiple devices</h3>

<p>Nowadays users have multiple devices and hence receive notifications multiple times. This can reduce notifications from being a useful feature to being an annoyance. Thankfully, the GCM <a href="http://developer.android.com/google/gcm/notifications.html">User Notifications API</a> provides a convenient way to reach all devices for a user and help you synchronise notifications including dismissals - when the user dismisses a notification on one device, the notification disappears automatically from all the other devices. User Notifications is available on both HTTP and XMPP. </p>

<h3>Insight into message status through delivery receipts</h3>

<p>When sending messages to a device, a common request from developers is to get more insight on the state of the message and to know if it was delivered. This is now available using CCS with the new <a href="http://developer.android.com/google/gcm/ccs.html#receipts">Delivery Receipt API</a>. A receipt is sent as soon as the message is sent to the endpoint, and you can also use upstream for app level delivery receipt. </p>

<h3>How to get started</h3>

<p>If you’re already using GCM, you can take advantage of these new features right away. If you haven't used GCM yet, you’ll be surprised at how easy it is to set up &mdash; <a href="http://developer.android.com/google/gcm/gs.html">get started today</a>! And remember, GCM is completely free no matter how big your messaging needs are. </p>

<p style="margin-bottom:2em;">To learn more about GCM and its new features &mdash; CCS, user notifications, and Delivery Receipt &mdash; take a look at the I/O Bytes video below and read our <a href="http://developer.android.com/google/gcm/index.html">developer documentation</a>.</p>

<!--[Interactive video]-->  <iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/owhf42SZadk" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:2em; margin-left: 70px;" width="560"></iframe>  

<!-- Join Discussion on +AD block -->
<div style="display: inline-block; float: right; line-height: 0;margin-top:0;"><br />
<div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/GvuwhD7QQvp" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<a href="https://plus.google.com/108967384991768947849/posts/GvuwhD7QQvp" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a><br />
</div><br />
<div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/GvuwhD7QQvp" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a><br />
</div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/powerful-new-messaging-features-with-gcm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Material design in the 2014 Google I/O app</title>
		<link>https://googledata.org/google-android/material-design-in-the-2014-google-io-app/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=material-design-in-the-2014-google-io-app</link>
		<comments>https://googledata.org/google-android/material-design-in-the-2014-google-io-app/#comments</comments>
		<pubDate>Tue, 05 Aug 2014 15:30:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=5db83e4606e3aa824f21c21c5a4e2ceb</guid>
		<description><![CDATA[<p><em>By&#160;<a href="http://google.com/+RomanNurik">Roman Nurik</a>, lead designer for the Google I/O Android App</em></p>

<p>Every year for Google I/O, we publish an <a href="https://play.google.com/store/apps/details?id=com.google.samples.apps.iosched">Android app for the conference</a> that serves two purposes. First, it serves as a companion for conference attendees and those tuning in from home, with a personalized schedule, a browsing interface for talks, and more. Second, and arguably more importantly, it serves as a reference demo for Android design and development best practices.</p>

<p>Last week, we <a href="http://android-developers.blogspot.com/2014/07/google-io-2014-app-source-code-now.html">announced</a> that the <a href="https://github.com/google/iosched">Google I/O 2014 app source code</a> is now available, so you can go check out how we implemented some of the features and design details you got to play with during the conference. In this post, I&#8217;ll share a glimpse into some of our design thinking for this year&#8217;s app.</p>

<figure>
</figure><p>On the design front, this year&#8217;s I/O app uses the <a href="http://www.google.com/design/spec">new material design approach</a> and features of the <a href="http://developer.android.com/preview/index.html">Android L Developer Preview</a> to present content in a rational, consistent, adaptive and beautiful way. Let&#8217;s take a look at some of the design decisions and outcomes that informed the design of the app.

</p><h3>Surfaces and shadows</h3>

<p>In material design, surfaces and shadows play an important role in conveying the structure of your app. The material design spec outlines a set of <a href="http://www.google.com/design/spec/layout/layout-principles.html">layout principles</a> that helps guide decisions like when and where shadows should appear. As an example, here are some of the iterations we went through for the schedule screen:</p>

<figure><a href="http://3.bp.blogspot.com/-5NgF_Eil2NQ/U9_EKsxGetI/AAAAAAAAAtQ/gGDrJsFCKe8/s1600/tabs0.png"><img border="0" src="http://3.bp.blogspot.com/-5NgF_Eil2NQ/U9_EKsxGetI/AAAAAAAAAtQ/gGDrJsFCKe8/s320/tabs0.png" width="200"></a>
  <figcaption>First iteration</figcaption></figure><figure><a href="http://4.bp.blogspot.com/-uAtTtpfPAfc/U9_EKlOnb0I/AAAAAAAAAtM/zTKDZ7P7cVY/s1600/tabs1.png"><img border="0" src="http://4.bp.blogspot.com/-uAtTtpfPAfc/U9_EKlOnb0I/AAAAAAAAAtM/zTKDZ7P7cVY/s320/tabs1.png" width="200"></a>
  <figcaption>Second iteration</figcaption></figure><figure><a href="http://1.bp.blogspot.com/-dRQRClQEMNs/U9_EKmbRg9I/AAAAAAAAAtI/E-GU74hjgZU/s1600/tabs2.png"><img border="0" src="http://1.bp.blogspot.com/-dRQRClQEMNs/U9_EKmbRg9I/AAAAAAAAAtI/E-GU74hjgZU/s320/tabs2.png" width="200"></a>
  <figcaption>Third iteration</figcaption></figure><p>
  <figure><a href="http://4.bp.blogspot.com/-phhW6v1-5k8/U9_EZIrk6cI/AAAAAAAAAtg/r2KGijiGBvc/s1600/tabs_b0.png"><img border="0" src="http://4.bp.blogspot.com/-phhW6v1-5k8/U9_EZIrk6cI/AAAAAAAAAtg/r2KGijiGBvc/s320/tabs_b0.png" width="300"></a>
  </figure>
The first iteration was problematic for a number of reasons. First, the single shadow below the app bar conveyed that there were two &#8220;sheets&#8221; of paper: one for the app bar and another for the tabs and screen contents. The bottom sheet was too complex: the &#8220;ink&#8221; that represents the contents of a sheet should be pretty simple; here ink was doing too much work, and the result was visual noise. An alternative could be to make the tabs a third sheet, sitting between the app bar and content, but too much layering can also be distracting.</p>

<p>
  <figure><a href="http://1.bp.blogspot.com/-Gt1S9puS75M/U9_EZZiRbfI/AAAAAAAAAtk/RX0Wu9T5jEc/s1600/tabs_b1.png"><img border="0" src="http://1.bp.blogspot.com/-Gt1S9puS75M/U9_EZZiRbfI/AAAAAAAAAtk/RX0Wu9T5jEc/s320/tabs_b1.png" width="300"></a>
  </figure>
The second and third iterations were stronger, creating a clear separation between chrome and content, and letting the ink focus on painting text, icons, and accent strips.</p>

<p>Another area where the concept of &#8220;surfaces&#8221; played a role was in our details page. In our first release, as you scroll the details screen, the top banner fades from the session image to the session color, and the photo scrolls at half the speed beneath the session title, producing a parallax effect. Our concern was that this design bent the physics of material design too far. It&#8217;s as if the text was sliding along a piece of paper whose transparency changed throughout the animation.</p>

<figure><a href="http://4.bp.blogspot.com/-9jn0pCtadO8/U9_E1mlg8CI/AAAAAAAAAt4/yr9CCSThkpg/s1600/change_1.gif"><img border="0" src="http://4.bp.blogspot.com/-9jn0pCtadO8/U9_E1mlg8CI/AAAAAAAAAt4/yr9CCSThkpg/s640/change_1.gif" width="560"></a>
</figure><p>A better approach, which we introduced in the app update on June 25th, was to introduce a new, shorter surface on which the title text was printed. This surface has a consistent color and opacity. Before scrolling, it&#8217;s adjacent to the sheet containing the body text, forming a seam. As you scroll, this surface (and the floating action button attached to it) rises above the body text sheet, allowing the body text to scroll beneath it.</p>

<figure><a href="http://2.bp.blogspot.com/-eR1rw3X0bn4/U9_EvzGY13I/AAAAAAAAAtw/3CqoLPgbtHY/s1600/surface2b.gif"><img border="0" src="http://2.bp.blogspot.com/-eR1rw3X0bn4/U9_EvzGY13I/AAAAAAAAAtw/3CqoLPgbtHY/s640/surface2b.gif" width="560"></a>
</figure><p>This aligns much better with the physics in the world of material design, and the end result is a more coherent visual, interaction and motion story for users. <em>(See the code: <a href="https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/SessionDetailFragment.java">Fragment</a>, <a href="https://github.com/google/iosched/blob/master/android/src/main/res/layout/fragment_session_detail.xml">Layout XML</a>)</em></p>

<h3>Color</h3>

<p>A key principle of material design is also that interfaces should be &#8220;bold, graphic, intentional&#8221; and that the foundational elements of print-based design should guide visual treatments. Let&#8217;s take a look at two such elements: color and margins.</p>

<figure><a href="http://3.bp.blogspot.com/-AXL5jiPwWLc/U9_FLpRbmQI/AAAAAAAAAuA/W0ictGfCS-4/s1600/colors.png"><img border="0" src="http://3.bp.blogspot.com/-AXL5jiPwWLc/U9_FLpRbmQI/AAAAAAAAAuA/W0ictGfCS-4/s320/colors.png" width="200"></a>
</figure><p>In material design, UI element color palettes generally consist of <a href="http://www.google.com/design/spec/style/color.html#color-ui-color-application">one primary and one accent color</a>. Large color fields (like the app bar background) take on the main 500 shade of the primary color, while smaller areas like the status bar use a darker shade, e.g. 700.</p>

<p>The accent color is used more subtly throughout the app, to call attention to key elements. The resulting juxtaposition of a tamer primary color and a brighter accent, gives apps a bold, colorful look without overwhelming the app&#8217;s actual content.</p>

<p>In the I/O app, we chose two accents, used in various situations. Most accents were <a href="http://www.google.com/design/spec/style/color.html#color-ui-color-palette">Pink 500</a>, while the more conservative Light Blue 500 was a better fit for the Add to Schedule button, which was often adjacent to session colors. <em>(See the code: <a href="https://github.com/google/iosched/blob/master/android/src/main/res/values/colors.xml#L27">XML color definitions</a>, <a href="https://github.com/google/iosched/blob/master/android/src/lpreview/res/values-v21/styles.xml#L42">Theme XML</a>)</em></p>

<figure><a href="http://3.bp.blogspot.com/-ySvLztZm0wQ/U9_FNyH5iVI/AAAAAAAAAuQ/lYMS4G3VWnc/s1600/accents.png"><img border="0" src="http://3.bp.blogspot.com/-ySvLztZm0wQ/U9_FNyH5iVI/AAAAAAAAAuQ/lYMS4G3VWnc/s640/accents.png" width="560"></a>
</figure><p>And speaking of session colors, we color each session&#8217;s detail screen based on the session&#8217;s primary topic. We used the base material design color palette with minor tweaks to ensure consistent brightness and optimal contrast with the floating action button and session images.</p>

<figure><a href="http://1.bp.blogspot.com/-YtGQBqyfSpg/U9_FLqJsjnI/AAAAAAAAAuE/PuaKIvB_AN8/s1600/color.png"><img border="0" src="http://1.bp.blogspot.com/-YtGQBqyfSpg/U9_FLqJsjnI/AAAAAAAAAuE/PuaKIvB_AN8/s1600/color.png" height="257" width="320"></a>
</figure><p>Below is an excerpt from our final session color palette exploration file.</p>

<figure><a href="http://1.bp.blogspot.com/-hEFTZYLVIYo/U9_FbXAq83I/AAAAAAAAAuc/xfe0GkAdRDA/s1600/tagcolors.png"><img border="0" src="http://1.bp.blogspot.com/-hEFTZYLVIYo/U9_FbXAq83I/AAAAAAAAAuc/xfe0GkAdRDA/s1600/tagcolors.png" width="320"></a>
  <figcaption>Session colors, with floating action button juxtaposed to evaluate contrast</figcaption></figure><figure><a href="http://4.bp.blogspot.com/-Mjk_hFcNwvs/U9_FbWam2oI/AAAAAAAAAuY/gW0Frx8_IfY/s1600/tagcolors_d.png"><img border="0" src="http://4.bp.blogspot.com/-Mjk_hFcNwvs/U9_FbWam2oI/AAAAAAAAAuY/gW0Frx8_IfY/s1600/tagcolors_d.png" width="320"></a>
  <figcaption>Desaturated session colors, to evaluate brightness consistency across the palette</figcaption></figure><h3>Margins</h3>

<p>Another important &#8220;traditional print design&#8221; element that we thought about was margins, and more specifically <a href="http://www.google.com/design/spec/layout/metrics-and-keylines.html">keylines</a>. While we&#8217;d already been accustomed to using a 4dp grid for vertical sizing (buttons and simple list items were 48dp, the standard action bar was 56dp, etc.), guidance on keylines was new in material design. Particularly, aligning titles and other textual items to keyline 2 (72dp on phones and 80dp on tablets) immediately instilled a clean, print-like rhythm to our screens, and allowed for very fast scanning of information on a screen. Gestalt principles, for the win!</p>

  <figure><a href="http://2.bp.blogspot.com/-POUE995zaBk/U9_FmRfPZLI/AAAAAAAAAuo/7ExM-YsuZLw/s1600/kl1.png"><img border="0" src="http://2.bp.blogspot.com/-POUE995zaBk/U9_FmRfPZLI/AAAAAAAAAuo/7ExM-YsuZLw/s1600/kl1.png" width="320"></a>
    <a href="http://2.bp.blogspot.com/-xGpLJG1mHDU/U9_Fmdr_kZI/AAAAAAAAAus/WQt94yGr4G8/s1600/kl2.png"><img border="0" src="http://2.bp.blogspot.com/-xGpLJG1mHDU/U9_Fmdr_kZI/AAAAAAAAAus/WQt94yGr4G8/s1600/kl2.png" width="320"></a>

  </figure><h3>Grids</h3>

<p>Another key principle in material design is &#8220;one adaptive design&#8221;:</p>

<blockquote>A single underlying design system organizes interactions and space. Each device reflects a different view of the same underlying system. Each view is tailored to the size and interaction appropriate for that device. Colors, iconography, hierarchy, and spatial relationships remain constant.</blockquote>

<p>Now, many of the screens in the I/O app represent collections of sessions. For presenting collections, material design offers a number of containers: <a href="http://www.google.com/design/spec/components/cards.html">cards</a>, <a href="http://www.google.com/design/spec/components/lists.html">lists</a>, and <a href="http://www.google.com/design/spec/components/grids.html">grids</a>. We originally thought to use cards to represent session items, but since we&#8217;re mostly showing homogenous content, we deemed cards inappropriate for our use case. The shadows and rounded edges of the cards would add too much visual clutter, and wouldn&#8217;t aid in visually grouping content. An adaptive grid was a better choice here; we could vary the number of columns on screen size <em>(<a href="https://github.com/google/iosched/blob/master/android/src/main/res/values/integers.xml">see</a> <a href="https://github.com/google/iosched/blob/master/android/src/main/res/values-sw600dp/integers.xml">the</a> <a href="https://github.com/google/iosched/blob/master/android/src/main/res/values-sw720dp-land/integers.xml">code</a>)</em>, and we were free to integrate text and images in places where we needed to conserve space.</p>

<figure><a href="http://2.bp.blogspot.com/-YrgFc-EfuoA/U9_FymmJ0wI/AAAAAAAAAu4/7xgsJSOEnmA/s1600/grids.png"><img border="0" src="http://2.bp.blogspot.com/-YrgFc-EfuoA/U9_FymmJ0wI/AAAAAAAAAu4/7xgsJSOEnmA/s640/grids.png" width="560"></a>
</figure><h3>Delightful details</h3>

<p>Two of the little details we spent a lot of time perfecting in the app, especially with the L Developer Preview, were touch ripples and the Add to Schedule floating action button.</p>

<p>We used both the clipped and unclipped ripple styles throughout the app, and made sure to customize the ripple color to ensure the ripples were visible (but still subtle) regardless of the background. <em>(See the code: <a href="https://github.com/google/iosched/blob/master/android/src/lpreview/res/drawable-v21/photo_item_foreground.xml">Light ripples</a>, <a href="https://github.com/google/iosched/blob/master/android/src/lpreview/res/drawable-v21/popup_item_background.xml">Dark ripples</a>)</em>
</p>

<p>But one of our favorite details in the app is the floating action button that toggles whether a session shows up in your personalized schedule or not:</p>

<p>We used a number of new API methods in the L preview (along with a fallback implementation) to ensure this felt right:</p>

<figure><a href="http://4.bp.blogspot.com/-x6oj5-eM-L0/U9_F8cZJrwI/AAAAAAAAAvA/LB7hwedLUic/s1600/togglefab.gif"><img border="0" src="http://4.bp.blogspot.com/-x6oj5-eM-L0/U9_F8cZJrwI/AAAAAAAAAvA/LB7hwedLUic/s320/togglefab.gif" width="320"></a>
</figure><ol><li><code>View.setOutline</code> and <code>setClipToOutline</code> for circle-clipping and dynamic shadow rendering.</li>
<li><code>android:stateListAnimator</code> to lift the button toward your finger on press (increase the drop shadow)</li>
<li><code>RippleDrawable</code> for ink touch feedback on press</li>
<li><code>ViewAnimationUtils.createCircularReveal</code> for the blue/white background state reveal</li>
<li><code>AnimatedStateListDrawable</code> to define the frame animations for changes to icon states (from checked to unchecked)</li>
</ol><p>The end result is a delightful and whimsical UI element that we&#8217;re really proud of, and hope that you can draw inspiration from or simply drop into your own apps.</p>

<h3>What&#8217;s next?</h3>

<p>And speaking of dropping code into your own apps, remember that all the source behind the app, including L Developer Preview features and fallback code paths, is <a href="http://github.com/google/iosched">now available</a>, so go check it out to see how we implemented these designs.</p>

<p>We hope this post has given you some ideas for how you can use material design to build beautiful Android apps that make the most of the platform. Stay tuned for more posts related to this year&#8217;s I/O app open source release over the coming weeks to get even more great ideas for ways to deliver the best experience to your users.</p>


<!-- Join Discussion on +AD block -->
<div><br /><div><a href="https://plus.google.com/+googledesign/posts/JtrY7kkXTuN"><span>Join the discussion on</span></a><br /><a href="https://plus.google.com/+googledesign/posts/JtrY7kkXTuN"><span>+Google Design</span></a><br /></div><br /><div><a href="https://plus.google.com/+googledesign/posts/JtrY7kkXTuN"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a><br /></div></div>]]></description>
				<content:encoded><![CDATA[<style>
figure {
  margin: 0 0 20px 0;
}

figcaption {
  font-style: italic;
  opacity: 0.7;
}

figure img {
  padding: 0 !important;
}

blockquote {
  font-style: italic;
}
</style>

<p><em>By&nbsp;<a href="http://google.com/+RomanNurik">Roman Nurik</a>, lead designer for the Google I/O Android App</em></p>

<p>Every year for Google I/O, we publish an <a href="https://play.google.com/store/apps/details?id=com.google.samples.apps.iosched">Android app for the conference</a> that serves two purposes. First, it serves as a companion for conference attendees and those tuning in from home, with a personalized schedule, a browsing interface for talks, and more. Second, and arguably more importantly, it serves as a reference demo for Android design and development best practices.</p>

<p>Last week, we <a href="http://android-developers.blogspot.com/2014/07/google-io-2014-app-source-code-now.html">announced</a> that the <a href="https://github.com/google/iosched">Google I/O 2014 app source code</a> is now available, so you can go check out how we implemented some of the features and design details you got to play with during the conference. In this post, I’ll share a glimpse into some of our design thinking for this year’s app.</p>

<figure style="text-align:center">
  <iframe width="560" height="315" src="http://www.youtube.com/embed/XOcCOBe8PTc" frameborder="0" allowfullscreen></iframe>
</figure>

<p>On the design front, this year’s I/O app uses the <a href="http://www.google.com/design/spec">new material design approach</a> and features of the <a href="http://developer.android.com/preview/index.html">Android L Developer Preview</a> to present content in a rational, consistent, adaptive and beautiful way. Let’s take a look at some of the design decisions and outcomes that informed the design of the app.

<h3>Surfaces and shadows</h3>

<p>In material design, surfaces and shadows play an important role in conveying the structure of your app. The material design spec outlines a set of <a href="http://www.google.com/design/spec/layout/layout-principles.html">layout principles</a> that helps guide decisions like when and where shadows should appear. As an example, here are some of the iterations we went through for the schedule screen:</p>

<figure style="float:left; margin: 10px 10px 20px 0">
  <a href="http://3.bp.blogspot.com/-5NgF_Eil2NQ/U9_EKsxGetI/AAAAAAAAAtQ/gGDrJsFCKe8/s1600/tabs0.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-5NgF_Eil2NQ/U9_EKsxGetI/AAAAAAAAAtQ/gGDrJsFCKe8/s320/tabs0.png" width="200" /></a>
  <figcaption>First iteration</figcaption>
</figure>
<figure style="float:left; margin: 10px 10px 20px 0">
  <a href="http://4.bp.blogspot.com/-uAtTtpfPAfc/U9_EKlOnb0I/AAAAAAAAAtM/zTKDZ7P7cVY/s1600/tabs1.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-uAtTtpfPAfc/U9_EKlOnb0I/AAAAAAAAAtM/zTKDZ7P7cVY/s320/tabs1.png" width="200" /></a>
  <figcaption>Second iteration</figcaption>
</figure>
<figure style="float:left; margin: 10px 10px 20px 0">
  <a href="http://1.bp.blogspot.com/-dRQRClQEMNs/U9_EKmbRg9I/AAAAAAAAAtI/E-GU74hjgZU/s1600/tabs2.png" imageanchor="1"><img border="0" src="http://1.bp.blogspot.com/-dRQRClQEMNs/U9_EKmbRg9I/AAAAAAAAAtI/E-GU74hjgZU/s320/tabs2.png" width="200" /></a>
  <figcaption>Third iteration</figcaption>
</figure>

<p style="clear:both">
  <figure style="float: right; margin: -20px 0 20px 20px">
    <a href="http://4.bp.blogspot.com/-phhW6v1-5k8/U9_EZIrk6cI/AAAAAAAAAtg/r2KGijiGBvc/s1600/tabs_b0.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-phhW6v1-5k8/U9_EZIrk6cI/AAAAAAAAAtg/r2KGijiGBvc/s320/tabs_b0.png" width="300" /></a>
  </figure>
The first iteration was problematic for a number of reasons. First, the single shadow below the app bar conveyed that there were two “sheets” of paper: one for the app bar and another for the tabs and screen contents. The bottom sheet was too complex: the “ink” that represents the contents of a sheet should be pretty simple; here ink was doing too much work, and the result was visual noise. An alternative could be to make the tabs a third sheet, sitting between the app bar and content, but too much layering can also be distracting.</p>

<p style="clear:both">
  <figure style="float: right; margin: -20px 0 20px 20px">
    <a href="http://1.bp.blogspot.com/-Gt1S9puS75M/U9_EZZiRbfI/AAAAAAAAAtk/RX0Wu9T5jEc/s1600/tabs_b1.png" imageanchor="1"><img border="0" src="http://1.bp.blogspot.com/-Gt1S9puS75M/U9_EZZiRbfI/AAAAAAAAAtk/RX0Wu9T5jEc/s320/tabs_b1.png" width="300" /></a>
  </figure>
The second and third iterations were stronger, creating a clear separation between chrome and content, and letting the ink focus on painting text, icons, and accent strips.</p>

<p style="clear:both">Another area where the concept of “surfaces” played a role was in our details page. In our first release, as you scroll the details screen, the top banner fades from the session image to the session color, and the photo scrolls at half the speed beneath the session title, producing a parallax effect. Our concern was that this design bent the physics of material design too far. It’s as if the text was sliding along a piece of paper whose transparency changed throughout the animation.</p>

<figure style="text-align: center">
  <a href="http://4.bp.blogspot.com/-9jn0pCtadO8/U9_E1mlg8CI/AAAAAAAAAt4/yr9CCSThkpg/s1600/change_1.gif" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-9jn0pCtadO8/U9_E1mlg8CI/AAAAAAAAAt4/yr9CCSThkpg/s640/change_1.gif" width="560" /></a>
</figure>

<p>A better approach, which we introduced in the app update on June 25th, was to introduce a new, shorter surface on which the title text was printed. This surface has a consistent color and opacity. Before scrolling, it’s adjacent to the sheet containing the body text, forming a seam. As you scroll, this surface (and the floating action button attached to it) rises above the body text sheet, allowing the body text to scroll beneath it.</p>

<figure style="text-align: center">
  <a href="http://2.bp.blogspot.com/-eR1rw3X0bn4/U9_EvzGY13I/AAAAAAAAAtw/3CqoLPgbtHY/s1600/surface2b.gif" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-eR1rw3X0bn4/U9_EvzGY13I/AAAAAAAAAtw/3CqoLPgbtHY/s640/surface2b.gif" width="560" /></a>
</figure>

<p>This aligns much better with the physics in the world of material design, and the end result is a more coherent visual, interaction and motion story for users. <em>(See the code: <a href="https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/SessionDetailFragment.java">Fragment</a>, <a href="https://github.com/google/iosched/blob/master/android/src/main/res/layout/fragment_session_detail.xml">Layout XML</a>)</em></p>

<h3>Color</h3>

<p>A key principle of material design is also that interfaces should be “bold, graphic, intentional” and that the foundational elements of print-based design should guide visual treatments. Let’s take a look at two such elements: color and margins.</p>

<figure style="float: right; margin: 20px 0 20px 20px">
<a href="http://3.bp.blogspot.com/-AXL5jiPwWLc/U9_FLpRbmQI/AAAAAAAAAuA/W0ictGfCS-4/s1600/colors.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-AXL5jiPwWLc/U9_FLpRbmQI/AAAAAAAAAuA/W0ictGfCS-4/s320/colors.png" width="200" /></a>
</figure>

<p>In material design, UI element color palettes generally consist of <a href="http://www.google.com/design/spec/style/color.html#color-ui-color-application">one primary and one accent color</a>. Large color fields (like the app bar background) take on the main 500 shade of the primary color, while smaller areas like the status bar use a darker shade, e.g. 700.</p>

<p>The accent color is used more subtly throughout the app, to call attention to key elements. The resulting juxtaposition of a tamer primary color and a brighter accent, gives apps a bold, colorful look without overwhelming the app’s actual content.</p>

<p>In the I/O app, we chose two accents, used in various situations. Most accents were <a href="http://www.google.com/design/spec/style/color.html#color-ui-color-palette">Pink 500</a>, while the more conservative Light Blue 500 was a better fit for the Add to Schedule button, which was often adjacent to session colors. <em>(See the code: <a href="https://github.com/google/iosched/blob/master/android/src/main/res/values/colors.xml#L27">XML color definitions</a>, <a href="https://github.com/google/iosched/blob/master/android/src/lpreview/res/values-v21/styles.xml#L42">Theme XML</a>)</em></p>

<figure style="text-align:center">
  <a href="http://3.bp.blogspot.com/-ySvLztZm0wQ/U9_FNyH5iVI/AAAAAAAAAuQ/lYMS4G3VWnc/s1600/accents.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-ySvLztZm0wQ/U9_FNyH5iVI/AAAAAAAAAuQ/lYMS4G3VWnc/s640/accents.png" width="560" /></a>
</figure>

<p>And speaking of session colors, we color each session’s detail screen based on the session’s primary topic. We used the base material design color palette with minor tweaks to ensure consistent brightness and optimal contrast with the floating action button and session images.</p>

<figure style="text-align:center">
  <a href="http://1.bp.blogspot.com/-YtGQBqyfSpg/U9_FLqJsjnI/AAAAAAAAAuE/PuaKIvB_AN8/s1600/color.png" imageanchor="1"><img border="0" src="http://1.bp.blogspot.com/-YtGQBqyfSpg/U9_FLqJsjnI/AAAAAAAAAuE/PuaKIvB_AN8/s1600/color.png" height="257" width="320" /></a>
</figure>

<p>Below is an excerpt from our final session color palette exploration file.</p>

<figure style="float:left; margin: 0 10px 20px 0; width: 340px">
  <a href="http://1.bp.blogspot.com/-hEFTZYLVIYo/U9_FbXAq83I/AAAAAAAAAuc/xfe0GkAdRDA/s1600/tagcolors.png" imageanchor="1"><img border="0" src="http://1.bp.blogspot.com/-hEFTZYLVIYo/U9_FbXAq83I/AAAAAAAAAuc/xfe0GkAdRDA/s1600/tagcolors.png" width="320" /></a>
  <figcaption>Session colors, with floating action button juxtaposed to evaluate contrast</figcaption>
</figure>
<figure style="float:left; margin: 0 10px 20px 0; width: 340px">
  <a href="http://4.bp.blogspot.com/-Mjk_hFcNwvs/U9_FbWam2oI/AAAAAAAAAuY/gW0Frx8_IfY/s1600/tagcolors_d.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-Mjk_hFcNwvs/U9_FbWam2oI/AAAAAAAAAuY/gW0Frx8_IfY/s1600/tagcolors_d.png" width="320" /></a>
  <figcaption>Desaturated session colors, to evaluate brightness consistency across the palette</figcaption>
</figure>

<h3 style="clear:both">Margins</h3>

<p>Another important “traditional print design” element that we thought about was margins, and more specifically <a href="http://www.google.com/design/spec/layout/metrics-and-keylines.html">keylines</a>. While we’d already been accustomed to using a 4dp grid for vertical sizing (buttons and simple list items were 48dp, the standard action bar was 56dp, etc.), guidance on keylines was new in material design. Particularly, aligning titles and other textual items to keyline 2 (72dp on phones and 80dp on tablets) immediately instilled a clean, print-like rhythm to our screens, and allowed for very fast scanning of information on a screen. Gestalt principles, for the win!</p>

  <figure style="text-align:center">
    <a href="http://2.bp.blogspot.com/-POUE995zaBk/U9_FmRfPZLI/AAAAAAAAAuo/7ExM-YsuZLw/s1600/kl1.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-POUE995zaBk/U9_FmRfPZLI/AAAAAAAAAuo/7ExM-YsuZLw/s1600/kl1.png" width="320" /></a>
    <a href="http://2.bp.blogspot.com/-xGpLJG1mHDU/U9_Fmdr_kZI/AAAAAAAAAus/WQt94yGr4G8/s1600/kl2.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-xGpLJG1mHDU/U9_Fmdr_kZI/AAAAAAAAAus/WQt94yGr4G8/s1600/kl2.png" width="320" /></a>

  </figure>

<h3>Grids</h3>

<p>Another key principle in material design is “one adaptive design”:</p>

<blockquote>A single underlying design system organizes interactions and space. Each device reflects a different view of the same underlying system. Each view is tailored to the size and interaction appropriate for that device. Colors, iconography, hierarchy, and spatial relationships remain constant.</blockquote>

<p>Now, many of the screens in the I/O app represent collections of sessions. For presenting collections, material design offers a number of containers: <a href="http://www.google.com/design/spec/components/cards.html">cards</a>, <a href="http://www.google.com/design/spec/components/lists.html">lists</a>, and <a href="http://www.google.com/design/spec/components/grids.html">grids</a>. We originally thought to use cards to represent session items, but since we’re mostly showing homogenous content, we deemed cards inappropriate for our use case. The shadows and rounded edges of the cards would add too much visual clutter, and wouldn’t aid in visually grouping content. An adaptive grid was a better choice here; we could vary the number of columns on screen size <em>(<a href="https://github.com/google/iosched/blob/master/android/src/main/res/values/integers.xml">see</a> <a href="https://github.com/google/iosched/blob/master/android/src/main/res/values-sw600dp/integers.xml">the</a> <a href="https://github.com/google/iosched/blob/master/android/src/main/res/values-sw720dp-land/integers.xml">code</a>)</em>, and we were free to integrate text and images in places where we needed to conserve space.</p>

<figure style="text-align:center">
  <a href="http://2.bp.blogspot.com/-YrgFc-EfuoA/U9_FymmJ0wI/AAAAAAAAAu4/7xgsJSOEnmA/s1600/grids.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-YrgFc-EfuoA/U9_FymmJ0wI/AAAAAAAAAu4/7xgsJSOEnmA/s640/grids.png" width="560" /></a>
</figure>

<h3>Delightful details</h3>

<p>Two of the little details we spent a lot of time perfecting in the app, especially with the L Developer Preview, were touch ripples and the Add to Schedule floating action button.</p>

<p>We used both the clipped and unclipped ripple styles throughout the app, and made sure to customize the ripple color to ensure the ripples were visible (but still subtle) regardless of the background. <em>(See the code: <a href="https://github.com/google/iosched/blob/master/android/src/lpreview/res/drawable-v21/photo_item_foreground.xml">Light ripples</a>, <a href="https://github.com/google/iosched/blob/master/android/src/lpreview/res/drawable-v21/popup_item_background.xml">Dark ripples</a>)</em>
</p>

<p>But one of our favorite details in the app is the floating action button that toggles whether a session shows up in your personalized schedule or not:</p>

<p>We used a number of new API methods in the L preview (along with a fallback implementation) to ensure this felt right:</p>

<figure style="float: right; margin: 10px 0 20px 20px">
  <a href="http://4.bp.blogspot.com/-x6oj5-eM-L0/U9_F8cZJrwI/AAAAAAAAAvA/LB7hwedLUic/s1600/togglefab.gif" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-x6oj5-eM-L0/U9_F8cZJrwI/AAAAAAAAAvA/LB7hwedLUic/s320/togglefab.gif" width="320" /></a>
</figure>

<ol>
<li><code>View.setOutline</code> and <code>setClipToOutline</code> for circle-clipping and dynamic shadow rendering.</li>
<li><code>android:stateListAnimator</code> to lift the button toward your finger on press (increase the drop shadow)</li>
<li><code>RippleDrawable</code> for ink touch feedback on press</li>
<li><code>ViewAnimationUtils.createCircularReveal</code> for the blue/white background state reveal</li>
<li><code>AnimatedStateListDrawable</code> to define the frame animations for changes to icon states (from checked to unchecked)</li>
</ol>

<p>The end result is a delightful and whimsical UI element that we’re really proud of, and hope that you can draw inspiration from or simply drop into your own apps.</p>

<h3>What’s next?</h3>

<p>And speaking of dropping code into your own apps, remember that all the source behind the app, including L Developer Preview features and fallback code paths, is <a href="http://github.com/google/iosched">now available</a>, so go check it out to see how we implemented these designs.</p>

<p>We hope this post has given you some ideas for how you can use material design to build beautiful Android apps that make the most of the platform. Stay tuned for more posts related to this year’s I/O app open source release over the coming weeks to get even more great ideas for ways to deliver the best experience to your users.</p>


<!-- Join Discussion on +AD block -->
<div style="display: inline-block; float: right; line-height: 0;margin-top:0;"><br />
<div style="float: left;"><a href="https://plus.google.com/+googledesign/posts/JtrY7kkXTuN" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<a href="https://plus.google.com/+googledesign/posts/JtrY7kkXTuN" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Google Design</span></a><br />
</div><br />
<div style="float: right;"><a href="https://plus.google.com/+googledesign/posts/JtrY7kkXTuN" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a><br />
</div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/material-design-in-the-2014-google-io-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Learn How UX Design can Make Your App More Successful</title>
		<link>https://googledata.org/google-android/learn-how-ux-design-can-make-your-app-more-successful/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=learn-how-ux-design-can-make-your-app-more-successful</link>
		<comments>https://googledata.org/google-android/learn-how-ux-design-can-make-your-app-more-successful/#comments</comments>
		<pubDate>Thu, 31 Jul 2014 19:32:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=1e4371f026dd51bd64ad12bd59210b28</guid>
		<description><![CDATA[<p><em>By <a href="http://google.com/+NazmulIdris">Nazmul Idris</a>, a Developer Advocate at Google who's passionate about Android and UX design </em></p>

<div><a href="http://3.bp.blogspot.com/-_m39yF-XQs0/U9ga3Hw8bII/AAAAAAAAArs/JGT58en1c-4/s1600/IMG_20140505_172521011.jpg"><img border="0" src="http://3.bp.blogspot.com/-_m39yF-XQs0/U9ga3Hw8bII/AAAAAAAAArs/JGT58en1c-4/s320/IMG_20140505_172521011.jpg"></a></div>
<div><a href="http://4.bp.blogspot.com/-3T0XrhxNkaQ/U9ga3PX0fxI/AAAAAAAAAro/xqFinW4kooQ/s1600/IMG_20140529_141513418.jpg"><img border="0" src="http://4.bp.blogspot.com/-3T0XrhxNkaQ/U9ga3PX0fxI/AAAAAAAAAro/xqFinW4kooQ/s320/IMG_20140529_141513418.jpg"></a></div>
<div><a href="http://1.bp.blogspot.com/-YiZe6wX6l7Q/U9ga3xfsWSI/AAAAAAAAAr8/z6rz3w41VMc/s1600/nazmul-car.jpg"><img border="0" src="http://1.bp.blogspot.com/-YiZe6wX6l7Q/U9ga3xfsWSI/AAAAAAAAAr8/z6rz3w41VMc/s320/nazmul-car.jpg"></a></div>

<p>As a mobile developer, how do you create 5-star apps that your users will not just download, but love to use every single day? How do you get your app noticed, and how do you drive engagement? One way is to focus on <i>excellence in design</i> &#8212; from visual and interaction design to user research, in other words: UX design. </p>

<p>If you&#8217;re new to the world of UX design but want to embrace it to improve your apps, we've created a new online course just for you. The <em><a href="http://bit.ly/uxdclass">UX Design for Mobile Developers</a></em> course teaches you how to put your designer hat on, in addition to your developer hat, as you think about your apps' ideal user and how to meet their needs.</p>

<p>The course is divided into a series of lessons, each of which gives you practical takeaways that you can apply immediately to start seeing the benefits of good UX design. </p>

<p>Without jargon or buzzwords, the course teaches you where you should focus your attention, to bring in new users, keep existing users engaged, and increase your app's ratings. You'll learn how to optimize your app, rather than optimizing login/signup forms, and how to use low-resolution wireframing.</p>

<p>After you take the course, you'll "level up" from being an excellent developer to becoming an excellent design-minded developer. </p>

<p>Check out the video below to get a taste of what the course is like, and click through <a href="https://prezi.com/482-wtxsbad3/udacity-uxd-course-overview/">this short deck</a> for an overview of the learning plan. </p>

<p>The full course materials &#8212; all the videos, quizzes, and forums &#8212; are available for free for all students by selecting &#8220;View Courseware&#8221;. Personalized ongoing feedback and guidance from Coaches is also available to anyone who chooses to enroll in Udacity&#8217;s guided program.</p>

<p>If that&#8217;s not enough, for even more about UX design from a developer's perspective, check out our YouTube UXD series, on the AndroidDevelopers channel: <a href="http://bit.ly/uxdplaylist">http://bit.ly/uxdplaylist</a>.</p>

<!--[Interactive video]-->    <br /><!-- Android courses block --><div>
<div>
<a href="https://www.udacity.com/courses#!/android">
<img src="http://2.bp.blogspot.com/-inZ3JIlCo48/U8U7HQavRPI/AAAAAAAAAqg/7kzqjlbZ6qo/s300/android-udacity.png"></a>
</div>
<div>
<a href="https://www.udacity.com/courses#!/android">
<span><strong>Android Developers </strong><br />at Udacity</span></a>
</div>
</div>

<!-- Join Discussion on +AD block -->
<div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/VtZiac7z5db"><span>Join the discussion on</span></a><br /><a href="https://plus.google.com/108967384991768947849/posts/VtZiac7z5db"><span>+Android Developers</span></a><br /></div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/VtZiac7z5db"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a><br /></div></div>]]></description>
				<content:encoded><![CDATA[<p><em>By <a href="http://google.com/+NazmulIdris">Nazmul Idris</a>, a Developer Advocate at Google who's passionate about Android and UX design </em></p>

<div class="separator" text-align: center;"><a href="http://3.bp.blogspot.com/-_m39yF-XQs0/U9ga3Hw8bII/AAAAAAAAArs/JGT58en1c-4/s1600/IMG_20140505_172521011.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://3.bp.blogspot.com/-_m39yF-XQs0/U9ga3Hw8bII/AAAAAAAAArs/JGT58en1c-4/s320/IMG_20140505_172521011.jpg" /></a></div>
<div class="separator" style="text-align: center;"><a href="http://4.bp.blogspot.com/-3T0XrhxNkaQ/U9ga3PX0fxI/AAAAAAAAAro/xqFinW4kooQ/s1600/IMG_20140529_141513418.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://4.bp.blogspot.com/-3T0XrhxNkaQ/U9ga3PX0fxI/AAAAAAAAAro/xqFinW4kooQ/s320/IMG_20140529_141513418.jpg" /></a></div>
<div class="separator" style=" text-align: center;"><a href="http://1.bp.blogspot.com/-YiZe6wX6l7Q/U9ga3xfsWSI/AAAAAAAAAr8/z6rz3w41VMc/s1600/nazmul-car.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img itemprop="image" border="0" src="http://1.bp.blogspot.com/-YiZe6wX6l7Q/U9ga3xfsWSI/AAAAAAAAAr8/z6rz3w41VMc/s320/nazmul-car.jpg" /></a></div>

<p itemprop="description">As a mobile developer, how do you create 5-star apps that your users will not just download, but love to use every single day? How do you get your app noticed, and how do you drive engagement? One way is to focus on <i>excellence in design</i> &mdash; from visual and interaction design to user research, in other words: UX design. </p>

<p>If you’re new to the world of UX design but want to embrace it to improve your apps, we've created a new online course just for you. The <em><a href="http://bit.ly/uxdclass">UX Design for Mobile Developers</a></em> course teaches you how to put your designer hat on, in addition to your developer hat, as you think about your apps' ideal user and how to meet their needs.</p>

<p>The course is divided into a series of lessons, each of which gives you practical takeaways that you can apply immediately to start seeing the benefits of good UX design. </p>

<p>Without jargon or buzzwords, the course teaches you where you should focus your attention, to bring in new users, keep existing users engaged, and increase your app's ratings. You'll learn how to optimize your app, rather than optimizing login/signup forms, and how to use low-resolution wireframing.</p>

<p>After you take the course, you'll "level up" from being an excellent developer to becoming an excellent design-minded developer. </p>

<p>Check out the video below to get a taste of what the course is like, and click through <a href="https://prezi.com/482-wtxsbad3/udacity-uxd-course-overview/">this short deck</a> for an overview of the learning plan. </p>

<p>The full course materials — all the videos, quizzes, and forums &mdash; are available for free for all students by selecting “View Courseware”. Personalized ongoing feedback and guidance from Coaches is also available to anyone who chooses to enroll in Udacity’s guided program.</p>

<p style="margin-bottom:2em;">If that’s not enough, for even more about UX design from a developer's perspective, check out our YouTube UXD series, on the AndroidDevelopers channel: <a href="http://bit.ly/uxdplaylist">http://bit.ly/uxdplaylist</a>.</p>

<!--[Interactive video]-->  <iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/MnNH6ljejKo" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:2em; margin-left: 70px;" width="560"></iframe>  <br />

<!-- Android courses block -->
<div style="display:inline-block;float:left;margin-top:0;">
<div style="float:left">
<a href="https://www.udacity.com/courses#!/android" style="color: #333333; text-decoration: none;">
<img src="http://2.bp.blogspot.com/-inZ3JIlCo48/U8U7HQavRPI/AAAAAAAAAqg/7kzqjlbZ6qo/s300/android-udacity.png" style="width:90px" /></a>
</div>
<div style="float:right;margin-top:12px;margin-left:4px;line-height: .5em;">
<a href="https://www.udacity.com/courses#!/android" style="color: #333333; text-decoration: none;">
<span style="font: 13px/16px arial,sans-serif;"><strong>Android Developers </strong><br>at Udacity</a></span>
</div>
</div>

<!-- Join Discussion on +AD block -->
<div style="display: inline-block; float: right; line-height: 0;margin-top:0;"><br />
<div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/VtZiac7z5db" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<a href="https://plus.google.com/108967384991768947849/posts/VtZiac7z5db" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a><br />
</div><br />
<div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/VtZiac7z5db" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a><br />
</div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/learn-how-ux-design-can-make-your-app-more-successful/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Google I/O 2014 App Source Code Now Available</title>
		<link>https://googledata.org/google-android/google-io-2014-app-source-code-now-available/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=google-io-2014-app-source-code-now-available</link>
		<comments>https://googledata.org/google-android/google-io-2014-app-source-code-now-available/#comments</comments>
		<pubDate>Wed, 30 Jul 2014 21:14:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=b98ed3aca3a2b8f413e1d05042ce52d2</guid>
		<description><![CDATA[
By Bruno Oliveira, Tech Lead of the I/O app project




The source code for the 2014 version of the Google I/O app is now available. Since its first release on Google Play a few weeks before the conference, the I/O app was downloaded by hundreds of th...]]></description>
				<content:encoded><![CDATA[<p><em>
By Bruno Oliveira, Tech Lead of the I/O app project
</em></p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-7fF9ayZ6PgI/U9iFpk5FNEI/AAAAAAAAAs0/4P4SCvdB_4M/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img itemprop="image" border="0" src="http://2.bp.blogspot.com/-7fF9ayZ6PgI/U9iFpk5FNEI/AAAAAAAAAs0/4P4SCvdB_4M/s600/image00.png" /></a></div>

<p itemprop="description">The source code for the 2014 version of the Google I/O app is <a href="https://github.com/google/iosched">now available</a>. Since its first <a href="http://googledevelopers.blogspot.com/2014/06/start-exploring-io-2014-with-new-and.html">release</a> on <a href="https://play.google.com/store/apps/details?id=com.google.samples.apps.iosched">Google Play</a> a few weeks before the conference, the I/O app was downloaded by hundreds of thousands of people, including on-site attendees, I/O Extended event participants and users tuning in from home. If one of the goals of the app is to be useful to conference attendees, the other primary goal is to serve as a practical example of best practices for Android app design and development.</p>

<p>In addition to showing how to implement a wide variety of features that are useful for most Android apps, such as Fragments, Loaders, Services, Broadcast Receivers, alarms, notifications, SQLite databases, Content Providers, Action Bar and the Navigation Drawer, the I/O app source code also shows how to integrate with several Google products and services, from the <a href="https://developers.google.com/drive/">Google Drive API</a> to <a href="http://developer.android.com/google/gcm/index.html">Google Cloud Messaging</a>. It uses the <a href="http://www.google.com/design/spec/material-design/introduction.html">material design</a> approach, the <a href="http://developer.android.com/preview/index.html">Android L Preview APIs</a> and full <a href="http://developer.android.com/wear/index.html">Android Wear</a> integration with a packaged wearable app for sending session feedback.</p>

<p>To simplify the process of reusing and customizing the source code to build apps for other conferences, we rewrote the entire sync adapter to work with plain JSON files instead of requiring a server with a specific API. These files can be hosted on any web server of the developer's choice, and their format is fully <a href="https://github.com/google/iosched/blob/master/doc/SYNC.md">documented</a>.</p>

<p>Storing and syncing the user's data (that is, the personalized schedule) is crucial part of the app. The source code shows how user data can be stored in the <a href="https://developers.google.com/drive/web/appdata">Application Data folder</a> of the user's own Google Drive account and kept in sync across multiple devices, and how to use Google Cloud Messaging to trigger syncs when necessary to ensure the data is always fresh.</p>

<p>The project includes the <a href="https://github.com/google/iosched/tree/master/gcm-server">source code to the App Engine app</a> that can be reused to send GCM messages to devices to trigger syncs, as well as a module (called <a href="https://github.com/google/iosched/tree/master/updater">Updater</a>) that can be adapted to read conference data from other backends to produce the JSON files that are consumed by the I/O app.</p>

<p>We are excited to share this source code with the developer community today, and we hope it will serve as a learning tool, a source of reusable snippets and a useful example of Android app development in general. In the coming weeks we will post a few technical articles with more detailed information about the IOSched source code to help bring some insight into the app development process. We will continue to update the app in the coming months, and as always, your pull requests are very welcome!</p>

<div style="display: inline-block; float: right; line-height: 0;"><br />
<div style="float: left;"><a href="https://plus.sandbox.google.com/108967384991768947849/posts/e6wcR2F1cvp" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<a href="https://plus.sandbox.google.com/108967384991768947849/posts/e6wcR2F1cvp" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a><br />
</div><br />
<div style="float: right;"><a href="https://plus.sandbox.google.com/108967384991768947849/posts/e6wcR2F1cvp" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a><br />
</div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/google-io-2014-app-source-code-now-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Grow with Google Play: Scaled Publishing and New App Insights</title>
		<link>https://googledata.org/google-android/grow-with-google-play-scaled-publishing-and-new-app-insights/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=grow-with-google-play-scaled-publishing-and-new-app-insights</link>
		<comments>https://googledata.org/google-android/grow-with-google-play-scaled-publishing-and-new-app-insights/#comments</comments>
		<pubDate>Tue, 29 Jul 2014 17:14:00 +0000</pubDate>
		<dc:creator><![CDATA[Android Developers]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=ee6857b59f943bdd7f5b07af72eca5fd</guid>
		<description><![CDATA[<p><em>By Kobi Glick, Google Play team</em></p>

<p>If you're growing your business on Google Play, the <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a> is one of the most important tools at your disposal. At Google I/O, we introduced a number of new changes that give you valuable insight into how your app is performing. Here's an overview of some of the improvements you can now take advantage of.</p>

<h3>Publishing API for scaling your app operations</h3>

<p><!-- Release management becomes more important as your app business and user base grow. -->Today we're happy to announce that the <a href="https://developers.google.com/android-publisher/">Google Play Developer Publishing API</a> is now available to all developers. The API will let you upload APKs to Beta testing, Staged rollout and Production, and integrate publishing operations with your release processes and toolchain. The Publishing API also makes it easier for you to manage your in-app products catalog, provide tablet-specific screenshots, and localize your store listing text and graphics. The Publishing API will help you focus on your core business, with less time managing your releases, even as your business grows to more apps and markets.</p>

<h3>Actionable insights at the right time</h3>

<h3>Email notifications for alerts</h3>
<p>Recently, we added Alerts in the Developer Console to let you know when there are sudden changes in important stats like app installs, ratings, and crashes. You can now turn on email notifications for Alerts so that, even while you&#8217;re not in the Developer Console, you&#8217;ll be informed of relevant events before they can have a broader effect on your app. You can turn on email notifications for one or more of your apps under Email Preferences in the Developer Console settings.</p>


<a href="http://3.bp.blogspot.com/-h_7u-6oBqio/U6qKoPoSaiI/AAAAAAAAAnQ/P-uHuvS9urg/s1600/image03.png"><img border="0" src="http://3.bp.blogspot.com/-h_7u-6oBqio/U6qKoPoSaiI/AAAAAAAAAnQ/P-uHuvS9urg/s400/image03.png"></a>

<h3>New Optimization Tips</h3>
<p>You&#8217;ll now see new Optimization Tips with instructions when we detect opportunities to improve your app. For example, we&#8217;ll let you know when updated versions of APIs you use are available &#8212; such as new Google Play in-app billing or Google Maps APIs. For games developers, we&#8217;ll also surface opportunities to use Google Play game services that can help improve users&#8217; gaming experience and drive engagement. To see what tips we suggest for you, go to your app in the Developer Console and click on Optimization Tips.</p>

<h3>Better data to inform your business decisions</h3>

<h3>Enhanced revenue statistics</h3>
<p>To help you better understand your commercial success, we&#8217;ve enhanced revenue statistics in the Finance section of the Developer Console. We now let you see the average revenue per paying user (ARPPU) and give you more ways to analyse buyer data, such as comparing returning buyers (i.e., those who also made purchases in the past) to new buyers.</p>

<div><a href="http://3.bp.blogspot.com/-9vYqSOpuwzw/U9GcuQf4cBI/AAAAAAAAArU/g32QzlsBNaQ/s1600/revenue-stats.png"><img border="0" src="http://3.bp.blogspot.com/-9vYqSOpuwzw/U9GcuQf4cBI/AAAAAAAAArU/g32QzlsBNaQ/s710/revenue-stats.png"></a></div>



<h3>Bulk export of reviews</h3>
<p>You can already engage with your users by reading and replying to reviews in the Developer Console and we&#8217;ve now added bulk export of reviews so you can <a href="https://support.google.com/googleplay/android-developer/answer/138230">download</a> and analyze your app&#8217;s reviews en masse. This is particularly useful if you receive a large volume of reviews and want to perform your own sentiment analysis.</p>

<h3>Improved stats for beta releases and staged rollouts</h3>

<p>Since last year&#8217;s launch, you&#8217;ve used beta testing to release alpha and beta versions of your app, and staged rollout to gradually launch your app to production.  To help you make the most of this feature, we&#8217;re now improving the way alpha, beta and staged rollout specific stats are displayed.  When viewing your app and crash statistics you can now filter the app version by alpha, beta, or staged rollout to better understand the impact of your testing.</p>

<h3>Improved reporting of native crashes</h3>

<p>If you develop in native code, we&#8217;ve improved the reporting and presentation specifically for native crashes, with better grouping of similar crashes and summarizing of relevant information.</p>


<div><a href="http://2.bp.blogspot.com/-FemilSNdRQA/U9GcubzOQKI/AAAAAAAAArQ/MInXCD06TkE/s1600/native-crash-data-sm.png"><img border="0" src="http://2.bp.blogspot.com/-FemilSNdRQA/U9GcubzOQKI/AAAAAAAAArQ/MInXCD06TkE/s740/native-crash-data-sm.png"></a></div>
 
<h3>Deep-linking to help drive engagement</h3>

<p>Finally, we&#8217;ve also added <b>website verification</b> in the Developer Console, to enable <a href="https://developers.google.com/app-indexing/">deep-linking to your app</a> from search results. Deep-linking helps remind users about the apps they already have. It is available through search for all apps that implement app indexing. For example, if a user with the Walmart Android app searches for &#8220;Chromecast where to buy&#8221;, they&#8217;ll go directly to the Chromecast page in the Walmart app. The new App Indexing API is now open to all Android developers, globally. <a href="https://developers.google.com/app-indexing/">Get started now.</a></p>

<div>

<a href="http://1.bp.blogspot.com/-Zwt6OHel6oE/U792HfiW9TI/AAAAAAAAAqI/MbYTgWSK5Ag/s1600/app_indexing.png"><img border="0" src="http://1.bp.blogspot.com/-Zwt6OHel6oE/U792HfiW9TI/AAAAAAAAAqI/MbYTgWSK5Ag/s700/app_indexing.png"></a>

</div>

<p>We hope you find these features useful and take advantage of them so that you can continue to grow your user base and improve your users&#8217; experience. If you're interested in some other great tools for distributing your apps, check out <a href="http://android-developers.blogspot.co.uk/2014/06/building-successful-global-app.html">this blog post</a>, or any of the sessions which have now been posted to the <a href="https://www.youtube.com/playlist?list=PLOU2XLYxmsILijf3hfBD1__q0Wrx5UQrJ">Google Developers Channel</a>. 

</p><div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/GBMy892vadx"><span>Join the discussion on</span></a><br /><a href="https://plus.google.com/108967384991768947849/posts/GBMy892vadx"><span>+Android Developers</span></a><br /></div><br /><div><a href="https://plus.google.com/108967384991768947849/posts/GBMy892vadx"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" width="32"></a><br /></div></div>]]></description>
				<content:encoded><![CDATA[<p><em>By Kobi Glick, Google Play team</em></p>

<p>If you're growing your business on Google Play, the <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a> is one of the most important tools at your disposal. At Google I/O, we introduced a number of new changes that give you valuable insight into how your app is performing. Here's an overview of some of the improvements you can now take advantage of.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1.25em">Publishing API for scaling your app operations</h3>

<p><!-- Release management becomes more important as your app business and user base grow. -->Today we're happy to announce that the <a href="https://developers.google.com/android-publisher/">Google Play Developer Publishing API</a> is now available to all developers. The API will let you upload APKs to Beta testing, Staged rollout and Production, and integrate publishing operations with your release processes and toolchain. The Publishing API also makes it easier for you to manage your in-app products catalog, provide tablet-specific screenshots, and localize your store listing text and graphics. The Publishing API will help you focus on your core business, with less time managing your releases, even as your business grows to more apps and markets.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1.25em">Actionable insights at the right time</h3>

<h3 style="margin-top:1em">Email notifications for alerts</h3>
<p>Recently, we added Alerts in the Developer Console to let you know when there are sudden changes in important stats like app installs, ratings, and crashes. You can now turn on email notifications for Alerts so that, even while you’re not in the Developer Console, you’ll be informed of relevant events before they can have a broader effect on your app. You can turn on email notifications for one or more of your apps under Email Preferences in the Developer Console settings.</p>


<a href="http://3.bp.blogspot.com/-h_7u-6oBqio/U6qKoPoSaiI/AAAAAAAAAnQ/P-uHuvS9urg/s1600/image03.png" imageanchor="1" ><img border="0" src="http://3.bp.blogspot.com/-h_7u-6oBqio/U6qKoPoSaiI/AAAAAAAAAnQ/P-uHuvS9urg/s400/image03.png" style="margin-bottom:1.5em" /></a>

<h3>New Optimization Tips</h3>
<p>You’ll now see new Optimization Tips with instructions when we detect opportunities to improve your app. For example, we’ll let you know when updated versions of APIs you use are available &mdash; such as new Google Play in-app billing or Google Maps APIs. For games developers, we’ll also surface opportunities to use Google Play game services that can help improve users’ gaming experience and drive engagement. To see what tips we suggest for you, go to your app in the Developer Console and click on Optimization Tips.</p>

<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400;margin-top:1.25em">Better data to inform your business decisions</h3>

<h3 style="margin-top:1em">Enhanced revenue statistics</h3>
<p>To help you better understand your commercial success, we’ve enhanced revenue statistics in the Finance section of the Developer Console. We now let you see the average revenue per paying user (ARPPU) and give you more ways to analyse buyer data, such as comparing returning buyers (i.e., those who also made purchases in the past) to new buyers.</p>

<div style="border:2px solid #ddd;margin:1.5em auto 2em auto;width:710px"><a href="http://3.bp.blogspot.com/-9vYqSOpuwzw/U9GcuQf4cBI/AAAAAAAAArU/g32QzlsBNaQ/s1600/revenue-stats.png" imageanchor="1" ><img border="0" itemprop="image" src="http://3.bp.blogspot.com/-9vYqSOpuwzw/U9GcuQf4cBI/AAAAAAAAArU/g32QzlsBNaQ/s710/revenue-stats.png" style="width:700px" /></a></div>



<h3>Bulk export of reviews</h3>
<p>You can already engage with your users by reading and replying to reviews in the Developer Console and we’ve now added bulk export of reviews so you can <a href="https://support.google.com/googleplay/android-developer/answer/138230">download</a> and analyze your app’s reviews en masse. This is particularly useful if you receive a large volume of reviews and want to perform your own sentiment analysis.</p>

<h3>Improved stats for beta releases and staged rollouts</h3>

<p>Since last year’s launch, you’ve used beta testing to release alpha and beta versions of your app, and staged rollout to gradually launch your app to production.  To help you make the most of this feature, we’re now improving the way alpha, beta and staged rollout specific stats are displayed.  When viewing your app and crash statistics you can now filter the app version by alpha, beta, or staged rollout to better understand the impact of your testing.</p>

<h3>Improved reporting of native crashes</h3>

<p>If you develop in native code, we’ve improved the reporting and presentation specifically for native crashes, with better grouping of similar crashes and summarizing of relevant information.</p>


<div style="border:2px solid #ddd;margin:2em auto;width:710px"><a href="http://2.bp.blogspot.com/-FemilSNdRQA/U9GcubzOQKI/AAAAAAAAArQ/MInXCD06TkE/s1600/native-crash-data-sm.png" imageanchor="1" ><img border="0" src="http://2.bp.blogspot.com/-FemilSNdRQA/U9GcubzOQKI/AAAAAAAAArQ/MInXCD06TkE/s740/native-crash-data-sm.png" style="width:700px" /></a></div>
 
<h3 style="font-size:20px;font-family:Roboto,sans-serif;font-weight:400">Deep-linking to help drive engagement</h3>

<p>Finally, we’ve also added <b>website verification</b> in the Developer Console, to enable <a href="https://developers.google.com/app-indexing/">deep-linking to your app</a> from search results. Deep-linking helps remind users about the apps they already have. It is available through search for all apps that implement app indexing. For example, if a user with the Walmart Android app searches for “Chromecast where to buy”, they’ll go directly to the Chromecast page in the Walmart app. The new App Indexing API is now open to all Android developers, globally. <a href="https://developers.google.com/app-indexing/">Get started now.</a></p>

<div style="text-align:middle;margin-bottom:2em;">

<a href="http://1.bp.blogspot.com/-Zwt6OHel6oE/U792HfiW9TI/AAAAAAAAAqI/MbYTgWSK5Ag/s1600/app_indexing.png" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-Zwt6OHel6oE/U792HfiW9TI/AAAAAAAAAqI/MbYTgWSK5Ag/s700/app_indexing.png" /></a>

</div>

<p>We hope you find these features useful and take advantage of them so that you can continue to grow your user base and improve your users’ experience. If you're interested in some other great tools for distributing your apps, check out <a href="http://android-developers.blogspot.co.uk/2014/06/building-successful-global-app.html">this blog post</a>, or any of the sessions which have now been posted to the <a href="https://www.youtube.com/playlist?list=PLOU2XLYxmsILijf3hfBD1__q0Wrx5UQrJ">Google Developers Channel</a>. 

<div style="display: inline-block; float: right; line-height: 0;"><br />
<div style="float: left;"><a href="https://plus.google.com/108967384991768947849/posts/GBMy892vadx" style="color: #333333; text-decoration: none;"><span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;">Join the discussion on</span></a><br />
<a href="https://plus.google.com/108967384991768947849/posts/GBMy892vadx" style="color: #333333; text-decoration: none;"><span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;">+Android Developers</span></a><br />
</div><br />
<div style="float: right;"><a href="https://plus.google.com/108967384991768947849/posts/GBMy892vadx" style="color: #333333; text-decoration: none;"><img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /></a><br />
</div></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/grow-with-google-play-scaled-publishing-and-new-app-insights/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
	</channel>
</rss>
