<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C04MRnw7eCp7ImA9WhBbGEg.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179</id><updated>2013-05-17T21:39:47.200-07:00</updated><category term="Media and Camera" /><category term="User Interface" /><category term="Mountain View" /><category term="Animation and Graphics" /><category term="Location" /><category term="App Components" /><category term="Gestures" /><category term="Google Play" /><category term="Developer Console" /><category term="Security" /><category term="London" /><category term="Android 2.1" /><category term="Android Developer Phone" /><category term="Photo Sphere" /><category term="Connectivity" /><category term="Testing" /><category term="Quality" /><category term="Administration" /><category term="Boston" /><category term="In-app Billing" /><category term="accessibility" /><category term="Open source" /><category term="Games" /><category term="WebView" /><category term="Resources" /><category term="Android 4.2" /><category term="Android Developer Challenge" /><category term="Apps" /><category term="OpenGL ES" /><category term="Promo Graphics" /><category term="NDK" /><category term="Cool Stuff" /><category term="Debugging" /><category term="Speech Input" /><category term="Text-to-Speech" /><category term="GCM" /><category term="Tablets" /><category term="io2010" /><category term="Android" /><category term="Android 2.3.3" /><category term="Google I/O" /><category term="User Support" /><category term="Google Services" /><category term="Android 3.2" /><category term="Munich" /><category term="Guidelines" /><category term="Android 2.0" /><category term="Google+" /><category term="JNI" /><category term="Quick Search Box" /><category term="Android Studio" /><category term="IO2013" /><category term="Google Play services" /><category term="Tel Aviv" /><category term="SDK Tools" /><category term="Android Market" /><category term="Android 2.3" /><category term="Android 1.5" /><category term="Localization" /><category term="Google Play game services" /><category term="Android SDK" /><category term="Location and Sensors" /><category term="Developer profiles" /><category term="Best Practices" /><category term="Widgets" /><category term="Sample code" /><category term="Announcements" /><category term="Developer Labs" /><category term="Dashboard" /><category term="RTL" /><category term="Intents" /><category term="Touch" /><category term="Content Provider" /><category term="App Resources" /><category term="Android 2.2" /><category term="Maps" /><category term="Layout" /><category term="Developer Story" /><category term="Code Day" /><category term="Developer Days" /><category term="Android 1.6" /><category term="Daydream" /><category term="Tools" /><category term="Authentication" /><category term="How-to" /><category term="Android 3.0" /><category term="SDK updates" /><category term="Input methods" /><category term="Renderscript" /><category term="Text and Input" /><category term="Android 4.0" /><category term="Optimization" /><category term="Android Design" /><category term="Sensors" /><category term="IME" /><title type="text">Android Developers Blog</title><subtitle type="html">An Open Handset Alliance Project.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://android-developers.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://android-developers.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Emily Wood</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>312</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/hsDu" /><feedburner:info uri="blogspot/hsdu" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C0AMQXg7fCp7ImA9WhBbGEg.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-2154620954893321382</id><published>2013-05-17T10:37:00.000-07:00</published><updated>2013-05-17T21:36:20.604-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-17T21:36:20.604-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Developer Console" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><category scheme="http://www.blogger.com/atom/ns#" term="IO2013" /><title>New Ways to Optimize Your Business in Google Play</title><content type="html">&lt;p&gt;&lt;em&gt;Posted by &lt;a href="https://plus.google.com/100189531984607939401/posts"&gt;Ellie Powers&lt;/a&gt;, Google Play team&lt;/em&gt;&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="151" src="http://1.bp.blogspot.com/-IF-1-1kA0sg/UYwTidxdi3I/AAAAAAAAAEU/ellLeQ-E1vs/s200/google-io-lockup-2.png" width="200"&gt;&lt;/div&gt;

&lt;p&gt;This week at I/O, we were excited to announce some updates to Google Play to help you optimize your business on Google Play: to help you take control of your app publishing, gain insight into your users, and expand your app’s success globally.&lt;/p&gt;

&lt;div style="float:right;margin:1em 0em 2em 1.5em;"&gt;&lt;a href="http://4.bp.blogspot.com/-VmHMT66JjxU/UZZdfPUaJsI/AAAAAAAACQc/kDx5-Ep5YRo/s1600/framed_designed-tablets.png" imageanchor="1" &gt;&lt;img border="0" src="http://4.bp.blogspot.com/-VmHMT66JjxU/UZZdfPUaJsI/AAAAAAAACQc/kDx5-Ep5YRo/s320/framed_designed-tablets.png" style="width:400px;"/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;h3 style="margin-top:1.25em"&gt;Play Store’s new view: apps designed for tablets&lt;/h3&gt;

&lt;p&gt;Many of you have invested in making great tablet experiences for your users, and we want to ensure that that work pays off and that users are able to discover great apps for their tablets. This week, the Google Play store began providing a view of our top charts highlighting apps which have been &lt;strong&gt;designed for tablets&lt;/strong&gt; according to our &lt;a href="http://developer.android.com/distribute/googleplay/quality/tablet.html"&gt;tablet app quality checklist&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Be sure you don’t miss out! Check that your app’s &lt;a href="http://android-developers.blogspot.co.uk/2013/04/tablet-optimization-tips-in-google-play.html"&gt;optimization tips&lt;/a&gt; say that your app is designed for tablets, and &lt;a href="http://android-developers.blogspot.co.uk/2013/04/update-on-tablet-app-guidelines-and.html"&gt;upload tablet screenshots&lt;/a&gt; for 7” and 10” tablets. &lt;/p&gt;

&lt;h3 style="margin-top:1.25em"&gt;Beta testing and staged rollouts&lt;/h3&gt;
&lt;p&gt;We have introduced support for &lt;strong&gt;beta testing&lt;/strong&gt; and &lt;strong&gt;staged rollouts&lt;/strong&gt; so that you can get feedback on your new app or app update early in its development and make sure your users are happy with the results. You can test two different versions on two different groups at the same time, such as testing a newer version with your employees first, and a more mature version with a group of external testers. &lt;/p&gt;

&lt;p&gt;The beta testing is private on Google Play, and you can specify who gets these versions by adding Google Groups and Google+ Communities. Users give you feedback privately rather than through public reviews. When you’re satisfied that your new version is ready, you can now do a staged rollout to a percentage of your userbase. To give you more flexibility in light of beta testing and help get your whole team involved in the Developer Console, we will soon launch additional access controls.&lt;/p&gt;

&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/-4XV7S6DPBoE/UZZYqVFEtjI/AAAAAAAACP0/6_2ganMhdWQ/s1600/screenshot-alpha.png" imageanchor="1" &gt;&lt;img border="0" src="http://1.bp.blogspot.com/-4XV7S6DPBoE/UZZYqVFEtjI/AAAAAAAACP0/6_2ganMhdWQ/s1600/screenshot-alpha.png" style="border:2px solid #ddd;width:660px;" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;h3 style="margin-top:1.25em"&gt;Localization improvements&lt;/h3&gt;
&lt;p&gt;We’re collaborating with Google's internationalization team to make translating your app into new languages easier than ever. You can &lt;strong&gt;purchase professional translations&lt;/strong&gt; of your apps from independent providers through the Google Play Developer Console. You can upload the strings you want translated, select the languages you want to translate into, and select your translation vendor based on time and price. If you’re interested in translating your apps with this feature, sign up to be a part of the preview in the Developer Console today on the APK page.&lt;/p&gt;

&lt;p&gt;The new &lt;strong&gt;optimization tips for localization&lt;/strong&gt; will help you identify new potential opportunities for global expansion based on popular languages for your app’s users and category. To fully localize your app into a language, you need to translate the strings in an APK, translate your Google Play store listing, and upload localized graphics. The optimization tips will also let you know if you’re missing any of these pieces.&lt;/p&gt;

&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/-1QdfLqtDags/UZZZkTlaylI/AAAAAAAACQA/s5MRy1a_Gwg/s1600/screenshot_Optimisation_localisation-crop.png" imageanchor="1" &gt;&lt;img border="0" src="http://3.bp.blogspot.com/-1QdfLqtDags/UZZZkTlaylI/AAAAAAAACQA/s5MRy1a_Gwg/s1600/screenshot_Optimisation_localisation-crop.png" style="border:2px solid #ddd;width:660px;" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;h3 style="margin-top:1.25em"&gt;New Analytics and monetization features&lt;/h3&gt;
&lt;p&gt;Getting better revenue and engagement data has been another key developer request, as developers told us that they check their revenue and stats constantly. New revenue charts in the Developer Console allow you to see your app’s &lt;strong&gt;daily revenue and summary figures&lt;/strong&gt;, and you can filter the data by country. Coming soon, Google Play and Google Analytics are teaming up to bring you better insight into your users. &lt;strong&gt;Google Analytics&lt;/strong&gt; will start showing Google Play views and installs for each campaign, while Google Play will show Google Analytics engagement metrics. &lt;/p&gt;

&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/-NkZ4bx5m4gc/UZWTfivvpAI/AAAAAAAACPk/AG4L3cRSFTU/s1600/screenshot_financialData-crop.png" imageanchor="1" &gt;&lt;img border="0" src="http://4.bp.blogspot.com/-NkZ4bx5m4gc/UZWTfivvpAI/AAAAAAAACPk/AG4L3cRSFTU/s1600/screenshot_financialData-crop.png" style="border:2px solid #ddd;width:660px;" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;For those of you using in-app billing, we’ve heard your feedback and made some improvements to reduce your development time and costs. Your test accounts will now able to make &lt;strong&gt;in-app test purchases&lt;/strong&gt; without those transactions actually being charged, but everything else works the same as it would for a real user. &lt;/p&gt;

&lt;p&gt;In a few weeks, we will launch a new Order Status API, which allows you to verify the status of an in-app order from your servers.  We will also be launching a tool for automating downloads of financial reports. Finally, the new Google Wallet Merchant Center is continuing to roll out with enhanced reporting, additional analytics and many other enhancements.&lt;/p&gt;

&lt;h3 style="margin-top:1.25em"&gt;Google Play for Education coming soon&lt;/h3&gt;
&lt;p&gt;You'll soon be able to offer apps to schools through Google Play for Education, which launches later this year to K-12 schools in the United States. This online destination will allow schools to discover, purchase, and distribute apps to their students. Visit &lt;a href="http://developer.android.com/edu"&gt;developer.android.com/edu&lt;/a&gt; to get started creating or optimizing your apps for schools today.&lt;/p&gt;

&lt;!-- Watch I/O talks about Google Play
You can watch Google I/O talks about Google Play, including What’s new for developers in Google Play, Making money on Google Play, and Getting Discovered on Google Play. Thanks for being a big part of Google Play’s success, and we look forward to more feedback from you. --&gt;

&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/8NmbDfKB3FM" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;a href="https://plus.google.com/108967384991768947849/posts/8NmbDfKB3FM" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/8NmbDfKB3FM" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32"&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=nNcJX0pZbQA:YOcnG05rEDA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=nNcJX0pZbQA:YOcnG05rEDA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=nNcJX0pZbQA:YOcnG05rEDA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/nNcJX0pZbQA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2154620954893321382?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2154620954893321382?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/nNcJX0pZbQA/new-ways-to-optimize-your-business-in.html" title="New Ways to Optimize Your Business in Google Play" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-IF-1-1kA0sg/UYwTidxdi3I/AAAAAAAAAEU/ellLeQ-E1vs/s72-c/google-io-lockup-2.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2013/05/new-ways-to-optimize-your-business-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IGQXszeip7ImA9WhBbF0g.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-8019275771485717173</id><published>2013-05-16T12:17:00.000-07:00</published><updated>2013-05-16T18:52:00.582-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-16T18:52:00.582-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Play services" /><category scheme="http://www.blogger.com/atom/ns#" term="Google+" /><category scheme="http://www.blogger.com/atom/ns#" term="IO2013" /><category scheme="http://www.blogger.com/atom/ns#" term="GCM" /><category scheme="http://www.blogger.com/atom/ns#" term="Location" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Play game services" /><title>Social Gaming, Location, and More in Google Play Services</title><content type="html">&lt;em&gt;Posted by Greg Hartrell, Angana Ghosh, Francesco Nerieri, Francis Ma, and the Google Play services team&lt;/em&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="151" src="http://1.bp.blogspot.com/-IF-1-1kA0sg/UYwTidxdi3I/AAAAAAAAAEU/ellLeQ-E1vs/s200/google-io-lockup-2.png" width="200"&gt;&lt;/div&gt;

&lt;p&gt;Some of the most exciting Android announcements at Google I/O this year are part of our latest Google Play services release, version 3.1.&lt;/p&gt;

&lt;p&gt;The new version brings you Google Play games services, part of a new cloud-integrated platform for social gaming based on Google+ identity. Also included are location-based services that make it easier to build efficient location-aware apps. For apps using the popular Google Cloud Messaging platform, you can now take advantage of XMPP messaging and easier setup. Finally, Cross-Platform Single Sign On for Google+ Sign-In is now available to your apps.&lt;/p&gt;

&lt;p&gt;You can get started using these APIs and services right away—Google Play services 3.1 is already rolling out to Android devices across the world, with support reaching all the way back to Froyo.&lt;/p&gt;

&lt;h3 style="margin-top:1.25em"&gt;Google Play games services&lt;/h3&gt;


&lt;div style="float:right;margin:1em 0em 2em 1.5em;"&gt;&lt;a href="http://4.bp.blogspot.com/-D1zcPUc7-PA/UZRwWK78IWI/AAAAAAAACOg/_ROjSQEefWw/s1600/games-framed.png" imageanchor="1"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-D1zcPUc7-PA/UZRwWK78IWI/AAAAAAAACOg/_ROjSQEefWw/s320/games-framed.png" style="width:400px;"&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Games are always popular with Android developers, and the &lt;a href="http://googledevelopers.blogspot.com/2013/05/introducing-google-play-game-services.html"&gt;announcement of Google Play game services&lt;/a&gt; raised the volume even more.&lt;/p&gt;

&lt;p&gt;Google Play games services lets you make your games more social, with &lt;b&gt;achievements&lt;/b&gt;,&lt;b&gt; leaderboards&lt;/b&gt;, and &lt;b&gt;multiplayer&lt;/b&gt;, and they help you extend your user’s games across multiple devices by &lt;b&gt;storing game saves and settings in the cloud&lt;/b&gt;.&lt;/p&gt;  

&lt;p style="cledar:both;"&gt;Several great Android games are already using these new game services, including &lt;a href="https://play.google.com/store/apps/details?id=com.twodboy.worldofgoofull"&gt;World of Goo&lt;/a&gt;, &lt;a href="https://play.google.com/store/apps/details?id=com.noodlecake.ssg2"&gt;Super Stickman Golf 2&lt;/a&gt;, &lt;a href="https://play.google.com/store/apps/details?id=com.vectorunit.yellow"&gt;Beach Buggy Blitz&lt;/a&gt;, &lt;a href="https://play.google.com/store/apps/details?id=com.ironhidegames.android.kingdomrush"&gt;Kingdom Rush&lt;/a&gt;, &lt;a href="https://play.google.com/store/apps/details?id=com.glu.ewarriors2"&gt;Eternity Warriors 2&lt;/a&gt;, and &lt;a href="https://play.google.com/store/apps/details?id=com.hemispheregames.osmos"&gt;Osmos&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can take advantage of the new services right away using the games services SDK included in Google Play services.  For all the details, check out the Google Play games services &lt;!-- developer --&gt; &lt;a href="https://developers.google.com/games/"&gt;documentation&lt;/a&gt;.&lt;/p&gt;


&lt;div style="float:left;margin:2em 1.5em .5em 0em;padding:2em 0 0 .5em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-D8lQd7hfU9g/UZRr0WZtx-I/AAAAAAAACN4/B0ESFC_Jkiw/s1600/gps-location.png" style="width:260px"&gt;&lt;/div&gt;

&lt;h3 style="margin-top:1.25em"&gt;Location APIs&lt;/h3&gt;

&lt;p&gt;If you build location-aware Android apps, you’ll want to check out the &lt;a href="http://developer.android.com/google/play-services/location.html"&gt;new location APIs&lt;/a&gt;. They make it easy to build accurate, fast, and efficient apps, with new contextual features. &lt;/p&gt;


&lt;p&gt;The &lt;b&gt;Fused Location Provider&lt;/b&gt; intelligently manages the underlying location technology and gives you the best location according to your needs. We’ve simplified the location APIs and completely rewritten our location algorithm to make location more accurate, flexible and use less battery. &lt;/p&gt;

&lt;p&gt;Using the new &lt;b&gt;geofencing API&lt;/b&gt;, your app can set up geographic boundaries around specific locations and then receive notifications when the user enters or leaves those areas. &lt;/p&gt;

&lt;p&gt;With apps becoming increasingly contextual, understanding what the user is doing is critical to surfacing the right content. A new &lt;b&gt;activity recognition API&lt;/b&gt; makes it easy to check the the user’s current activity — still, walking, cycling, and in-vehicle — with very efficient use of the battery.  We use low-power sensors and machine-learning classifiers to recognize the activity, giving you both both high accuracy and low battery usage.&lt;/p&gt;

&lt;p&gt;To learn more, head over to our training classes at &lt;a href="http://developer.android.com/training/location/index.html"&gt;Making Your App Location Aware&lt;/a&gt; or dive directly into the &lt;a href="http://developer.android.com/reference/com/google/android/gms/location/package-summary.html"&gt;reference docs&lt;/a&gt;. &lt;/p&gt;

&lt;h3 style="margin-top:1.25em"&gt;Google Cloud Messaging&lt;/h3&gt;

&lt;p&gt;We’ve added APIs to make it easier to set up GCM in your apps, and in the service itself we’ve added new messaging capabilities for your apps to use.&lt;/p&gt;

&lt;p&gt;A new &lt;b&gt;registration API&lt;/b&gt; lets your app register with the service using a single method call and begin receiving messages as soon as the call returns.&lt;/p&gt;

&lt;div class="sidebox-wrapper" style="float: right;
clear: right;
margin: 0 0 0 20px;
padding: 0 0 20px;"&gt;
&lt;div class="sidebox" style="width: 226px;margin-top:5em;
font-size: 13px;
line-height: 18px;
border-left: 2px solid #bbb;
float: right;
padding: 0 0 0 10px;
margin: 0 0 1em 20px;"&gt;
&lt;h2&gt;Sign Up for Early Access&lt;/h2&gt;
&lt;p&gt;If you’d like to try out CCS messaging or the User Notifications API, please &lt;a href="https://services.google.com/fb/forms/gcm/"&gt;sign up for early access&lt;/a&gt;. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;In the GCM service itself we’ve added support for &lt;b&gt;messaging over XMPP&lt;/b&gt; with the new GCM Cloud Connection Server (CCS). Your servers now have a persistent connection over which to send large numbers of messages, very quickly, and with no overhead. New APIs in Google Play services let apps send messages back upstream to third-party servers using CCS, without needing to manage network connections. This helps keep battery and data usage to a minimum.&lt;/p&gt;

&lt;p&gt;Also new in the GCM service is a &lt;b&gt;User Notifications API&lt;/b&gt;. This new API lets you synchronize notifications across a user’s multiple devices — when the user dismisses a notification on one device, the notification disappears automatically from all the other devices. To get started with GCM, head over to the &lt;a href="http://developer.android.com/google/gcm/index.html"&gt;developer documentation&lt;/a&gt;.&lt;/p&gt;


&lt;h3 style="margin-top:1.25em"&gt;Google+ Cross-Platform Single Sign On&lt;/h3&gt;

&lt;p&gt;Many people use apps on multiple devices throughout the day, switching between their laptops, tablets, and mobile devices. After signing-in to an app on one device, it’s natural that when they pick up a different device and use the same app, they would expect to be signed in there as well.&lt;/p&gt;

&lt;p&gt;To help you provide this kind of seamless transition between platforms and stay connected with users across devices, we’re adding &lt;b&gt;Cross-Platform Single Sign On&lt;/b&gt; to our Google+ Sign-In capabilities.&lt;/p&gt; 

&lt;p&gt;If your app is already using Google+ Sign-In, you’ve already got support for Cross-Platform Single Sign On.  This feature will be enabled automatically over the coming days. &lt;/p&gt;

&lt;p&gt;Cross-Platform Single Sign On gives you a great way to build longer-running, cross-platform user experiences, and it dovetails perfectly with the new Google Play games services for bridging game state across devices using the cloud. &lt;/p&gt;

&lt;p&gt;To learn more about Google+ Sign-In, check out &lt;a href="http://developers.google.com/+"&gt;http://developers.google.com/+&lt;/a&gt;.&lt;/p&gt;

&lt;h3 style="margin-top:1.25em;clear:both;"&gt;More About Google Play Services&lt;/h3&gt;

&lt;p&gt;Google Play Services is our platform for offering you better integration with Google products, and providing new capabilities to use within your apps. To learn more about Google Play services and the APIs available to you through it, visit the Google Services area of the Android Developers site.&lt;/p&gt;

&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/ADP1UJXZc7c" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;a href="https://plus.google.com/108967384991768947849/posts/ADP1UJXZc7c" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/ADP1UJXZc7c" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32"&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=qlNC2g64dFo:6o6ztHtbZpQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=qlNC2g64dFo:6o6ztHtbZpQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=qlNC2g64dFo:6o6ztHtbZpQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/qlNC2g64dFo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8019275771485717173?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8019275771485717173?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/qlNC2g64dFo/social-gaming-location-and-more-in.html" title="Social Gaming, Location, and More in Google Play Services" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-IF-1-1kA0sg/UYwTidxdi3I/AAAAAAAAAEU/ellLeQ-E1vs/s72-c/google-io-lockup-2.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2013/05/social-gaming-location-and-more-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMCQHw_fCp7ImA9WhBbFkg.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-3641203937597545499</id><published>2013-05-15T14:01:00.000-07:00</published><updated>2013-05-15T14:14:21.244-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-15T14:14:21.244-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IO2013" /><category scheme="http://www.blogger.com/atom/ns#" term="Android Studio" /><category scheme="http://www.blogger.com/atom/ns#" term="SDK Tools" /><title>Android Studio: An IDE built for Android</title><content type="html">&lt;em&gt;Posted by &lt;a href="https://plus.google.com/109385828142935151413"&gt;Xavier Ducrohet&lt;/a&gt;, Tor Norbye, Katherine Chou&lt;/em&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="151" src="http://1.bp.blogspot.com/-IF-1-1kA0sg/UYwTidxdi3I/AAAAAAAAAEU/ellLeQ-E1vs/s200/google-io-lockup-2.png" width="200" /&gt;&lt;/div&gt;

&lt;div style="float:right"&gt;&lt;a href="http://1.bp.blogspot.com/-u5dfSsMOMC0/UZO_5DC_W9I/AAAAAAAACM8/YCMn15HPzpE/s1600/Studio_table.png" imageanchor="1" &gt;&lt;img border="0" src="http://1.bp.blogspot.com/-u5dfSsMOMC0/UZO_5DC_W9I/AAAAAAAACM8/YCMn15HPzpE/s320/Studio_table.png" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Today at Google I/O we announced a new IDE that’s built with the needs of Android developers in mind. It’s called Android Studio, it’s free, and it’s available now for you to try as an early access preview. &lt;/p&gt;

&lt;p&gt;To develop Android Studio, we cooperated with &lt;a href="http://www.jetbrains.com" target="_android"&gt;JetBrains&lt;/a&gt;, creators of one of the most advanced Java IDEs available today. Based on the powerful, extensible &lt;a href="http://www.jetbrains.com/idea/" target="_android"&gt;IntelliJ IDEA Community Edition&lt;/a&gt;, we've added features that are designed specifically for Android development, that simplify and optimize your daily workflow. &lt;/p&gt;

&lt;h3 style="margin-top:1.25em"&gt;Extensible build tools&lt;/h3&gt;

&lt;p&gt;We know you need a build system that adapts to your project requirements but extends further to your larger development environment.  Android Studio uses a new build system based on &lt;a href="http://www.gradle.org/" target="_android"&gt;Gradle&lt;/a&gt; that provides flexibility, customized build flavors, dependency resolution and much more.&lt;/p&gt;

&lt;p&gt;This new build system allows you to build your projects in the IDE as well as on your continuous integrations servers. The combination lets you easily manage complex build configurations natively, throughout your workflow, across all of your tools. Check out the &lt;a href="http://tools.android.com/tech-docs/new-build-system/user-guide"&gt;preview documentation&lt;/a&gt; to get a better idea of what the new build can do.&lt;/p&gt;

&lt;div style="float:left;margin:1em 1.5em 1em 0em;"&gt;&lt;a href="http://2.bp.blogspot.com/-ge8VemLH9VI/UZOW_1yNynI/AAAAAAAACMs/qO8279IR7XQ/s1600/laptop600.png" imageanchor="1" &gt;&lt;img border="0" src="http://2.bp.blogspot.com/-ge8VemLH9VI/UZOW_1yNynI/AAAAAAAACMs/qO8279IR7XQ/s320/laptop600.png" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;h3 style="margin-top:1.25em"&gt;Powerful code editing&lt;/h3&gt;

&lt;p&gt;Android Studio includes a powerful code editor. It is based on the IntelliJ IDEA, which supports features such as smart editing, advanced code refactoring, and deep static code analysis. &lt;/p&gt;

&lt;p&gt;Smart editing features such as inline resource lookups make it easier to read your code, while giving you instant access to edit code the backing resources. Advanced &lt;a href="http://www.jetbrains.com/idea/features/refactoring.html" target="_android"&gt;code refactoring&lt;/a&gt; gives you the power to transform your code across the scope of the entire project, quickly and safely. &lt;/p&gt;

&lt;p&gt;We added static code analysis for Android development, helping you identify bugs more quickly. On top of the hundreds of code inspections that IntelliJ IDEA provides, we’ve added custom inspections. For example, we’ve added metadata to the Android APIs, that flag which methods can return null and which can’t, which constants are allowed for which methods, and so on. Android Studio uses that data to analyze your code and find potential errors. &lt;/p&gt;

&lt;div style="float:right;widdth:450px;clear:both;margin:1em 0em 0em 1em;"&gt;&lt;a href="http://1.bp.blogspot.com/-OPsaCBNEWyI/UZONuqaXtAI/AAAAAAAACMQ/kDijrPnCXSg/s1600/ide-refactor.png" imageanchor="1" &gt;&lt;img border="0" src="http://1.bp.blogspot.com/-OPsaCBNEWyI/UZONuqaXtAI/AAAAAAAACMQ/kDijrPnCXSg/s320/ide-refactor.png" style="heidght:400px" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="float:right;widdth:450px;clear:both;margin:1em 0em 0em 1em;"&gt;&lt;a href="http://3.bp.blogspot.com/-MEwVFZr98Cc/UZONunjMAKI/AAAAAAAACMM/vIABJTk2TP0/s1600/ide-smart.png" imageanchor="1" &gt;&lt;img border="0" src="http://3.bp.blogspot.com/-MEwVFZr98Cc/UZONunjMAKI/AAAAAAAACMM/vIABJTk2TP0/s320/ide-smart.png" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="float:right;widdth:450px;clear:both;margin:1em 0em 1.5em 1em;"&gt;&lt;a href="http://1.bp.blogspot.com/-1NdPNHR_7Rc/UZPMuyMfkoI/AAAAAAAACNc/jXIvhBV7MrU/s1600/ide-resourcelookup2.png" imageanchor="1" &gt;&lt;img border="0" src="http://1.bp.blogspot.com/-1NdPNHR_7Rc/UZPMuyMfkoI/AAAAAAAACNc/jXIvhBV7MrU/s320/ide-resourcelookup2.png" /&gt;&lt;/a&gt;&lt;/div&gt; 

&lt;h3 style="margin-top:1.25em"&gt;Smoother and richer GUI&lt;/h3&gt;

&lt;p&gt;Over the past year we’ve added some great drag-and-drop UI features to ADT and we’re in the process of adding them all into Android Studio. This release of Android Studio lets you preview your layouts on different device form factors, locales, and platform versions. Below you can see a multi-configuration preview side by side XML editing.&lt;/p&gt;

&lt;h3 style="margin-top:1.25em"&gt;Easy access to Google services &lt;br /&gt;within Android Tools&lt;/h3&gt;

&lt;p&gt;We wanted to make it easy for you to harness the power Google services right from your IDE. To start, we’ve made it trivial to add services such a cloud-based backend with integrated &lt;a href="http://developer.android.com/google/gcm/index.html"&gt;Google Cloud Messaging&lt;/a&gt; (GCM) to your app, directly from the IDE. &lt;/p&gt;

&lt;p&gt;We’ve also added a new plugin called &lt;a href="http://developer.android.com/sdk/installing/installing-adt.html#tmgr"&gt;ADT Translation Manager Plugin&lt;/a&gt; to assist with localizing your apps. You can use the plugin to export your strings to the Google Play Developer Console for translation, then download and import your translations back into your project. &lt;/p&gt;

&lt;h3 style="margin-top:1.25em"&gt;Open source development&lt;/h3&gt;

&lt;p&gt;Starting next week we’ll be doing all of our development in the open, so you can follow along or make your own contributions. You can find the Android Studio project in AOSP at  &lt;a href="https://android.googlesource.com/platform/tools/adt/idea/"&gt;https://android.googlesource.com/platform/tools/adt/idea/&lt;/a&gt;&lt;/p&gt;


&lt;h3 style="margin-top:1.25em"&gt;Try Android Studio and give us feedback&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://developer.android.com/sdk/installing/studio.html"&gt;Give Android Studio a try&lt;/a&gt; and send us your feedback! It's free, and the download bundle includes includes everything you need, including the IDE, the latest SDK tools, the latest Android platform, and more. &lt;!--For documentation, take a look at Getting Started, Migrating an Eclipse Project, and Android Studio Protips--&gt;. &lt;/p&gt;

&lt;p&gt;Note: This is an early access preview intended for early adopters and testers who want to influence the direction of the Android tools. If you have a production app with a large installed base, there’s no need to migrate your development to the new tools at this time. We will continue to support Eclipse as a primary platform for development.&lt;/p&gt;

&lt;p&gt;If you have feedback on the tools, you can send it to us using the &lt;a href="https://code.google.com/p/android/issues/entry?template=Android%20Studio%20bug&amp;comment=Build:%20AI-130.675642,%2020130514" target="_android"&gt;Android Studio issue tracker.&lt;/a&gt;&lt;/p&gt;

&lt;br /&gt;
&lt;!--[Interactive video]--&gt;  &lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/e0fXuyL0xVU" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:2em; margin-left: 70px;" width="560"&gt;&lt;/iframe&gt;  &lt;br /&gt;



&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/Sr8LNyHDuax" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/108967384991768947849/posts/Sr8LNyHDuax/" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/Sr8LNyHDuax" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=DNWnhCEpCZY:BuVtgJZuE_4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=DNWnhCEpCZY:BuVtgJZuE_4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=DNWnhCEpCZY:BuVtgJZuE_4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/DNWnhCEpCZY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3641203937597545499?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3641203937597545499?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/DNWnhCEpCZY/android-studio-ide-built-for-android.html" title="Android Studio: An IDE built for Android" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-IF-1-1kA0sg/UYwTidxdi3I/AAAAAAAAAEU/ellLeQ-E1vs/s72-c/google-io-lockup-2.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2013/05/android-studio-ide-built-for-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UAQn09eip7ImA9WhBbFkk.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-2684685408622719689</id><published>2013-05-15T12:32:00.001-07:00</published><updated>2013-05-15T13:20:43.362-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-15T13:20:43.362-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Play services" /><category scheme="http://www.blogger.com/atom/ns#" term="Developer Console" /><category scheme="http://www.blogger.com/atom/ns#" term="IO2013" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Android Studio" /><title>Android at Google I/O 2013: Keynote Wrapup</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="151" src="http://1.bp.blogspot.com/-IF-1-1kA0sg/UYwTidxdi3I/AAAAAAAAAEU/ellLeQ-E1vs/s200/google-io-lockup-2.png" width="200" /&gt;&lt;/div&gt;

&lt;p&gt;The last year has been an exciting one for Android developers, with an incredible amount of momentum. In fact, over 48 billion apps have been downloaded from Google Play to date, with over 2.5 billion app downloads in the last month alone. &lt;/p&gt;

&lt;p&gt;This week, at Google I/O, our annual developer conference, we’re celebrating this momentum, and putting on stage a number of new features and advancements both for the Android platform and Google Play, to help you design, develop and distribute great apps to your users. &lt;/p&gt;

&lt;p&gt;We just wrapped up the keynote, and wanted to share a number of those new features; we’ll be spotlighting some of them throughout the week both here, on Google+, and in 36 Android sessions and sandboxes at the Moscone center in San Francisco (with many of the sessions livestreamed at developer.google.com). Enjoy!&lt;/p&gt;

&lt;h3 style="margin-top:1.25em;"&gt;Google Play Services 3.1&lt;/h3&gt;

&lt;p&gt;Google Play Services is our platform for bringing you easier integration with Google products and new capabilities to use in your apps. Today we announced a new version of Google Play Services that has some great APIs for developers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Google Play games services&lt;/strong&gt; give you great new social features that you can add to your games &amp;nbsp; achievements, leaderboards, cloud save, and real-time multiplayer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Location APIs&lt;/strong&gt; make it easy to add location- and context-awareness to your apps through a  fused location provider, geofencing, and activity recognition&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Cloud Messaging enhancements&lt;/strong&gt; let you use bidirectional XMPP messaging between server and devices and dismiss notifications&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-Platform Single Sign On&lt;/strong&gt;, which lets your users sign in once, for all of their devices using &lt;span style="white-space:nowrap"&gt;Google+ Sign-In&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 style="margin-top:1.25em;"&gt;Android Studio: A new IDE for Android development&lt;/h3&gt;

&lt;p&gt;Today we announced a new Integrated Development Environment (IDE) built just for Android, with the needs of Android developers in mind. It’s called &lt;strong&gt;Android Studio&lt;/strong&gt;, it’s free, and it’s available now to try as an early access preview.&lt;/p&gt;

&lt;p&gt;To build Android Studio, we worked with with &lt;a href="http://www.jetbrains.com"  target="_android"&gt;JetBrains&lt;/a&gt;, creators of one of the most advanced Java IDEs available today. Based on the powerful, extensible IntelliJ IDEA Community Edition, we've added features and capabilities that are designed specifically for Android development, to simplify and optimize your daily workflow for creating Android apps.&lt;/p&gt;

&lt;h3 style="margin-top:1.25em;"&gt;Google Play Developer Console: a better distribution experience&lt;/h3&gt;

&lt;p&gt;Building awesome Android apps is only part of the story. Today we announced great new features in the Google Play Developer Console that give you more control over how you distribute your app and insight into how your app is doing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;App translation service&lt;/strong&gt;: a pilot program that lets you purchase professional translations for your app directly from the Developer Console. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Revenue graphs&lt;/strong&gt;: a new tab in the Developer Console gives you a summary of your app global app revenue over time. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alpha and beta testing&lt;/strong&gt; and &lt;strong&gt;staged rollouts&lt;/strong&gt;: you can now distribute your app to controlled alpha and beta test groups, or do staged rollouts to specific percentages of your userbase.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimization tips&lt;/strong&gt;: design your app for tablets and understand how to expand your app into new language markets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Analytics&lt;/strong&gt;: launching later this summer, your Google Analytics usage stats will be viewable right in the Developer Console.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Referral tracking&lt;/strong&gt;: also launching later this summer, you’ll get a new report in Google Analytics to show what blogs, campaigns, and ads are driving your installs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 style="margin-top:1.25em;"&gt;Follow the Android Sessions&lt;/h3&gt;

&lt;p&gt;Join us for the Android sessions today and through the week by livestream. Visit the &lt;a href="https://developers.google.com/events/io/"&gt;I/O Live Stream schedule&lt;/a&gt; for details.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=eVtBo5mENcQ:p7wO2BZAmPo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=eVtBo5mENcQ:p7wO2BZAmPo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=eVtBo5mENcQ:p7wO2BZAmPo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/eVtBo5mENcQ" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2684685408622719689?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2684685408622719689?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/eVtBo5mENcQ/android-at-google-io-2013-keynote-wrapup.html" title="Android at Google I/O 2013: Keynote Wrapup" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-IF-1-1kA0sg/UYwTidxdi3I/AAAAAAAAAEU/ellLeQ-E1vs/s72-c/google-io-lockup-2.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2013/05/android-at-google-io-2013-keynote-wrapup.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YARXg_fip7ImA9WhBbFEs.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-8856078627233949685</id><published>2013-05-13T09:37:00.000-07:00</published><updated>2013-05-13T11:19:04.646-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-13T11:19:04.646-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Developer Console" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><category scheme="http://www.blogger.com/atom/ns#" term="User Support" /><title> All Google Play Developers Can Now Reply to User Reviews</title><content type="html">&lt;p&gt;&lt;em&gt;Posted by &lt;a href="https://plus.google.com/100189531984607939401/posts"&gt;Ellie Powers&lt;/a&gt;, Google Play team&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There are a lot of great things a developer can do to promote their app, but the best way for your app to take off is when a really happy user tells their friend about your app, who tells their friend, who tells someone else &amp;mdash; you get the picture.&lt;/p&gt;

&lt;p&gt;That’s why it’s always been a priority for us to strengthen that conversation between developers and their users. Google Play is now connected with Google+, and by associating reviews with an identity, the quality of reviews has increased tremendously (in addition to letting users find reviews they trust).&lt;/p&gt;

&lt;p&gt;We’re happy to announce today that all developers on Google Play can now reply to user reviews. You can reply to user reviews in the Google Play Developer Console, and your replies are shown publicly below the corresponding user review on Google Play. Users receive an email notification when you reply and can either reply to you directly by email, or update their review if they choose to do so -- though keep in mind that users are not obligated to update their reviews. You can also update your reply at any time.&lt;/p&gt;

&lt;p&gt;Developers who have been using this feature have told us that the following best practices are most effective in improving their apps and building strong relationships with their users:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check reviews frequently, and involve people from all parts of your organization&lt;/li&gt;
&lt;li&gt;Identify and prioritize bugs based on user impact&lt;/li&gt;
&lt;li&gt;Let users know when their problems are resolved&lt;/li&gt;
&lt;li&gt;Reply constructively to both negative and positive reviews&lt;/li&gt;
&lt;li&gt;Refer users to documentation or other support channels&lt;/li&gt;
&lt;li&gt;Get ideas about new improvements or features&lt;/li&gt;
&lt;li&gt;Thank the users who are your biggest advocates&lt;/li&gt;
&lt;/ul&gt;

&lt;img border="0" width="700" 
style="border:1px solid #ddd;border-radius: 6px;margin-top:1em;" src="http://4.bp.blogspot.com/-W7nmPciNlG0/UXgyKF6R8cI/AAAAAAAACGU/YNPDn9d2TZY/s1600/reply-reviews.png" /&gt;

&lt;p&gt;Before replying to user reviews, it is important to review the &lt;a href="https://support.google.com/googleplay/android-developer/answer/138230"&gt;posting guidelines&lt;/a&gt; to be sure that you are using this feature in compliance with Google Play’s policies at all times. The reply to each user’s review will be public, so prospective users will see if you provide consistently high quality customer support. Read the posting guidelines, and start connecting with users today.&lt;/p&gt;

&lt;p&gt;Conversations are meant to be two-sided, and facilitating discussion between developers and users will ultimately yield better apps, to the benefit of everyone.&lt;/p&gt;

&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/SJYWKLXnm5o" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/108967384991768947849/posts/SJYWKLXnm5o" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/SJYWKLXnm5o" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=X590Q2ckjpw:5gXZ4hTSfmE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=X590Q2ckjpw:5gXZ4hTSfmE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=X590Q2ckjpw:5gXZ4hTSfmE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/X590Q2ckjpw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8856078627233949685?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8856078627233949685?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/X590Q2ckjpw/all-google-play-developers-can-now.html" title=" All Google Play Developers Can Now Reply to User Reviews" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://android-developers.blogspot.com/2013/05/all-google-play-developers-can-now.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UGRXw4fip7ImA9WhBbEU4.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-2492349301518668135</id><published>2013-05-09T14:33:00.000-07:00</published><updated>2013-05-09T14:33:44.236-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-09T14:33:44.236-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IO2013" /><title>Android at Google I/O 2013</title><content type="html">&lt;p&gt;&lt;em&gt;Posted by &lt;a href="https://plus.google.com/+RetoMeier/posts"&gt;Reto Meier&lt;/a&gt;, Android Developer Relations Tech Lead&lt;/em&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="151" src="http://1.bp.blogspot.com/-IF-1-1kA0sg/UYwTidxdi3I/AAAAAAAAAEU/ellLeQ-E1vs/s200/google-io-lockup-2.png" width="200" /&gt;&lt;/div&gt;&lt;p&gt;Google I/O 2013 is less than a week away, and the &lt;a href="https://developers.google.com/events/io/sessions#t-android"&gt;full session schedule&lt;/a&gt; - featuring 34 Android sessions (and 3 codelabs) - is now available. We have great Android content spread across three packed days - covering everything from design, development, and distribution.&lt;/p&gt;&lt;p&gt;Not everyone can come to San Francisco to join us in person, so we’ll be &lt;a href="http://googledevelopers.blogspot.com/2013/05/were-going-live-from-google-io.html"&gt;streaming a selection&lt;/a&gt; of the best content as part of Google Developers Live. In addition to the keynote and four session streams (including one dedicated to Android), you’ll see one-on-one product deep dives, executive interviews, and Sandbox walkthroughs broadcast from the GDL stage at I/O. All the live feeds will be available on the &lt;a href="https://developers.google.com/events/io/"&gt;Google I/O&lt;/a&gt; homepage from the comfort of your own home - or join our Google Developer Groups to experience Google I/O as part of &lt;a href="https://developers.google.com/events/io/io-extended"&gt;Google I/O Extended&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Whether you’re attending in person or virtually, you can follow all the action using the official &lt;a href="https://play.google.com/store/apps/details?id=com.google.android.apps.iosched"&gt;Google I/O 2013 conference companion app&lt;/a&gt;! It supports devices running Android 2.3+, and is optimized for phones and tablets of all shapes and sizes.&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="288" src="http://1.bp.blogspot.com/-SymQNp7oWAA/UYwTi7AdgHI/AAAAAAAAAEc/1k9_LkNwiqU/s400/png.png" width="400" /&gt;&lt;/div&gt;&lt;p&gt;Use it to view the conference sessions agenda and create your own personal schedule with reminders, view details on sessions, code labs, office hours, and speakers, track announcements, and even view the keynote and live streamed sessions throughout the conference!&lt;/p&gt;&lt;p&gt;If you’re attending in person, you can use it to guide yourself around the venue using the vector-based conference map, Android Beam session details, scan fellow attendee badges, and provide feedback on the sessions you watch.&lt;/p&gt;&lt;p&gt;And stay tuned after I/O when every Google I/O technical session will also be posted to GDL and YouTube, and the conference app will be open sourced.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=MUhq5EQ3sMg:kQTJUE4WhQ0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=MUhq5EQ3sMg:kQTJUE4WhQ0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=MUhq5EQ3sMg:kQTJUE4WhQ0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/MUhq5EQ3sMg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2492349301518668135?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2492349301518668135?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/MUhq5EQ3sMg/android-at-google-io-2013.html" title="Android at Google I/O 2013" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-IF-1-1kA0sg/UYwTidxdi3I/AAAAAAAAAEU/ellLeQ-E1vs/s72-c/google-io-lockup-2.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2013/05/android-at-google-io-2013.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MGSXYzcSp7ImA9WhBVGU0.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-3108615197655166383</id><published>2013-04-25T09:32:00.001-07:00</published><updated>2013-04-25T10:03:48.889-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-25T10:03:48.889-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Developer Console" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><category scheme="http://www.blogger.com/atom/ns#" term="Tablets" /><title>Tablet Optimization Tips in the Google Play Developer Console</title><content type="html">&lt;p&gt;&lt;em&gt;Posted by &lt;a href="https://plus.google.com/100189531984607939401/posts"&gt;Ellie Powers&lt;/a&gt;, Google Play team&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;Last week we updated our guidelines for making great tablet apps and added the &lt;a href="http://android-developers.blogspot.com/2013/04/update-on-tablet-app-guidelines-and.html"&gt;ability to upload tablet screenshots&lt;/a&gt; that are shown preferentially in Google Play to users on those devices. Today we’re introducing a new Optimization Tips page in the Google Play Developer Console that lets you quickly see how your app is doing against basic guidelines for tablet app distribution and quality. &lt;/p&gt; 

&lt;p&gt;When you upload an app, the Developer Console now runs a series of checks to verify basic criteria from the &lt;a href="http://developer.android.com/distribute/googleplay/quality/tablet.html"&gt;Tablet App Quality Checklist&lt;/a&gt; and shows you any issues it finds  in the Optimization Tips page.&lt;/p&gt;

&lt;img border="0" width="700" 
style="border:1px solid #ddd;border-radius: 6px;"src="http://1.bp.blogspot.com/-w0gl8ttJFFo/UXgQDbepnuI/AAAAAAAACGE/nTanLxr3C7A/s1600/opt-tips-crop-720.png" /&gt;

&lt;p&gt;If you’re developing for tablets, make sure to &lt;a href="https://play.google.com/apps/publish"&gt;visit your Optimization Tips page&lt;/a&gt; to ensure that your app is delivering a great tablet experience.  If there are any issues listed, we recommend addressing them in your app as soon as possible and uploading a new binary for distribution, if needed.&lt;/p&gt;

&lt;p&gt;For ideas on how to design and build a great tablet app, including details on how to address issues listed in your Optimization Tips page, check out the &lt;a href="http://developer.android.com/distribute/googleplay/quality/tablet.html"&gt;Tablet App Quality Checklist&lt;/a&gt;. Remember that a great tablet experience goes well beyond these basic checks. Keep working to bring your tablet users the most polished UI and richest content possible.&lt;/p&gt;

&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/hLmKcS1eda2" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/108967384991768947849/posts/hLmKcS1eda2" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/hLmKcS1eda2" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=fgrMuOt1mXw:Ht5kJ6UI5z8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=fgrMuOt1mXw:Ht5kJ6UI5z8:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=fgrMuOt1mXw:Ht5kJ6UI5z8:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/fgrMuOt1mXw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3108615197655166383?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3108615197655166383?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/fgrMuOt1mXw/tablet-optimization-tips-in-google-play.html" title="Tablet Optimization Tips in the Google Play Developer Console" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://android-developers.blogspot.com/2013/04/tablet-optimization-tips-in-google-play.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08CQns-eCp7ImA9WhBVEUk.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-3021451396568447072</id><published>2013-04-16T12:38:00.000-07:00</published><updated>2013-04-16T12:51:03.550-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-16T12:51:03.550-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><category scheme="http://www.blogger.com/atom/ns#" term="Tablets" /><title>Update on Tablet App Guidelines and Screenshots</title><content type="html">&lt;p&gt;&lt;em&gt;Posted by &lt;a href="https://plus.google.com/100189531984607939401/posts"&gt;Ellie Powers&lt;/a&gt;, Google Play team&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;More and more, developers are investing in a full tablet experience for their apps and seeing those investments &lt;a href="http://developer.android.com/distribute/googleplay/spotlight/tablets.html"&gt;pay off big&lt;/a&gt;. Starting today, it’s even easier to show off those tablet apps to users and to understand what it takes to make a great tablet app.&lt;/p&gt;

&lt;p&gt;Many of you have already made optimizations to your apps to make them more beautiful and useful on tablets, and we’re giving you a way to showcase your application’s specialized tablet layouts. You’re now able to upload screenshots of your app running on 7” and 10” tablets to the Google Play Developer Console, and those screenshots are shown preferentially in Google Play to users on those devices. &lt;/p&gt;

&lt;p&gt;In October, we published the &lt;a href="http://developer.android.com/distribute/googleplay/quality/tablet.html"&gt;tablet app quality checklist&lt;/a&gt;, which shares best practices for creating tablet applications that users will love. We've updated this checklist with additional tips and guidelines, as well as more details on specific technical checks you should perform to ensure your app is correctly optimized for tablets. Soon, we’ll start surfacing tips based on our tablet app quality guidelines directly in the Google Play Developer Console, and we’ll use these guidelines to help users better discover tablet apps in Google Play.&lt;/p&gt;

&lt;p&gt;So &lt;a href="https://play.google.com/apps/publish"&gt;upload your tablet screenshots&lt;/a&gt; and confirm your app follows the &lt;a href="http://developer.android.com/distribute/googleplay/quality/tablet.html"&gt;quality guidelines&lt;/a&gt; today.&lt;/p&gt;

&lt;img border="0" width="700" 
style="border:1px solid #ddd;border-radius: 6px;"src="http://3.bp.blogspot.com/-XBN92CKxpaI/UW2VPfuCDrI/AAAAAAAACFU/rdXScleTb7Q/s1600/screenshots-example.jpeg" /&gt;

&lt;div style="display: inline-block; float: right; line-height: 0;margin-top:16px;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/LNTPcscdLyD" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/108967384991768947849/posts/LNTPcscdLyD" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/LNTPcscdLyD" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=zO0cB6Qy1dU:HEGuK4RSK6U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=zO0cB6Qy1dU:HEGuK4RSK6U:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=zO0cB6Qy1dU:HEGuK4RSK6U:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/zO0cB6Qy1dU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3021451396568447072?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3021451396568447072?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/zO0cB6Qy1dU/update-on-tablet-app-guidelines-and.html" title="Update on Tablet App Guidelines and Screenshots" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://android-developers.blogspot.com/2013/04/update-on-tablet-app-guidelines-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMERnk4eSp7ImA9WhBWFU4.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-4844650810070586034</id><published>2013-04-09T09:09:00.001-07:00</published><updated>2013-04-09T13:13:27.731-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-09T13:13:27.731-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><title>New Look, New Purchase Flow in Google Play</title><content type="html">&lt;em&gt;Posted by Purnima Kochikar, Director of Business Development, Games &amp; Applications&lt;/em&gt;

&lt;p&gt;Today we announced that a &lt;a href="http://officialandroid.blogspot.com/2013/04/a-fresh-new-look-for-google-play.html"&gt;new version of the Google Play Store app&lt;/a&gt; is rolling out worldwide to Android phones and tablets. This new app brings a redesigned UI that’s easier to use and showcases more great content for users. For developers, the new app offers more ways for your app to get noticed, as well as a new, simpler purchase flow.&lt;/p&gt;

&lt;div style="text-align:center;margin-left:auto;margin-right:auto;margin-top:1.5em;margin-bottom:1.25em"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-vCd20bAmTVw/UWPCNl8DfjI/AAAAAAAACD0/0sa0ilOxVl4/s1600/gpcombined-new.png" /&gt;&lt;/div&gt;

&lt;p&gt;The new UI is simple and easier to browse. Collections are front and center on the homepage,  helping users discover great content through recommendations and curated lists. Items in collections are now presented as cards, with a larger area for your app’s graphics and a larger touch target for users. Overall, the homepage surfaces more apps than before and highlights them more effectively right on the page. &lt;/p&gt;

&lt;div style="float:right;margin:1em 0 2em 1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-YQRzokxoJP0/UWQvsTT3m5I/AAAAAAAACEU/TfrmfRvNGmw/s1600/gp-purchase-dialog-crop.png" style="width:400px;" /&gt;&lt;/div&gt;

&lt;p&gt;Most important for apps that sell in-app products, the new UI offers a dramatically simplified, dialog-based purchase flow that lets users buy your products without leaving the context of the app. Your app remains active and visible behind the purchase dialogs. When the purchase is complete, users return directly to the place they left, without your app having to reconstruct its state. It’s especially powerful when combined with &lt;a href="http://android-developers.blogspot.com/2012/12/in-app-billing-version-3.html"&gt;In-app Billing v3&lt;/a&gt;, providing a faster and more reliable purchase flow.&lt;/p&gt;

&lt;p&gt;All of these changes build on the core features of Google Play. Our editorial team will continue to look for exemplary apps to showcase in Editors’ Choice and other collections, and our familiar top lists will continue to track the market performance of your app on an ongoing basis.&lt;/p&gt;

&lt;p&gt;Watch for the new Play Store app (version 4.0.25) coming to your devices soon. The rollout has already started and we expect all devices running Android 2.2 or higher to have received the update over the next few weeks. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=enR9Lw_Ff-o:GGfK62VYlwk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=enR9Lw_Ff-o:GGfK62VYlwk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=enR9Lw_Ff-o:GGfK62VYlwk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/enR9Lw_Ff-o" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4844650810070586034?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4844650810070586034?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/enR9Lw_Ff-o/new-look-new-purchase-flow-in-google.html" title="New Look, New Purchase Flow in Google Play" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-vCd20bAmTVw/UWPCNl8DfjI/AAAAAAAACD0/0sa0ilOxVl4/s72-c/gpcombined-new.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2013/04/new-look-new-purchase-flow-in-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUCQn0_fSp7ImA9WhBQEU8.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-1328828694007001145</id><published>2013-03-12T15:16:00.000-07:00</published><updated>2013-03-12T15:27:43.345-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-12T15:27:43.345-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Developer Console" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><title>Now is the time to switch to the new Google Play Developer Console</title><content type="html">&lt;p&gt;&lt;em&gt;Posted by &lt;a href="https://plus.google.com/100189531984607939401/posts"&gt;Ellie Powers&lt;/a&gt;, Google Play team&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://android-developers.blogspot.co.uk/2012/10/new-google-play-developer-console.html"&gt;new Google Play Developer Console&lt;/a&gt; is out of preview and is the default experience. In addition to offering all of the functionality of the old version, the new version features a streamlined publishing flow, store listings in more languages with language-specific graphics, and new user ratings statistics, so you’ll have better tools for delivering great Android apps that delight users. If you haven't already made the switch, now is the time, as we'll be retiring the former version on April 15 to focus our efforts on this new experience.&lt;/p&gt;

&lt;a href="http://1.bp.blogspot.com/-J4EAerQo2ec/UT93EwEaJ8I/AAAAAAAAB-0/7IFxieGTmRw/s1600/shots_apk-new.png" imageanchor="1" &gt;&lt;img border="0" src="http://1.bp.blogspot.com/-J4EAerQo2ec/UT93EwEaJ8I/AAAAAAAAB-0/7IFxieGTmRw/s320/shots_apk-new.png" style="float:right;border:2px solid #ddd;margin:0em 0em 1em 1.5em;" /&gt;&lt;/a&gt;

&lt;p&gt;The new Developer Console brings you new functionality built on top of a quick-to-navigate user experience. You can add language-specific graphics to your store listing to help your users around the world understand what your app is about. New graphs let you track your ratings over time with breakdowns by device, country, app version, and more. The statistics page now shows you when you released each version of your app, so you see how each new version changes your installations and ratings, and you can view crashes specific to an application version. These new features are only the beginning of what’s to come for developers on Google Play in the future.&lt;/p&gt;

&lt;p&gt;If you're still using the old &lt;a href="https://play.google.com/apps/publish"&gt;Developer Console&lt;/a&gt;, now is the time to switch over fully to the new version by clicking “Try the new version” in the header. Let us know what you think by clicking the “Feedback” link in the header in the new Developer Console, and if you experience any serious issues, please contact &lt;a href="http://support.google.com/googleplay/android-developer/answer/136601"&gt;support&lt;/a&gt;. We’re planning some more improvements in the next month and in the future. Your input will continue to be key to what we do.&lt;/p&gt;
&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/u/0/108967384991768947849/posts/H6qVJrQf4Px" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/108967384991768947849/posts/H6qVJrQf4Px" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/u/0/108967384991768947849/posts/H6qVJrQf4Px" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=8ufTdAfEn7U:9rPQ53EBW0I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=8ufTdAfEn7U:9rPQ53EBW0I:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=8ufTdAfEn7U:9rPQ53EBW0I:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/8ufTdAfEn7U" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1328828694007001145?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1328828694007001145?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/8ufTdAfEn7U/now-is-time-to-switch-to-new-google.html" title="Now is the time to switch to the new Google Play Developer Console" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-J4EAerQo2ec/UT93EwEaJ8I/AAAAAAAAB-0/7IFxieGTmRw/s72-c/shots_apk-new.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2013/03/now-is-time-to-switch-to-new-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MGRH06fCp7ImA9WhBRFE8.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-90657977961443485</id><published>2013-03-04T10:06:00.000-08:00</published><updated>2013-03-04T10:23:45.314-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-04T10:23:45.314-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Localization" /><category scheme="http://www.blogger.com/atom/ns#" term="Android 4.2" /><category scheme="http://www.blogger.com/atom/ns#" term="RTL" /><title>Native RTL support in Android 4.2</title><content type="html">&lt;em&gt;Posted by &lt;a href="https://plus.google.com/106954290620202309131/posts"&gt;Fabrice Di Meglio&lt;/a&gt;, Android Frameworks Team&lt;/em&gt;

&lt;p&gt;Android 4.1 (Jelly Bean) introduced limited &lt;a href="http://developer.android.com/about/versions/jelly-bean.html#intl"&gt; support for bidirectional text&lt;/a&gt; in &lt;a href="http://developer.android.com/reference/android/widget/TextView.html"&gt;TextView&lt;/a&gt; and &lt;a href="http://developer.android.com/reference/android/widget/EditText.html"&gt;EditText&lt;/a&gt; elements, allowing apps to display and edit text in both left-to-right (LTR) and right-to-left (RTL) scripts. Android 4.2 added &lt;a href="http://developer.android.com/about/versions/jelly-bean.html#42-native-rtl"&gt;full native support for RTL layouts&lt;/a&gt;, including layout mirroring, allowing you to deliver the same great app experience to all of your users, whether their language uses a script that reads right-to-left or one that reads left-to-right.&lt;/p&gt;

&lt;p&gt;If you do nothing, your app will not change &amp;mdash; it will continue to appear as it currently does.  However, with a few simple changes, your app will be automatically mirrored when the user switches the system language to a right-to-left script (such as Arabic, Hebrew, or Persian).  For example, see the following screenshots of the Settings app:&lt;/p&gt;

&lt;a href="http://4.bp.blogspot.com/-EzUf6UQhhus/UR6ATD23lZI/AAAAAAAAB88/_APE31dL4zw/s1600/setings-ltr.png" imageanchor="1" &gt;&lt;img border="0" src="http://4.bp.blogspot.com/-EzUf6UQhhus/UR6ATD23lZI/AAAAAAAAB88/_APE31dL4zw/s320/setings-ltr.png" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/-txMrX6kMxtY/UR6AW28Jx9I/AAAAAAAAB9E/DhVAtPhkPSI/s1600/settings-rtl.png" imageanchor="1" &gt;&lt;img border="0" src="http://2.bp.blogspot.com/-txMrX6kMxtY/UR6AW28Jx9I/AAAAAAAAB9E/DhVAtPhkPSI/s320/settings-rtl.png" /&gt;&lt;/a&gt;

&lt;p&gt;To take advantage of RTL layout mirroring, simply make the following changes to your app:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Declare in your app manifest that your app supports RTL mirroring.

&lt;p&gt;Specifically, add &lt;code&gt;android:supportsRtl="true"&lt;/code&gt; to the &lt;a href="http://developer.android.com/guide/topics/manifest/application-element.html"&gt;&lt;code&gt;&amp;lt;application&amp;gt;&lt;/code&gt;&lt;/a&gt; element in your manifest file.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;Change all of your app's "left/right" layout properties to new "start/end" equivalents.

&lt;ul&gt;
&lt;li&gt;If you are targeting your app to Android 4.2 (the app's &lt;code&gt;targetSdkVersion&lt;/code&gt; or &lt;code&gt;minSdkVersion&lt;/code&gt; is 17 or higher), then you should use “start” and “end” instead of “left” and “right”.  For example, &lt;code&gt;android:paddingLeft&lt;/code&gt; should become &lt;code&gt;android:paddingStart&lt;/code&gt;.&lt;/li&gt;  
&lt;li&gt;If you want your app to work with versions earlier than Android 4.2 (the app's &lt;code&gt;targetSdkVersion&lt;/code&gt; or &lt;code&gt;minSdkVersion&lt;/code&gt; is 16 or less), then you should add “start” and end” &lt;em&gt;in addition to&lt;/em&gt; “left” and “right”.  For example, you’d use both &lt;code&gt;android:paddingLeft&lt;/code&gt; and &lt;code&gt;android:paddingStart&lt;/code&gt;.
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For more precise control over your app UI in both LTR and RTL mode, Android 4.2 includes the following new APIs to help manage View components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/reference/android/view/View.html#attr_android:layoutDirection"&gt;android:layoutDirection&lt;/a&gt; &amp;mdash; attribute for setting the direction of a component's layout.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/reference/android/view/View.html#attr_android:textDirection"&gt;android:textDirection&lt;/a&gt; &amp;mdash; attribute for setting the direction of a component's text.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/reference/android/view/View.html#attr_android:textAlignment"&gt;android:textAlignment&lt;/a&gt; &amp;mdash; attribute for setting the alignment of a component's text.&lt;/li&gt;
&lt;!--&lt;li&gt;Gravity &lt;a href="http://developer.android.com/reference/android/view/Gravity.html#START"&gt;start&lt;/a&gt; and &lt;a href="http://developer.android.com/reference/android/view/Gravity.html#END"&gt;end&lt;/a&gt; &amp;mdash; for managing relative position of subscomponents.&lt;/li&gt; --&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/reference/android/text/TextUtils.html#getLayoutDirectionFromLocale(java.util.Locale) "&gt;getLayoutDirectionFromLocale()&lt;/a&gt; &amp;mdash; method for getting the Locale-specified direction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can even create custom versions of layout, drawables, and other resources for display when a right-to-left script is in use. Simply use the resource qualifier "&lt;code&gt;ldrtl&lt;/code&gt;" to tag your resources, meaning “layout direction right-to-left”.  To debug and optimize custom right-to-left layouts, &lt;a href="http://developer.android.com/tools/debugging/debugging-ui.html"&gt;HierarchyViewer&lt;/a&gt; now lets you see start/end properties, layout direction, text direction, and text alignment for all the Views in the hierarchy.&lt;/p&gt;

&lt;p&gt;It's now easy to create beautiful Android apps for all your users, whether they use a right-to-left or left-to-right language.  We look forward to seeing some great apps!&lt;/p&gt;
&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/HuHNSb8V7s8" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/108967384991768947849/posts/HuHNSb8V7s8" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/HuHNSb8V7s8" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=4ew2LaCFOMg:e-gzFUCxedI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=4ew2LaCFOMg:e-gzFUCxedI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=4ew2LaCFOMg:e-gzFUCxedI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/4ew2LaCFOMg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/90657977961443485?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/90657977961443485?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/4ew2LaCFOMg/native-rtl-support-in-android-42.html" title="Native RTL support in Android 4.2" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-EzUf6UQhhus/UR6ATD23lZI/AAAAAAAAB88/_APE31dL4zw/s72-c/setings-ltr.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2013/03/native-rtl-support-in-android-42.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIGSXw_eyp7ImA9WhBRFE8.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-2321310070567770735</id><published>2013-02-26T08:01:00.000-08:00</published><updated>2013-03-04T10:08:48.243-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-04T10:08:48.243-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Play services" /><category scheme="http://www.blogger.com/atom/ns#" term="Maps" /><category scheme="http://www.blogger.com/atom/ns#" term="Google+" /><title>Google+ Sign-In Now Part of Google Play Services</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div itemprop="author"&gt;&lt;em&gt;Posted by &lt;a href="http://plus.google.com/111169963967137030210"&gt;Reto Meier&lt;/a&gt;, Android Developer Relations and Matt Waddell, Google+&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&lt;br /&gt;
&lt;/em&gt;&lt;/div&gt;&lt;a href="http://developer.android.com/google/play-services/index.html"&gt;Google Play Services&lt;/a&gt; is our platform for offering you better integration with Google products, and providing new capabilities to use within your apps. Today we’re rolling out Google Play services v3.0, which includes Google+ Sign-In and Google Maps Android API improvements.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Google+ Sign-In&lt;/h3&gt;&lt;br /&gt;
&lt;div itemprop="description"&gt;&lt;a href="http://developers.google.com/+"&gt;Google+ Sign-In&lt;/a&gt; lets users sign in to your Android app with their existing Google credentials, and bring along their Google+ info for an upgraded experience. In addition to basic authentication, today’s release includes features that can accelerate both app downloads and engagement.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-75yN2nyZI6Q/USwMXcg107I/AAAAAAAAB9c/uUb8lmFpMUI/s1600/androiddev_title_image.png" style="margin-bottom: 1.5em; width: 700px;" /&gt;  &lt;br /&gt;
&lt;h4&gt;&lt;em&gt;Over-the-air installs from your website&lt;/em&gt;&lt;/h4&gt;After signing in with Google on your web site, users will now have the option to &lt;a href="http://developers.google.com/+/features/play-installs"&gt;install your Android app on their devices instantly&lt;/a&gt;. They’ll enjoy a seamless desktop-to-mobile experience, and you’ll be able to drive more downloads. Linking your web site and Android apps is as simple as registering your project and clients with the Google APIs console.&lt;br /&gt;
&lt;br /&gt;
&lt;!--[OTA video]--&gt; &lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/3ttDvzjdd0k" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom: 2em; margin-left: 24px;" width="560"&gt;&lt;/iframe&gt;   &lt;br /&gt;
&lt;h4&gt;&lt;em&gt;App customization&lt;/em&gt;&lt;/h4&gt;When users sign in with Google, they can now bring their Google+ info with them (like their public profile, and the people in their circles). This lets your app welcome them by name, display their picture, connect them with friends, and &lt;a href="http://developer.google.com/+/features/app-customization"&gt;lots more&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;!--[Customization video]--&gt; &lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/IWKlubAyYCU" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom: 2em; margin-left: 24px;" width="560"&gt;&lt;/iframe&gt;   &lt;br /&gt;
&lt;h4&gt;&lt;em&gt;Interactive posts&lt;/em&gt;&lt;/h4&gt;Shares from your app can now include calls to action (like “listen,” “RSVP,” and “check-in”), custom thumbnails, and brand attribution — all of which help them stand out in users’ Google+ streams. Clicking on an &lt;a href="http://developers.google.com/+/features/interactive-posts"&gt;interactive post&lt;/a&gt; can also deep link to a specific piece of content inside your app, further improving engagement.&lt;br /&gt;
&lt;br /&gt;
&lt;!--[Interactive video]--&gt;  &lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/TJ2upejQ_rE" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom: 2em; margin-left: 24px;" width="560"&gt;&lt;/iframe&gt;  &lt;br /&gt;
&lt;h4&gt;&lt;em&gt;App activity that’s useful, not annoying&lt;/em&gt;&lt;/h4&gt;Users’ &lt;a href="http://developer.google.com/+/features/app-activities"&gt;app activities&lt;/a&gt; will only be visible to the Google+ circles they specify (if any), and they’ll only appear when they’re relevant. Putting users in control, and not spraying their stream builds trust in your app, and encourages meaningful sharing.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;&lt;em&gt;Measure and monitor key metrics&lt;/em&gt;&lt;/h4&gt;Once your Google+ Sign-In integration is live, you’ll be able to measure and monitor downloads, total users, interactive post performance, and other key metrics. To set up &lt;a href="http://developer.google.com/+/features/analytics"&gt;Google+ Platform Insights&lt;/a&gt; for your Android app, simply connect it with your Google+ page.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;&lt;em&gt;More about Google+ Sign-In&lt;/em&gt;&lt;/h4&gt;To learn more about integrating with Google+ Sign-In, visit our &lt;a href="http://developers.google.com/+"&gt;developer docs&lt;/a&gt;. You can also read our announcement on the &lt;a href="http://googleplusplatform.blogspot.com/2013/02/google-plus-sign-in.html"&gt;Google+ Developers Blog&lt;/a&gt;, or download &lt;a href="http://developers.google.com/+/features/case-studies"&gt;some of the first apps&lt;/a&gt; to include this functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Google Maps Android API v2&lt;/h3&gt;&lt;br /&gt;
This release includes fixes for more than 20 bugs, including half of the top 10 issues filed in the &lt;a href="http://code.google.com/p/gmaps-api-issues/issues/list?can=1&amp;amp;q=ApiType%3DAndroid2"&gt;Google Maps API issue tracker&lt;/a&gt;.  These include improvements to map rendering and the behavior of markers and infowindows.&lt;br /&gt;
&lt;br /&gt;
Also included are features like native support for new map shapes such as &lt;a href="http://developers.google.com/maps/documentation/android/shapes#circles"&gt;circles&lt;/a&gt;, anti-clockwise polygons, and the &lt;a href="http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMyLocationChangeListener.html"&gt;OnMyLocationChangeListener&lt;/a&gt; event, which is called when a change in location is detected. &lt;br /&gt;
&lt;br /&gt;
Check out the product documentation for a complete set of release notes.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;More About Google Play Services&lt;/h3&gt;&lt;br /&gt;
To learn more about Google Play services and the APIs available to you through it, visit the &lt;a href="http://developer.android.com/google/index.html"&gt;Google Services&lt;/a&gt; area of the Android Developers site.&lt;br /&gt;
&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/A2HCnmMciNh" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/108967384991768947849/posts/A2HCnmMciNh" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/A2HCnmMciNh" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=-DonV-1xpBs:bJ1_EWXA8b4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=-DonV-1xpBs:bJ1_EWXA8b4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=-DonV-1xpBs:bJ1_EWXA8b4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/-DonV-1xpBs" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2321310070567770735?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2321310070567770735?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/-DonV-1xpBs/google-sign-in-now-part-of-google-play.html" title="Google+ Sign-In Now Part of Google Play Services" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-75yN2nyZI6Q/USwMXcg107I/AAAAAAAAB9c/uUb8lmFpMUI/s72-c/androiddev_title_image.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2013/02/google-sign-in-now-part-of-google-play.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEFQns6fip7ImA9WhBSGEk.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-8338897646736033658</id><published>2013-02-19T12:46:00.000-08:00</published><updated>2013-02-25T17:53:33.516-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-25T17:53:33.516-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Security" /><category scheme="http://www.blogger.com/atom/ns#" term="Android 4.2" /><title>Using Cryptography to Store Credentials Safely</title><content type="html">&lt;p itemprop="author"&gt;&lt;em&gt;Posted by &lt;a href="https://plus.google.com/114249855229891870149"&gt;Trevor Johns&lt;/a&gt;, Android Developer Relations team&lt;/em&gt;&lt;/p&gt;&lt;div style="float:right;padding-right:0"&gt;&lt;img src="http://3.bp.blogspot.com/-m9OjYhySVW8/URwiN1hR-cI/AAAAAAAAB8o/0aTXDBZT2NQ/s400/Random-Droid.png" alt="random_droid" width="190" style="margin-bottom:0;margin-right:1em;padding:0 1.5em 1.5em 1.5em;"&gt;
&lt;/div&gt;

&lt;p&gt;Following our talk &lt;a href="https://developers.google.com/events/io/sessions/gooio2012/107/"&gt;"Security and Privacy in Android Apps"&lt;/a&gt; at Google I/O last year, many people had specific questions about how to use cryptography in Android. Many of those revolved around which APIs to use for a specific purpose. Let's look at how to use cryptography to safely store user credentials, such as passwords and auth tokens, on local storage.&lt;/p&gt;

&lt;h3&gt;An anti-pattern&lt;/h3&gt;

&lt;p&gt;A common (but incorrect) pattern that we've recently become aware of is to use &lt;code&gt;&lt;a href="http://developer.android.com/reference/java/security/SecureRandom.html"&gt;SecureRandom&lt;/a&gt;&lt;/code&gt; as a means of generating deterministic key material, which would then be used to encrypt local credential caches. Examples are not hard to find, such as &lt;a href="http://www.androidsnippets.com/encryptdecrypt-strings"&gt;here&lt;/a&gt;, &lt;a href="http://stackoverflow.com/questions/13433529/android-4-2-broke-my-encrypt-decrypt-code-and-the-provided-solutions-dont-work"&gt;here&lt;/a&gt;, &lt;a href="http://stackoverflow.com/questions/13383006/encryption-error-on-android-4-2"&gt;here&lt;/a&gt;, and elsewhere.&lt;/p&gt;

&lt;p itemprop="description"&gt;In this pattern, rather than storing an encryption key directly as a string inside an APK, the code uses a proxy string to generate the key instead &amp;mdash; similar to a passphrase. This essentially obfuscates the key so that it's not readily visible to attackers. However, a skilled attacker would be able to easily see around this strategy. We don't recommend it.&lt;/p&gt;

&lt;p&gt;The fact is, Android's existing security model already provides plenty of protection for this kind of data. User credentials should be stored with the &lt;code&gt;&lt;a href="http://developer.android.com/reference/android/content/Context.html#MODE_PRIVATE"&gt;MODE_PRIVATE&lt;/a&gt;&lt;/code&gt; flag set and stored in internal storage, rather than on an SD card, since permissions aren't enforced on external storage. Combined with device encryption, this provides protection from most types of attacks targeting credentials.&lt;/p&gt;

&lt;p&gt;However, there's another problem with using &lt;code&gt;SecureRandom&lt;/code&gt; in the way described above. Starting with Android 4.2, the default 
&lt;code&gt;SecureRandom&lt;/code&gt; provider is OpenSSL, and a developer can no longer override &lt;code&gt;SecureRandom&lt;/code&gt;’s internal state.  Consider the following code:&lt;/p&gt;

&lt;pre&gt;
  SecureRandom secureRandom = new SecureRandom();
  byte[] b = new byte[] { (byte) 1 };
  secureRandom.setSeed(b);
  // Prior to Android 4.2, the next line would always return the same number!
  System.out.println(secureRandom.nextInt());
&lt;/pre&gt;

&lt;p&gt;The old Bouncy Castle-based implementation allowed overriding the internally generated, /dev/urandom based key for each &lt;code&gt;SecureRandom&lt;/code&gt; instance. Developers which attempted to explicitly seed the random number generator would find that their seed replaces, not supplements, the existing seed (contrary to the &lt;a href="http://developer.android.com/reference/java/security/SecureRandom.html#insecure_seed"&gt;reference implementation’s documentation&lt;/a&gt;). Under OpenSSL, this error-prone behavior is no longer possible.&lt;/p&gt;

&lt;p&gt;Unfortunately, applications who relied on the old behavior will find that the output from &lt;code&gt;SecureRandom&lt;/code&gt; changes randomly every time their application starts up. (This is actually a very desirable trait for a random number generator!) Attempting to obfuscate encryption keys in this manner will no longer work.&lt;/p&gt;

&lt;h3&gt;The right way&lt;/h3&gt;

&lt;p&gt;A more reasonable approach is simply to generate a truly random AES key when an application is first launched:&lt;/p&gt;

&lt;pre&gt;public static SecretKey generateKey() throws NoSuchAlgorithmException {
    // Generate a 256-bit key
    final int outputKeyLength = 256;

    SecureRandom secureRandom = new SecureRandom();
    // Do *not* seed secureRandom! Automatically seeded from system entropy.
    KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
    keyGenerator.init(outputKeyLength, secureRandom);
    SecretKey key = keyGenerator.generateKey();
    return key;
}&lt;/pre&gt;

&lt;p&gt;Note that the security of this approach relies on safeguarding the generated key, which is is predicated on the security of the internal storage. Leaving the target file unencrypted (but set to &lt;code&gt;MODE_PRIVATE&lt;/code&gt;) would provide similar security.&lt;/p&gt;

&lt;h3&gt;Even more security&lt;/h3&gt;

&lt;p&gt;If your app needs additional encryption, a recommended approach is to require a passphase or PIN to access your application. This passphrase could be fed into PBKDF2 to generate the encryption key. (PBKDF2 is a commonly used algorithm for deriving key material from a passphrase, using a technique known as "key stretching".) Android provides an implementation of this algorithm inside &lt;code&gt;&lt;a href="http://developer.android.com/reference/javax/crypto/SecretKeyFactory.html"&gt;SecretKeyFactory&lt;/a&gt;&lt;/code&gt; as &lt;code&gt;PBKDF2WithHmacSHA1&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;public static SecretKey generateKey(char[] passphraseOrPin, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException {
    // Number of PBKDF2 hardening rounds to use. Larger values increase
    // computation time. You should select a value that causes computation
    // to take &gt;100ms.
    final int iterations = 1000; 

    // Generate a 256-bit key
    final int outputKeyLength = 256;

    SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
    KeySpec keySpec = new PBEKeySpec(passphraseOrPin, salt, iterations, outputKeyLength);
    SecretKey secretKey = secretKeyFactory.generateSecret(keySpec);
    return secretKey;
}&lt;/pre&gt;

&lt;p&gt;The salt should be a random string, again generated using &lt;code&gt;SecureRandom&lt;/code&gt; and persisted on internal storage alongside any encrypted data. This is important to mitigate the risk of attackers using a rainbow table to precompute password hashes.&lt;/p&gt;

&lt;h3&gt;Check your apps for proper use of SecureRandom&lt;/h3&gt;

&lt;p&gt;As mentioned above and in the &lt;a href="http://android-developers.blogspot.com/2013/02/security-enhancements-in-jelly-bean.html"&gt;New Security Features in Jelly Bean&lt;/a&gt;, the default implementation of &lt;code&gt;SecureRandom&lt;/code&gt; is changed in Android 4.2. Using it to deterministically generate keys is no longer possible.&lt;/p&gt;

&lt;p&gt;If you're one of the developers who's been generating keys the wrong way, we recommend upgrading your app today to prevent subtle problems as more users upgrade to devices running Android 4.2 or later.&lt;/p&gt;
&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/+AndroidDevelopers/posts/D4xXiPUFoRG" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/+AndroidDevelopers/posts/D4xXiPUFoRG" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/+AndroidDevelopers/posts/D4xXiPUFoRG" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=PEbXoBLScqY:tnk_M7xDSxs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=PEbXoBLScqY:tnk_M7xDSxs:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=PEbXoBLScqY:tnk_M7xDSxs:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/PEbXoBLScqY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8338897646736033658?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8338897646736033658?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/PEbXoBLScqY/using-cryptography-to-store-credentials.html" title="Using Cryptography to Store Credentials Safely" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-m9OjYhySVW8/URwiN1hR-cI/AAAAAAAAB8o/0aTXDBZT2NQ/s72-c/Random-Droid.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2013/02/using-cryptography-to-store-credentials.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUFQHw7fip7ImA9WhBSE00.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-5100495786509778676</id><published>2013-02-14T13:37:00.000-08:00</published><updated>2013-02-19T12:53:31.206-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-19T12:53:31.206-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Security" /><category scheme="http://www.blogger.com/atom/ns#" term="Content Provider" /><category scheme="http://www.blogger.com/atom/ns#" term="WebView" /><category scheme="http://www.blogger.com/atom/ns#" term="Android 4.2" /><category scheme="http://www.blogger.com/atom/ns#" term="SDK Tools" /><title>Security Enhancements in Jelly Bean</title><content type="html">&lt;p&gt;&lt;em&gt;Posted by &lt;a href="https://plus.google.com/u/1/112600205125796554588/"&gt;Fred Chung&lt;/a&gt;, Android Developer Relations team&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Android 4.2, Jelly Bean, introduced quite a few &lt;a href="http://developer.android.com/about/versions/jelly-bean.html"&gt;new features&lt;/a&gt;, and under the covers it also added a number of &lt;a href="https://developer.android.com/about/versions/jelly-bean.html#42-platform-tech"&gt;security enhancements&lt;/a&gt; to ensure a more secure environment for users and developers.&lt;/p&gt;

&lt;p itemprop="description"&gt;This post highlights a few of the security enhancements in Android 4.2 that are especially important for developers to be aware of and understand. Regardless whether you are targeting your app to devices running Jelly Bean or to earlier versions of Android, it's a good idea to validate these areas in order to make your app more secure and robust.&lt;/p&gt;

&lt;h3 id="provider-access"&gt;Content Provider default access has changed&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://developer.android.com/guide/topics/providers/content-providers.html"&gt;Content providers&lt;/a&gt; are a facility to enable data sharing amongst app and system components. Access to content providers should always be based on the principle of least privilege &amp;mdash; that is, only grant the minimal possible access for another component to carry out the necessary tasks. You can control access to your content providers through a combination of the &lt;code&gt;exported&lt;/code&gt; attribute in the provider declaration and app-specific permissions for reading/writing data in the provider.&lt;/p&gt;

&lt;p&gt;In the example below, the provider &lt;code&gt;ReadOnlyDataContentProvider&lt;/code&gt; sets the &lt;code&gt;exported&lt;/code&gt; attribute to "true", explicitly declaring that it is readable by any external app that has acquired the &lt;code&gt;READ_DATA&lt;/code&gt; permission, and that no other components can write to it.&lt;/p&gt;

&lt;pre&gt;&amp;lt;provider android:name=”com.example.ReadOnlyDataContentProvider”
    android:authorities=”com.example”
    android:exported=”true”
    android:readPermission=”com.example.permission.READ_DATA” /&amp;gt;&lt;/pre&gt;

&lt;p&gt;Since the &lt;code&gt;exported&lt;/code&gt; attribute is an optional field, potential ambiguity arises when the field is not explicitly declared in the manifest, and that is where the behavior has changed in Android 4.2.&lt;/p&gt;

&lt;p&gt;Prior to Jelly Bean, the default behavior of the &lt;code&gt;exported&lt;/code&gt; field was that, if omitted, the content provider was assumed to be "exported" and accessible from other apps (subject to permissions). For example, the content provider below would be readable and writable by other apps (subject to permissions) when running on Android 4.1 or earlier.  This default behavior is undesirable for sensitive data sources.&lt;/p&gt;

&lt;pre&gt;&amp;lt;provider android:name=”com.example.ReadOnlyDataContentProvider”
    android:authorities=”com.example” /&amp;gt;&lt;/pre&gt;

&lt;p&gt;Starting in Android 4.2, the default behavior for the same provider is now “not exported”, which prevents the possibility of inadvertent data sharing when the attribute is not declared.  If either the &lt;code&gt;minSdkVersion&lt;/code&gt; or &lt;code&gt;targetSdkVersion&lt;/code&gt; of your app is set to 17 or higher, the content provider will no longer be accessible by other apps by default.&lt;/p&gt;

&lt;p&gt;While this change helps to avoid inadvertent data sharing, it remains the best practice to &lt;em&gt;always explicitly declare the &lt;code&gt;exported&lt;/code&gt; attribute&lt;/em&gt;, as well as declaring proper permissions, to avoid confusion.  In addition, we strongly encourage you to make use of &lt;a href="http://developer.android.com/tools/help/lint.html"&gt;Android Lint&lt;/a&gt;, which among other things will flag any exported content providers (implicit or explicit) that aren't protected by any permissions.&lt;/p&gt;

&lt;h3 id="secure-random"&gt;New implementation of SecureRandom&lt;/h3&gt;

&lt;p&gt;Android 4.2 includes a new default implementation of &lt;code&gt;&lt;a href="http://developer.android.com/reference/java/security/SecureRandom.html"&gt;SecureRandom&lt;/a&gt;&lt;/code&gt; based on OpenSSL. In the older Bouncy Castle-based implementation, given a known seed, &lt;code&gt;SecureRandom&lt;/code&gt; could technically (albeit incorrectly) be treated as a source of deterministic data.  With the new OpenSSL-based implementation, this is no longer possible.&lt;/p&gt;

&lt;p&gt;In general, the switch to the new &lt;code&gt;SecureRandom&lt;/code&gt; implementation should be transparent to apps. However, if your app is relying on &lt;code&gt;SecureRandom&lt;/code&gt; to generate deterministic data, such as keys for encrypting data, you may need to modify this area of your app. For example, if you have been using &lt;code&gt;SecureRandom&lt;/code&gt; to retrieve keys for encrypting/decrypting content, you will need to find another means of doing that. &lt;/p&gt;

&lt;p&gt;A recommended approach is to generate a truly random AES key upon first launch and store that key in internal storage. For more information, see the post &lt;a href="http://android-developers.blogspot.com/2013/02/using-cryptography-to-store-credentials.html"&gt;"Using Cryptography to Store Credentials Safely"&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id="javascript-access"&gt;JavascriptInterface methods in WebViews must now be annotated&lt;/h3&gt;

&lt;p&gt;Javascript hosted in a &lt;code&gt;&lt;a href="https://developer.android.com/reference/android/webkit/WebView.html"&gt;WebView&lt;/a&gt;&lt;/code&gt; can directly invoke methods in an app through a JavaScript interface.  In Android 4.1 and earlier, you could enable this by passing an object to the &lt;code&gt;&lt;a href="http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object, java.lang.String)"&gt;addJavascriptInterface()&lt;/a&gt;&lt;/code&gt; method and ensuring that the object methods intended to be accessible from JavaScript were public.&lt;/p&gt;

&lt;p&gt;On the one hand, this was a flexible mechanism; on the other hand, any untrusted content hosted in a WebView could potentially use reflection to figure out the public methods within the &lt;code&gt;JavascriptInterface&lt;/code&gt; object and could then make use of them. &lt;/p&gt;

&lt;p&gt;Beginning in Android 4.2, you will now have to &lt;em&gt;explicitly annotate public methods&lt;/em&gt; with &lt;code&gt;&lt;a href="http://developer.android.com/reference/android/webkit/JavascriptInterface.html"&gt;@JavascriptInterface&lt;/a&gt;&lt;/code&gt; in order to make them accessible from hosted JavaScript.  Note that this also only takes effect only if you have set your app's &lt;code&gt;minSdkVersion&lt;/code&gt; or &lt;code&gt;targetSdkVersion&lt;/code&gt; to 17 or higher.&lt;/p&gt;

&lt;pre&gt;// Annotation is needed for SDK version 17 or above.
@JavascriptInterface
public void doSomething(String input) {
   . . .
}&lt;/pre&gt;

&lt;h3 id="secure-debugging"&gt;Secure USB debugging&lt;/h3&gt;

&lt;p&gt;Android 4.2.2 introduces a new way of protecting your apps and data on compatible devices &amp;mdash; secure USB debugging. When enabled on a device, secure debugging ensures that only host computers authorized by the user can access the internals of a USB-connected device using the ADB tool included in the Android SDK.&lt;/p&gt;

&lt;p&gt;Secure debugging is an extension of the ADB protocol that requires hosts to authenticate before accessing any ADB services or commands. At first launch, ADB generates an RSA key pair to uniquely identifies the host. Then, when you connect a device that requires secure debugging, the system displays an authorization dialog such as the one shown below. &lt;/p&gt;


&lt;div class="separator" style="clear: both; text-align: center;margin:1.5em auto;"&gt;
&lt;img border="0" width="420" src="http://1.bp.blogspot.com/-ak-KpU1tBWY/URwL4H1K2QI/AAAAAAAAB8I/7sQBdBaQQG0/s400/adb-crop-new.png" style="box-shadow: 3px 10px 18px 1px #bbb;margin:0;padding:0;" /&gt;&lt;/div&gt;

&lt;p&gt;The user can allow USB debugging for the host for a single session or can give automatic access for all future sessions. Once a host is authorized, you can execute ADB commands for the device in the normal way. Until the device is authorized, it remains in "offline" state, as listed in the &lt;code&gt;adb devices&lt;/code&gt; command. &lt;/p&gt;

&lt;p&gt;For developers, the change to USB debugging should be largely transparent. If you've updated your SDK environment to include ADB version 1.0.31 (available with SDK Platform-tools r16.0.1 and higher), all you need to do is connect and authorize your device(s). If your development device appears in "offline" state, you may need to update ADB. To so so, download the latest Platform Tools release through the SDK Manager.&lt;/p&gt;

&lt;p&gt;Secure USB debugging is enabled in the Android 4.2.2 update that is now rolling out to Nexus devices across the world. We expect many more devices to enable secure debugging in the months ahead.&lt;/p&gt;


&lt;h3 id="more-security" style="margin-top:1.5em;"&gt;More information about security best practices&lt;/h3&gt;

&lt;p&gt;For a full list of security best practices for Android apps, make sure to take a look at the &lt;a href="http://developer.android.com/training/articles/security-tips.html"&gt;Security Tips&lt;/a&gt; document. &lt;/p&gt;
&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/u/0/108967384991768947849/posts/dqU4GC8ymnJ" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/u/0/108967384991768947849/posts/dqU4GC8ymnJ" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/u/0/108967384991768947849/posts/dqU4GC8ymnJ" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=Q204r-VOkgo:X2jSF4WBEOA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=Q204r-VOkgo:X2jSF4WBEOA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=Q204r-VOkgo:X2jSF4WBEOA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/Q204r-VOkgo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/5100495786509778676?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/5100495786509778676?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/Q204r-VOkgo/security-enhancements-in-jelly-bean.html" title="Security Enhancements in Jelly Bean" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-ak-KpU1tBWY/URwL4H1K2QI/AAAAAAAAB8I/7sQBdBaQQG0/s72-c/adb-crop-new.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2013/02/security-enhancements-in-jelly-bean.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAHSXw7fyp7ImA9WhNbEko.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-7572844686291126520</id><published>2013-01-15T11:22:00.000-08:00</published><updated>2013-01-15T11:22:18.207-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-15T11:22:18.207-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><category scheme="http://www.blogger.com/atom/ns#" term="Developer Story" /><title>Android Developer Story: Smule</title><content type="html">&lt;p&gt;Check out our latest Android developer story, this one from Smule, creators of &lt;a href="//play.google.com/store/apps/details?id=com.smule.autorap"&gt;AutoRap&lt;/a&gt;, &lt;a href="//play.google.com/store/apps/details?id=com.smule.magicpiano"&gt;Magic Piano&lt;/a&gt;, and &lt;a href="//play.google.com/store/apps/details?id=com.smule.songify"&gt;Songify&lt;/a&gt;. 
&lt;/p&gt;

&lt;p&gt;In this short video, the Smule team talks about their experiences launching on Android, the explosive global growth they’ve seen on Google Play, and some of the techniques they use to market and monetize their products effectively across the world.&lt;/p&gt;
&lt;br /&gt;
&lt;iframe width="700" height="394" src="http://www.youtube.com/embed/RRelFvc6Czo" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;p style="clear:both"&gt;Visit the &lt;a href="http://developer.android.com/distribute/googleplay/spotlight/index.html"&gt;Spotlight pages&lt;/a&gt; in the Android Developers site to see our growing list of developer stories.&lt;/p&gt;
&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/u/0/108967384991768947849/posts/TpYdcpWjtXx" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/u/0/108967384991768947849/posts/TpYdcpWjtXx" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/u/0/108967384991768947849/posts/TpYdcpWjtXx" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=mLAfivj4_3g:ghShH4xEQ_k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=mLAfivj4_3g:ghShH4xEQ_k:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=mLAfivj4_3g:ghShH4xEQ_k:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/mLAfivj4_3g" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7572844686291126520?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7572844686291126520?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/mLAfivj4_3g/android-developer-story-smule.html" title="Android Developer Story: Smule" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/RRelFvc6Czo/default.jpg" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2013/01/android-developer-story-smule.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQCRns5fyp7ImA9WhNbEUQ.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-1251441085522210386</id><published>2013-01-14T11:35:00.000-08:00</published><updated>2013-01-14T11:39:27.527-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-14T11:39:27.527-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Renderscript" /><category scheme="http://www.blogger.com/atom/ns#" term="Android 4.2" /><title>Evolution of Renderscript Performance</title><content type="html">&lt;p&gt;&lt;em&gt;Posted by &lt;a href="https://plus.google.com/u/0/113680924389579925739/posts"&gt;R. Jason Sams&lt;/a&gt;, Android Renderscript Tech Lead &lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It’s been a year since the last &lt;a href="http://android-developers.blogspot.com/2012/01/levels-in-renderscript.html"&gt;blog post on Renderscript&lt;/a&gt;, and with the release of &lt;a href="http://developer.android.com/about/versions/jelly-bean.html"&gt;Android 4.2&lt;/a&gt;, it’s a good time to talk about the performance work that we’ve done since then. One of the major goals of this past year was to improve the performance of common image-processing operations with Renderscript. &lt;/p&gt;

&lt;div style="float:right;padding-top:1em;width:400px;margin-left:2em;"&gt;&lt;img src="http://1.bp.blogspot.com/-bkMcz05YEmA/UL_9hfL6XCI/AAAAAAAAB0c/j52VCLT1yM8/s400/jb-rs-chart-versions.png" alt="Renderscipt optimizations chart" width="360" height="252"
style="border:1px solid #ddd;border-radius: 6px;" /&gt;&lt;br /&gt;
&lt;p style="image-caption"&gt;&lt;strong&gt;Figure 1&lt;/strong&gt;. Renderscript image-processing benchmarks run on different Android platform versions (Android 4.0, 4.1, and 4.2) in CPU only on a Galaxy Nexus device.&lt;/p&gt;&lt;img src="http://2.bp.blogspot.com/-MIFjl2gjI-Y/UPRFlEpHMZI/AAAAAAAAB60/WaCCxnWI_rU/s400/jb-rs-chart-gpu.png" style="border:1px solid #ddd;border-radius: 6px; alt="" width="360" height="252" /&gt;&lt;br /&gt;

&lt;p style="image-caption"&gt;&lt;strong&gt;Figure 2&lt;/strong&gt;. Renderscript image-processing benchmarks comparing operations run with GPU + CPU to those run in CPU only on the same Nexus 10 device.&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;When you set out to improve performance, the first task is to measure it.  To do this, we built a image-processing benchmark suite. The tests measure how long it takes to apply a given image processing operation to a roughly 1.7 million pixel bitmap. We then ran the benchmark using the same APK on the Galaxy Nexus and normalized the results from Ice Cream Sandwich to 1.0. &lt;/p&gt;

&lt;p&gt;We made a few major improvements between ICS and Jelly Bean, which significantly reduced the overhead of short scripts as well as the cost of getting elements out of allocations. Going from Android 4.1 to Android 4.2, we added a number of performance improvements to the math library.  Our hardware partners also made major contributions; ARM in particular provided numerous compiler improvements which greatly improved our ability to generate vector code. &lt;/p&gt;

&lt;p&gt;Android 4.2 introduced another much more important change: For the first time on any mobile platform. we can use the GPU as a compute device. When run on a device that supports GPU compute, that same benchmark APK will run on the GPU. The chart in Figure 2 is normalized to the same basis as Figure 1.&lt;/p&gt;

&lt;p&gt;The Cortex A15 in Nexus 10 is a very good CPU. However, that doesn’t mean we should leave resources idle. The Mali T604 is a very flexible and capable compute device capable of executing a large subset of RenderScript functionality. The green bar in Figure 2 shows what we can do when the Mali is enabled for RS compute. No effort is required on an app developer's part to enable this acceleration; the device will inspect each script and decide which processor to run things automatically. It’s important to note that some scripts can’t be run on the GPU, and such scripts will automatically run on the CPU.&lt;/p&gt;

&lt;p&gt;The best part is it doesn’t end here. Performance work is an ongoing effort.  RenderScript performance in applications will continue to improve over time as we continue to improve the platform.&lt;/p&gt;

&lt;p&gt;To learn more about using Renderscript, see the &lt;a href="http://developer.android.com/guide/topics/renderscript/compute.html"&gt;Renderscript Computation&lt;/a&gt; developer's guide.&lt;/p&gt;
&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/u/0/108967384991768947849/posts/1zVah8tVN27" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/u/0/108967384991768947849/posts/1zVah8tVN27" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/u/0/108967384991768947849/posts/1zVah8tVN27" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=arXjXmtUW3o:uhcOi7fUDmQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=arXjXmtUW3o:uhcOi7fUDmQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=arXjXmtUW3o:uhcOi7fUDmQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/arXjXmtUW3o" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1251441085522210386?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1251441085522210386?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/arXjXmtUW3o/evolution-of-renderscript-performance.html" title="Evolution of Renderscript Performance" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-MIFjl2gjI-Y/UPRFlEpHMZI/AAAAAAAAB60/WaCCxnWI_rU/s72-c/jb-rs-chart-gpu.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2013/01/evolution-of-renderscript-performance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8FQ3gzfCp7ImA9WhBSFUo.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-7627603220126702286</id><published>2013-01-08T09:01:00.000-08:00</published><updated>2013-02-22T16:20:12.684-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-22T16:20:12.684-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Play services" /><category scheme="http://www.blogger.com/atom/ns#" term="Authentication" /><title>Verifying Back-End Calls from Android Apps</title><content type="html">&lt;p&gt;&lt;em&gt;Posted by &lt;a href="https://plus.google.com/107606703558161507946/posts"&gt;Tim  Bray&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;div itemprop="image" class="separator" style="clear: both; float:left;"&gt;&lt;img border="0" src="https://lh4.ggpht.com/7z4NItEg-X21zvFGAarKonk-VaysBYthJ30u1JjaQ0-5fjyHNawnmoNeG--4FCACog=w160" /&gt;&lt;/div&gt;&lt;p itemprop="description"&gt;Most Android apps have some sort of server-side back end, to persist and share data. Even the most basic game needs to remember its players’ high scores. When you’re building your back end, one problem you have to solve is how the back-end code knows what app it’s talking to and who the person using it is. &lt;/p&gt;&lt;p&gt;You probably have HTTP endpoints for communicating with your client apps, but how can the server-side code be sure who’s sending messages to it? After all, anyone can send HTTP POST requests from anywhere; could they impersonate your users if they could guess their identities?&lt;/p&gt;&lt;p&gt;It’s really user-unfriendly to ask people to type in usernames and passwords on mobile devices. In particular, if someone has installed your app and given it permission to use the Internet and know your identity, they shouldn’t be pestered any more.&lt;/p&gt;&lt;p&gt;It turns out that &lt;a href="http://developer.android.com/google/play-services/index.html"&gt;Google Play services&lt;/a&gt;, now available on every compatible device running Android release 2.2 or higher, offers a good solution to this problem, based on the use of Google Accounts.&lt;/p&gt;&lt;h3&gt;Summary&lt;/h3&gt;&lt;p&gt;Doing this is a multi-step process, which I’ll outline in full, but here’s the short version: You use the &lt;a href="http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html"&gt;&lt;code&gt;GoogleAuthUtil&lt;/code&gt;&lt;/a&gt; class, available through Google Play services, to retrieve a string called an “ID Token”. You send the token to your back end and your back end can use it to quickly and cheaply verify which app sent it and who was using the app. &lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="198" width="400" src="http://3.bp.blogspot.com/-EtecxvwBnt8/UOt4yZDkE9I/AAAAAAAAB5U/7Rp3v_WGPGo/s400/hy.png" /&gt;&lt;/div&gt;&lt;p&gt;This capability is built into Google facilities such as App Engine’s new &lt;a href="http://endpoints-trusted-tester.appspot.com"&gt;Cloud Endpoints&lt;/a&gt; feature, which bakes app/back-end identity into a simple programming model.&lt;/p&gt;Now let’s get to the details.&lt;/p&gt;&lt;h3&gt;App Registration&lt;/h3&gt;&lt;p&gt;You’re going to have to use the &lt;a href="http://code.google.com/apis/console"&gt;Google API Console&lt;/a&gt; quite a bit in this process. You’ll need to make a new project for this purpose; while you can give it a nice human-readable name and graphical branding, it turns out that those resources aren’t used in this particular scenario. &lt;/p&gt;&lt;p&gt;You can also authorize this project to access a large number of different Google APIs; but once again, you don’t need to in this scenario.&lt;/p&gt;&lt;p&gt;You should give serious thought to the people you authorize as members of the project, since these are important administrative roles.&lt;/p&gt;&lt;h3&gt;Make Client IDs&lt;/h3&gt;&lt;p&gt;You’ll need to make two different OAuth 2.0 “Client IDs” for your project. The first one is a “Client ID for Web applications”. Once again, you can ignore all the labeling and branding stuff, you’ll just need the Client-ID string, which will look something like &lt;code&gt;9414861317621.apps.googleusercontent.com&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Now you’ll need to make another Client ID for your Android app. To do this, you’ll need to provide two pieces of information: your app’s package name and cert signature. The package name is just the Java-style reverse-DNS, as given in the top-level “package” attribute in your AndroidManifest.xml, for example &lt;code&gt;com.example.identity&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;To get your app’s cert signature, use the following shell command:&lt;/p&gt;&lt;pre&gt;$ keytool -exportcert -alias &amp;lt;your-key-name&amp;gt; -keystore &amp;lt;your-key-store-file&amp;gt; -v -list&lt;/pre&gt;&lt;p&gt;Copy the octets labeled “SHA1”, paste them into the Developer Console field, and create your app’s Client ID.  Once again, all you’ll really need from the readout is the Client-ID string.&lt;/p&gt;&lt;h3&gt;In Your Android App&lt;/h3&gt;&lt;p&gt;You’ll need to call the Google Play services &lt;a href="http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, java.lang.String, java.lang.String)"&gt;&lt;code&gt;GoogleAuthUtil&lt;/code&gt;&lt;/a&gt; class to get an ID token; the procedure is as described in &lt;a href="http://developer.android.com/google/play-services/auth.html#obtain"&gt;Obtaining an Access Token&lt;/a&gt;. There’s one extra bit of magic: the value of the &lt;code&gt;scope&lt;/code&gt; argument to the &lt;code&gt;getToken(email, scope)&lt;/code&gt; method. It has to be the string &lt;code&gt;audience:server:client_id:X&lt;/code&gt;, where X is the Client ID of for the Web app, as described above. If our Client ID were the example value given above, the value of the scope argument would be &lt;code&gt;audience:server:client_id:9414861317621.apps.googleusercontent.com&lt;/code&gt;.&lt;/p&gt;&lt;h3&gt;Magic Happens&lt;/h3&gt;&lt;p&gt;Normally, when you ask for an OAuth token, the person using the device sees a challenge, asking them if it’s OK to use their identity to get at some resource or other. But in this case, the system looks at the server-side Client ID in your scope argument, notices that it’s in the same project as your Android app, and gives you the token without pestering the user; they’ve already agreed to a relationship with you, the developer who controls that project.&lt;/p&gt;&lt;h3&gt;Send the Token&lt;/h3&gt;&lt;p&gt;When you’re ready to start talking to your server back end, you need to send the token string to it. The best way to do this is in the body of an POST message; you could put it in a URL parameter, but they’re often logged. You absolutely &lt;em&gt;&lt;strong&gt;must use an HTTPS connection&lt;/strong&gt;&lt;/em&gt;, to keep any men-in-the-middle from peeking at your token. &lt;/p&gt;&lt;p&gt;There’s no particular reason for extra round-trips; if you’re sending a game high score to your back end, just stick the ID Token string in as an extra argument.&lt;/p&gt;&lt;h3&gt;Use the Token&lt;/h3&gt;&lt;p&gt;When your server receives the token from your Android app, it’s really important that you verify it. This requires two steps:&lt;/p&gt;&lt;ol style="margin-bottom:1em;"&gt;&lt;li&gt;Verify that it’s really signed by Google.&lt;/li&gt;
&lt;li&gt;Verify that it’s really meant for you.&lt;/li&gt;
&lt;/ol&gt;&lt;h3&gt;Verify Signature&lt;/h3&gt;&lt;p&gt;It turns out that this is signed using a Google public/private key pair, and Google publishes the public keys (which we change regularly) at &lt;a href="https://www.googleapis.com/oauth2/v1/certs"&gt;www.googleapis.com/oauth2/v1/certs&lt;/a&gt;; go ahead and have a look. &lt;/p&gt;&lt;p&gt;You have to verify that the ID Token, which is actually a &lt;a href="http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-05"&gt;JSON Web Token&lt;/a&gt;, was signed with one of those certs.  Fortunately, there are decent libraries around to do this; in this post, I’ll give pointers for Java, Ruby, and PHP.&lt;/p&gt;&lt;p&gt;The libraries can cache the Google certs and only refresh them when required, so the verification is (almost always) a fast static call.&lt;/p&gt;&lt;h3&gt;Verify Token Fields&lt;/h3&gt;&lt;p&gt;It turns out that the ID Token has a JSON payload, and most libraries that validate the signatures also give it to you as a hash or dictionary or whatever. Thus, you can retrieve named fields, such as &lt;code&gt;aud&lt;/code&gt; and &lt;code&gt;azp&lt;/code&gt; and &lt;code&gt;email&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;First, you have to look at the field named &lt;code&gt;aud&lt;/code&gt; and verify that it’s identical to your Client ID, the string you included in the Android app’s scope argument. Seriously, &lt;em&gt;&lt;strong&gt;do not omit this step&lt;/strong&gt;&lt;/em&gt;; if you don't verify the ID Token, then any other developer can spoof requests to your service.&lt;/p&gt;&lt;p&gt;Optionally, you can look at the field named &lt;code&gt;azp&lt;/code&gt; (stands for “authorized party”) and verify that it is identical to the Client ID of your Android app. By the way, you can have multiple different Android client apps, each with its own Client ID, in that top-level project.&lt;/p&gt;&lt;p&gt;Let’s assume you’ve done all three of these things. Then, you know that:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;The token was issued by Google.&lt;/li&gt;
&lt;li&gt;The token was sent to a device that was being operated by the person identified in the payload's &lt;code&gt;email&lt;/code&gt; field.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;You also have high confidence that:&lt;/p&gt;&lt;ol start="3"&gt;&lt;li&gt;The token was obtained by the Android app identified by the Client ID in the payload’s &lt;code&gt;azp&lt;/code&gt; field.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;The Client ID only has “high confidence” because non-compatible or rooted Android devices may be able to tamper with that information. But they won't be able to fake the Google signature or the authentication of the device user to Google.&lt;/p&gt;&lt;h3&gt;What’s Next?&lt;/h3&gt;&lt;p&gt;That’s up to you. You know which person and app you’re talking to, it’s up to you what to do with that information.&lt;/p&gt;&lt;h3&gt;Code Fragments&lt;/h3&gt;&lt;p&gt;Here’s a Java class that implements an ID-Token checker using the Google Java libraries:&lt;/p&gt;&lt;pre&gt;import java.io.IOException;
import java.security.GeneralSecurityException;

import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;

public class Checker {

    private final List&lt;string&gt; mClientIDs;
    private final String mAudience;
    private final GoogleIdTokenVerifier mVerifier;
    private final JsonFactory mJFactory;
    private String mProblem = "Verification failed. (Time-out?)";

    public Checker(String[] clientIDs, String audience) {
        mClientIDs = Arrays.asList(clientIDs);
        mAudience = audience;
        NetHttpTransport transport = new NetHttpTransport();
        mJFactory = new GsonFactory();
        mVerifier = new GoogleIdTokenVerifier(transport, mJFactory);
    }

    public GoogleIdToken.Payload check(String tokenString) {
        GoogleIdToken.Payload payload = null;
        try {
            GoogleIdToken token = GoogleIdToken.parse(mJFactory, tokenString);
            if (mVerifier.verify(token)) {
                GoogleIdToken.Payload tempPayload = token.getPayload();
                if (!tempPayload.getAudience().equals(mAudience))
                    mProblem = "Audience mismatch";
                else if (!mClientIDs.contains(tempPayload.getIssuee()))
                    mProblem = "Client ID mismatch";
                else
                    payload = tempPayload;
            }
        } catch (GeneralSecurityException e) {
            mProblem = "Security issue: " + e.getLocalizedMessage();
        } catch (IOException e) {
            mProblem = "Network problem: " + e.getLocalizedMessage();
        }
        return payload;
    }

    public String problem() {
        return mProblem;
    }
}&lt;/pre&gt;&lt;p&gt;If you wanted to do this in Ruby, you’d want to install the google-id-token Ruby gem, and do something like this:&lt;/p&gt;&lt;pre&gt;require 'google-id-token'
validator = GoogleIDToken::Validator.new
jwt = validator.check(token, required_audience, required_client_id)
if jwt
  email = jwt['email']
else
  report "Cannot validate: #{validator.problem}"
end&lt;/pre&gt;&lt;p&gt;For PHP programmers, check out the &lt;a href="https://code.google.com/p/google-api-php-client/"&gt;Google APIs Client Library for PHP&lt;/a&gt;, in particular the function verifyIdToken in &lt;a href="https://code.google.com/p/google-api-php-client/source/browse/trunk/src/auth/apiOAuth2.php?r=445"&gt;apiOAuth2.php&lt;/a&gt;.&lt;/p&gt;&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/PfZV27hX2mL" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/108967384991768947849/posts/PfZV27hX2mL" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/PfZV27hX2mL" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=wbxhQV8JlAg:BsQRzvbtoQQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=wbxhQV8JlAg:BsQRzvbtoQQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=wbxhQV8JlAg:BsQRzvbtoQQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/wbxhQV8JlAg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7627603220126702286?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7627603220126702286?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/wbxhQV8JlAg/verifying-back-end-calls-from-android.html" title="Verifying Back-End Calls from Android Apps" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-EtecxvwBnt8/UOt4yZDkE9I/AAAAAAAAB5U/7Rp3v_WGPGo/s72-c/hy.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2013/01/verifying-back-end-calls-from-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8MSHk8fip7ImA9WhNVFkk.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-8397590263310614380</id><published>2012-12-27T13:09:00.000-08:00</published><updated>2012-12-27T13:31:29.776-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-27T13:31:29.776-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Daydream" /><category scheme="http://www.blogger.com/atom/ns#" term="User Interface" /><title>Daydream: Interactive Screen Savers</title><content type="html">&lt;em&gt;Posted by Daniel Sandler, a software engineer on the Android System UI team&lt;/em&gt;&lt;div style="float:right;padding-right:0"&gt;&lt;img src="http://3.bp.blogspot.com/-8s5LkLutYBU/UNSwENBoD9I/AAAAAAAAB38/AAWIZcW9PBI/s400/daydreams_dsandler_headshot.png" alt="Daydream" width="190" style="margin-bottom:0;margin-right:1em;padding:0 1.5em 1.5em 1.5em;"&gt;
&lt;/div&gt;

&lt;p&gt;I’ve always loved screen savers. Supposedly they exist for a practical purpose: protecting that big, expensive monitor from the ghosts of spreadsheets past.&lt;/p&gt;

&lt;p&gt;But I’ve always imagined that your computer is secretly hoping you’ll stand up and walk away for a bit. Just long enough for that idle timer to expire…so it can run off and play for a little while. Draw a picture, set off fireworks, explore the aerodynamics of kitchen appliances, whatever—while always ready to get back to work at a keystroke or nudge of the mouse.&lt;/p&gt;

&lt;p&gt;Daydream, new in Android 4.2, brings this kind of laid-back, whimsical experience to Android phones and tablets that would otherwise be sleeping. If you haven’t checked it out, you can turn it on in the Settings app, in &lt;strong&gt;Display&lt;/strong&gt; &amp;gt; &lt;strong&gt;Daydream&lt;/strong&gt;; touch &lt;strong&gt;When to Daydream&lt;/strong&gt; to enable the feature when charging.&lt;/p&gt;

&lt;h3&gt;An attract mode for apps&lt;/h3&gt;
&lt;p&gt;Apps that support Daydream can take advantage of the full Android UI toolkit in this mode, which means it’s easy to take existing components of your app &amp;mdash; including layouts, animations, 3D, and custom views—and remix them for a more ambient presentation. And since you can use touchscreen input in this mode as well, you can provide a richly interactive experience if you choose.&lt;/p&gt;

&lt;p&gt;Daydream provides an opportunity for your app to show off a little bit. You can choose to hide some of your app’s complexity in favor of one or more visually compelling experiences that can entertain from across a room, possibly drawing the user into your full app, like a video game’s &lt;a href="http://en.wikipedia.org/wiki/Attract_mode"&gt;attract mode&lt;/a&gt;.&lt;/p&gt;

&lt;div style="margin:1.5em 3em;width:80%"&gt;&lt;img  src="http://3.bp.blogspot.com/-wVsUOo4xGE0/UNy9mZ1nmMI/AAAAAAAAB4w/f6rhyLn5KbI/s1600/daydream-example.jpg" width="100%" /&gt;&lt;p class="image-caption" style="padding-left:.5em;padding-top:0;margin-top:0"&gt;&lt;strong&gt;Figure 1&lt;/strong&gt;. Google Currents scrolls stories past in a smooth, constantly-moving wall of news.&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Google Currents is a great example of this approach: as a Daydream, it shows a sliding wall of visually-interesting stories selected from your editions. Touch a story, however, and Currents will show it to you full-screen; touch again to read it in the full Currents app.&lt;/p&gt;

&lt;h3&gt;The architecture of a Daydream&lt;/h3&gt;

&lt;p&gt;Each Daydream implementation is a subclass of &lt;a href="http://developer.android.com/reference/android/service/dreams/DreamService.html"&gt;&lt;code&gt;android.service.dreams.DreamService&lt;/code&gt;&lt;/a&gt;. When you extend &lt;code&gt;DreamService&lt;/code&gt;, you’ll have access to a simple Activity-like lifecycle API.&lt;/p&gt;

&lt;p&gt;Key methods on &lt;code&gt;DreamService&lt;/code&gt; to override in your subclass (don’t forget to call the superclass implementation):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/reference/android/service/dreams/DreamService.html#onAttachedToWindow()"&gt;&lt;code&gt;onAttachedToWindow()&lt;/code&gt;&lt;/a&gt; &amp;mdash; Use this for initial setup, such as calling &lt;code&gt;setContentView()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/reference/android/service/dreams/DreamService.html#onDreamingStarted()"&gt;&lt;code&gt;onDreamingStarted()&lt;/code&gt;&lt;/a&gt; &amp;mdash; start your animations and timers&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/reference/android/service/dreams/DreamService.html#onDreamingStopped()"&gt;&lt;code&gt;onDreamingStopped()&lt;/code&gt;&lt;/a&gt; &amp;mdash; stop animations&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/reference/android/service/dreams/DreamService.html#onDetachedFromWindow()"&gt;&lt;code&gt;onDetachedFromWindow()&lt;/code&gt;&lt;/a&gt; &amp;mdash; tear down anything you built in &lt;code&gt;onAttachedToWindow()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Important methods on DreamService that you may want to call:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/reference/android/service/dreams/DreamService.html#setContentView(android.view.View)"&gt;&lt;code&gt;setContentView()&lt;/code&gt;&lt;/a&gt; &amp;mdash; set the scene for your Daydream. Can be a layout XML resource ID or an instance of &lt;code&gt;View&lt;/code&gt;, even a custom &lt;code&gt;View&lt;/code&gt; you implement yourself.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/reference/android/service/dreams/DreamService.html#setInteractive(boolean)"&gt;&lt;code&gt;setInteractive(boolean)&lt;/code&gt;&lt;/a&gt; &amp;mdash; by default, your Daydream will exit if the user touches the screen, like a classic screen saver. If you want the user to be able to touch and interact with your Views, call &lt;code&gt;setInteractive(true)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/reference/android/service/dreams/DreamService.html#setFullscreen(boolean)"&gt;&lt;code&gt;setFullscreen(boolean)&lt;/code&gt;&lt;/a&gt; &amp;mdash; convenience method for hiding the status bar (see &lt;a href="#hide-status"&gt;below&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/reference/android/service/dreams/DreamService.html#setScreenBright(boolean)"&gt;&lt;code&gt;setScreenBright(boolean)&lt;/code&gt;&lt;/a&gt; &amp;mdash; by default, Daydreams keep the screen on at full brightness, which may not be appropriate for some situations (for example, dark rooms); setting this to false will reduce the display brightness to a very low level.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, to advertise your Daydream to the system, create a &lt;code&gt;&amp;lt;service&amp;gt;&lt;/code&gt; for it in your AndroidManifest.xml:&lt;/service&gt;&lt;/p&gt;

&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&gt;
&amp;lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app"&gt;
    &amp;lt;uses-sdk android:targetSdkVersion="17" android:minSdkVersion="17" /&gt;

    &amp;lt;application&gt;
        &amp;lt;service
            android:name=".ExampleDaydream"
            android:exported="true"
            android:label="@string/my_daydream_name"&gt;
            &amp;lt;intent-filter&gt;
                &amp;lt;action android:name="android.service.dreams.DreamService" /&gt;
                &amp;lt;category android:name="android.intent.category.DEFAULT" /&gt;
            &amp;lt;/intent-filter&gt;
            &amp;lt;meta-data
                android:name="android.service.dream"
                android:resource="@xml/dream_info" /&gt;
        &amp;lt;/service&gt;
    &amp;lt;/application&gt;
&amp;lt;/manifest&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;&amp;lt;meta-data&amp;gt;&lt;/code&gt; tag is optional; it allows you to point to an XML resource that specifies a settings Activity specific to your Daydream. The user can reach it by tapping the settings icon next to your Daydream’s name in the Settings app.&lt;/p&gt;

&lt;pre&gt;&amp;lt;!-- res/xml/dream_info.xml --&amp;gt;
&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;dream xmlns:android="http://schemas.android.com/apk/res/android"
    android:settingsActivity="com.example.app/.ExampleDreamSettingsActivity" /&amp;gt&lt;/pre&gt;

&lt;p&gt;Here's an example to get you going: a classic screen saver, the bouncing logo, implemented using a &lt;a href="http://developer.android.com/reference/android/animation/TimeAnimator.html"&gt;TimeAnimator&lt;/a&gt; to give you buttery-smooth 60Hz animation.&lt;/p&gt;


&lt;div style="padding:1.5em 3em 1.5em 5em;width:80%"&gt;&lt;img  src="https://lh5.googleusercontent.com/p2lXdJlttrytQZPk1IJpk6ubvVZjo-NGOzsRYaHXgzKkFw4RzbxTcX0eXr1fH7iuAyesycl7JZaSAvUOx5FDgf0W9DS_kwoUll5BrlhoxibQfVnnAxRx" width="100%" /&gt;&lt;p class="image-caption" style="padding-left:.5em;padding-top:0;margin-top:0"&gt;&lt;strong&gt;Figure 2&lt;/strong&gt;. Will one of them hit the corner?&lt;/p&gt;&lt;/div&gt;

&lt;pre&gt;public class BouncerDaydream extends DreamService {
    @Override
    public void onDreamingStarted() {
        super.onDreamingStarted();

        // Our content view will take care of animating its children.
        final Bouncer bouncer = new Bouncer(this);
        bouncer.setLayoutParams(new 
            ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
        bouncer.setSpeed(200); // pixels/sec

        // Add some views that will be bounced around.
        // Here I'm using ImageViews but they could be any kind of 
        // View or ViewGroup, constructed in Java or inflated from 
        // resources.
        for (int i=0; i&amp;lt;5; i++) {
            final FrameLayout.LayoutParams lp 
                = new FrameLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
            final ImageView image = new ImageView(this);
            image.setImageResource(R.drawable.android);
            image.setBackgroundColor(0xFF004000);
            bouncer.addView(image, lp);
        }

        setContentView(bouncer);
    }
}

public class Bouncer extends FrameLayout implements TimeAnimator.TimeListener {
    private float mMaxSpeed;
    private final TimeAnimator mAnimator;
    private int mWidth, mHeight;

    public Bouncer(Context context) {
        this(context, null);
    }

    public Bouncer(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public Bouncer(Context context, AttributeSet attrs, int flags) {
        super(context, attrs, flags);
        mAnimator = new TimeAnimator();
        mAnimator.setTimeListener(this);
    }

    /**
     * Start the bouncing as soon as we’re on screen.
     */
    @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        mAnimator.start();
    }

    /**
     * Stop animations when the view hierarchy is torn down.
     */
    @Override
    public void onDetachedFromWindow() {
        mAnimator.cancel();
        super.onDetachedFromWindow();
    }

    /**
     * Whenever a view is added, place it randomly.
     */
    @Override
    public void addView(View v, ViewGroup.LayoutParams lp) {
        super.addView(v, lp);
        setupView(v);
    }

    /**
     * Reposition all children when the container size changes.
     */
    @Override
    protected void onSizeChanged (int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mWidth = w;
        mHeight = h;
        for (int i=0; i&amp;lt;getChildCount(); i++) {
            setupView(getChildAt(i));
        }
    }

    /**
     * Bouncing view setup: random placement, random velocity.
     */
    private void setupView(View v) {
        final PointF p = new PointF();
        final float a = (float) (Math.random()*360);
        p.x = mMaxSpeed * (float)(Math.cos(a));
        p.y = mMaxSpeed * (float)(Math.sin(a));
        v.setTag(p);
        v.setX((float) (Math.random() * (mWidth - v.getWidth())));
        v.setY((float) (Math.random() * (mHeight - v.getHeight())));
    }

    /**
     * Every TimeAnimator frame, nudge each bouncing view along.
     */
    public void onTimeUpdate(TimeAnimator animation, long elapsed, long dt_ms) {
        final float dt = dt_ms / 1000f; // seconds 
        for (int i=0; i&amp;lt;getChildCount(); i++) {
            final View view = getChildAt(i);
            final PointF v = (PointF) view.getTag();

            // step view for velocity * time 
            view.setX(view.getX() + v.x * dt);
            view.setY(view.getY() + v.y * dt);

            // handle reflections
            final float l = view.getX();
            final float t = view.getY();
            final float r = l + view.getWidth();
            final float b = t + view.getHeight();
            boolean flipX = false, flipY = false;
            if (r &amp;gt; mWidth) {
                view.setX(view.getX() - 2 * (r - mWidth));
                flipX = true;
            } else if (l &amp;lt; 0) {
                view.setX(-l);
                flipX = true;
            }
            if (b &amp;gt; mHeight) {
                view.setY(view.getY() - 2 * (b - mHeight));
                flipY = true;
            } else if (t &amp;lt; 0) {
                view.setY(-t);
                flipY = true;
            }
            if (flipX) v.x *= -1;
            if (flipY) v.y *= -1;
        }
    }

    public void setSpeed(float s) {
        mMaxSpeed = s;
    }
}&lt;/pre&gt;

&lt;p&gt;This example code is handy for anything you want to show the user without burning it into the display (like a simple graphic or an error message), and it also makes a great starting point for more complex Daydream projects.&lt;/p&gt;

&lt;h3&gt;A few more idle thoughts&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;First, do no harm&lt;/strong&gt;: Daydream is meant to run when a device is charging. However, if the Daydream consumes too much CPU, charging might happen very slowly or not at all! The system will stop your Daydream if it detects that the device is not charging, so make sure your code leaves enough power to charge the battery in a reasonable amount of time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Respect the lockscreen&lt;/strong&gt;: Daydream runs on top of the secure keyguard, which means that if you might be showing sensitive content, you need to give the user tools to control that content. For example, Photo Table and Photo Frame allow the user to select the albums from which photos will be displayed (avoiding embarrassing slideshows).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Screen brightness&lt;/strong&gt;: Think about where you expect your Daydream to be used and adjust the screen brightness accordingly using &lt;a href="http://developer.android.com/reference/android/service/dreams/DreamService.html#setScreenBright(boolean)"&gt;&lt;code&gt;setScreenBright()&lt;/code&gt;&lt;/a&gt; and possibly even using darker or brighter colors as necessary. A bedside clock will need to be dimmer than a desk clock; if you expect your Daydream to serve both purposes you'll need to give the user a choice.&lt;/li&gt;
&lt;li id="hide-status"&gt;&lt;strong&gt;To hide the status bar or not&lt;/strong&gt;: Many users will need instant access to the battery level and time of day, so you should avoid using &lt;a href="http://developer.android.com/reference/android/service/dreams/DreamService.html#setFullscreen(boolean)"&gt;&lt;code&gt;setFullscreen()&lt;/code&gt;&lt;/a&gt;, particularly if your Daydream is more informational than artistic. Daydream will start with the status bar in “lights out” mode (&lt;a href="http://developer.android.com/reference/android/view/View.html#SYSTEM_UI_FLAG_LOW_PROFILE"&gt;&lt;code&gt;View.SYSTEM_UI_FLAG_LOW_PROFILE&lt;/code&gt;&lt;/a&gt;), where it’s quite unobtrusive but still shows the clock and charge status.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;When to use settings&lt;/strong&gt;: In general, you have a little latitude for adding extra knobs and dials to Daydream settings. After all, this is a personalization feature, so users should be encouraged to tweak things until they feel at home. Sometimes, though, a more compelling experience can come from taking an artistic stand: giving the user a choice from a small number of polished, beautiful configurations (rather than providing all the controls of a commercial airline cockpit).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;There can be more than one&lt;/strong&gt;: If you discover that your settings allow the user to pick between a few radically different display modes, consider splitting your Daydream into multiple DreamService implementations. For example, the photo gallery in Android 4.2 provides both the Photo Table and Photo Frame Daydreams.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use an Activity for development&lt;/strong&gt;: Most Android development tools are optimized for developing and debugging conventional Android apps; since &lt;code&gt;DreamService&lt;/code&gt; and &lt;code&gt;Activity&lt;/code&gt; are so similar, it can be useful to create a testing &lt;code&gt;Activity&lt;/code&gt; that hosts the same content view as your &lt;code&gt;DreamService&lt;/code&gt;. This way you can launch and test your code easily from your IDE as if it were any other Android project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OK, that’s enough for now; you have the tools to go build Daydream support into your apps. Have fun with it &amp;mdash; if you do, your users will have fun too. Oh, and when you upload your shiny new APK to Google Play, be sure to add a note to your app’s description so that users searching for Daydreams can discover it.&lt;/p&gt;

&lt;h3&gt;Further reading and samples&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;API docs for &lt;a href="http://developer.android.com/reference/android/service/dreams/DreamService.html"&gt;DreamService&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sample code: &lt;a href="http://code.google.com/p/android-daydream-samples/source/browse/#git%2Fbouncer"&gt;BouncerDaydream&lt;/a&gt;, complete project for the code snippets in this post&lt;/li&gt;
&lt;li&gt;Sample code: &lt;a href="https://android.googlesource.com/platform/packages/screensavers/WebView/+/master/"&gt;WebView&lt;/a&gt;, a Daydream that shows an HTML page&lt;/li&gt;
&lt;li&gt;Sample code: &lt;a href="https://android.googlesource.com/platform/packages/screensavers/Basic/+/jb-mr1-release/src/com/android/dreams/basic/"&gt;Colors&lt;/a&gt;, a Daydream that demonstrates OpenGL ES 2.0 and TextureView&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="display: inline-block; float: right; line-height: 0;margin-top:1em;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/CzsVRpKauL4" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/108967384991768947849/posts/CzsVRpKauL4" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/CzsVRpKauL4" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=nOC8TTlMTiY:ICKqKbwLPCs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=nOC8TTlMTiY:ICKqKbwLPCs:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=nOC8TTlMTiY:ICKqKbwLPCs:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/nOC8TTlMTiY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8397590263310614380?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8397590263310614380?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/nOC8TTlMTiY/daydream-interactive-screen-savers.html" title="Daydream: Interactive Screen Savers" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-8s5LkLutYBU/UNSwENBoD9I/AAAAAAAAB38/AAWIZcW9PBI/s72-c/daydreams_dsandler_headshot.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2012/12/daydream-interactive-screen-savers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QARH88eip7ImA9WhNVEE4.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-4945859137776867585</id><published>2012-12-20T12:18:00.001-08:00</published><updated>2012-12-20T12:29:05.172-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-20T12:29:05.172-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><category scheme="http://www.blogger.com/atom/ns#" term="Promo Graphics" /><title>Localize Your Promotional Graphics on Google Play</title><content type="html">&lt;p&gt;&lt;em&gt;Posted by Ellie Powers, Product Manager on the Google Play team&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Google Play is your way to reach millions and millions of Android users around the world. In fact, since the start of 2011, the number of countries where you can sell apps has increased from 30 to over 130 &amp;mdash; including most recently, the launch of paid app support in Israel, Mexico, the Czech Republic, Poland, Brazil and Russia, and fully two-thirds of revenue for apps on Google Play comes from outside of the United States.&lt;/p&gt;

&lt;p&gt;To help you capitalize on this growing international audience, it’s now even easier to market your apps to users around the world, by adding images and a video URL to your Google Play store listing for each of Google Play’s 49 languages, just as you’ve been able to add localized text. &lt;/p&gt;

&lt;div class="separator" style="clear: both;float:right;width=400px; text-align: center;"&gt;
&lt;img width="500" src="http://4.bp.blogspot.com/-roExB51_0sM/UNNxufNZ5MI/AAAAAAAAB3o/Ob8IUKD-L4k/s1600/local_graphics.png" style="border:4px solid #ddd;margin-left:1em;" /&gt;&lt;/div&gt;

&lt;p&gt;A localized feature graphic can show translated text or add local flavor to your app &amp;mdash; for example, changing its theme to reflect local holidays. Always make sure that your &lt;a href="http://android-developers.blogspot.co.uk/2011/10/android-market-featured-image.html"&gt;feature graphic works at different sizes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once you’ve localized your app, you’ll want to make sure users in all languages can understand what your app does and how it can benefit them. Review the &lt;a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=1078870"&gt;graphics guidelines&lt;/a&gt; and get started with localized graphics. &lt;/p&gt;

&lt;p&gt;Localized screenshots make it clear to the user that they’ll be able to use your app in their language. As you’re adding localized screenshots, remember that a lot of people will be getting new tablets for the holidays, and loading up with new apps, so you’ll want to include localized tablet screenshots to show off your tablet layouts.&lt;/p&gt;

&lt;p&gt;With localized videos, you can now include a language-appropriate voiceover and text, and of course show the app running in the user’s language.&lt;/p&gt;

&lt;p&gt;Ready to add localized images and videos to your store listing? To add localized graphics and video to your apps, you need to use the &lt;a href="https://play.google.com/apps/publish/v2/"&gt;Google Play Developer Console preview&lt;/a&gt; &amp;mdash; once you add localized graphics, you won’t be able to edit the app using the old version anymore. Those of you who use APK Expansion Files will now want to try the new Developer Console because it now includes this feature. We’ll be adding support for Multiple APK very soon.  Once you’ve saved your application in the new Developer Console, automated translations become available to users on the web and devices &amp;mdash; with no work from you. &lt;/p&gt;

&lt;p&gt;What are you doing to help your app reach a global audience? &lt;/p&gt;
&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/+AndroidDevelopers/posts/axjy2kjY7Gi" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/+AndroidDevelopers/posts/axjy2kjY7Gi" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/+AndroidDevelopers/posts/axjy2kjY7Gi" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=JA2vuffxCD4:nJZukBr3Vug:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=JA2vuffxCD4:nJZukBr3Vug:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=JA2vuffxCD4:nJZukBr3Vug:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/JA2vuffxCD4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4945859137776867585?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4945859137776867585?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/JA2vuffxCD4/localize-your-promotional-graphics-on.html" title="Localize Your Promotional Graphics on Google Play" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-roExB51_0sM/UNNxufNZ5MI/AAAAAAAAB3o/Ob8IUKD-L4k/s72-c/local_graphics.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2012/12/localize-your-promotional-graphics-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcEQHk_fCp7ImA9WhNWEkk.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-7228650198685551630</id><published>2012-12-11T09:30:00.000-08:00</published><updated>2012-12-11T09:30:01.744-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-11T09:30:01.744-08:00</app:edited><title>The 2012 Android Developer Survey</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
The Android Developer Relations team is passionate about making Android app development a great experience, so we're asking all of you involved in building Android apps -- from engineers, to product managers, and distribution and support folks -- to let us know what you think.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-5Lm0zF7cRAI/UMZYmaX2wRI/AAAAAAAABN0/SEYN0pXT8bk/s1600/IMG_20121130_124658%2B%25281%2529.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="295" src="http://4.bp.blogspot.com/-5Lm0zF7cRAI/UMZYmaX2wRI/AAAAAAAABN0/SEYN0pXT8bk/s400/IMG_20121130_124658%2B%25281%2529.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
We want to better understand the challenges you face when planning, designing, writing, and distributing your Android apps, so we've put together a brief (10-15min) survey that will help us test our assumptions and allow us to create better tools and resources for you.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
We've had a great response from thousands of Android developers who&amp;nbsp;have already responded - thank you! If you haven't yet filled in the survey, you can find it here:&amp;nbsp;&lt;a href="http://bit.ly/AndroidDevSurvey" style="font-weight: bold;"&gt;2012 Android Developer Survey&lt;/a&gt;.&lt;/div&gt;
&lt;br /&gt;
We'll be closing this year's survey &lt;b&gt;this Sunday (December 17th) at 12pm Pacific Time&lt;/b&gt;, so be sure to get your responses in before then.&lt;br /&gt;
&lt;br /&gt;
To keep the survey short and simple, there are no sections for general comments. That's because we&amp;nbsp;want to hear your thoughts, questions, suggestions, and complaints &lt;i&gt;all year.&lt;/i&gt; If there's anything you'd like to share with us, you can let us know by posting to us&amp;nbsp;(publicly or privately)&amp;nbsp;on Google+ at &lt;a href="http://www.google.com/+AndroidDevelopers"&gt;+Android Developers&lt;/a&gt; or using the hash tag #AndroidDev.&lt;br /&gt;
&lt;br /&gt;
We can't always respond, but we're paying close attention to everything you have to say.&lt;br /&gt;
&lt;br /&gt;
As always, we're looking forward to hearing your thoughts!&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=0HTn8eFTB-g:c8VAb4HRGLo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=0HTn8eFTB-g:c8VAb4HRGLo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=0HTn8eFTB-g:c8VAb4HRGLo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/0HTn8eFTB-g" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7228650198685551630?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7228650198685551630?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/0HTn8eFTB-g/the-2012-android-developer-survey.html" title="The 2012 Android Developer Survey" /><author><name>Android Developer Relations</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-5Lm0zF7cRAI/UMZYmaX2wRI/AAAAAAAABN0/SEYN0pXT8bk/s72-c/IMG_20121130_124658%2B%25281%2529.jpg" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2012/12/the-2012-android-developer-survey.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUHSXs4eSp7ImA9WhBWFUw.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-1332623547826553990</id><published>2012-12-10T10:35:00.000-08:00</published><updated>2013-04-09T07:37:18.531-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-09T07:37:18.531-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Services" /><category scheme="http://www.blogger.com/atom/ns#" term="In-app Billing" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><title>In-App Billing Version 3</title><content type="html">&lt;em&gt;Posted by Bruno Oliveira of the Android Developer Relations Team&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
In-app Billing has come a long way since it was &lt;a href="http://android-developers.blogspot.com/2011/03/in-app-billing-launched-on-android.html"&gt;first announced on Google Play&lt;/a&gt; (then Android Market). One year and a half later, the vast majority of top-grossing apps on Google Play use In-app Billing and thousands of developers monetize apps through try-and-buy, virtual goods, as well as subscriptions.&lt;br /&gt;
&lt;br /&gt;
In-app Billing is expanding again, making it even more powerful and flexible so you can continue to build successful applications. Version 3 introduces the following new features:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;An improved design that makes applications simpler to write, debug and maintain. Integrations that previously required several hundred lines of code can now be implemented in as few as 50.&lt;/li&gt;
&lt;li&gt;More robust architecture resulting in fewer lost transactions.&lt;/li&gt;
&lt;li&gt;Local caching for faster API calls.&lt;/li&gt;
&lt;li style="padding-bottom:0;margin-bottom:0;"&gt;Long-anticipated functionality such as the ability to consume managed purchases and query for product information.&lt;/li&gt;
&lt;/ul&gt;&lt;p style="margin-top:1em;"&gt;In-app Billing version 3 is available now and lets you sell both in-app items and &lt;em&gt;(since February 2013) &lt;/em&gt;  subscriptions, including subscriptions with free trials. It is supported by Android 2.2+ devices running the latest version of the Google Play Store (over 90% of active devices).&lt;/p&gt;Instead of the four different application components required by the asynchronous structure of the previous release, the new version of the API allows developers to make synchronous requests and handle responses directly from within a single Activity, all of which are accomplished with just a few lines of code. The reduced implementation cost makes this a great opportunity for developers who are implementing new in-app billing solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Easier to Implement&lt;/h3&gt;&lt;br /&gt;
In contrast to the earlier model of asynchronous notification through a background service, the new API is now synchronous and reports the result of a purchase immediately to the application. This eliminates the necessity to integrate the handling of asynchronous purchase results into the application's lifecycle, which significantly simplifies the code that a developer must write in order to sell an in-app item.&lt;br /&gt;
&lt;br /&gt;
To launch a purchase, simply obtain a buy Intent from the API and start it:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Bundle bundle = mService.getBuyIntent(3, "com.example.myapp",
    MY_SKU, ITEM_TYPE_INAPP, developerPayload);

PendingIntent pendingIntent = bundle.getParcelable(RESPONSE_BUY_INTENT);
if (bundle.getInt(RESPONSE_CODE) == BILLING_RESPONSE_RESULT_OK) {
    // Start purchase flow (this brings up the Google Play UI).
    // Result will be delivered through onActivityResult().
    startIntentSenderForResult(pendingIntent, RC_BUY, new Intent(),
        Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0));
}&lt;/pre&gt;&lt;br /&gt;
Then, handle the purchase result that's delivered to your Activity's onActivityResult() method:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == RC_BUY) {
        int responseCode = data.getIntExtra(RESPONSE_CODE);
        String purchaseData = data.getStringExtra(RESPONSE_INAPP_PURCHASE_DATA);
        String signature = data.getStringExtra(RESPONSE_INAPP_SIGNATURE);

        // handle purchase here (for a permanent item like a premium upgrade,
        // this means dispensing the benefits of the upgrade; for a consumable
        // item like "X gold coins", typically the application would initiate
        // consumption of the purchase here)
    }
}&lt;/pre&gt;&lt;br /&gt;
Also, differently from the previous version, all purchases are now managed by Google Play, which means the ownership of a given item can be queried at any time. To implement the same mechanics as unmanaged items, applications can consume the item immediately upon purchase and provision the benefits of the item upon successful consumption.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Local Caching&lt;/h3&gt;&lt;br /&gt;
The API leverages a new feature of the Google Play store application which caches In-app Billing information locally on the device, making it readily available to applications. With this feature, many API calls will be serviced through cache lookups instead of a network connection to Google Play, which significantly speeds up the API's response time. For example, an application could query the owned items using this call: &lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Bundle bundle = mService.getPurchases(3, mContext.getPackageName(), ITEM_TYPE_INAPP);
if (bundle.getInt(RESPONSE_CODE) == BILLING_RESPONSE_RESULT_OK) {
    ArrayList&lt;string&gt; mySkus, myPurchases, mySignatures;
    mySkus = bundle.getStringArrayList(RESPONSE_INAPP_ITEM_LIST);
    myPurchases = bundle.getStringArrayList(RESPONSE_INAPP_PURCHASE_DATA_LIST);
    mySignatures = bundle.getStringArrayList(RESPONSE_INAPP_PURCHASE_SIGNATURE_LIST);

    // handle items here
}&lt;/pre&gt;&lt;br /&gt;
Querying for owned items was an expensive server call in previous versions of the API, so developers were discouraged from doing so frequently. However, since the new version implements local caching, applications can now make this query every time they start running, and as often as necessary thereafter.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Product Information&lt;/h3&gt;&lt;br /&gt;
The API also introduces a long-anticipated feature: the ability to query in-app product information directly from Google Play. Developers can now programmatically obtain an item's title, description and price. No currency conversion or formatting is necessary: prices are reported in the user's currency and formatted according to their locale:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Bundle bundle = mService.getSkuDetails(3, "com.example.myapp", 
        ITEM_TYPE_INAPP, skus); // skus is a Bundle with the list of SKUs to query
if (bundle.getInt(RESPONSE_CODE) == BILLING_RESPONSE_RESULT_OK) {
    List&lt;string&gt; detailsList = bundle.getStringArrayList(RESPONSE_SKU_DETAILS_LIST);
    for (String details : detailsList) {
        // details is a JSON string with 
        // SKU details (title, description, price, ...)
    }
}&lt;/pre&gt;&lt;br /&gt;
This means that, for example, developers can update prices in Developer Console and then use this API call to show the updated prices in the application (such as for a special promotion or sale) with no need to update the application's code  to change the prices displayed to the user.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Sample Application&lt;/h3&gt;&lt;br /&gt;
In addition to the API, we are releasing a new sample application that illustrates how to implement In-app Billing. It also contains helper classes that implement commonly-written boilerplate code such as marshalling and unmarshalling data structures from JSON strings and Bundles, signature verification, as well as utilities that automatically manage background work in order to allow developers to call the API directly from the UI thread of their application.  We highly recommend that developers who are new to In-app Billing leverage the code in this sample, as it further simplifies the process of implemention. The sample application is available for download through the Android SDK Manager.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;App-Specific Keys&lt;/h3&gt;&lt;br /&gt;
Along with the other changes introduced with In-app Billing Version 3, we have also improved the way Licensing and In-app Billing keys are managed. Keys are now set on a per-app basis, instead of a per-developer basis and are available on the “Services &amp; APIs” page for each application on &lt;a href="https://play.google.com/apps/publish/v2/"&gt;Google Play Developer Console preview&lt;/a&gt;. Your existing applications will continue to work with their current keys.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Get Started!&lt;/h3&gt;&lt;br /&gt;
To implement In-app Billing in your application using the new API, start with the updated &lt;a href="http://developer.android.com/google/play/billing/billing_overview.html"&gt;In-App Billing documentation&lt;/a&gt; and take the &lt;a href="http://developer.android.com/training/in-app-billing/index.html"&gt;Selling In-App Products&lt;/a&gt; training class. &lt;br /&gt;
&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/+AndroidDevelopers/posts/R8DKwZDsz5m" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/+AndroidDevelopers/posts/R8DKwZDsz5m" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/+AndroidDevelopers/posts/R8DKwZDsz5m" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=-8vrfw41pOk:1AZ87jFTBlw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=-8vrfw41pOk:1AZ87jFTBlw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=-8vrfw41pOk:1AZ87jFTBlw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/-8vrfw41pOk" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1332623547826553990?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1332623547826553990?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/-8vrfw41pOk/in-app-billing-version-3.html" title="In-App Billing Version 3" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://android-developers.blogspot.com/2012/12/in-app-billing-version-3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIMQXk6cSp7ImA9WhNXFkU.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-4887923279727603692</id><published>2012-12-03T10:41:00.000-08:00</published><updated>2012-12-04T22:06:20.719-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-04T22:06:20.719-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Play services" /><category scheme="http://www.blogger.com/atom/ns#" term="Maps" /><category scheme="http://www.blogger.com/atom/ns#" term="Photo Sphere" /><title>New Google Maps Android API now part of Google Play services</title><content type="html">&lt;em&gt;Posted by Reto Meier, Evan Rapoport, and Andrew Foster&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
Google Play services is our new platform that offers you better integration with Google products, and which provides greater agility for quickly rolling out new capabilities for you to use within your apps. Today we’re launching &lt;a href="http://developer.android.com/google/play-services/index.html"&gt;&lt;strong&gt;Google Play services v2.0&lt;/strong&gt;&lt;/a&gt;, which includes two new APIs, including perhaps our most frequently requested upgrade: &lt;strong&gt;Maps&lt;/strong&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Google Maps Android API&lt;/h3&gt;&lt;br /&gt;
The new version of the &lt;a href="http://developers.google.com/maps/documentation/android/"&gt;API&lt;/a&gt; allows developers to bring many of the recent features of Google Maps for Android to your Android apps. We’re excited to make this API available as part of Google Play services supporting devices from Froyo onwards (API level 8+).&lt;br /&gt;
&lt;br /&gt;
The new API uses &lt;strong&gt;vector-based maps&lt;/strong&gt; that support &lt;strong&gt;2D and 3D views&lt;/strong&gt;, and allow users to &lt;strong&gt;tilt and rotate&lt;/strong&gt; the map with simple gestures. Along with the layers you’ve come to know from Google Maps such as satellite, hybrid, terrain and traffic, the new API lets you include &lt;a href="http://support.google.com/gmm/bin/answer.py?hl=en&amp;answer=1685872&amp;topic=1685871&amp;ctx=topic"&gt;indoor maps&lt;/a&gt; for many major airports and shopping centers in your app.&lt;br /&gt;
&lt;br /&gt;
One of most common feature requests we’ve heard on Android is support for &lt;strong&gt;Map Fragments&lt;/strong&gt;. With this new API, adding a map to your Activity is as simple as:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;lt;fragment
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.MapFragment" /&amp;gt;&lt;/pre&gt;&lt;br /&gt;
Check out this image from updated &lt;a href="https://play.google.com/store/apps/details?id=com.trulia.android"&gt;Trulia&lt;/a&gt; Android app  (which goes live tomorrow), that users can use to search for a place to buy or rent in 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" width="600" src="http://2.bp.blogspot.com/-lcqRsXc3IMI/ULzi7kKxhXI/AAAAAAAAB0I/2XqzmJ69yWI/s1600/Trulia%2BScreenshot.png" /&gt;&lt;/div&gt;&lt;br /&gt;
The new API is simpler to use, so that creating markers and info windows is easy. Polylines, Polygons, Ground Overlays and Tile Overlays can all now be added to the map with just a few lines of code.&lt;br /&gt;
&lt;br /&gt;
To get started follow the getting started instructions to obtain an API Key. Then &lt;strong&gt;download and configure the Google Play services SDK&lt;/strong&gt; using the SDK Manager. Check the Google Maps for Android API documentation for more details. If you haven't got it already, you'll need to &lt;a href="http://developer.android.com/sdk/index.html"&gt;download the Android SDK&lt;/a&gt; first.&lt;br /&gt;
&lt;br /&gt;
More than 800,000 sites around the world already use our mapping APIs to create amazing and useful apps. We hope you enjoy using this new addition to the Google Maps API family, and building mapping experiences that were never before possible on a mobile device.  &lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Photo Sphere&lt;/h3&gt;&lt;br /&gt;
In Android 4.2, we introduced &lt;strong&gt;Photo Sphere&lt;/strong&gt; mode in the Camera, which you can use to create amazing, immersive panoramas just like you see in Street View on Google Maps. Today we’re excited to announce &lt;strong&gt;new APIs and documentation&lt;/strong&gt; that empower developers, businesses, and photographers to explore new uses of Photo Sphere for work and for play.&lt;br /&gt;
&lt;br /&gt;
We’ve made Photo Sphere an &lt;strong&gt;open format&lt;/strong&gt; so anyone can create and view them on the web or on mobile devices. &lt;br /&gt;
&lt;br /&gt;
A Photo sphere is simply an image file (like a JPG) that has in it text-based metadata, an open format created by Adobe called XMP. The metadata describes the Photo Sphere’s dimensions and how it should be rendered within the interactive Photo Sphere viewer you see in Android, Google+, and Google Maps.&lt;br /&gt;
&lt;br /&gt;
If you’d like to programmatically or manually add the XMP metadata into panoramic images not created by the Photo Sphere camera in Android, stay tuned today for more details on the metadata and how to apply it to your photos programmatically later.&lt;br /&gt;
&lt;br /&gt;
In the new Google Play services, we’ve added &lt;a href="http://developer.android.com/reference/com/google/android/gms/panorama/package-summary.html"&gt;APIs&lt;/a&gt; to give you the ability to check whether an image is a Photo Sphere and then open it up in the Photo Sphere viewer.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;// This listener will be called with information about the given panorama.
OnPanoramaInfoLoadedListener infoLoadedListener =
  new OnPanoramaInfoLoadedListener() {
    @Override
    public void onPanoramaInfoLoaded(ConnectionResult result,
                                     Intent viewerIntent) {
        if (result.isSuccess()) {
            // If the intent is not null, the image can be shown as a
            // panorama.
            if (viewerIntent != null) {
                // Use the given intent to start the panorama viewer.
                startActivity(viewerIntent);
            }
        }
        
        // If viewerIntent is null, the image is not a viewable panorama.
    }
};

// Create client instance and connect to it.
PanoramaClient client = ...
...

// Once connected to the client, initiate the asynchronous check on whether
// the image is a viewable panorama.
client.loadPanoramaInfo(infoLoadedListener, panoramaUri);&lt;/pre&gt;&lt;p style="margin-top:1.5em;"&gt;To learn more about Google Play services and the APIs available to you through it, visit the new &lt;a href="http://developer.android.com/google/index.html"&gt;Google Services&lt;/a&gt; area of the Android Developers site.&lt;/p&gt;&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/Tyz491d96Ci" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://plus.google.com/108967384991768947849/posts/Tyz491d96Ci" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/Tyz491d96Ci" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=snW-A4hcc2Q:KXiCS1jsKj8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=snW-A4hcc2Q:KXiCS1jsKj8:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=snW-A4hcc2Q:KXiCS1jsKj8:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/snW-A4hcc2Q" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4887923279727603692?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4887923279727603692?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/snW-A4hcc2Q/new-google-maps-android-api-now-part-of.html" title="New Google Maps Android API now part of Google Play services" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-lcqRsXc3IMI/ULzi7kKxhXI/AAAAAAAAB0I/2XqzmJ69yWI/s72-c/Trulia%2BScreenshot.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2012/12/new-google-maps-android-api-now-part-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUHRX8yfip7ImA9WhNQGUg.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-3686472350392145012</id><published>2012-11-26T10:03:00.000-08:00</published><updated>2012-11-26T10:07:14.196-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-26T10:07:14.196-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android Design" /><category scheme="http://www.blogger.com/atom/ns#" term="Tablets" /><title>Designing for Tablets? We’re Here to Help!</title><content type="html">&lt;p&gt;&lt;em&gt;Posted by &lt;a href="https://plus.google.com/u/0/113735310430199015092"&gt;Roman Nurik&lt;/a&gt;, who often writes about Android design-related topics on Google+&lt;/em&gt;&lt;/p&gt;&lt;p&gt;So you’ve got a great Android phone app on Google Play, your users love it, and you’re kicking back and watching the download numbers soar. Congrats! But like any enterprising developer, you may be thinking, “how do I take my app’s success even further?” The answer: an equally awesome experience on tablets. Users love their tablet apps! &lt;a href="http://developer.android.com/distribute/googleplay/spotlight/tablets.html"&gt;For example&lt;/a&gt;, Mint.com found that the larger screen real estate allowed tablet users to engage with their budget data 7x more than on phones. And TinyCo found that on average, paying users spent 35% more on tablets than on handsets. So now is the right time to think about how your app translates onto these larger screen devices that are designed to meet users’ more generic, everyday computing needs.&lt;/p&gt;&lt;p&gt;In this post, we’ll recap some of the resources available for crafting a great tablet experience for your users. These resources are useful for everyone in the app development pipeline&amp;mdash;from product managers, to designers, to developers, and QA engineers.&lt;/p&gt;&lt;h3&gt;Android Design Guidelines&lt;/h3&gt;&lt;p&gt;No conversation about Android app design or development should go very far without first consulting the &lt;a href="http://developer.android.com/design/index.html"&gt;Android Design&lt;/a&gt; guidelines. While most of the sections are relevant to all Android devices, certain sections stand out as particularly relevant to design on tablets.&lt;/p&gt;&lt;p style="float: right; margin-left: 20px"&gt;&lt;img src="http://developer.android.com/design/media/devices_displays_main.png" height="200"&gt;&lt;/p&gt;&lt;p&gt;The &lt;a href="http://developer.android.com/design/style/devices-displays.html"&gt;Devices and Displays&lt;/a&gt; page introduces the concept of density-independence. For example, although the Nexus 4, Nexus 7, and Motorola XOOM all have a similar pixel resolution (1280x768, 1280x800, and 1280x800 respectively), they have vastly different screens. Instead of thinking in pixels, think in dips (density-independent pixels)&amp;mdash;that way, it’s much easier to conceptualize the difference between Nexus 4 (640x384 dp), Nexus 7 (960x600dp), and Nexus 10 or the Motorola XOOM (1280x800 dp).&lt;/p&gt;&lt;p&gt;Following the 48dp rhythm discussed in &lt;a href="http://developer.android.com/design/style/metrics-grids.html"&gt;Metrics and Grids&lt;/a&gt; helps take some of the guesswork out of sizing elements, especially for tablets. When in doubt, use multiples of 48dp (or 16dp for a finer grid) for sizing elements horizontally and vertically. For example, when showing sparse content on larger screens, consider using generous side margins of 96dp or 144dp. Or when deciding how wide your master pane should be in a master/detail layout for 10” tablets, see how your master content looks and feels with a width of 240dp or 288dp.&lt;/p&gt;&lt;p style="float: left; margin-right: 20px"&gt;&lt;img src="http://developer.android.com/design/media/multipane_expand.png" height="200"&gt;&lt;/p&gt;&lt;p&gt;The &lt;a href="http://developer.android.com/design/patterns/multi-pane-layouts.html"&gt;Multi-pane Layouts&lt;/a&gt; guide discusses use cases and examples for combining related views into a single screen to simultaneously improve app navigation and make optimal use of the available screen real estate. It also discusses strategies for laying out content across &lt;a href="http://developer.android.com/design/patterns/multi-pane-layouts.html#orientation"&gt;both portrait and landscape&lt;/a&gt;, all while maintaining functional parity across orientations. Since users enjoy using tablets in both portrait and landscape orientations, it’s even more important to react properly to orientation changes than with phones.&lt;/p&gt;&lt;p&gt;Lastly, the &lt;a href="http://developer.android.com/design/downloads/index.html#stencils"&gt;Downloadable Stencils&lt;/a&gt; offer designers a great starting point for high-fidelity mockups, complete with reference device outlines, correctly sized action bars, and more.&lt;/p&gt;&lt;h3 style="clear:both"&gt;Android Training for Developers&lt;/h3&gt;&lt;p&gt;The &lt;a href="http://developer.android.com/training/index.html"&gt;Training&lt;/a&gt; section of the developer site offers task-oriented technical training material, complete with flow diagrams, code snippets, sample projects and more. Several of these ‘classes’ are geared toward helping developers understand how to scale your apps across any screen size.&lt;/p&gt;&lt;p style="float: right; margin-left: 20px"&gt;&lt;img src="http://developer.android.com/images/training/app-navigation-wireframing-map-example-tablet.png" height="200"&gt;&lt;/p&gt;&lt;p&gt;The Designing Effective Navigation class&amp;mdash;aimed more at the initial design phase of the app creation process&amp;mdash;offers a methodology for effectively planning and &lt;a href="http://developer.android.com/training/design-navigation/multiple-sizes.html"&gt;grouping screens on tablets&lt;/a&gt;, and even shows &lt;a href="http://developer.android.com/training/design-navigation/wireframing.html"&gt;example wireframes&lt;/a&gt; for a simple news reader application following this methodology.&lt;/p&gt;&lt;p&gt;The classes &lt;a href="http://developer.android.com/training/basics/fragments/index.html"&gt;Building a Dynamic UI with Fragments&lt;/a&gt; and &lt;a href="http://developer.android.com/training/multiscreen/index.html"&gt;Designing for Multiple Screens&lt;/a&gt; demonstrate how to use &lt;a href="http://developer.android.com/guide/components/fragments.html"&gt;fragments&lt;/a&gt; in conjunction with Android’s resources framework. They show how to easily &lt;a href="http://developer.android.com/training/multiscreen/screensizes.html"&gt;choose between tablet and handset layouts at runtime&lt;/a&gt; while maximizing code reuse and minimizing your application size using &lt;a href="http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters"&gt;resource aliases&lt;/a&gt;. They also demonstrate techniques for &lt;a href="http://developer.android.com/training/multiscreen/adaptui.html"&gt;adapting UI flows based on the current layout&lt;/a&gt;.&lt;/p&gt;&lt;p style="float: left; margin-right: 20px"&gt;&lt;img src="http://developer.android.com/images/fundamentals/fragments.png" height="200"&gt;&lt;/p&gt;&lt;p&gt;Lastly, while not precisely a training class, the &lt;a href="http://developer.android.com/guide/practices/tablets-and-handsets.html"&gt;Supporting Tablets and Handsets&lt;/a&gt; document offers even more information about some of these key best practices. And if you’re the type of developer that would prefer to skip the text and jump right into the code, you can even &lt;a href="http://android-developers.blogspot.com/2012/06/android-sdk-tools-revision-20.html"&gt;add a Master/Detail flow&lt;/a&gt;, complete with handset and tablet support, to your app with just a few clicks using the Android Developer Tools for Eclipse.&lt;/p&gt;&lt;h3 style="clear:both"&gt;Android Design in Action Highlights&lt;/h3&gt;&lt;p&gt;Each week, a few of us on the developer relations team get together on the &lt;a href="http://www.youtube.com/playlist?list=PLWz5rJ2EKKc8j2B95zGMb8muZvrIy-wcF"&gt;Android Design in Action&lt;/a&gt; live show to discuss Android design best practices, as well as provide original ‘redesign’ mockups to help demonstrate our vision of how Android apps should look and feel.&lt;/p&gt;&lt;p&gt;A recent episode focused on the topic of &lt;a href="http://www.youtube.com/watch?v=zHirwKGEfoE&amp;amp;list=PLWz5rJ2EKKc8j2B95zGMb8muZvrIy-wcF"&gt;responsive design&lt;/a&gt;, or designing flexible apps that can adapt to whatever screen size or form factor they’re run on:&lt;/p&gt;&lt;p style="text-align: center"&gt;&lt;object width="640" height="360" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://1.gvt0.com/vi/zHirwKGEfoE/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zHirwKGEfoE&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;embed width="640" height="360"  src="http://www.youtube.com/v/zHirwKGEfoE&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;In the episode, we celebrated successful examples of responsive design on Android, ranging from creating calendar events in &lt;a href="https://play.google.com/store/apps/details?id=com.google.android.calendar"&gt;Google Calendar&lt;/a&gt;, to browsing wallpapers and stories in &lt;a href="https://play.google.com/store/apps/details?id=org.lucasr.pattrn"&gt;Pattrn&lt;/a&gt; and &lt;a href="https://play.google.com/store/apps/details?id=com.ideashower.readitlater.pro"&gt;Pocket&lt;/a&gt;, to playing video in &lt;a href="https://play.google.com/store/apps/details?id=com.ted.android"&gt;TED&lt;/a&gt;, and finally to managing your conference schedule in the &lt;a href="http://code.google.com/p/iosched"&gt;open-source&lt;/a&gt; &lt;a href="https://play.google.com/store/apps/details?id=com.google.android.apps.iosched"&gt;Google I/O 2012 app&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;We also regularly feature tablet design concepts on the show (some are shown below), so we highly recommend tuning in each week for design ideas.&lt;/p&gt;&lt;div style="float:left; margin-right: 20px"&gt;&lt;a href="http://4.bp.blogspot.com/-v4nphvZvOfM/ULOgdfLau6I/AAAAAAAADBY/DersL6LNuog/s1600/t1.png" imageanchor="1"&gt;&lt;img border="0" height="150" src="http://4.bp.blogspot.com/-v4nphvZvOfM/ULOgdfLau6I/AAAAAAAADBY/DersL6LNuog/s200/t1.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float:left; margin-right: 20px"&gt;&lt;a href="http://3.bp.blogspot.com/-Vb4yc1YRRzc/ULOgeWT_K_I/AAAAAAAADBg/MNk2GsGuYU8/s1600/t2.png" imageanchor="1"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-Vb4yc1YRRzc/ULOgeWT_K_I/AAAAAAAADBg/MNk2GsGuYU8/s200/t2.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float:left; margin-right: 20px"&gt;&lt;a href="http://1.bp.blogspot.com/-JFKsg50HojM/ULOgfEE84vI/AAAAAAAADBo/oPbYN7nSQX8/s1600/t3.png" imageanchor="1"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/-JFKsg50HojM/ULOgfEE84vI/AAAAAAAADBo/oPbYN7nSQX8/s200/t3.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float:left; margin-right: 20px"&gt;&lt;a href="http://4.bp.blogspot.com/-V1CD-7wdr9U/ULOggBdb7sI/AAAAAAAADBw/JOzk4BUDeuE/s1600/t4.png" imageanchor="1"&gt;&lt;img border="0" height="150" src="http://4.bp.blogspot.com/-V1CD-7wdr9U/ULOggBdb7sI/AAAAAAAADBw/JOzk4BUDeuE/s200/t4.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float:left; margin-right: 20px"&gt;&lt;a href="http://2.bp.blogspot.com/-gc0kFF_n9lM/ULOghkLETLI/AAAAAAAADB4/8bC3rASIgrk/s1600/t5.png" imageanchor="1"&gt;&lt;img border="0" height="150" src="http://2.bp.blogspot.com/-gc0kFF_n9lM/ULOghkLETLI/AAAAAAAADB4/8bC3rASIgrk/s200/t5.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style="clear:both"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;For even more tablet app inspiration, check out a few of these apps: &lt;a href="https://play.google.com/store/apps/details?id=com.expedia.bookings"&gt;Expedia Hotels &amp;amp; Flights&lt;/a&gt;, &lt;a href="https://play.google.com/store/apps/details?id=com.alphonso.pulse"&gt;Pulse News&lt;/a&gt;, &lt;a href="https://play.google.com/store/apps/details?id=com.battlelancer.seriesguide"&gt;SeriesGuide&lt;/a&gt;, &lt;a href="https://play.google.com/store/apps/details?id=ch.teamtasks.tasks"&gt;Tasks&lt;/a&gt; and &lt;a href="https://play.google.com/store/apps/details?id=com.opoloo.holotimer"&gt;Timer&lt;/a&gt;.&lt;/p&gt;&lt;h3&gt;The Tablet Quality Checklist&lt;/h3&gt;&lt;p&gt;Over in the “Distribute” section of developer.android.com, the recently published &lt;a href="http://developer.android.com/distribute/googleplay/quality/tablet.html"&gt;Tablet App Quality checklist&lt;/a&gt; is a great way to check if your app is tablet-ready along a variety of technical dimensions. You should make sure that everyone involved in your mobile products is aware of &amp;nbsp;the standards defined in this checklist, as it is one of the ways in which the Google Play team selects apps to feature in the &lt;a href="https://play.google.com/store/apps/collection/tablet_featured"&gt;Staff Picks for Tablets&lt;/a&gt; collection.&lt;/p&gt;&lt;p style="text-align: center"&gt;&lt;img src="http://developer.android.com/images/ui-ex-single-panes.png" height="100"&gt;&lt;img src="http://developer.android.com/images/ui-ex-multi-pane.png" height="100"&gt;&lt;/p&gt;&lt;h3&gt;So What are You Waiting For?&lt;/h3&gt;&lt;p&gt;2013 is almost here, and it’s looking to be another exciting year for Android tablets. Make sure your app is positioned to succeed in the evolving device landscape by following some of the best practices and examples discussed here and on the rest of &lt;a href="http://developer.android.com"&gt;developer.android.com&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If you have specific questions about your app, let us know on Google+ (&lt;a href="https://plus.google.com/+AndroidDevelopers"&gt;+Android Developers&lt;/a&gt;) or Twitter (&lt;a href="https://twitter.com/AndroidDev"&gt;@AndroidDev&lt;/a&gt;)!&lt;/p&gt;&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/GbepKSGcwqV" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt; &lt;a href="https://plus.google.com/108967384991768947849/posts/GbepKSGcwqV" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/GbepKSGcwqV" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=Mlp5wCcti_0:ZQqnH4BoHik:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=Mlp5wCcti_0:ZQqnH4BoHik:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=Mlp5wCcti_0:ZQqnH4BoHik:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/Mlp5wCcti_0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3686472350392145012?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3686472350392145012?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/Mlp5wCcti_0/designing-for-tablets-were-here-to-help.html" title="Designing for Tablets? We’re Here to Help!" /><author><name>Roman Nurik</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-nF6-c9PZYCE/TcAztGqJQfI/AAAAAAAAAn8/FDSupO5K_tM/s220/avatar.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-v4nphvZvOfM/ULOgdfLau6I/AAAAAAAADBY/DersL6LNuog/s72-c/t1.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2012/11/designing-for-tablets-were-here-to-help.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8DQX8zcSp7ImA9WhNRGU8.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-4208979633658384478</id><published>2012-11-14T12:21:00.000-08:00</published><updated>2012-11-14T12:27:50.189-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-14T12:27:50.189-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tools" /><category scheme="http://www.blogger.com/atom/ns#" term="Android SDK" /><title>Android SDK Tools, Revision 21</title><content type="html">&lt;em&gt;Posted by &lt;a href="https://plus.google.com/109385828142935151413"&gt;Xavier Ducrohet&lt;/a&gt;, Android SDK Tech Lead, and &lt;a href="https://plus.google.com/u/0/100745390980338589225"&gt;Angana Ghosh&lt;/a&gt;, Product Manager in Android&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
Along with the &lt;a href="http://android-developers.blogspot.com/2012/11/introducing-android-42-new-and-improved.html"&gt;Android 4.2 SDK&lt;/a&gt;, we also launched a brand new update of the Android SDK Tools (Revision 21). The update includes new tools and capabilities that can help you work more efficiently as you create applications. Tools such as a new &lt;strong&gt;multi-config editor&lt;/strong&gt;, and &lt;strong&gt;new Lint rules&lt;/strong&gt; will help you develop apps more quickly, while a new &lt;strong&gt;UI test framework&lt;/strong&gt; will give you more ways automate testing and QA for your apps. For new developers, &lt;strong&gt;one-click SDK download&lt;/strong&gt; and new &lt;strong&gt;app templates&lt;/strong&gt; help you get started more quickly.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Multi-config editor&lt;/h4&gt;A new multi-configuration editor allows you to develop and prototype your UI across various orientations, screen sizes and locales. For example, while editing your layout in portrait mode, you can see if your edits aren't visible in the shorter landscape orientation. You can see previews for other screen sizes from small phones to large tablets, you can see previews for the layout using all the available language translations in your app, and so on. You can even see how the layout appears when it is included as a fragment in a different larger layout. Finally, Android allows you to create specialized layouts for any of these configurations, and the multi configuration editor shows you these overridden layouts.&lt;br /&gt;
&lt;br /&gt;
Here is a screenshot of the layout editor showing one of the layouts from the Google I/O application, across a variety of screen sizes.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img width="450" src="http://1.bp.blogspot.com/-5p14Rkfniu0/UKPcVMP3euI/AAAAAAAABzI/EIc3pOyh6ao/s1600/preview-screens%2B%25281%2529.png" style="border:2px solid #ccc;" /&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h4 style="margin-top:.5em;"&gt;More app templates&lt;/h4&gt;Tools R21 brings three new app templates to help you to easily add new screens to your app.  There’s a new full-screen activity for use as a photo or video viewer, a settings activity to handle basic user preferences and a login activity to capture username/password. &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="196" width="450" src="http://1.bp.blogspot.com/-s7KqNXjMxC4/UKPeZO2DhTI/AAAAAAAABzg/JDmw7rXwaCc/s1600/image-3.png" dstyle="border:2px solid #ccc;" /&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h4 style="margin-top:.5em;"&gt;UI Automator Test Framework&lt;/h4&gt;One common approach to UI testing is to run tests manually and verify that the app is behaving as expected. UI Automator is a new software testing framework available in Tools R21 that provides you with tools to easily automate UI testing tasks. It provides a GUI tool to scan and analyze the UI components of an Android application (uiautomatorviewer), a library containing APIs to create customized functional UI tests, and an execution engine to automate and run the tests against multiple physical devices. UI Automator runs on Android 4.1 (API level 16) or higher. To learn more head over to the &lt;a href="http://developer.android.com/tools/testing/testing_ui.html"&gt;UI Testing&lt;/a&gt; documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;One-click SDK installer&lt;/h4&gt;New Android SDK developers now have a convenient way to download all the various SDK components like Tools, Platform Tools, Eclipse ADT, and the latest system image with a single click. Existing developers can continue to manage their SDK components and get updates through the SDK Manager. &lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Revamped AVD creation dialog&lt;/h4&gt;The new dialog makes it easier to create Android Virtual Devices (AVDs) matching real device profiles. The AVDs will also appear in the layout editor to show you how the layouts will look.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" width="450" src="http://3.bp.blogspot.com/-1KuuOXztP8I/UKPdZ8g200I/AAAAAAAABzU/m1pxFaONVk0/s1600/Screen%2Bshot%2B2012-11-05%2Bat%2B2.01.42%2BPM.png" style="border:2px solid #ccc;" /&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h4 style="margin-top:.5em;"&gt;More Lint rules&lt;/h4&gt;And to wrap things up there are 25 new lint rules which catch several common sources of bugs, for example deviations from Android design guide for icons, checks for mismanaged wakelocks, common sources of locale-related bugs and so on. So make sure you upgrade and let Lint loose on your projects before your next app update!&lt;br /&gt;
&lt;br /&gt;
A minor bug-fix to the Android NDK is also available. For a complete list of what’s new, see the release notes for &lt;a href="http://developer.android.com/tools/sdk/tools-notes.html"&gt;SDK Tools R21&lt;/a&gt;, &lt;a href="http://developer.android.com/tools/sdk/eclipse-adt.html"&gt;ADT 21.0.0&lt;/a&gt; and &lt;a href="http://developer.android.com/tools/sdk/ndk/index.html"&gt;Android NDK R8c&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/TEGYAVvwuD1" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://plus.google.com/108967384991768947849/posts/TEGYAVvwuD1" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/TEGYAVvwuD1" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=DgyFeoIJUqM:QLUwSvFR8_w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=DgyFeoIJUqM:QLUwSvFR8_w:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=DgyFeoIJUqM:QLUwSvFR8_w:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/DgyFeoIJUqM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4208979633658384478?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4208979633658384478?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/DgyFeoIJUqM/android-sdk-tools-revision-21.html" title="Android SDK Tools, Revision 21" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-5p14Rkfniu0/UKPcVMP3euI/AAAAAAAABzI/EIc3pOyh6ao/s72-c/preview-screens%2B%25281%2529.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2012/11/android-sdk-tools-revision-21.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYERHs7cSp7ImA9WhNRGE4.&quot;"><id>tag:blogger.com,1999:blog-6755709643044947179.post-4814340554555870405</id><published>2012-11-13T10:04:00.000-08:00</published><updated>2012-11-13T10:41:45.509-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-13T10:41:45.509-08:00</app:edited><title>Introducing Android 4.2, A New and Improved Jelly Bean</title><content type="html">&lt;em&gt;Posted by &lt;a href="https://plus.google.com/u/0/100745390980338589225"&gt;Angana Ghosh&lt;/a&gt;, Product Manager in Android, and &lt;a href="https://plus.google.com/116394770911517519851"&gt;Dirk Dougherty&lt;/a&gt;, Android Developer Relations Team&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
Today we are making Android 4.2 (Jelly Bean) SDK platform available for download. Below are some of the highlights of Android 4.2, API level 17.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://developer.android.com/about/versions/jelly-bean.html" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-P0b2RM0Yflo/T-sod7ZWSdI/AAAAAAAAA_s/Lh1QoJEWjkI/s320/jbean_srgb.png" width="270" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-left:1em;"&gt;&lt;br /&gt;
&lt;h4&gt;Performance&lt;/h4&gt;We've worked with our partners to run &lt;strong&gt;Renderscript computation directly in the GPU&lt;/strong&gt; on the Nexus 10, a first for any mobile computation platform.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;New ways to engage users&lt;/h4&gt;Users can now place interactive &lt;strong&gt;lock screen widgets&lt;/strong&gt; directly on their device lock screens, for instant access to favorite apps and content. With just a &lt;a href="http://developer.android.com/guide/topics/appwidgets/index.html#lockscreen"&gt;small update&lt;/a&gt;, you can adapt any app widget to run on the lock screen. &lt;strong&gt;Daydream&lt;/strong&gt; is an interactive screensaver mode that users can encounter when their devices are charging or docked in a desk dock. You can create interactive daydreams that users display in this mode, and they can include any type of content. &lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;New interaction and entertainment experiences&lt;/h4&gt;Android 4.2 introduces platform support for &lt;strong&gt;external displays&lt;/strong&gt; that goes beyond mirroring. Your apps can now target unique content to any number of displays attached to an Android device.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Enhancements for international users&lt;/h4&gt;To help you create better apps for users in languages such as Arabic, Hebrew, and Persian, Android 4.2 includes &lt;strong&gt;native RTL support&lt;/strong&gt;, including layout mirroring. With native RTL support, you can deliver the same great app experience to all of your users with minimal extra work. Android 4.2 also includes a variety of &lt;strong&gt;font and character optimizations&lt;/strong&gt; for Korean, Japanese, Indic, Thai, Arabic and Hebrew writing systems.&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
To get started developing and testing, download the Android 4.2 Platform from the &lt;a href="http://developer.android.com/sdk/index.html"&gt;Android SDK Manager&lt;/a&gt;. For a complete overview of what's new, take a look at the &lt;a href="http://developer.android.com/about/versions/jelly-bean.html"&gt;Android 4.2 platform highlights&lt;/a&gt; or read more of the details in the &lt;a href="http://developer.android.com/about/versions/android-4.2.html"&gt;API overview&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;div style="display: inline-block; float: right; line-height: 0;"&gt;&lt;div style="float: left;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/JzmTN3Y1UNF" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 0px;"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://plus.google.com/108967384991768947849/posts/JzmTN3Y1UNF" style="color: #333333; text-decoration: none;"&gt;&lt;span style="font: bold 13px/16px arial,sans-serif; margin-right: 4px; margin-top: 7px;"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float: right;"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/JzmTN3Y1UNF" style="color: #333333; text-decoration: none;"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border: 0;" width="32" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=NDrqHlt610k:TGxywlo_YhI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=NDrqHlt610k:TGxywlo_YhI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=NDrqHlt610k:TGxywlo_YhI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/NDrqHlt610k" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4814340554555870405?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4814340554555870405?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/NDrqHlt610k/introducing-android-42-new-and-improved.html" title="Introducing Android 4.2, A New and Improved Jelly Bean" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/06459989880590689562</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-P0b2RM0Yflo/T-sod7ZWSdI/AAAAAAAAA_s/Lh1QoJEWjkI/s72-c/jbean_srgb.png" height="72" width="72" /><feedburner:origLink>http://android-developers.blogspot.com/2012/11/introducing-android-42-new-and-improved.html</feedburner:origLink></entry></feed>
