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

<channel>
	<title>Google Data &#187; Reto Meier</title>
	<atom:link href="/author/reto-meier/feed/" rel="self" type="application/rss+xml" />
	<link>https://googledata.org</link>
	<description>Everything Google: News, Products, Services, Content, Culture</description>
	<lastBuildDate>Mon, 20 Jun 2016 22:09:40 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.1.11</generator>
	<item>
		<title>One Year of Android Security Rewards</title>
		<link>https://googledata.org/google-android/one-year-of-android-security-rewards/</link>
		<comments>https://googledata.org/google-android/one-year-of-android-security-rewards/#comments</comments>
		<pubDate>Thu, 16 Jun 2016 20:48:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=3c8a3c57cecb184e904cb7f7ec171b42</guid>
		<description><![CDATA[<i><span>Posted by Quan To, Program Manager, Android Security</span><br /></i>
<br /><a href="https://security.googleblog.com/2015/06/announcing-security-rewards-for-android.html">A year ago</a>, we added <a href="https://www.google.com/about/appsecurity/android-rewards/index.html">Android Security Rewards</a> to the long standing <a href="https://www.google.com/about/appsecurity/reward-program/">Google Vulnerability Rewards Program</a>. We offered up to $38,000 per report that we used to fix vulnerabilities and protect Android users.<br /><br />
Since then, we have received over 250 qualifying vulnerability reports from researchers that have helped make Android and mobile security stronger. More than a third of them were reported in Media Server which has been <a href="http://android-developers.blogspot.com/2016/05/hardening-media-stack.html">hardened in Android N</a> to make it more resistant to vulnerabilities.<br /><br />
While the program is focused on Nexus devices and has a primary goal of improving Android security, more than a quarter of the issues were reported in code that is developed and used outside of the Android Open Source Project. Fixing these kernel and device driver bugs helps improve security of the broader mobile industry (and even some non-mobile platforms).<br /><br /><b>By the Numbers</b><br /><br />
Here&#8217;s a quick rundown of the Android VRP&#8217;s first year:<br /><br /><ul><li>We paid over $550,000 to 82 individuals. That&#8217;s an average of $2,200 per reward and $6,700 per researcher.</li>
<li>We paid our top researcher, <a href="https://twitter.com/heisecode">@heisecode</a>, $75,750 for 26 vulnerability reports.</li>
<li>We paid 15 researchers $10,000 or more.</li>
<li>There were no payouts for the top reward for a complete remote exploit chain leading to TrustZone or Verified Boot compromise.</li>
</ul><div>
Thank you to <a href="https://source.android.com/security/overview/acknowledgements.html">those</a> who submitted high quality <a href="https://code.google.com/p/android/issues/entry?template=Security%20bug%20report">vulnerability reports</a> to us last year.</div>
<div>
<br /><b>Improvements to Android VRP</b></div>
<div>
<b><br /></b></div>
<div>
We&#8217;re constantly working to improve the program and today we&#8217;re making a few changes to all vulnerability reports filed after June 1, 2016.</div>
<div>
<br /></div>
<div>
We&#8217;re paying more!</div>
<div>
<ul><li>We will now pay 33% more for a high-quality vulnerability report with proof of concept. For example, the reward for a Critical vulnerability report with a proof of concept increased from $3000 to $4000.</li>
<li>A high quality vulnerability report with a proof of concept, a CTS Test, or a patch will receive an additional 50% more.</li>
<li>We&#8217;re raising our rewards for a remote or proximal kernel exploit from $20,000 to $30,000.</li>
<li>A remote exploit chain or exploits leading to TrustZone or Verified Boot compromise increase from $30,000 to $50,000.</li>
</ul><div>
All of the changes, as well as the additional terms of the program, are explained in more detail in our <a href="https://www.google.com/about/appsecurity/android-rewards/">Program Rules</a>. If you&#8217;re interested in helping us find security vulnerabilities, take a look at <a href="https://sites.google.com/site/bughunteruniversity/">Bug Hunter University</a> and learn how to submit high quality vulnerability reports. Remember, the better the report, the more you&#8217;ll get paid. We also recently updated our <a href="https://source.android.com/security/overview/updates-resources.html">severity ratings</a>, so make sure to check those out, too.</div>
</div>
<br /><div>
Thank you to everyone who helped us make Android safer. Together, we made a huge investment in security research that has made Android stronger. We&#8217;re just getting started and are looking forward to doing even more in the future.</div>]]></description>
				<content:encoded><![CDATA[<i><span class="byline-author">Posted by Quan To, Program Manager, Android Security</span><br /></i>
<br />
<a href="https://security.googleblog.com/2015/06/announcing-security-rewards-for-android.html">A year ago</a>, we added <a href="https://www.google.com/about/appsecurity/android-rewards/index.html">Android Security Rewards</a> to the long standing <a href="https://www.google.com/about/appsecurity/reward-program/">Google Vulnerability Rewards Program</a>. We offered up to $38,000 per report that we used to fix vulnerabilities and protect Android users.<br />
<br />
Since then, we have received over 250 qualifying vulnerability reports from researchers that have helped make Android and mobile security stronger. More than a third of them were reported in Media Server which has been <a href="http://android-developers.blogspot.com/2016/05/hardening-media-stack.html">hardened in Android N</a> to make it more resistant to vulnerabilities.<br />
<br />
While the program is focused on Nexus devices and has a primary goal of improving Android security, more than a quarter of the issues were reported in code that is developed and used outside of the Android Open Source Project. Fixing these kernel and device driver bugs helps improve security of the broader mobile industry (and even some non-mobile platforms).<br />
<br>
<b>By the Numbers</b><br />
<br>
Here’s a quick rundown of the Android VRP’s first year:<br />
<br />
<ul>
<li>We paid over $550,000 to 82 individuals. That’s an average of $2,200 per reward and $6,700 per researcher.</li>
<li>We paid our top researcher, <a href="https://twitter.com/heisecode">@heisecode</a>, $75,750 for 26 vulnerability reports.</li>
<li>We paid 15 researchers $10,000 or more.</li>
<li>There were no payouts for the top reward for a complete remote exploit chain leading to TrustZone or Verified Boot compromise.</li>
</ul>
<div>
Thank you to <a href="https://source.android.com/security/overview/acknowledgements.html">those</a> who submitted high quality <a href="https://code.google.com/p/android/issues/entry?template=Security%20bug%20report">vulnerability reports</a> to us last year.</div>
<div>
<br>
<b>Improvements to Android VRP</b></div>
<div>
<b><br /></b></div>
<div>
We’re constantly working to improve the program and today we’re making a few changes to all vulnerability reports filed after June 1, 2016.</div>
<div>
<br /></div>
<div>
We’re paying more!</div>
<div>
<ul>
<li>We will now pay 33% more for a high-quality vulnerability report with proof of concept. For example, the reward for a Critical vulnerability report with a proof of concept increased from $3000 to $4000.</li>
<li>A high quality vulnerability report with a proof of concept, a CTS Test, or a patch will receive an additional 50% more.</li>
<li>We’re raising our rewards for a remote or proximal kernel exploit from $20,000 to $30,000.</li>
<li>A remote exploit chain or exploits leading to TrustZone or Verified Boot compromise increase from $30,000 to $50,000.</li>
</ul>
<div>
All of the changes, as well as the additional terms of the program, are explained in more detail in our <a href="https://www.google.com/about/appsecurity/android-rewards/">Program Rules</a>. If you’re interested in helping us find security vulnerabilities, take a look at <a href="https://sites.google.com/site/bughunteruniversity/">Bug Hunter University</a> and learn how to submit high quality vulnerability reports. Remember, the better the report, the more you’ll get paid. We also recently updated our <a href="https://source.android.com/security/overview/updates-resources.html">severity ratings</a>, so make sure to check those out, too.</div>
</div>
<br>
<div>
Thank you to everyone who helped us make Android safer. Together, we made a huge investment in security research that has made Android stronger. We’re just getting started and are looking forward to doing even more in the future.</div>
]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/one-year-of-android-security-rewards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android Developer Story: Sendy uses Google Play features to build for the next billion users</title>
		<link>https://googledata.org/google-android/android-developer-story-sendy-uses-google-play-features-to-build-for-the-next-billion-users/</link>
		<comments>https://googledata.org/google-android/android-developer-story-sendy-uses-google-play-features-to-build-for-the-next-billion-users/#comments</comments>
		<pubDate>Wed, 15 Jun 2016 16:25:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=bbf6eae0e8825a1cbcef9a869479ee00</guid>
		<description><![CDATA[<em>Posted by</em> <em>Lily Sheringham, Google Play team</em>

<p>
<a href="https://play.google.com/store/apps/details?id=com.sendy.co.ke.sendyy&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Sendy</a>
is a door to door on-demand couriering platform founded in Nairobi, Kenya. It
connects customers and logistics providers, providing two unique apps, one for
the driver and one for the customer. Watch CEO &#38; Co-founder, Meshack Alloys, and
Android Developer, Jason Rogena, explain how they use Developer Console
features, such as alpha and beta testing, as well as other tips and best
practices, to build for the next billion users.
</p>
<p>
<!--[Interactive video]  -->
</p>
<p>
<a href="https://play.google.com/store/books/details/Google_Inc_The_Building_for_Billions_Playbook_for?id=cJEjDAAAQBAJ&#38;e=-EnableAppDetailsPageRedesign">Learn
more about building for billions</a> and get more tips to grow your games
business by <a href="https://play.google.com/apps/testing/com.google.android.apps.secrets">opting-in
to the Playbook app beta</a> and <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.secrets&#38;e=-EnableAppDetailsPageRedesign">download
the Playbook app</a> in the Google Play Store.
</p>]]></description>
				<content:encoded><![CDATA[<em>Posted by</em> <em>Lily Sheringham, Google Play team</em>
</p>
<p>
<a
href="https://play.google.com/store/apps/details?id=com.sendy.co.ke.sendyy&hl=en&e=-EnableAppDetailsPageRedesign">Sendy</a>
is a door to door on-demand couriering platform founded in Nairobi, Kenya. It
connects customers and logistics providers, providing two unique apps, one for
the driver and one for the customer. Watch CEO & Co-founder, Meshack Alloys, and
Android Developer, Jason Rogena, explain how they use Developer Console
features, such as alpha and beta testing, as well as other tips and best
practices, to build for the next billion users.
</p>
<p>
<!--[Interactive video]  --><iframe width="557" height="370" " frameborder="0" src="https://www.youtube.com/embed/bU71Mm8BTRI?list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 80px;" allowfullscreen></iframe>
</p>
<p>
<a
href="https://play.google.com/store/books/details/Google_Inc_The_Building_for_Billions_Playbook_for?id=cJEjDAAAQBAJ&e=-EnableAppDetailsPageRedesign">Learn
more about building for billions</a> and get more tips to grow your games
business by <a
href="https://play.google.com/apps/testing/com.google.android.apps.secrets">opting-in
to the Playbook app beta</a> and <a
href="https://play.google.com/store/apps/details?id=com.google.android.apps.secrets&e=-EnableAppDetailsPageRedesign">download
the Playbook app</a> in the Google Play Store.
</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-developer-story-sendy-uses-google-play-features-to-build-for-the-next-billion-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Security &quot;Crypto&quot; provider deprecated in Android N</title>
		<link>https://googledata.org/google-android/security-crypto-provider-deprecated-in-android-n/</link>
		<comments>https://googledata.org/google-android/security-crypto-provider-deprecated-in-android-n/#comments</comments>
		<pubDate>Thu, 09 Jun 2016 21:58:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=b5a49dae6714afcf1ae37f758d931203</guid>
		<description><![CDATA[<i></i><p>Posted by Sergio Giro, software engineer</p>

<div><img src="https://3.bp.blogspot.com/-m9OjYhySVW8/URwiN1hR-cI/AAAAAAAAB8o/0aTXDBZT2NQ/s400/Random-Droid.png" alt="random_droid" width="190"></div>
<p>
If your Android app derives keys using the SHA1PRNG algorithm from the Crypto
provider, you must start using a real <a href="https://en.wikipedia.org/wiki/Key_derivation_function">key derivation function</a> and possibly re-encrypt your data.
</p>
<p>
The Java Cryptography Architecture allows developers to create an instance of a class like a cipher, or a pseudo-random number generator, using calls like:
</p>
<code>
SomeClass.getInstance("SomeAlgorithm", "SomeProvider");
</code>
<p>
Or simply:
</p>
<code>
SomeClass.getInstance("SomeAlgorithm");
</code>
<p>
For instance,
</p>
<code>
Cipher.getInstance(&#8220;AES/CBC/PKCS5PADDING&#8221;);
<br />
SecureRandom.getInstance(&#8220;SHA1PRNG&#8221;);
</code>
<p>
On Android, we don&#8217;t recommend specifying the provider. In general, any call to
the Java Cryptography Extension (JCE) APIs specifying a provider should only be
done if the provider is included in the application or if the application is
able to deal with a possible ProviderNotFoundException.
</p>
<p>
Unfortunately, many apps depend on the now removed &#8220;Crypto&#8221; provider for an
anti-pattern of key derivation.
</p>
<p>
This provider only provided an implementation of the algorithm &#8220;SHA1PRNG&#8221; for
instances of SecureRandom. The problem is that the SHA1PRNG algorithm is not
cryptographically strong. For readers interested in the details, <a href="http://webpages.uncc.edu/yonwang/papers/lilesorics.pdf">On
statistical distance based testing of pseudo random sequences and experiments
with PHP and Debian OpenSSL</a>,Section 8.1, by Yongge Want and Tony Nicol,
states that the &#8220;random&#8221; sequence, considered in binary form, is biased towards
returning 0s, and that the bias worsens depending on the seed.
</p>
<p>
As a result, <strong>in Android N we are deprecating the
implementation of the SHA1PRNG algorithm and the Crypto provider altogether</strong>.
We&#8217;d previously covered the issues with using SecureRandom for key derivation a
few years ago in <a href="http://android-developers.blogspot.com/2013/02/using-cryptography-to-store-credentials.html">Using
Cryptography to Store Credentials Safely</a>. However, given its continued use,
we will revisit it here.
</p>
<p>
A common but incorrect usage of this provider was to derive keys for encryption
by using a password as a seed. The implementation of SHA1PRNG had a bug that
made it deterministic if setSeed() was called before obtaining output. This bug
was used to derive a key by supplying a password as a seed, and then using the
"random" output bytes for the key (where &#8220;random&#8221; in this sentence means
&#8220;predictable and cryptographically weak&#8221;). Such a key could then be used to
encrypt and decrypt data.
</p>
<p>
In the following, we explain how to derive keys correctly, and how to decrypt
data that has been encrypted using an insecure key. There&#8217;s also a <a href="https://android.googlesource.com/platform/development/+/master/samples/BrokenKeyDerivation">
full example</a>, including a helper class to use the deprecated SHA1PRNG
functionality, with the sole purpose of decrypting data that would be otherwise
unavailable.
</p>
<p>
Keys can be derived in the following way:
</p>

<ul><li>If you're reading an AES key from disk, just store the actual key and don't go through this weird dance. You can get a SecretKey for AES usage from the bytes by doing:
<p>
    <code>SecretKey key = new SecretKeySpec(keyBytes, "AES");</code>
</p></li>
<li>If you're using a password to derive a key, follow <a href="http://nelenkov.blogspot.com/2012/04/using-password-based-encryption-on.html">Nikolay Elenkov's excellent tutorial</a> with the caveat that a good rule of thumb is the salt size should be the same size as the key output. It looks like this:</li>
</ul><pre>   /* User types in their password: */  
   String password = "password";  

   /* Store these things on disk used to derive key later: */  
   int iterationCount = 1000;  
   int saltLength = 32; // bytes; should be the same size
              as the output (256 / 8 = 32)  
   int keyLength = 256; // 256-bits for AES-256, 128-bits for AES-128, etc  
   byte[] salt; // Should be of saltLength  

   /* When first creating the key, obtain a salt with this: */  
   SecureRandom random = new SecureRandom();  
   byte[] salt = new byte[saltLength];  
   random.nextBytes(salt);  

   /* Use this to derive the key from the password: */  
   KeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt,  
              iterationCount, keyLength);  
   SecretKeyFactory keyFactory = SecretKeyFactory  
              .getInstance("PBKDF2WithHmacSHA1");  
   byte[] keyBytes = keyFactory.generateSecret(keySpec).getEncoded();  
   SecretKey key = new SecretKeySpec(keyBytes, "AES");  
</pre>

<p>
That's it. You should not need anything else.
</p>
<p>
To make transitioning data easier, we covered the case of developers that have
data encrypted with an insecure key, which is derived from a password every
time. You can use the helper class <code>InsecureSHA1PRNGKeyDerivator</code> in <a href="https://android.googlesource.com/platform/development/+/master/samples/BrokenKeyDerivation">
the example app</a> to derive the key.
</p>

<pre> private static SecretKey deriveKeyInsecurely(String password, int
 keySizeInBytes) {  
    byte[] passwordBytes = password.getBytes(StandardCharsets.US_ASCII);  
    return new SecretKeySpec(  
            InsecureSHA1PRNGKeyDerivator.deriveInsecureKey(  
                     passwordBytes, keySizeInBytes),  
            "AES");  
 }  
</pre>
<p>
You can then re-encrypt your data with a securely derived key as explained
above, and live a happy life ever after.
</p>
<p>
Note 1: as a temporary measure to keep apps working, we decided to still create
the instance for apps targeting SDK version 23, the SDK version for Marshmallow,
or less. Please don't rely on the presence of the Crypto provider in the Android
SDK, our plan is to delete it completely in the future.
</p>
<p>
Note 2: Because many parts of the system assume the existence of a SHA1PRNG
algorithm, when an instance of SHA1PRNG is requested and the provider is not
specified we return an instance of OpenSSLRandom, which is a strong source of
random numbers derived from OpenSSL.
</p>

<img src="https://4.bp.blogspot.com/-jbJLHbHUB3g/V1sP3cDZ3wI/AAAAAAAAFY4/6GpWravv_UMuyAcE7P0KYYGPw228lOupQCLcB/s320/card-random_2x_2.png">]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Sergio Giro, software engineer</p></i>

<div style="float:right;padding-right:0"><img src="https://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;">
</div>
<p>
If your Android app derives keys using the SHA1PRNG algorithm from the Crypto
provider, you must start using a real <a href="https://en.wikipedia.org/wiki/Key_derivation_function">key derivation function</a> and possibly re-encrypt your data.
</p>
<p>
The Java Cryptography Architecture allows developers to create an instance of a class like a cipher, or a pseudo-random number generator, using calls like:
</p>
<code class="prettyprint">
SomeClass.getInstance("SomeAlgorithm", "SomeProvider");
</code>
<p>
Or simply:
</p>
<code>
SomeClass.getInstance("SomeAlgorithm");
</code>
<p>
For instance,
</p>
<code>
Cipher.getInstance(“AES/CBC/PKCS5PADDING”);
<br>
SecureRandom.getInstance(“SHA1PRNG”);
</code>
<p>
On Android, we don’t recommend specifying the provider. In general, any call to
the Java Cryptography Extension (JCE) APIs specifying a provider should only be
done if the provider is included in the application or if the application is
able to deal with a possible ProviderNotFoundException.
</p>
<p>
Unfortunately, many apps depend on the now removed “Crypto” provider for an
anti-pattern of key derivation.
</p>
<p>
This provider only provided an implementation of the algorithm “SHA1PRNG” for
instances of SecureRandom. The problem is that the SHA1PRNG algorithm is not
cryptographically strong. For readers interested in the details, <a href="http://webpages.uncc.edu/yonwang/papers/lilesorics.pdf">On
statistical distance based testing of pseudo random sequences and experiments
with PHP and Debian OpenSSL</a>,Section 8.1, by Yongge Want and Tony Nicol,
states that the “random” sequence, considered in binary form, is biased towards
returning 0s, and that the bias worsens depending on the seed.
</p>
<p>
As a result, <strong>in Android N we are deprecating the
implementation of the SHA1PRNG algorithm and the Crypto provider altogether</strong>.
We’d previously covered the issues with using SecureRandom for key derivation a
few years ago in <a
href=http://android-developers.blogspot.com/2013/02/using-cryptography-to-store-credentials.html>Using
Cryptography to Store Credentials Safely</a>. However, given its continued use,
we will revisit it here.
</p>
<p>
A common but incorrect usage of this provider was to derive keys for encryption
by using a password as a seed. The implementation of SHA1PRNG had a bug that
made it deterministic if setSeed() was called before obtaining output. This bug
was used to derive a key by supplying a password as a seed, and then using the
"random" output bytes for the key (where “random” in this sentence means
“predictable and cryptographically weak”). Such a key could then be used to
encrypt and decrypt data.
</p>
<p>
In the following, we explain how to derive keys correctly, and how to decrypt
data that has been encrypted using an insecure key. There’s also a <a href="https://android.googlesource.com/platform/development/+/master/samples/BrokenKeyDerivation">
full example</a>, including a helper class to use the deprecated SHA1PRNG
functionality, with the sole purpose of decrypting data that would be otherwise
unavailable.
</p>
<p>
Keys can be derived in the following way:
</p>

<ul>
<li>If you're reading an AES key from disk, just store the actual key and don't go through this weird dance. You can get a SecretKey for AES usage from the bytes by doing:
<p>
    <code>SecretKey key = new SecretKeySpec(keyBytes, "AES");</code>
</p></li>
<li>If you're using a password to derive a key, follow <a
href="http://nelenkov.blogspot.com/2012/04/using-password-based-encryption-on.html">Nikolay Elenkov's excellent tutorial</a> with the caveat that a good rule of thumb is the salt size should be the same size as the key output. It looks like this:</li>
</ul>

<pre>   /* User types in their password: */  
   String password = "password";  

   /* Store these things on disk used to derive key later: */  
   int iterationCount = 1000;  
   int saltLength = 32; // bytes; should be the same size
              as the output (256 / 8 = 32)  
   int keyLength = 256; // 256-bits for AES-256, 128-bits for AES-128, etc  
   byte[] salt; // Should be of saltLength  

   /* When first creating the key, obtain a salt with this: */  
   SecureRandom random = new SecureRandom();  
   byte[] salt = new byte[saltLength];  
   random.nextBytes(salt);  

   /* Use this to derive the key from the password: */  
   KeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt,  
              iterationCount, keyLength);  
   SecretKeyFactory keyFactory = SecretKeyFactory  
              .getInstance("PBKDF2WithHmacSHA1");  
   byte[] keyBytes = keyFactory.generateSecret(keySpec).getEncoded();  
   SecretKey key = new SecretKeySpec(keyBytes, "AES");  
</pre>

<p>
That's it. You should not need anything else.
</p>
<p>
To make transitioning data easier, we covered the case of developers that have
data encrypted with an insecure key, which is derived from a password every
time. You can use the helper class <code>InsecureSHA1PRNGKeyDerivator</code> in <a href="https://android.googlesource.com/platform/development/+/master/samples/BrokenKeyDerivation">
the example app</a> to derive the key.
</p>

<pre> private static SecretKey deriveKeyInsecurely(String password, int
 keySizeInBytes) {  
    byte[] passwordBytes = password.getBytes(StandardCharsets.US_ASCII);  
    return new SecretKeySpec(  
            InsecureSHA1PRNGKeyDerivator.deriveInsecureKey(  
                     passwordBytes, keySizeInBytes),  
            "AES");  
 }  
</pre>
<p>
You can then re-encrypt your data with a securely derived key as explained
above, and live a happy life ever after.
</p>
<p>
Note 1: as a temporary measure to keep apps working, we decided to still create
the instance for apps targeting SDK version 23, the SDK version for Marshmallow,
or less. Please don't rely on the presence of the Crypto provider in the Android
SDK, our plan is to delete it completely in the future.
</p>
<p>
Note 2: Because many parts of the system assume the existence of a SHA1PRNG
algorithm, when an instance of SHA1PRNG is requested and the provider is not
specified we return an instance of OpenSSLRandom, which is a strong source of
random numbers derived from OpenSSL.
</p>

<img itemprop="image" src="https://4.bp.blogspot.com/-jbJLHbHUB3g/V1sP3cDZ3wI/AAAAAAAAFY4/6GpWravv_UMuyAcE7P0KYYGPw228lOupQCLcB/s320/card-random_2x_2.png" style="display:none">
]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/security-crypto-provider-deprecated-in-android-n/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Notifications in Android N</title>
		<link>https://googledata.org/google-android/notifications-in-android-n/</link>
		<comments>https://googledata.org/google-android/notifications-in-android-n/#comments</comments>
		<pubDate>Wed, 08 Jun 2016 21:32:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=04bf25f8419ea8baf53c70c397171e1e</guid>
		<description><![CDATA[<i></i><p>Posted by Ian Lake, Developer Advocate</p>  <p>Android notifications are often a make-or-break interaction between your Android app and users. To provide a better user experience, notifications on Android N have received a visual refresh, improved support for custom views, and expanded functionality in the forms of Direct Reply, a new <code>MessagingStyle</code>, and bundled notifications. </p><h3>Same notification, new look</h3><p>The first and most obvious change is that the default look and feel of notifications has significantly changed. Many of the fields that were spread around the notifications have been collapsed into a new header row with your app&#8217;s icon and name anchoring the notification. This change ensured that the title, text, and large icon are given the most amount of space possible and, as a result, notifications are generally slightly larger now and easier to read. </p><br /><div><a href="https://1.bp.blogspot.com/-IJeubqHjd7M/V1hWMTeQPiI/AAAAAAAADII/AFJybSTw5CUeD3M1jV0ZCgeIxpo5ER77ACLcB/s1600/image07.png"><img border="0" src="https://1.bp.blogspot.com/-IJeubqHjd7M/V1hWMTeQPiI/AAAAAAAADII/AFJybSTw5CUeD3M1jV0ZCgeIxpo5ER77ACLcB/s640/image07.png"></a></div><p>Given the single header row, it is more important than ever that the information there is useful. <strong>When you target Android N, by default the time will be hidden</strong> - if you have a time critical notification such as a messaging app, you can re-enable it with <code>setShowWhen(true)</code>. In addition, the subtext now supersedes the role of content info and number: number is never shown on Android N devices and only if you target a previous version of Android and don&#8217;t include a subtext will content info appear. In all cases, ensure that the subtext is relevant and useful - don&#8217;t add an account email address as your subtext if the user only has one account, for example. </p><p>Notification actions have also received a redesign and are now in a visually separate bar below the notification. </p><br /><div><a href="https://1.bp.blogspot.com/-l-WaE4Rkd6Q/V1hWYDm2slI/AAAAAAAADIQ/0aV2uhEUGNcsRUTpGUsSk2MVPQnwuLywQCLcB/s1600/image01.png"><img border="0" src="https://1.bp.blogspot.com/-l-WaE4Rkd6Q/V1hWYDm2slI/AAAAAAAADIQ/0aV2uhEUGNcsRUTpGUsSk2MVPQnwuLywQCLcB/s400/image01.png"></a></div><p>You&#8217;ll note that the icons are not present in the new notifications; instead more room is provided for the labels themselves in the constrained space of the notification shade. However, the notification action icons are still required and continue to be used on older versions of Android and on devices such as Android Wear. </p><p>If you&#8217;ve been building your notification with <code><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html?utm_campaign=android_series_notificationsandroidnblog_060816&#38;utm_source=anddev&#38;utm_medium=blog">NotificationCompat.Builder</a></code> and the standard styles available to you there, you&#8217;ll get the new look and feel by default with no code changes required.  </p><h3>Better Support for Custom Views</h3><p>If you&#8217;re instead building your notification from custom <code>RemoteViews</code>, adapting to any new style has been challenging. With the new header, expanding behavior, actions, and large icon positioning as separate elements from the main text+title of the notification, we&#8217;ve introduced a new <code>DecoratedCustomViewStyle</code> and <code>DecoratedMediaCustomViewStyle</code> to provide all of these elements, allowing you to focus only on the content portion with the new <code>setCustomContentView()</code> method. </p><br /><div><a href="https://4.bp.blogspot.com/-gV6ZJ2Fkp1w/V1hWfNejX0I/AAAAAAAADIY/YdkKOW8BCHs2A1srWZzTqXlLuifuoCgLQCLcB/s1600/image03.png"><img border="0" src="https://4.bp.blogspot.com/-gV6ZJ2Fkp1w/V1hWfNejX0I/AAAAAAAADIY/YdkKOW8BCHs2A1srWZzTqXlLuifuoCgLQCLcB/s400/image03.png"></a></div><p>This also ensures that future look and feel changes should be significantly easier to adapt to as these styles will be updated alongside the platform with no code changes needed on the app side. </p><h3>Direct Reply</h3><p>While notification actions have already been able to launch an <code>Activity</code> or do background work with a <code>Service</code> or <code>BroadcastReceiver</code>, <strong>Direct Reply</strong> allows you to build an action that directly receives text input <strong>inline</strong> with the notification actions. </p><br /><div><a href="https://2.bp.blogspot.com/-B_GVLLo8tec/V1hWqGg0WWI/AAAAAAAADIg/h-7h6tmZwG4RRYnHPiVu_bWeGlDO3_3vgCLcB/s1600/image00.png"><img border="0" src="https://2.bp.blogspot.com/-B_GVLLo8tec/V1hWqGg0WWI/AAAAAAAADIg/h-7h6tmZwG4RRYnHPiVu_bWeGlDO3_3vgCLcB/s400/image00.png"></a></div><p>Direct Reply uses the same <code><a href="https://developer.android.com/reference/android/support/v4/app/RemoteInput.html?utm_campaign=android_series_notificationsandroidnblog_060816&#38;utm_source=anddev&#38;utm_medium=blog">RemoteInput</a></code> API - originally introduced for Android Wear - to mark an <code><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Action.html?utm_campaign=android_series_notificationsandroidnblog_060816&#38;utm_source=anddev&#38;utm_medium=blog">Action</a></code> as being able to directly receive input from the user.  </p><p>The <code>RemoteInput</code> itself contains information like the key which will be used to later retrieve the input and the hint text which is displayed before the user starts typing. </p><pre>// Where should direct replies be put in the intent bundle (can be any string)
private static final String KEY_TEXT_REPLY = "key_text_reply";

// Create the RemoteInput specifying this key
String replyLabel = getString(R.string.reply_label);
RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
        .setLabel(replyLabel)
        .build();


</pre><p>Once you&#8217;ve constructed the <code>RemoteInput</code>, it can be attached to your Action via the aptly named <code><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Action.Builder.html?utm_campaign=android_series_notificationsandroidnblog_060816&#38;utm_source=anddev&#38;utm_medium=blog#addRemoteInput(android.support.v4.app.RemoteInput)">addRemoteInput()</a></code> method. You might consider also calling <code>setAllowGeneratedReplies(true)</code> to enable <a href="https://developer.android.com/wear/preview/index.html?utm_campaign=android_series_notificationsandroidnblog_060816&#38;utm_source=anddev&#38;utm_medium=blog">Android Wear 2.0</a> to generate <a href="https://developer.android.com/wear/preview/api-overview.html?utm_campaign=android_series_notificationsandroidnblog_060816&#38;utm_source=anddev&#38;utm_medium=blog#smart-replies">Smart Reply</a> choices when available and make it easier for users to quickly respond.  </p><pre>// Add to your action, enabling Direct Reply for it
NotificationCompat.Action action =
    new NotificationCompat.Action.Builder(R.drawable.reply, replyLabel, pendingIntent)
        .addRemoteInput(remoteInput)
        .setAllowGeneratedReplies(true)
        .build();


</pre><p>Keep in mind that the <code>pendingIntent</code> being passed into your <code>Action</code> should be an <code>Activity</code> on Marshmallow and lower devices that don&#8217;t support Direct Reply (as you&#8217;ll want to dismiss the lock screen, start an <code>Activity</code>, and focus the input field to have the user type their reply) and should be a <code>Service</code> (if you need to do work on a separate thread) or <code>BroadcastReceiver</code> (which runs on the UI thread) on Android N devices so as the process the text input in the background even from the lock screen. (There is a separate user control to enable/disable Direct Reply from a locked device in the system settings.) </p><p>Extracting the text input in your <code>Service</code>/<code>BroadcastReceiver</code> is then possible with the help of the <code><a href="https://developer.android.com/reference/android/support/v4/app/RemoteInput.html#getResultsFromIntent(android.content.Intent)">RemoteInput.getResultsFromIntent()</a></code> method:  </p><pre>private CharSequence getMessageText(Intent intent) {
    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
    if (remoteInput != null) {
        return remoteInput.getCharSequence(KEY_TEXT_REPLY);
    }
    return null;
 }


</pre><p>After you&#8217;ve processed the text, <strong>you must update the notification</strong>. This is the trigger which hides the Direct Reply UI and should be used as a technique to confirm to the user that their reply was received and processed correctly. </p><p>For most templates, this should involve using the new <code>setRemoteInputHistory()</code> method which appends the reply to the bottom of the notification. Additional replies should be appended to the history until the main content is updated (such as the other person replying). </p><br /><div><a href="https://3.bp.blogspot.com/-P1mcdEiqqsA/V1hW10Tmj3I/AAAAAAAADI0/h05-RakZ7co-KjOa30HZXRXDySx9n0rrQCLcB/s1600/image05.png"><img border="0" src="https://3.bp.blogspot.com/-P1mcdEiqqsA/V1hW10Tmj3I/AAAAAAAADI0/h05-RakZ7co-KjOa30HZXRXDySx9n0rrQCLcB/s400/image05.png"></a></div><p>However, if you&#8217;re building a messaging app and expect back and forth conversations, you should use <code>MessagingStyle</code> and append the additional message to it. </p><h3>MessagingStyle</h3><p>We&#8217;ve optimized the experience for displaying an ongoing conversation and using Direct Reply with the new <code>MessagingStyle</code>. </p><br /><div><a href="https://2.bp.blogspot.com/-IYUna0gfIHA/V1hXDfeWFbI/AAAAAAAADJA/vB-Az7g0tUMcxmmTIdQQFE4ZC8eAYuo2gCLcB/s1600/MessagingStyle.png"><img border="0" src="https://2.bp.blogspot.com/-IYUna0gfIHA/V1hXDfeWFbI/AAAAAAAADJA/vB-Az7g0tUMcxmmTIdQQFE4ZC8eAYuo2gCLcB/s400/MessagingStyle.png"></a></div><p>This style provides built-in formatting for multiple messages added via the <code>addMessage()</code> method. Each message supports passing in the text itself, a timestamp, and the sender of the message (making it easy to support group conversations). </p><pre>builder.setStyle(new NotificationCompat.MessagingStyle("Me")
    .setConversationTitle("Team lunch")
    .addMessage("Hi", timestampMillis1, null) // Pass in null for user.
    .addMessage("What's up?", timestampMillis2, "Coworker")
    .addMessage("Not much", timestampMillis3, null)
    .addMessage("How about lunch?", timestampMillis4, "Coworker"));


</pre><p>You&#8217;ll note that this style has first-class support for specifically denoting messages from the user and filling in their name (in this case with &#8220;Me&#8221;) and setting an optional conversation title. While this can be done manually with a <code>BigTextStyle</code>, by using this style Android Wear 2.0 users will get immediate inline responses without kicking them out of the expanded notification view, making for a seamless experience without needing to build a full Wear app. </p><h3>Bundled Notifications</h3><p>Once you&#8217;ve built a great notification by using the new visual designs, Direct Reply, <code>MessagingStyle</code>, and <a href="https://www.youtube.com/watch?v=-iog_fmm6mE">all of our previous best practices</a>, it is important to think about the overall notification experience, particularly if you post multiple notifications (say, one per ongoing conversation or per new email thread). </p><br /><div><a href="https://3.bp.blogspot.com/-crOmNsbUpMU/V1hZnQp2KyI/AAAAAAAADJ8/d4O8oXxAg2Ip-TTUPtzAgkIyIBTbqEKxwCLcB/s1600/Ian_N.png"><img border="0" src="https://3.bp.blogspot.com/-crOmNsbUpMU/V1hZnQp2KyI/AAAAAAAADJ8/d4O8oXxAg2Ip-TTUPtzAgkIyIBTbqEKxwCLcB/s640/Ian_N.png"></a></div><strong>Bundled notifications</strong> offer the best of both worlds: a single summary notification for when users are looking at other notifications or want to act on all notifications simultaneously and the ability to expand the group to act on individual notifications (including using actions and Direct Reply). <p>If you&#8217;ve built <a href="https://developer.android.com/training/wearables/notifications/stacks.html?utm_campaign=android_series_notificationsandroidnblog_060816&#38;utm_source=anddev&#38;utm_medium=blog">stacking notifications for Android Wear</a>, the API used here is exactly the same. Simply add <code><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html?utm_campaign=android_series_notificationsandroidnblog_060816&#38;utm_source=anddev&#38;utm_medium=blog#setGroup(java.lang.String)">setGroup()</a></code> to each individual notification to bundle those notifications together. You&#8217;re not limited to one group, so bundle notifications appropriately. For an email app, you might consider one bundle per account for instance.  </p><p>It is important to also create a <strong>summary notification</strong>. This summary notification, denoted by <code><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html?utm_campaign=android_series_notificationsandroidnblog_060816&#38;utm_source=anddev&#38;utm_medium=blog#setGroupSummary(boolean)">setGroupSummary(true)</a></code>, is the <strong>only</strong> notification that appears on Marshmallow and lower devices and should (you guessed it) summarize all of the individual notifications. This is an opportune time to use the <code><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.InboxStyle.html?utm_campaign=android_series_notificationsandroidnblog_060816&#38;utm_source=anddev&#38;utm_medium=blog">InboxStyle</a></code>, although using it is not a requirement. On Android N and higher devices, some information (such as the subtext, content intent, and delete intent) is extracted from the summary notification to produce the collapsed notification for the bundled notifications so you should continue to generate a summary notification on all API levels.  </p><p>To improve the overall user experience on Android N devices, <strong>posting 4 or more notifications without a group will cause those notifications to be automatically bundled</strong>. </p><h3>N is for Notifications</h3><p>Notifications on Android have been a constant area of progressive enhancement. From the single tap targets of the Gingerbread era to expandable notifications, actions, MediaStyle, and now features such as Direct Reply and bundled notifications, notifications play an important part of the overall user experience on Android. </p><p>With many new tools to use (and <code><a href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.html?utm_campaign=android_series_notificationsandroidnblog_060816&#38;utm_source=anddev&#38;utm_medium=blog">NotificationCompat</a></code> to help with backward compatibility), I&#8217;m excited to see how you use them to #BuildBetterApps  </p><p>Follow the <a href="https://plus.google.com/collection/sLR0p?utm_campaign=android_series_design_multiwindow_blog_051116&#38;utm_source=anddev&#38;utm_medium=blog">Android Development Patterns Collection</a> for more! </p><div><a href="https://3.bp.blogspot.com/-6UIZx9pzb9M/V1hYG5DO_WI/AAAAAAAADJY/wJRZS54qT5cob74iskGkcpflOD6gnhvVgCLcB/s1600/image02.png"><img border="0" src="https://3.bp.blogspot.com/-6UIZx9pzb9M/V1hYG5DO_WI/AAAAAAAADJY/wJRZS54qT5cob74iskGkcpflOD6gnhvVgCLcB/s400/image02.png"></a></div>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Ian Lake, Developer Advocate</p></i>  <p>Android notifications are often a make-or-break interaction between your Android app and users. To provide a better user experience, notifications on Android N have received a visual refresh, improved support for custom views, and expanded functionality in the forms of Direct Reply, a new <code>MessagingStyle</code>, and bundled notifications. </p><h3>Same notification, new look</h3><p>The first and most obvious change is that the default look and feel of notifications has significantly changed. Many of the fields that were spread around the notifications have been collapsed into a new header row with your app’s icon and name anchoring the notification. This change ensured that the title, text, and large icon are given the most amount of space possible and, as a result, notifications are generally slightly larger now and easier to read. </p><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-IJeubqHjd7M/V1hWMTeQPiI/AAAAAAAADII/AFJybSTw5CUeD3M1jV0ZCgeIxpo5ER77ACLcB/s1600/image07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-IJeubqHjd7M/V1hWMTeQPiI/AAAAAAAADII/AFJybSTw5CUeD3M1jV0ZCgeIxpo5ER77ACLcB/s640/image07.png" /></a></div><p>Given the single header row, it is more important than ever that the information there is useful. <strong>When you target Android N, by default the time will be hidden</strong> - if you have a time critical notification such as a messaging app, you can re-enable it with <code>setShowWhen(true)</code>. In addition, the subtext now supersedes the role of content info and number: number is never shown on Android N devices and only if you target a previous version of Android and don’t include a subtext will content info appear. In all cases, ensure that the subtext is relevant and useful - don’t add an account email address as your subtext if the user only has one account, for example. </p><p>Notification actions have also received a redesign and are now in a visually separate bar below the notification. </p><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-l-WaE4Rkd6Q/V1hWYDm2slI/AAAAAAAADIQ/0aV2uhEUGNcsRUTpGUsSk2MVPQnwuLywQCLcB/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-l-WaE4Rkd6Q/V1hWYDm2slI/AAAAAAAADIQ/0aV2uhEUGNcsRUTpGUsSk2MVPQnwuLywQCLcB/s400/image01.png" /></a></div><p>You’ll note that the icons are not present in the new notifications; instead more room is provided for the labels themselves in the constrained space of the notification shade. However, the notification action icons are still required and continue to be used on older versions of Android and on devices such as Android Wear. </p><p>If you’ve been building your notification with <code><a
href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html?utm_campaign=android_series_notificationsandroidnblog_060816&utm_source=anddev&utm_medium=blog">NotificationCompat.Builder</a></code> and the standard styles available to you there, you’ll get the new look and feel by default with no code changes required.  <h3>Better Support for Custom Views</h3><p>If you’re instead building your notification from custom <code>RemoteViews</code>, adapting to any new style has been challenging. With the new header, expanding behavior, actions, and large icon positioning as separate elements from the main text+title of the notification, we’ve introduced a new <code>DecoratedCustomViewStyle</code> and <code>DecoratedMediaCustomViewStyle</code> to provide all of these elements, allowing you to focus only on the content portion with the new <code>setCustomContentView()</code> method. </p><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-gV6ZJ2Fkp1w/V1hWfNejX0I/AAAAAAAADIY/YdkKOW8BCHs2A1srWZzTqXlLuifuoCgLQCLcB/s1600/image03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-gV6ZJ2Fkp1w/V1hWfNejX0I/AAAAAAAADIY/YdkKOW8BCHs2A1srWZzTqXlLuifuoCgLQCLcB/s400/image03.png" /></a></div><p>This also ensures that future look and feel changes should be significantly easier to adapt to as these styles will be updated alongside the platform with no code changes needed on the app side. </p><h3 id="directreply">Direct Reply</h3><p>While notification actions have already been able to launch an <code>Activity</code> or do background work with a <code>Service</code> or <code>BroadcastReceiver</code>, <strong>Direct Reply</strong> allows you to build an action that directly receives text input <strong>inline</strong> with the notification actions. </p><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-B_GVLLo8tec/V1hWqGg0WWI/AAAAAAAADIg/h-7h6tmZwG4RRYnHPiVu_bWeGlDO3_3vgCLcB/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-B_GVLLo8tec/V1hWqGg0WWI/AAAAAAAADIg/h-7h6tmZwG4RRYnHPiVu_bWeGlDO3_3vgCLcB/s400/image00.png" /></a></div><p>Direct Reply uses the same <code><a
href="https://developer.android.com/reference/android/support/v4/app/RemoteInput.html?utm_campaign=android_series_notificationsandroidnblog_060816&utm_source=anddev&utm_medium=blog">RemoteInput</a></code> API - originally introduced for Android Wear - to mark an <code><a
href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Action.html?utm_campaign=android_series_notificationsandroidnblog_060816&utm_source=anddev&utm_medium=blog">Action</a></code> as being able to directly receive input from the user.  <p>The <code>RemoteInput</code> itself contains information like the key which will be used to later retrieve the input and the hint text which is displayed before the user starts typing. </p><pre class="prettyprint">// Where should direct replies be put in the intent bundle (can be any string)
private static final String KEY_TEXT_REPLY = "key_text_reply";

// Create the RemoteInput specifying this key
String replyLabel = getString(R.string.reply_label);
RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
        .setLabel(replyLabel)
        .build();


</pre><p>Once you’ve constructed the <code>RemoteInput</code>, it can be attached to your Action via the aptly named <code><a
href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Action.Builder.html?utm_campaign=android_series_notificationsandroidnblog_060816&utm_source=anddev&utm_medium=blog#addRemoteInput(android.support.v4.app.RemoteInput)">addRemoteInput()</a></code> method. You might consider also calling <code>setAllowGeneratedReplies(true)</code> to enable <a
href="https://developer.android.com/wear/preview/index.html?utm_campaign=android_series_notificationsandroidnblog_060816&utm_source=anddev&utm_medium=blog">Android Wear 2.0</a> to generate <a
href="https://developer.android.com/wear/preview/api-overview.html?utm_campaign=android_series_notificationsandroidnblog_060816&utm_source=anddev&utm_medium=blog#smart-replies">Smart Reply</a> choices when available and make it easier for users to quickly respond.  <pre class="prettyprint">// Add to your action, enabling Direct Reply for it
NotificationCompat.Action action =
    new NotificationCompat.Action.Builder(R.drawable.reply, replyLabel, pendingIntent)
        .addRemoteInput(remoteInput)
        .setAllowGeneratedReplies(true)
        .build();


</pre><p>Keep in mind that the <code>pendingIntent</code> being passed into your <code>Action</code> should be an <code>Activity</code> on Marshmallow and lower devices that don’t support Direct Reply (as you’ll want to dismiss the lock screen, start an <code>Activity</code>, and focus the input field to have the user type their reply) and should be a <code>Service</code> (if you need to do work on a separate thread) or <code>BroadcastReceiver</code> (which runs on the UI thread) on Android N devices so as the process the text input in the background even from the lock screen. (There is a separate user control to enable/disable Direct Reply from a locked device in the system settings.) </p><p>Extracting the text input in your <code>Service</code>/<code>BroadcastReceiver</code> is then possible with the help of the <code><a
href="https://developer.android.com/reference/android/support/v4/app/RemoteInput.html#getResultsFromIntent(android.content.Intent)">RemoteInput.getResultsFromIntent()</a></code> method:  <pre class="prettyprint">private CharSequence getMessageText(Intent intent) {
    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
    if (remoteInput != null) {
        return remoteInput.getCharSequence(KEY_TEXT_REPLY);
    }
    return null;
 }


</pre><p>After you’ve processed the text, <strong>you must update the notification</strong>. This is the trigger which hides the Direct Reply UI and should be used as a technique to confirm to the user that their reply was received and processed correctly. </p><p>For most templates, this should involve using the new <code>setRemoteInputHistory()</code> method which appends the reply to the bottom of the notification. Additional replies should be appended to the history until the main content is updated (such as the other person replying). </p><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-P1mcdEiqqsA/V1hW10Tmj3I/AAAAAAAADI0/h05-RakZ7co-KjOa30HZXRXDySx9n0rrQCLcB/s1600/image05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-P1mcdEiqqsA/V1hW10Tmj3I/AAAAAAAADI0/h05-RakZ7co-KjOa30HZXRXDySx9n0rrQCLcB/s400/image05.png" /></a></div><p>However, if you’re building a messaging app and expect back and forth conversations, you should use <code>MessagingStyle</code> and append the additional message to it. </p><h3 id="messagingstyle">MessagingStyle</h3><p>We’ve optimized the experience for displaying an ongoing conversation and using Direct Reply with the new <code>MessagingStyle</code>. </p><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-IYUna0gfIHA/V1hXDfeWFbI/AAAAAAAADJA/vB-Az7g0tUMcxmmTIdQQFE4ZC8eAYuo2gCLcB/s1600/MessagingStyle.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-IYUna0gfIHA/V1hXDfeWFbI/AAAAAAAADJA/vB-Az7g0tUMcxmmTIdQQFE4ZC8eAYuo2gCLcB/s400/MessagingStyle.png" /></a></div><p>This style provides built-in formatting for multiple messages added via the <code>addMessage()</code> method. Each message supports passing in the text itself, a timestamp, and the sender of the message (making it easy to support group conversations). </p><pre class="prettyprint">builder.setStyle(new NotificationCompat.MessagingStyle("Me")
    .setConversationTitle("Team lunch")
    .addMessage("Hi", timestampMillis1, null) // Pass in null for user.
    .addMessage("What's up?", timestampMillis2, "Coworker")
    .addMessage("Not much", timestampMillis3, null)
    .addMessage("How about lunch?", timestampMillis4, "Coworker"));


</pre><p>You’ll note that this style has first-class support for specifically denoting messages from the user and filling in their name (in this case with “Me”) and setting an optional conversation title. While this can be done manually with a <code>BigTextStyle</code>, by using this style Android Wear 2.0 users will get immediate inline responses without kicking them out of the expanded notification view, making for a seamless experience without needing to build a full Wear app. </p><h3 id="bundled">Bundled Notifications</h3><p>Once you’ve built a great notification by using the new visual designs, Direct Reply, <code>MessagingStyle</code>, and <a
href="https://www.youtube.com/watch?v=-iog_fmm6mE">all of our previous best practices</a>, it is important to think about the overall notification experience, particularly if you post multiple notifications (say, one per ongoing conversation or per new email thread). </p><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-crOmNsbUpMU/V1hZnQp2KyI/AAAAAAAADJ8/d4O8oXxAg2Ip-TTUPtzAgkIyIBTbqEKxwCLcB/s1600/Ian_N.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-crOmNsbUpMU/V1hZnQp2KyI/AAAAAAAADJ8/d4O8oXxAg2Ip-TTUPtzAgkIyIBTbqEKxwCLcB/s640/Ian_N.png" /></a></div><strong>Bundled notifications</strong> offer the best of both worlds: a single summary notification for when users are looking at other notifications or want to act on all notifications simultaneously and the ability to expand the group to act on individual notifications (including using actions and Direct Reply). </p><p>If you’ve built <a
href="https://developer.android.com/training/wearables/notifications/stacks.html?utm_campaign=android_series_notificationsandroidnblog_060816&utm_source=anddev&utm_medium=blog">stacking notifications for Android Wear</a>, the API used here is exactly the same. Simply add <code><a
href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html?utm_campaign=android_series_notificationsandroidnblog_060816&utm_source=anddev&utm_medium=blog#setGroup(java.lang.String)">setGroup()</a></code> to each individual notification to bundle those notifications together. You’re not limited to one group, so bundle notifications appropriately. For an email app, you might consider one bundle per account for instance.  <p>It is important to also create a <strong>summary notification</strong>. This summary notification, denoted by <code><a
href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html?utm_campaign=android_series_notificationsandroidnblog_060816&utm_source=anddev&utm_medium=blog#setGroupSummary(boolean)">setGroupSummary(true)</a></code>, is the <strong>only</strong> notification that appears on Marshmallow and lower devices and should (you guessed it) summarize all of the individual notifications. This is an opportune time to use the <code><a
href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.InboxStyle.html?utm_campaign=android_series_notificationsandroidnblog_060816&utm_source=anddev&utm_medium=blog">InboxStyle</a></code>, although using it is not a requirement. On Android N and higher devices, some information (such as the subtext, content intent, and delete intent) is extracted from the summary notification to produce the collapsed notification for the bundled notifications so you should continue to generate a summary notification on all API levels.  <p>To improve the overall user experience on Android N devices, <strong>posting 4 or more notifications without a group will cause those notifications to be automatically bundled</strong>. </p><h3>N is for Notifications</h3><p>Notifications on Android have been a constant area of progressive enhancement. From the single tap targets of the Gingerbread era to expandable notifications, actions, MediaStyle, and now features such as Direct Reply and bundled notifications, notifications play an important part of the overall user experience on Android. </p><p>With many new tools to use (and <code><a
href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.html?utm_campaign=android_series_notificationsandroidnblog_060816&utm_source=anddev&utm_medium=blog">NotificationCompat</a></code> to help with backward compatibility), I’m excited to see how you use them to #BuildBetterApps  <p>Follow the <a
href="https://plus.google.com/collection/sLR0p?utm_campaign=android_series_design_multiwindow_blog_051116&utm_source=anddev&utm_medium=blog">Android Development Patterns Collection</a> for more! </p><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-6UIZx9pzb9M/V1hYG5DO_WI/AAAAAAAADJY/wJRZS54qT5cob74iskGkcpflOD6gnhvVgCLcB/s1600/image02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-6UIZx9pzb9M/V1hYG5DO_WI/AAAAAAAADJY/wJRZS54qT5cob74iskGkcpflOD6gnhvVgCLcB/s400/image02.png" /></a></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/notifications-in-android-n/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android Developer Story: Vietnamese games developer Divmob finds more users with localized pricing on Google Play</title>
		<link>https://googledata.org/google-android/android-developer-story-vietnamese-games-developer-divmob-finds-more-users-with-localized-pricing-on-google-play/</link>
		<comments>https://googledata.org/google-android/android-developer-story-vietnamese-games-developer-divmob-finds-more-users-with-localized-pricing-on-google-play/#comments</comments>
		<pubDate>Wed, 01 Jun 2016 15:49:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=87a585dc49859688330297d601f811d1</guid>
		<description><![CDATA[<i></i><p>Posted by Lily Sheringham, Google Play team</p>


<p>Based in Ho Chi Minh City in Vietnam,<em> </em>games developer <a href="https://play.google.com/store/apps/dev?id=8029000350509758753&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Divmob</a> has grown quickly from an original team of five people to 40 employees since
it was founded three years ago. Divmob now has over 40 million downloads across
its various titles, including the popular game, <a href="https://play.google.com/store/apps/details?id=com.divmob.ageofheroes.braveheroes.battleheroes.epicheroeswar.epicheroes.en&#38;hl=en">Epic Heroes War</a>.</p>

<p>Watch Ngo Van Luyen, CEO &#38; Founder at Divmob, and his team explain how
introducing sub-dollar pricing in various markets resulted in a 300% increase
in daily transactions, and increased the number of paying users threefold.</p>


<!--[Interactive video]  -->

<p><em><a href="https://support.google.com/googleplay/android-developer/table/3541286">Find out more about local pricing models</a> on Google Play</em></p>

<p>We recently introduced new features in the Google Play Developer Console to
help you meet local expectations when setting prices, to make purchases more
attractive to your users. The Developer Console will now automatically round
pricing to local conventions in each market, and you can also set up pricing
templates to manage pricing across multiple currencies more efficiently, and
easily make bulk changes to the prices of multiple apps and in-app products in
a single click. <a href="https://support.google.com/googleplay/android-developer/answer/1169947">Learn more about the improved local pricing tools</a>.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Lily Sheringham, Google Play team</p>
</i>

<p>Based in Ho Chi Minh City in Vietnam,<em> </em>games developer <a href="https://play.google.com/store/apps/dev?id=8029000350509758753&hl=en&e=-EnableAppDetailsPageRedesign">Divmob</a> has grown quickly from an original team of five people to 40 employees since
it was founded three years ago. Divmob now has over 40 million downloads across
its various titles, including the popular game, <a href="https://play.google.com/store/apps/details?id=com.divmob.ageofheroes.braveheroes.battleheroes.epicheroeswar.epicheroes.en&hl=en">Epic Heroes War</a>.</p>

<p>Watch Ngo Van Luyen, CEO & Founder at Divmob, and his team explain how
introducing sub-dollar pricing in various markets resulted in a 300% increase
in daily transactions, and increased the number of paying users threefold.</p>


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

<p><em><a href="https://support.google.com/googleplay/android-developer/table/3541286">Find out more about local pricing models</a> on Google Play</em></p>

<p>We recently introduced new features in the Google Play Developer Console to
help you meet local expectations when setting prices, to make purchases more
attractive to your users. The Developer Console will now automatically round
pricing to local conventions in each market, and you can also set up pricing
templates to manage pricing across multiple currencies more efficiently, and
easily make bulk changes to the prices of multiple apps and in-app products in
a single click. <a href="https://support.google.com/googleplay/android-developer/answer/1169947">Learn more about the improved local pricing tools</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-developer-story-vietnamese-games-developer-divmob-finds-more-users-with-localized-pricing-on-google-play/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>And the winners of the Google Play Awards are…</title>
		<link>https://googledata.org/google-android/and-the-winners-of-the-google-play-awards-are/</link>
		<comments>https://googledata.org/google-android/and-the-winners-of-the-google-play-awards-are/#comments</comments>
		<pubDate>Fri, 20 May 2016 14:15:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=24293cc0c8e52c3e1e2e4803e2c2788a</guid>
		<description><![CDATA[<i></i><p>Posted by Purnima Kochikar, Director, Apps and Games Business Development,
Google Play</p>

<p>During a special ceremony last tonight at Google I/O, we honored ten apps and games
for their outstanding achievements as part of the inaugural Google Play Awards. </p>

<p>As we shared onstage, when you look at how Google Play has evolved over the
years, it&#8217;s pretty amazing. We&#8217;re now reaching over <strong>1 billion</strong> users every month and there&#8217;s literally something for everyone. From real-time
multiplayer to beautiful Indie games, industry changing startups to innovative
uses of mobile technology, developers like you continue to push the boundaries
of what apps can do.</p>

<p>Congrats to the following developers in each category! </p>

<div><a href="https://2.bp.blogspot.com/-2fncQBaUR-c/Vz8b3JX9w8I/AAAAAAAADHU/Dth0hP5Tt9E8JagfNQDDQuHsLJMdZFX8ACLcB/s1600/image00.png"><img border="0" src="https://2.bp.blogspot.com/-2fncQBaUR-c/Vz8b3JX9w8I/AAAAAAAADHU/Dth0hP5Tt9E8JagfNQDDQuHsLJMdZFX8ACLcB/s640/image00.png"></a></div>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Purnima Kochikar, Director, Apps and Games Business Development,
Google Play</p></i>

<p>During a special ceremony last tonight at Google I/O, we honored ten apps and games
for their outstanding achievements as part of the inaugural Google Play Awards. </p>

<p>As we shared onstage, when you look at how Google Play has evolved over the
years, it’s pretty amazing. We’re now reaching over <strong>1 billion</strong> users every month and there’s literally something for everyone. From real-time
multiplayer to beautiful Indie games, industry changing startups to innovative
uses of mobile technology, developers like you continue to push the boundaries
of what apps can do.</p>

<p>Congrats to the following developers in each category! </p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-2fncQBaUR-c/Vz8b3JX9w8I/AAAAAAAADHU/Dth0hP5Tt9E8JagfNQDDQuHsLJMdZFX8ACLcB/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-2fncQBaUR-c/Vz8b3JX9w8I/AAAAAAAADHU/Dth0hP5Tt9E8JagfNQDDQuHsLJMdZFX8ACLcB/s640/image00.png" /></a></div>
]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/and-the-winners-of-the-google-play-awards-are/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android Studio 2.2 Preview &#8211; New UI Designer &amp; Constraint Layout</title>
		<link>https://googledata.org/google-android/android-studio-2-2-preview-new-ui-designer-constraint-layout/</link>
		<comments>https://googledata.org/google-android/android-studio-2-2-preview-new-ui-designer-constraint-layout/#comments</comments>
		<pubDate>Thu, 19 May 2016 22:00:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=875821322930f4aceb08cf6f93ce7092</guid>
		<description><![CDATA[<div dir="ltr">
<i>By <a href="https://www.google.com/+JamalEason" target="_blank">Jamal Eason</a>, Product Manager, Android</i><br /><br /><div>
<a href="https://3.bp.blogspot.com/-eLwkl7lD97E/Vz0qtzJ2SiI/AAAAAAAADEk/6ayT7unwUhEI3Pvg9ZM1ajVLyfLfQu6hQCLcB/s1600/logo_android_studio_512dp.png"><img border="0" src="https://3.bp.blogspot.com/-eLwkl7lD97E/Vz0qtzJ2SiI/AAAAAAAADEk/6ayT7unwUhEI3Pvg9ZM1ajVLyfLfQu6hQCLcB/s1600/logo_android_studio_512dp.png"></a></div>
This week at Google I/O 2016 we launched Android Studio 2.2 Preview. This release is a large update that builds upon our focus to create a fast and productive integrated development environment (IDE) for Android. Developed in sync with the Android platform, Android Studio allows you to develop with the latest Android APIs and features. Since launching Android Studio at Google I/O just 3 years ago, we received great feedback from on you on what features you want the most. Today 92% of the top 125 apps &#38; game developers on Google Play, plus millions of developers worldwide, use Android Studio. We want to continue to build features that will continue to make you more efficient when developing for Android and more productive.<br /><span>Android Studio 2.2 Preview includes a portfolio of new features along the spectrum of developments, ranging from designing user interfaces to building and debugging your app in new ways.</span> This preview includes the following new categories of features:
<br /><b>Design&#160;</b><br /><ul><li><b>Layout Editor:</b> A new user interface designer that helps you visually design the layouts in your app. Features like blueprint mode and the new properties panel allow you to quickly edit layouts and widgets faster.</li>
<li><b>Constraint Layout:</b> A new powerful and flexible Android layout that allows you to express complex UIs without nesting multiple layouts.&#160;</li>
<li><b>Layout Inspector:</b> Debug a snapshot of your app layout running on the Android Emulator or device. Inspect the view hierarchy and corresponding attributes.</li>
</ul><br /><b>Develop</b><br /><ul><li><b>Firebase Plugin:</b> Explore and integrate the suite of services offered by <a href="https://firebase.google.com/?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">Firebase</a> inside of Android Studio. Adding services like Analytics, Authentication, Notifications, and AdMob are just a few clicks away.</li>
<li><b>Enhanced Code Analysis:</b> Android Studio checks the quality of your Android app code. In addition to 260 Android lint and code inspections, this release includes new code quality checks for Java 8 language usage and a new inspection infrastructure for more cross-file analysis.</li>
<li><b>Samples Browser:</b> Referencing <a href="http://developer.android.com/samples/index.html" target="_blank">Android sample code</a> is now even easier. Within the code editor window, find occurrences of your app code snippets in Google Android sample code to help jump start your app development.</li>
<li><b>Improved C++ Support:</b> Android Studio 2.2 improves C++ development with the ability to edit, build, and debug pre-existing Android projects that use ndk-build or CMake rather than Gradle. Additionally, the existing lldb C++ debugger is now even better with project type auto-detection and a Java language aware C++ mode that lets you use a single debugger process to inspect both Java language and C++ runtimes.</li>
<li><b>IntelliJ 2016.1:</b> Android Studio 2.2 includes all the latest updates from the underlying JetBrains product platforms <a href="https://blog.jetbrains.com/idea/2016/03/intellij-idea-2016-1-is-here/" target="_blank">IntelliJ</a>.</li>
</ul><br /><b>Build</b><br /><ul><li><b>Jack Compiler Improvements:</b> For those using the new Jack compiler, Android Studio 2.2 adds support for annotation processing, as well as incremental builds for reduced build times.</li>
<li><b>Merged Manifest Viewer:</b> Diagnose how your <a href="https://developer.android.com/studio/build/manifest-merge.html" target="_blank">AndroidManifest.xml</a> merges with your app dependences across your project build variants.&#160;</li>
</ul><br /><b>Test</b><br /><ul><li><b>Espresso Test Recorder:</b> Record <a href="https://google.github.io/android-testing-support-library/docs/espresso/index.html" target="_blank">Espresso UI tests</a> simply by using your app as a normal user. As you click through your app UI, reusable and editable test code is then generated for you. You can run the generated tests locally, in your Continuous Integration environment, or in <a href="https://firebase.google.com/docs/test-lab?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">Firebase Test lab</a>.&#160;</li>
<li><b>APK Analyzer:</b> Drill into your APK to help you reduce your APK size, debug <a href="https://developer.android.com/studio/build/multidex.html?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">64K method limit</a> issues, view contents of Dex files and more.</li>
</ul><div>
<br /></div>
<!--[Interactive video]  -->
<i></i>
<br /><div>
<i><i>Google I/O &#8216;16: What&#8217;s New in Android Development Tools</i></i></div>
<div>
<br /></div>
<br /><h3>
Deeper Dive into the New Features&#160;</h3>
<b><u>Design</u></b><br /><ul><li><b>Layout Editor:</b> Android Studio 2.2 features a new user interface designer. There are many enhancements but some of the highlights include:&#160;</li>
<ul><li>Drag-and-drop widgets from the palette to the design surface or the component tree view of your app.</li>
<li>Design surface has a blueprint mode to inspect the spacing and arrangement of your layout.&#160;</li>
<li>Properties panel now shows a curated set of properties for quick widget edits with a full sheet of advanced properties one click away.</li>
<li>UI builder can edit menu and system preference files.&#160;</li>
</ul></ul><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-bKfNq9rYxCI/Vz0so_YA4uI/AAAAAAAADEw/Ip9MPfepg4gHomW7qMy1u6AwVLFJJXn9gCLcB/s1600/studio_22_hero_image.png"><img border="0" height="436" src="https://1.bp.blogspot.com/-bKfNq9rYxCI/Vz0so_YA4uI/AAAAAAAADEw/Ip9MPfepg4gHomW7qMy1u6AwVLFJJXn9gCLcB/s640/studio_22_hero_image.png" width="640"></a></td></tr><tr><td><i>The new Layout Editor in Android Studio 2.2 Preview</i></td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://3.bp.blogspot.com/-rd_evYTq6UM/Vz0s6ZqZ2mI/AAAAAAAADE0/XFapgM_nNBwgVdBJiOZfkeK6aAqNyvrGgCLcB/s1600/menu_editing.png"><img border="0" height="364" src="https://3.bp.blogspot.com/-rd_evYTq6UM/Vz0s6ZqZ2mI/AAAAAAAADE0/XFapgM_nNBwgVdBJiOZfkeK6aAqNyvrGgCLcB/s640/menu_editing.png" width="640"></a></td></tr><tr><td><i>Edit Menus in the new Layout Editor</i></td></tr></tbody></table><br /><ul><li><b>Constraint Layout:</b> This new layout is a flexible layout manager for your app that allows you to create dynamic user interfaces without nesting multiple layouts. It is distributed as a support library that is tightly coupled with Android Studio and backwards compatible to API Level 9.&#160;</li>
</ul><div>
At first glance, Constraint Layout is similar to RelativeLayout. However, the Constraint Layout was designed to be used in Studio and it can efficiently express your app design so that you rely on fewer layouts like LinearLayout, FrameLayout, TableLayout, or GridLayout. Lastly, with the built-in automatic constraints inference engine. You can freely design your UI to your liking and let Android Studio do the hard work.<br /><br />
To help you get started, the built-in templates in the New Project Wizard in Android Studio 2.2 Preview now generate &#160;a Constraint Layout. Alternately, you can right click on any layout in the new Layout Editor and select the <i>Convert to ConstraintLayout</i> option.<br /><br />
This is an early preview of the UI designer and Constraint Layout, and we will rapidly add enchantments in upcoming releases. Learn more on the Android Studio <a href="http://tools.android.com/tech-docs/layout-editor" target="_blank">tools</a> site.<br /><div>
<div>
<ul><ul></ul></ul></div>
</div>
</div>
<br /><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://4.bp.blogspot.com/-YnNwiE9u7DA/Vz0tcyCiPvI/AAAAAAAADE8/WMFg_XfxNyQQ95yyAe31iMBVy5AI-f9HgCLcB/s1600/constraint_layout_capture.png"><img border="0" height="394" src="https://4.bp.blogspot.com/-YnNwiE9u7DA/Vz0tcyCiPvI/AAAAAAAADE8/WMFg_XfxNyQQ95yyAe31iMBVy5AI-f9HgCLcB/s640/constraint_layout_capture.png" width="640"></a></td></tr><tr><td><br /><i>Constraint Layout</i></td></tr></tbody></table><br /><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://4.bp.blogspot.com/-Z1WSkld2b20/Vz0tpYeGGMI/AAAAAAAADFE/hkFEtrx3z4U4jgqogCU8lp7faaWeIMtiwCLcB/s1600/Layout_Inspector_Start.png"><img border="0" height="200" src="https://4.bp.blogspot.com/-Z1WSkld2b20/Vz0tpYeGGMI/AAAAAAAADFE/hkFEtrx3z4U4jgqogCU8lp7faaWeIMtiwCLcB/s200/Layout_Inspector_Start.png" width="106"></a></td></tr><tr><td><br /><i>Start Layout Inspector</i></td></tr></tbody></table><ul><li><b>Layout Inspector:</b> For new and existing layouts, many times you may want to debug your app UI to determine if your layout is rendering as expected. With the new Layout Inspector, you can drill into the view hierarchy of your app and analyze the attributes of each component of UI on the screen.&#160;</li>
</ul><div>
To use the tool, just click on Layout Inspector Icon in the Android Monitor Window, and then Android Studio creates a snapshot of the current view hierarchy of your app for you to inspect.<br /><ul><ul></ul></ul><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-yRyf--cS-s8/Vz0t-Nvc11I/AAAAAAAADFI/S7GiyTjCKxAmfLvMEaZn8OaZuk3L9cN2gCLcB/s1600/layout_inspector.png"><img border="0" height="424" src="https://1.bp.blogspot.com/-yRyf--cS-s8/Vz0t-Nvc11I/AAAAAAAADFI/S7GiyTjCKxAmfLvMEaZn8OaZuk3L9cN2gCLcB/s640/layout_inspector.png" width="640"></a></td></tr><tr><td><i>Layout Inspector</i></td></tr></tbody></table><br /><div>
<div>
<b><u>Develop</u></b></div>
<div>
<ul><li><b>Firebase Plugin:</b> <a href="https://firebase.google.com/?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">Firebase</a> is the new suite of developers services that can help you develop high-quality apps, grow your user base, and earn more money. Inside of Android Studio, you can add Firebase to a new or existing Android app with the new Assistant window. To access the Firebase features click on the <b>Tools</b> menu and then select <b>Firebase</b>. You will want to first setup the brand new Firebase Analytics as the foundation as you explore other Firebase services like Firebase Cloud Messaging or Firease Crash Reporting to add your application. Learn more about the Firebase integration inside Android Studio <a href="http://tools.android.com/tech-docs/firebase-plugin" target="_blank">here</a>.</li>
</ul><br /><ul></ul></div>
<table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://2.bp.blogspot.com/-arogRVJF1N0/Vz0vjragndI/AAAAAAAADFY/owq_VCLA-IwjN8ClFOWj7i0RvtFpS03dwCLcB/s1600/firebase_studio.png"><img border="0" height="400" src="https://2.bp.blogspot.com/-arogRVJF1N0/Vz0vjragndI/AAAAAAAADFY/owq_VCLA-IwjN8ClFOWj7i0RvtFpS03dwCLcB/s400/firebase_studio.png" width="390"></a></td></tr><tr><td><br /><i>Firebase Plugin for Android Studio</i></td></tr></tbody></table><div>
<ul><li><b>Code Sample Browser:</b> In addition to importing Android Samples, the Code Sample Browser is a menu option inside Android Studio 2.2 Preview that allows you to find high-quality, Google-provided Android code samples based on the currently highlighted symbol in your project. To use the feature, highlight a Variables, Types and Methods in your code then Right Click to show a context menu for Find Sample Code. The results are displayed in a bottom output box. &#160;&#160;</li>
</ul></div>
<table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://2.bp.blogspot.com/-yAHPdp3MZG4/Vz0v5kBAJ-I/AAAAAAAADFc/kl11y26X_9Epnh0B3OzPN2IEebAmz4E4ACLcB/s1600/find_sample_code.png"><img border="0" height="396" src="https://2.bp.blogspot.com/-yAHPdp3MZG4/Vz0v5kBAJ-I/AAAAAAAADFc/kl11y26X_9Epnh0B3OzPN2IEebAmz4E4ACLcB/s640/find_sample_code.png" width="640"></a></td></tr><tr><td><i>Code Sample Browser</i></td></tr></tbody></table><div>
<div>
<b><u>Build</u></b></div>
<div>
<ul><li><b>CMake and NDK-Build:</b> For those of you using the Android NDK, Android Studio now supports building CMake and NDK-Build Android app projects by pointing Gradle at your existing build files. Once you&#8217;ve added your cmake or ndk-build project to Gradle, Android Studio will automatically open your relevant Android code files for editing and debugging in Studio.</li>
</ul></div>
<div>
<div>
<br />
For CMake users, just add the path to your CMList.txt file in the <code>externalNativeBuild</code> section of your Gradle file:</div>
<table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://3.bp.blogspot.com/-R2s89YgYqVo/Vz4tv-Is9KI/AAAAAAAADHE/6xo6M_ZVhPsMI1YdiY5mtshXqNbGueICACLcB/s1600/CMake_config.png"><img border="0" height="403" src="https://3.bp.blogspot.com/-R2s89YgYqVo/Vz4tv-Is9KI/AAAAAAAADHE/6xo6M_ZVhPsMI1YdiY5mtshXqNbGueICACLcB/s640/CMake_config.png" width="640"></a></td></tr><tr><td>CMake Build in Android Studio</td></tr></tbody></table><br />
For NDK-Build Users, just add the path to your *.mk file in the section of your Gradle file:</div>
</div>
</div>
</div>
<table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-L54-kS-bBq0/Vz0yGh1ORWI/AAAAAAAADGA/D-1QOujw_H8xiFal8_zmJA0IBrzUUDeCACKgB/s1600/ndk-build_config.png"><img border="0" height="472" src="https://1.bp.blogspot.com/-L54-kS-bBq0/Vz0yGh1ORWI/AAAAAAAADGA/D-1QOujw_H8xiFal8_zmJA0IBrzUUDeCACKgB/s640/ndk-build_config.png" width="640"></a></td></tr><tr><td>NDK-Build in Android Studio</td></tr></tbody></table><br /><div>
<ul><li><b>Improved Jack Tools:</b> The new <a href="https://source.android.com/source/jack.html" target="_blank">Jack Toolchain</a> compiles your Java language source into Android dex bytecode. The Jack compiler allows some Java 8 language features, like lambdas, to be used on all versions of Android. This release adds incremental build and full support for annotation processing, so you can explore using Java 8 language features in your existing projects.</li>
</ul></div>
<div>
<div>
To use incremental build with Jack add the following to your build.gradle file:<br /><ul></ul></div>
<table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://2.bp.blogspot.com/-tXx_hlpFkdo/Vz0yafvldVI/AAAAAAAADF4/ua3k7yZExqcyeCGsjmVCy60bAta8-WmxQCLcB/s1600/jack_incremental.png"><img border="0" height="162" src="https://2.bp.blogspot.com/-tXx_hlpFkdo/Vz0yafvldVI/AAAAAAAADF4/ua3k7yZExqcyeCGsjmVCy60bAta8-WmxQCLcB/s400/jack_incremental.png" width="400"></a></td></tr><tr><td><i><br />Enable Jack Incremental Compile Option</i></td></tr></tbody></table><div>
<div>
Jack will automatically apply annotations processors in your classpath. To use an annotation processor at compile-time without bundling it in your apk, use the new annotationProcessor dependency scope:<br /><ul></ul></div>
<table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://3.bp.blogspot.com/-U63adkFWV00/Vz0yxsrUItI/AAAAAAAADF8/uGpAEz-ydEAIXSNsabQ4Xn-FhK4LNpIvQCLcB/s1600/jack_annotation.png"><img border="0" height="152" src="https://3.bp.blogspot.com/-U63adkFWV00/Vz0yxsrUItI/AAAAAAAADF8/uGpAEz-ydEAIXSNsabQ4Xn-FhK4LNpIvQCLcB/s640/jack_annotation.png" width="640"></a></td></tr><tr><td><i>Enable Jack Annotation Processing</i></td></tr></tbody></table><div>
<ul><li><b>Merged Manifest Viewer:</b> Figuring out how your AndroidManifest merges with your project dependencies based on build types, flavors and variants is now easier with Android Studio. Navigate to your AndroidManifest.xml and click on the new <i>Merged Manifest</i> bottom tab. Explore how each node of your AndroidManifest resolves with various project dependencies. &#160;</li>
</ul></div>
<table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://2.bp.blogspot.com/-Kji6cAJ4U3c/Vz0zCP9V9eI/AAAAAAAADGE/ggrzUilNBNQR6xMNjt6a0Ji6otx8FiOfACLcB/s1600/merged_manifest_viewer.png"><img border="0" height="395" src="https://2.bp.blogspot.com/-Kji6cAJ4U3c/Vz0zCP9V9eI/AAAAAAAADGE/ggrzUilNBNQR6xMNjt6a0Ji6otx8FiOfACLcB/s640/merged_manifest_viewer.png" width="640"></a></td></tr><tr><td><i>Merged Manifest Viewer</i></td></tr></tbody></table><div>
<b><u>Test</u></b><br /><br /><ul><li><b>Espresso Test Recorder:</b> Sometimes writing UI tests can be tedious. With the Record <a href="https://google.github.io/android-testing-support-library/docs/espresso/index.html" target="_blank">Espresso UI tests</a> feature, creating tests is now as easy as just using your app. Android Studio will capture all your UI interactions &#160;and convert them into a fully reusable Espresso Test that you can run locally or even on <a href="https://firebase.google.com/docs/test-lab/?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">Firebase Test lab</a>. To use the recorder, go to the <b>Run</b> menu and select <b>Record Espresso Test</b>.</li>
</ul><br /><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-exZnVNUNLLs/Vz01j67-VtI/AAAAAAAADGU/J7AiePDF8HwTZL5Evgu73LXcY_drPPEPwCLcB/s1600/test_recorder.png"><img border="0" height="513" src="https://1.bp.blogspot.com/-exZnVNUNLLs/Vz01j67-VtI/AAAAAAAADGU/J7AiePDF8HwTZL5Evgu73LXcY_drPPEPwCLcB/s640/test_recorder.png" width="640"></a></td></tr><tr><td><i>Espresso Test Recorder</i></td></tr></tbody></table><br /><ul><li><b>APK Analyzer:</b> The new APK Analyzer helps you understand the contents and the sizes of different components in your APK. You can also use it to avoid <a href="https://developer.android.com/studio/build/multidex.html?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">64K referenced method limit</a> issues with your Dex files, diagnose ProGuard configuration issues, view merged AndroidManifest.xml file, and inspect the compiled resources file (resources.arsc). This can help you reduce your APK size and ensure your APK contains exactly the things you expect.</li>
</ul><div>
The APK Analyzer shows you both the raw file size as well as the download size of various components in your APK. The download size is the estimated size users need to download when the APK is served from Google Play. This information should help you prioritize where to focus in your size reduction efforts.</div>
<div>
<br /></div>
</div>
<div>
<div>
To use this new feature, click on the <b>Build</b> menu and select <b>Analyze APK</b>&#8230; Then, select any APK that you want to analyze.
</div>
<ul></ul><br /><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-1GINf9dk7tY/Vz011kP5FpI/AAAAAAAADGY/GMF5q5mDU1MUE6R7K3a735km5g5ylXdfgCLcB/s1600/apk_analyzer.png"><img border="0" height="458" src="https://1.bp.blogspot.com/-1GINf9dk7tY/Vz011kP5FpI/AAAAAAAADGY/GMF5q5mDU1MUE6R7K3a735km5g5ylXdfgCLcB/s640/apk_analyzer.png" width="640"></a></td></tr><tr><td><i>APK Analyzer</i></td></tr></tbody></table><br /><ul><li><b>Java-aware C++ Debugger:</b> &#160;When debugging C++ code on targets running N and above, you can now use a single, Java language aware lldb instance. This debugger continues to support great lldb features like fast steps and memory watchpoints while also allowing you to stop on Java language breakpoints and view your Java language memory contents.</li>
</ul><br /><ul></ul><ul><li><b>Auto Debugger Selection:</b> Android Studio apps can now use debugger type &#8220;Auto.&#8221; This will automatically enable the appropriate debugger -- the Java language aware C++ debugger if enabled and otherwise the hybrid debugger for C++ projects. &#160;Projects exclusively using the Java language will continue to use the Java language debugger.</li>
</ul><br /><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-uR0kO3RqjSg/Vz02O82KScI/AAAAAAAADGg/Ng5sD_5wt8IPtZ8BWkmfG0EYFhBaZccGQCLcB/s1600/C_plus_debugger.png"><img border="0" height="424" src="https://1.bp.blogspot.com/-uR0kO3RqjSg/Vz02O82KScI/AAAAAAAADGg/Ng5sD_5wt8IPtZ8BWkmfG0EYFhBaZccGQCLcB/s640/C_plus_debugger.png" width="640"></a></td></tr><tr><td><i>Enable Auto Debugger for C++</i></td></tr></tbody></table><h3>
What's Next&#160;</h3>
<b>Download</b><br /><br />
If you are using a previous version of Android Studio, you can check for updates on the Canary channel from the navigation menu (Help &#8594; Check for Update [Windows/Linux] , Android Studio &#8594; Check for Updates [OS X]). This update will download a new version, and not patch your existing copy of Android Studio. You can also download Android Studio 2.2 Preview from <a href="http://tools.android.com/download/studio/canary" target="_blank">canary release site</a>.<br /><br />
For the Android Studio 2.2 Preview, we recommend you run a stable version alongside the new canary. Check out the <a href="http://tools.android.com/tips/using-multiple-android-studio-versions" target="_blank">tools site</a> on how to run two versions at the same time.<br /><br />
We appreciate any feedback on things you like, issues or features you would like to see. Connect with us -- the Android Studio development team -- on our <a href="https://plus.google.com/103342515830390186255" target="_blank">Google+ page</a> or on <a href="http://www.twitter.com/androidstudio" target="_blank">Twitter</a>.&#160;</div>
</div>
</div>
</div>]]></description>
				<content:encoded><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">
<i>By <a href="https://www.google.com/+JamalEason" >Jamal Eason</a>, Product Manager, Android</i><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-eLwkl7lD97E/Vz0qtzJ2SiI/AAAAAAAADEk/6ayT7unwUhEI3Pvg9ZM1ajVLyfLfQu6hQCLcB/s1600/logo_android_studio_512dp.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://3.bp.blogspot.com/-eLwkl7lD97E/Vz0qtzJ2SiI/AAAAAAAADEk/6ayT7unwUhEI3Pvg9ZM1ajVLyfLfQu6hQCLcB/s1600/logo_android_studio_512dp.png" /></a></div>
This week at Google I/O 2016 we launched Android Studio 2.2 Preview. This release is a large update that builds upon our focus to create a fast and productive integrated development environment (IDE) for Android. Developed in sync with the Android platform, Android Studio allows you to develop with the latest Android APIs and features. Since launching Android Studio at Google I/O just 3 years ago, we received great feedback from on you on what features you want the most. Today 92% of the top 125 apps &amp; game developers on Google Play, plus millions of developers worldwide, use Android Studio. We want to continue to build features that will continue to make you more efficient when developing for Android and more productive.<br />
<span itemprop="description">Android Studio 2.2 Preview includes a portfolio of new features along the spectrum of developments, ranging from designing user interfaces to building and debugging your app in new ways.</span> This preview includes the following new categories of features:
<br />
<b>Design&nbsp;</b><br />
<ul style="text-align: left;">
<li><b>Layout Editor:</b> A new user interface designer that helps you visually design the layouts in your app. Features like blueprint mode and the new properties panel allow you to quickly edit layouts and widgets faster.</li>
<li><b>Constraint Layout:</b> A new powerful and flexible Android layout that allows you to express complex UIs without nesting multiple layouts.&nbsp;</li>
<li><b>Layout Inspector:</b> Debug a snapshot of your app layout running on the Android Emulator or device. Inspect the view hierarchy and corresponding attributes.</li>
</ul>
<br />
<b>Develop</b><br />
<ul style="text-align: left;">
<li><b>Firebase Plugin:</b> Explore and integrate the suite of services offered by <a href="https://firebase.google.com/?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >Firebase</a> inside of Android Studio. Adding services like Analytics, Authentication, Notifications, and AdMob are just a few clicks away.</li>
<li><b>Enhanced Code Analysis:</b> Android Studio checks the quality of your Android app code. In addition to 260 Android lint and code inspections, this release includes new code quality checks for Java 8 language usage and a new inspection infrastructure for more cross-file analysis.</li>
<li><b>Samples Browser:</b> Referencing <a href="http://developer.android.com/samples/index.html" >Android sample code</a> is now even easier. Within the code editor window, find occurrences of your app code snippets in Google Android sample code to help jump start your app development.</li>
<li><b>Improved C++ Support:</b> Android Studio 2.2 improves C++ development with the ability to edit, build, and debug pre-existing Android projects that use ndk-build or CMake rather than Gradle. Additionally, the existing lldb C++ debugger is now even better with project type auto-detection and a Java language aware C++ mode that lets you use a single debugger process to inspect both Java language and C++ runtimes.</li>
<li><b>IntelliJ 2016.1:</b> Android Studio 2.2 includes all the latest updates from the underlying JetBrains product platforms <a href="https://blog.jetbrains.com/idea/2016/03/intellij-idea-2016-1-is-here/" >IntelliJ</a>.</li>
</ul>
<br />
<b>Build</b><br />
<ul style="text-align: left;">
<li><b>Jack Compiler Improvements:</b> For those using the new Jack compiler, Android Studio 2.2 adds support for annotation processing, as well as incremental builds for reduced build times.</li>
<li><b>Merged Manifest Viewer:</b> Diagnose how your <a href="https://developer.android.com/studio/build/manifest-merge.html" >AndroidManifest.xml</a> merges with your app dependences across your project build variants.&nbsp;</li>
</ul>
<br />
<b>Test</b><br />
<ul style="text-align: left;">
<li><b>Espresso Test Recorder:</b> Record <a href="https://google.github.io/android-testing-support-library/docs/espresso/index.html" >Espresso UI tests</a> simply by using your app as a normal user. As you click through your app UI, reusable and editable test code is then generated for you. You can run the generated tests locally, in your Continuous Integration environment, or in <a href="https://firebase.google.com/docs/test-lab?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >Firebase Test lab</a>.&nbsp;</li>
<li><b>APK Analyzer:</b> Drill into your APK to help you reduce your APK size, debug <a href="https://developer.android.com/studio/build/multidex.html?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >64K method limit</a> issues, view contents of Dex files and more.</li>
</ul>
<div style="text-align: center;">
<br /></div>
<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/csaXml4xtN8" style="box-shadow: rgb(153, 153, 153) 3px 10px 18px 1px; display: block; margin-bottom: 1em; margin-left: 50px; text-align: center;" width="560"></iframe>
<i></i>
<br />
<div style="text-align: center;">
<i><i>Google I/O ‘16: What’s New in Android Development Tools</i></i></div>
<div style="text-align: center;">
<br /></div>
<br />
<h3 style="text-align: left;">
Deeper Dive into the New Features&nbsp;</h3>
<b><u>Design</u></b><br />
<ul style="text-align: left;">
<li><b>Layout Editor:</b> Android Studio 2.2 features a new user interface designer. There are many enhancements but some of the highlights include:&nbsp;</li>
<ul>
<li>Drag-and-drop widgets from the palette to the design surface or the component tree view of your app.</li>
<li>Design surface has a blueprint mode to inspect the spacing and arrangement of your layout.&nbsp;</li>
<li>Properties panel now shows a curated set of properties for quick widget edits with a full sheet of advanced properties one click away.</li>
<li>UI builder can edit menu and system preference files.&nbsp;</li>
</ul>
</ul>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-bKfNq9rYxCI/Vz0so_YA4uI/AAAAAAAADEw/Ip9MPfepg4gHomW7qMy1u6AwVLFJJXn9gCLcB/s1600/studio_22_hero_image.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="436" src="https://1.bp.blogspot.com/-bKfNq9rYxCI/Vz0so_YA4uI/AAAAAAAADEw/Ip9MPfepg4gHomW7qMy1u6AwVLFJJXn9gCLcB/s640/studio_22_hero_image.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>The new Layout Editor in Android Studio 2.2 Preview</i></td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-rd_evYTq6UM/Vz0s6ZqZ2mI/AAAAAAAADE0/XFapgM_nNBwgVdBJiOZfkeK6aAqNyvrGgCLcB/s1600/menu_editing.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="364" src="https://3.bp.blogspot.com/-rd_evYTq6UM/Vz0s6ZqZ2mI/AAAAAAAADE0/XFapgM_nNBwgVdBJiOZfkeK6aAqNyvrGgCLcB/s640/menu_editing.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Edit Menus in the new Layout Editor</i></td></tr>
</tbody></table>
<br />
<ul style="text-align: left;">
<li><b>Constraint Layout:</b> This new layout is a flexible layout manager for your app that allows you to create dynamic user interfaces without nesting multiple layouts. It is distributed as a support library that is tightly coupled with Android Studio and backwards compatible to API Level 9.&nbsp;</li>
</ul>
<div style="margin-left: 32px;">
At first glance, Constraint Layout is similar to RelativeLayout. However, the Constraint Layout was designed to be used in Studio and it can efficiently express your app design so that you rely on fewer layouts like LinearLayout, FrameLayout, TableLayout, or GridLayout. Lastly, with the built-in automatic constraints inference engine. You can freely design your UI to your liking and let Android Studio do the hard work.<br />
<br />
To help you get started, the built-in templates in the New Project Wizard in Android Studio 2.2 Preview now generate &nbsp;a Constraint Layout. Alternately, you can right click on any layout in the new Layout Editor and select the <i>Convert to ConstraintLayout</i> option.<br />
<br />
This is an early preview of the UI designer and Constraint Layout, and we will rapidly add enchantments in upcoming releases. Learn more on the Android Studio <a href="http://tools.android.com/tech-docs/layout-editor" >tools</a> site.<br />
<div>
<div style="margin-left: 32px;">
<ul style="text-align: left;"><ul></ul>
</ul>
</div>
</div>
</div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-YnNwiE9u7DA/Vz0tcyCiPvI/AAAAAAAADE8/WMFg_XfxNyQQ95yyAe31iMBVy5AI-f9HgCLcB/s1600/constraint_layout_capture.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="394" src="https://4.bp.blogspot.com/-YnNwiE9u7DA/Vz0tcyCiPvI/AAAAAAAADE8/WMFg_XfxNyQQ95yyAe31iMBVy5AI-f9HgCLcB/s640/constraint_layout_capture.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><br />
<i>Constraint Layout</i></td></tr>
</tbody></table>
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-Z1WSkld2b20/Vz0tpYeGGMI/AAAAAAAADFE/hkFEtrx3z4U4jgqogCU8lp7faaWeIMtiwCLcB/s1600/Layout_Inspector_Start.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="200" src="https://4.bp.blogspot.com/-Z1WSkld2b20/Vz0tpYeGGMI/AAAAAAAADFE/hkFEtrx3z4U4jgqogCU8lp7faaWeIMtiwCLcB/s200/Layout_Inspector_Start.png" width="106" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><br />
<i>Start Layout Inspector</i></td></tr>
</tbody></table>
<ul style="text-align: left;">
<li><b>Layout Inspector:</b> For new and existing layouts, many times you may want to debug your app UI to determine if your layout is rendering as expected. With the new Layout Inspector, you can drill into the view hierarchy of your app and analyze the attributes of each component of UI on the screen.&nbsp;</li>
</ul>
<div style="margin-left: 32px;">
To use the tool, just click on Layout Inspector Icon in the Android Monitor Window, and then Android Studio creates a snapshot of the current view hierarchy of your app for you to inspect.<br />
<ul style="text-align: left;"><ul>
</ul>
</ul>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-yRyf--cS-s8/Vz0t-Nvc11I/AAAAAAAADFI/S7GiyTjCKxAmfLvMEaZn8OaZuk3L9cN2gCLcB/s1600/layout_inspector.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="424" src="https://1.bp.blogspot.com/-yRyf--cS-s8/Vz0t-Nvc11I/AAAAAAAADFI/S7GiyTjCKxAmfLvMEaZn8OaZuk3L9cN2gCLcB/s640/layout_inspector.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Layout Inspector</i></td></tr>
</tbody></table>
<br />
<div>
<div>
<b><u>Develop</u></b></div>
<div>
<ul style="text-align: left;">
<li><b>Firebase Plugin:</b> <a href="https://firebase.google.com/?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >Firebase</a> is the new suite of developers services that can help you develop high-quality apps, grow your user base, and earn more money. Inside of Android Studio, you can add Firebase to a new or existing Android app with the new Assistant window. To access the Firebase features click on the <b>Tools</b> menu and then select <b>Firebase</b>. You will want to first setup the brand new Firebase Analytics as the foundation as you explore other Firebase services like Firebase Cloud Messaging or Firease Crash Reporting to add your application. Learn more about the Firebase integration inside Android Studio <a href="http://tools.android.com/tech-docs/firebase-plugin" >here</a>.</li>
</ul>
<br />
<ul style="text-align: left;">
</ul>
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-arogRVJF1N0/Vz0vjragndI/AAAAAAAADFY/owq_VCLA-IwjN8ClFOWj7i0RvtFpS03dwCLcB/s1600/firebase_studio.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://2.bp.blogspot.com/-arogRVJF1N0/Vz0vjragndI/AAAAAAAADFY/owq_VCLA-IwjN8ClFOWj7i0RvtFpS03dwCLcB/s400/firebase_studio.png" width="390" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><br />
<i>Firebase Plugin for Android Studio</i></td></tr>
</tbody></table>
<div>
<ul style="text-align: left;">
<li><b>Code Sample Browser:</b> In addition to importing Android Samples, the Code Sample Browser is a menu option inside Android Studio 2.2 Preview that allows you to find high-quality, Google-provided Android code samples based on the currently highlighted symbol in your project. To use the feature, highlight a Variables, Types and Methods in your code then Right Click to show a context menu for Find Sample Code. The results are displayed in a bottom output box. &nbsp;&nbsp;</li>
</ul>
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-yAHPdp3MZG4/Vz0v5kBAJ-I/AAAAAAAADFc/kl11y26X_9Epnh0B3OzPN2IEebAmz4E4ACLcB/s1600/find_sample_code.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="396" src="https://2.bp.blogspot.com/-yAHPdp3MZG4/Vz0v5kBAJ-I/AAAAAAAADFc/kl11y26X_9Epnh0B3OzPN2IEebAmz4E4ACLcB/s640/find_sample_code.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Code Sample Browser</i></td></tr>
</tbody></table>
<div>
<div>
<b><u>Build</u></b></div>
<div>
<ul style="text-align: left;">
<li><b>CMake and NDK-Build:</b> For those of you using the Android NDK, Android Studio now supports building CMake and NDK-Build Android app projects by pointing Gradle at your existing build files. Once you’ve added your cmake or ndk-build project to Gradle, Android Studio will automatically open your relevant Android code files for editing and debugging in Studio.</li>
</ul>
</div>
<div>
<div style="margin-left: 32px;">
<br />
For CMake users, just add the path to your CMList.txt file in the <code>externalNativeBuild</code> section of your Gradle file:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-R2s89YgYqVo/Vz4tv-Is9KI/AAAAAAAADHE/6xo6M_ZVhPsMI1YdiY5mtshXqNbGueICACLcB/s1600/CMake_config.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="403" src="https://3.bp.blogspot.com/-R2s89YgYqVo/Vz4tv-Is9KI/AAAAAAAADHE/6xo6M_ZVhPsMI1YdiY5mtshXqNbGueICACLcB/s640/CMake_config.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">CMake Build in Android Studio</td></tr>
</tbody></table>
<br />
For NDK-Build Users, just add the path to your *.mk file in the section of your Gradle file:</div>
</div>
</div>
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-L54-kS-bBq0/Vz0yGh1ORWI/AAAAAAAADGA/D-1QOujw_H8xiFal8_zmJA0IBrzUUDeCACKgB/s1600/ndk-build_config.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="472" src="https://1.bp.blogspot.com/-L54-kS-bBq0/Vz0yGh1ORWI/AAAAAAAADGA/D-1QOujw_H8xiFal8_zmJA0IBrzUUDeCACKgB/s640/ndk-build_config.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">NDK-Build in Android Studio</td></tr>
</tbody></table>
<br />
<div>
<ul style="text-align: left;">
<li><b>Improved Jack Tools:</b> The new <a href="https://source.android.com/source/jack.html" >Jack Toolchain</a> compiles your Java language source into Android dex bytecode. The Jack compiler allows some Java 8 language features, like lambdas, to be used on all versions of Android. This release adds incremental build and full support for annotation processing, so you can explore using Java 8 language features in your existing projects.</li>
</ul>
</div>
<div>
<div style="margin-left: 32px;">
To use incremental build with Jack add the following to your build.gradle file:<br />
<ul style="text-align: left;">
</ul>
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-tXx_hlpFkdo/Vz0yafvldVI/AAAAAAAADF4/ua3k7yZExqcyeCGsjmVCy60bAta8-WmxQCLcB/s1600/jack_incremental.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="162" src="https://2.bp.blogspot.com/-tXx_hlpFkdo/Vz0yafvldVI/AAAAAAAADF4/ua3k7yZExqcyeCGsjmVCy60bAta8-WmxQCLcB/s400/jack_incremental.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i><br />Enable Jack Incremental Compile Option</i></td></tr>
</tbody></table>
<div>
<div style="margin-left: 32px;">
Jack will automatically apply annotations processors in your classpath. To use an annotation processor at compile-time without bundling it in your apk, use the new annotationProcessor dependency scope:<br />
<ul style="text-align: left;">
</ul>
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-U63adkFWV00/Vz0yxsrUItI/AAAAAAAADF8/uGpAEz-ydEAIXSNsabQ4Xn-FhK4LNpIvQCLcB/s1600/jack_annotation.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="152" src="https://3.bp.blogspot.com/-U63adkFWV00/Vz0yxsrUItI/AAAAAAAADF8/uGpAEz-ydEAIXSNsabQ4Xn-FhK4LNpIvQCLcB/s640/jack_annotation.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Enable Jack Annotation Processing</i></td></tr>
</tbody></table>
<div>
<ul style="text-align: left;">
<li><b>Merged Manifest Viewer:</b> Figuring out how your AndroidManifest merges with your project dependencies based on build types, flavors and variants is now easier with Android Studio. Navigate to your AndroidManifest.xml and click on the new <i>Merged Manifest</i> bottom tab. Explore how each node of your AndroidManifest resolves with various project dependencies. &nbsp;</li>
</ul>
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-Kji6cAJ4U3c/Vz0zCP9V9eI/AAAAAAAADGE/ggrzUilNBNQR6xMNjt6a0Ji6otx8FiOfACLcB/s1600/merged_manifest_viewer.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="395" src="https://2.bp.blogspot.com/-Kji6cAJ4U3c/Vz0zCP9V9eI/AAAAAAAADGE/ggrzUilNBNQR6xMNjt6a0Ji6otx8FiOfACLcB/s640/merged_manifest_viewer.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Merged Manifest Viewer</i></td></tr>
</tbody></table>
<div>
<b><u>Test</u></b><br />
<br />
<ul style="text-align: left;">
<li><b>Espresso Test Recorder:</b> Sometimes writing UI tests can be tedious. With the Record <a href="https://google.github.io/android-testing-support-library/docs/espresso/index.html" >Espresso UI tests</a> feature, creating tests is now as easy as just using your app. Android Studio will capture all your UI interactions &nbsp;and convert them into a fully reusable Espresso Test that you can run locally or even on <a href="https://firebase.google.com/docs/test-lab/?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >Firebase Test lab</a>. To use the recorder, go to the <b>Run</b> menu and select <b>Record Espresso Test</b>.</li>
</ul>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-exZnVNUNLLs/Vz01j67-VtI/AAAAAAAADGU/J7AiePDF8HwTZL5Evgu73LXcY_drPPEPwCLcB/s1600/test_recorder.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="513" src="https://1.bp.blogspot.com/-exZnVNUNLLs/Vz01j67-VtI/AAAAAAAADGU/J7AiePDF8HwTZL5Evgu73LXcY_drPPEPwCLcB/s640/test_recorder.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Espresso Test Recorder</i></td></tr>
</tbody></table>
<br />
<ul style="text-align: left;">
<li><b>APK Analyzer:</b> The new APK Analyzer helps you understand the contents and the sizes of different components in your APK. You can also use it to avoid <a href="https://developer.android.com/studio/build/multidex.html?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >64K referenced method limit</a> issues with your Dex files, diagnose ProGuard configuration issues, view merged AndroidManifest.xml file, and inspect the compiled resources file (resources.arsc). This can help you reduce your APK size and ensure your APK contains exactly the things you expect.</li>
</ul>
<div style="margin-left: 32px;">
The APK Analyzer shows you both the raw file size as well as the download size of various components in your APK. The download size is the estimated size users need to download when the APK is served from Google Play. This information should help you prioritize where to focus in your size reduction efforts.</div>
<div style="margin-left: 32px;">
<br /></div>
</div>
<div>
<div style="margin-left: 32px;">
To use this new feature, click on the <b>Build</b> menu and select <b>Analyze APK</b>… Then, select any APK that you want to analyze.
</div>
<ul style="text-align: left;">
</ul>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-1GINf9dk7tY/Vz011kP5FpI/AAAAAAAADGY/GMF5q5mDU1MUE6R7K3a735km5g5ylXdfgCLcB/s1600/apk_analyzer.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="458" src="https://1.bp.blogspot.com/-1GINf9dk7tY/Vz011kP5FpI/AAAAAAAADGY/GMF5q5mDU1MUE6R7K3a735km5g5ylXdfgCLcB/s640/apk_analyzer.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>APK Analyzer</i></td></tr>
</tbody></table>
<br />
<ul style="text-align: left;">
<li><b>Java-aware C++ Debugger:</b> &nbsp;When debugging C++ code on targets running N and above, you can now use a single, Java language aware lldb instance. This debugger continues to support great lldb features like fast steps and memory watchpoints while also allowing you to stop on Java language breakpoints and view your Java language memory contents.</li>
</ul>
<br />
<ul style="text-align: left;">
</ul>
<ul style="text-align: left;">
<li><b>Auto Debugger Selection:</b> Android Studio apps can now use debugger type “Auto.” This will automatically enable the appropriate debugger -- the Java language aware C++ debugger if enabled and otherwise the hybrid debugger for C++ projects. &nbsp;Projects exclusively using the Java language will continue to use the Java language debugger.</li>
</ul>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-uR0kO3RqjSg/Vz02O82KScI/AAAAAAAADGg/Ng5sD_5wt8IPtZ8BWkmfG0EYFhBaZccGQCLcB/s1600/C_plus_debugger.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="424" src="https://1.bp.blogspot.com/-uR0kO3RqjSg/Vz02O82KScI/AAAAAAAADGg/Ng5sD_5wt8IPtZ8BWkmfG0EYFhBaZccGQCLcB/s640/C_plus_debugger.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Enable Auto Debugger for C++</i></td></tr>
</tbody></table>
<h3 style="text-align: left;">
What's Next&nbsp;</h3>
<b>Download</b><br />
<br />
If you are using a previous version of Android Studio, you can check for updates on the Canary channel from the navigation menu (Help → Check for Update [Windows/Linux] , Android Studio → Check for Updates [OS X]). This update will download a new version, and not patch your existing copy of Android Studio. You can also download Android Studio 2.2 Preview from <a href="http://tools.android.com/download/studio/canary" >canary release site</a>.<br />
<br />
For the Android Studio 2.2 Preview, we recommend you run a stable version alongside the new canary. Check out the <a href="http://tools.android.com/tips/using-multiple-android-studio-versions" >tools site</a> on how to run two versions at the same time.<br />
<br />
We appreciate any feedback on things you like, issues or features you would like to see. Connect with us -- the Android Studio development team -- on our <a href="https://plus.google.com/103342515830390186255" >Google+ page</a> or on <a href="http://www.twitter.com/androidstudio" >Twitter</a>.&nbsp;</div>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-studio-2-2-preview-new-ui-designer-constraint-layout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Bring Your Android App to Chromebooks</title>
		<link>https://googledata.org/google-android/bring-your-android-app-to-chromebooks/</link>
		<comments>https://googledata.org/google-android/bring-your-android-app-to-chromebooks/#comments</comments>
		<pubDate>Thu, 19 May 2016 17:50:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=a427b751e66baf911d6b0b5ddd9853be</guid>
		<description><![CDATA[<div dir="ltr">
<i>Posted by&#160;Dylan Reid and Elijah Taylor, Software Engineers, Chrome OS</i><br /><i><br /></i>
Users love Chromebooks for their speed, security and simplicity. According to IDC<sup>1</sup>, in Q1 of this year Chromebook shipments overtook Macs in the U.S. That means, thanks to your support, in the U.S. Chrome OS is now the second most popular PC operating system. &#160;As we continue to increase our focus on mobility, we want to make sure your apps are easily available on this new form factor, reaching the many Chrome devices while maintaining a great experience. <br /><p>
Today we announced that we&#8217;re adding Android apps to Chromebooks, which means users will be able to install the apps they know and love. Later this year you can expand your app&#8217;s reach to a new hardware platform and wider audience while maximizing the Google Play ecosystem. With expanded app availability, new use cases and improved workflows can be achieved for all Chromebook users, whether for <a href="http://www.google.com/chromebook/" target="_blank">personal</a> use, for <a href="https://www.google.com/work/chrome/devices/" target="_blank">work</a> or for <a href="https://www.google.com/edu/products/devices/" target="_blank">education</a>. &#160;As a developer we encourage you to test your app as described <a href="http://www.chromium.org/chromium-os/android-apps" target="_blank">here</a>.</p>
<br /><div>
<a href="https://4.bp.blogspot.com/-uO5lySoXa_c/Vz1iGHOqrCI/AAAAAAAADG0/P2FAZTmgLm00Jb5XQNGMH0jZidSUzGXCQCLcB/s1600/B113_Pixel2_Silver_AppLauncher.png"><img border="0" src="https://4.bp.blogspot.com/-uO5lySoXa_c/Vz1iGHOqrCI/AAAAAAAADG0/P2FAZTmgLm00Jb5XQNGMH0jZidSUzGXCQCLcB/s640/B113_Pixel2_Silver_AppLauncher.png"></a></div>
<div>
<br /></div>
<br />
Developers can start to optimize their app for the Chromebook form factor in advance of launch later in 2016. Here are some of the benefits:<br /><ul><li>Android Apps can be shown in 3 different window sizes to allow the best experience</li>
<li>Users can multi-task with multiple Android apps in moveable windows along with a full desktop browser, all within the familiar Chrome OS interface.</li>
<li>Keyboard, mouse, and touch input will seamlessly work together</li>
<li>Users will get Android notifications on their Chromebooks</li>
<li>Android apps benefit from the Wifi or Bluetooth connectivity setup by the user or the administrator</li>
<li>File sharing is seamless between Chrome and Android apps through the Files app</li>
<li>Performance of demanding apps such as games or design apps is excellent</li>
</ul>
In addition to being a great personal device, one of the reasons Chromebooks are popular in schools and businesses is that you can centrally manage and configure them with 200+ policies. Administrators can manage Android apps on Chromebooks using the same Admin Console. In addition to whitelisting or push installing specific apps to users, admins can selectively enable them for parts of their organization while disabling in others.<br /><br />
Please come to our Google I/O session on <b>May 19th at 4 pm</b>. You will hear directly &#160;from our friendly engineers on how to optimize your Android app for Chromebooks. We are making the feature available in early June on Asus Chromebook Flip, Chromebook Pixel (2015) and Acer Chromebook R11 specifically for developers to have sufficient time to test their apps. For the actual launch and thereafter we will keep adding support for the following <a href="https://support.google.com/chromebook/answer/6401474" target="_blank">list of devices</a>. Please see <a href="http://www.chromium.org/chromium-os/android-apps" target="_blank">detailed instructions</a>&#160;on how to get started with testing your apps.<br /><br /><i>1 - IDC&#8217;s Worldwide Quarterly PC Tracker, May 2016</i></div>]]></description>
				<content:encoded><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">
<i>Posted by&nbsp;Dylan Reid and Elijah Taylor, Software Engineers, Chrome OS</i><br />
<i><br /></i>
Users love Chromebooks for their speed, security and simplicity. According to IDC<sup>1</sup>, in Q1 of this year Chromebook shipments overtook Macs in the U.S. That means, thanks to your support, in the U.S. Chrome OS is now the second most popular PC operating system. &nbsp;As we continue to increase our focus on mobility, we want to make sure your apps are easily available on this new form factor, reaching the many Chrome devices while maintaining a great experience. <br />

<p itemprop="description">
Today we announced that we’re adding Android apps to Chromebooks, which means users will be able to install the apps they know and love. Later this year you can expand your app’s reach to a new hardware platform and wider audience while maximizing the Google Play ecosystem. With expanded app availability, new use cases and improved workflows can be achieved for all Chromebook users, whether for <a href="http://www.google.com/chromebook/" >personal</a> use, for <a href="https://www.google.com/work/chrome/devices/" >work</a> or for <a href="https://www.google.com/edu/products/devices/" >education</a>. &nbsp;As a developer we encourage you to test your app as described <a href="http://www.chromium.org/chromium-os/android-apps" >here</a>.</p>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-uO5lySoXa_c/Vz1iGHOqrCI/AAAAAAAADG0/P2FAZTmgLm00Jb5XQNGMH0jZidSUzGXCQCLcB/s1600/B113_Pixel2_Silver_AppLauncher.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-uO5lySoXa_c/Vz1iGHOqrCI/AAAAAAAADG0/P2FAZTmgLm00Jb5XQNGMH0jZidSUzGXCQCLcB/s640/B113_Pixel2_Silver_AppLauncher.png"  /></a></div>
<div>
<br /></div>
<br />
Developers can start to optimize their app for the Chromebook form factor in advance of launch later in 2016. Here are some of the benefits:<br />
<ul style="text-align: left;">
<li>Android Apps can be shown in 3 different window sizes to allow the best experience</li>
<li>Users can multi-task with multiple Android apps in moveable windows along with a full desktop browser, all within the familiar Chrome OS interface.</li>
<li>Keyboard, mouse, and touch input will seamlessly work together</li>
<li>Users will get Android notifications on their Chromebooks</li>
<li>Android apps benefit from the Wifi or Bluetooth connectivity setup by the user or the administrator</li>
<li>File sharing is seamless between Chrome and Android apps through the Files app</li>
<li>Performance of demanding apps such as games or design apps is excellent</li>
</ul>
In addition to being a great personal device, one of the reasons Chromebooks are popular in schools and businesses is that you can centrally manage and configure them with 200+ policies. Administrators can manage Android apps on Chromebooks using the same Admin Console. In addition to whitelisting or push installing specific apps to users, admins can selectively enable them for parts of their organization while disabling in others.<br />
<br />
Please come to our Google I/O session on <b>May 19th at 4 pm</b>. You will hear directly &nbsp;from our friendly engineers on how to optimize your Android app for Chromebooks. We are making the feature available in early June on Asus Chromebook Flip, Chromebook Pixel (2015) and Acer Chromebook R11 specifically for developers to have sufficient time to test their apps. For the actual launch and thereafter we will keep adding support for the following <a href="https://support.google.com/chromebook/answer/6401474" >list of devices</a>. Please see <a href="http://www.chromium.org/chromium-os/android-apps" >detailed instructions</a>&nbsp;on how to get started with testing your apps.<br />
<br />
<i>1 - IDC’s Worldwide Quarterly PC Tracker, May 2016</i></div>
]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/bring-your-android-app-to-chromebooks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Enhancing Android Pay APIs</title>
		<link>https://googledata.org/google-android/enhancing-android-pay-apis/</link>
		<comments>https://googledata.org/google-android/enhancing-android-pay-apis/#comments</comments>
		<pubDate>Wed, 18 May 2016 19:48:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=31a31d63e3793811f82f12d0b9a26b58</guid>
		<description><![CDATA[<div dir="ltr">
<i>Posted by Pali Bhat, Senior Director, Product Management</i><br /><p>
Today, we&#8217;re enhancing our APIs, making it easier than ever for the developer community to integrate with Android Pay. With just a few lines of code, you can enable quick and seamless checkout to help increase purchase conversions and ongoing engagement.</p>
<b>Improve conversions within apps</b><br /><br />
We&#8217;ve been working with popular apps such as Airbnb, Yelp Eat24, Kickstarter, TicketMaster, Uber and <a href="https://play.google.com/store/apps/collection/promotion_30015d0_androidpay_featured_apps" target="_blank">many others</a> to bring the ease of speedy checkouts to apps. We also want to make the same great in-app experience available to all developers, big or small. So we&#8217;re taking a few steps:<br /><br /><ul><li>Earlier today, we announced <a href="http://android-developers.blogspot.com/2016/05/android-instant-apps-evolving-apps.html?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">Android Instant Apps</a>, which gives users the ability to pay using Android Pay with a single tap, without the friction of getting a user to install the app to complete their transaction.&#160;</li>
</ul><br /><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://4.bp.blogspot.com/-ELQ2HOYej2M/VzvTiVo67VI/AAAAAAAADBY/4wI1FUW6oRUPXFCj2KWxfu9ot1vlasIbACLcB/s1600/B%2526H_195x395.gif"><img border="0" height="400" src="https://4.bp.blogspot.com/-ELQ2HOYej2M/VzvTiVo67VI/AAAAAAAADBY/4wI1FUW6oRUPXFCj2KWxfu9ot1vlasIbACLcB/s400/B%2526H_195x395.gif" width="196"></a></td></tr><tr><td><i>Example of Android Pay in Android Instant Apps</i></td></tr></tbody></table><br /><ul><li>We&#8217;re opening the Android Pay API to all developers selling physical goods and services in markets where Android Pay is available&#8212;just sign up at <a href="https://developers.google.com/android-pay/?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">developers.google.com/android-pay/</a></li>
<li>We&#8217;ve teamed up with <a href="https://developers.google.com/android-pay/?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">payment processors</a> globally so developers can integrate Android Pay with their Android apps in just a few hours.</li>
</ul><br /><b>Enhance mobile web payments</b><br /><br />
Many users continue to make purchases on mobile sites. But buying something from a website on your phone can be clumsy and cumbersome, which results in much lower conversion rates on mobile sites than on desktop sites.<br /><br />
To make painful web checkout forms a thing of the past, we will be launching PaymentRequest, a brand new web API that we are developing together with Chrome and standardizing across browsers through W3C. Android Pay will be part of this API to allow users to pay on mobile websites as they do in-store and in-app.<br /><br /><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://3.bp.blogspot.com/-8dheh9-4BLM/VzvT2QqnhiI/AAAAAAAADBc/5y8ZlDchkZYhi3As4_FbMTL9bbK3px-GACLcB/s1600/ShopifyMC_A_195X395.gif"><img border="0" height="400" src="https://3.bp.blogspot.com/-8dheh9-4BLM/VzvT2QqnhiI/AAAAAAAADBc/5y8ZlDchkZYhi3As4_FbMTL9bbK3px-GACLcB/s400/ShopifyMC_A_195X395.gif" width="196"></a></td></tr><tr><td><i>Example of Android Pay in PaymentRequest</i></td></tr></tbody></table><b>Drive deeper engagement</b><br /><br />
Thanks for all the great feedback on our Save to <a href="https://developers.google.com/save-to-android-pay/?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">Android Pay API</a> since launch. You spoke and we&#8217;ve listened: We think you&#8217;ll be thrilled with the <a href="https://www.youtube.com/watch?v=_JF630CH5_A" target="_blank">latest improvements</a> to the Save to Android Pay API. The following enhancements help developers build stronger loyalty and engagement with new and existing customers:<br /><br /><ul><li>Enable users to add offers, loyalty cards and gift cards in the Android Pay app with the tap of a button. Simply add a deep link to an email, SMS message, push notification or within an app and you&#8217;re all set.</li>
<li>Enroll new customers into a loyalty program in a variety of ways with the new simplified sign-up feature. Customers can sign-up either in store via a NFC tap or through a sign-up page linked from an Android Pay transaction notification.</li>
</ul><br /><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://4.bp.blogspot.com/-OlY0UBAKlPA/VzvV3-wV97I/AAAAAAAADBs/a9MOApjMIx4bfBORtxsCtHbYGOHGV7eeACLcB/s1600/Flat%2Bside%2Bby%2Bside%2Bsmall%2B412x395.png"><img border="0" height="382" src="https://4.bp.blogspot.com/-OlY0UBAKlPA/VzvV3-wV97I/AAAAAAAADBs/a9MOApjMIx4bfBORtxsCtHbYGOHGV7eeACLcB/s400/Flat%2Bside%2Bby%2Bside%2Bsmall%2B412x395.png" width="400"></a></td></tr><tr><td><i>Example sign-up feature for Walgreens Balance Reward&#174;</i><i>&#160;&#160;</i><i><br />via Save to Android Pay from transaction notification</i></td></tr></tbody></table>
We believe that mobile payments can make for a better, more secure shopping experience - so we're in this together for the long haul. We&#8217;re building a robust Android Pay ecosystem, one that&#8217;s open and scalable, to enable developers to drive mobile payments - and their businesses - forward. We're very excited for the road ahead and we hope you are too.<br /><br />
To learn more about Android Pay and share your feedback, visit our <a href="https://developers.google.com/android-pay/?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">developer pages</a>.</div>

<img src="https://android-pay-toolkit.withgoogle.com/static/images/section-masterbrand/logomark.png">]]></description>
				<content:encoded><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">
<i>Posted by Pali Bhat, Senior Director, Product Management</i><br />
<p itemprop="description">
Today, we’re enhancing our APIs, making it easier than ever for the developer community to integrate with Android Pay. With just a few lines of code, you can enable quick and seamless checkout to help increase purchase conversions and ongoing engagement.</p>
<b>Improve conversions within apps</b><br />
<br />
We’ve been working with popular apps such as Airbnb, Yelp Eat24, Kickstarter, TicketMaster, Uber and <a href="https://play.google.com/store/apps/collection/promotion_30015d0_androidpay_featured_apps" >many others</a> to bring the ease of speedy checkouts to apps. We also want to make the same great in-app experience available to all developers, big or small. So we’re taking a few steps:<br />
<br />
<ul style="text-align: left;">
<li>Earlier today, we announced <a href="http://android-developers.blogspot.com/2016/05/android-instant-apps-evolving-apps.html?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >Android Instant Apps</a>, which gives users the ability to pay using Android Pay with a single tap, without the friction of getting a user to install the app to complete their transaction.&nbsp;</li>
</ul>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-ELQ2HOYej2M/VzvTiVo67VI/AAAAAAAADBY/4wI1FUW6oRUPXFCj2KWxfu9ot1vlasIbACLcB/s1600/B%2526H_195x395.gif" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://4.bp.blogspot.com/-ELQ2HOYej2M/VzvTiVo67VI/AAAAAAAADBY/4wI1FUW6oRUPXFCj2KWxfu9ot1vlasIbACLcB/s400/B%2526H_195x395.gif" width="196" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Example of Android Pay in Android Instant Apps</i></td></tr>
</tbody></table>
<br />
<ul style="text-align: left;">
<li>We’re opening the Android Pay API to all developers selling physical goods and services in markets where Android Pay is available—just sign up at <a href="https://developers.google.com/android-pay/?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >developers.google.com/android-pay/</a></li>
<li>We’ve teamed up with <a href="https://developers.google.com/android-pay/?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >payment processors</a> globally so developers can integrate Android Pay with their Android apps in just a few hours.</li>
</ul>
<br />
<b>Enhance mobile web payments</b><br />
<br />
Many users continue to make purchases on mobile sites. But buying something from a website on your phone can be clumsy and cumbersome, which results in much lower conversion rates on mobile sites than on desktop sites.<br />
<br />
To make painful web checkout forms a thing of the past, we will be launching PaymentRequest, a brand new web API that we are developing together with Chrome and standardizing across browsers through W3C. Android Pay will be part of this API to allow users to pay on mobile websites as they do in-store and in-app.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-8dheh9-4BLM/VzvT2QqnhiI/AAAAAAAADBc/5y8ZlDchkZYhi3As4_FbMTL9bbK3px-GACLcB/s1600/ShopifyMC_A_195X395.gif" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://3.bp.blogspot.com/-8dheh9-4BLM/VzvT2QqnhiI/AAAAAAAADBc/5y8ZlDchkZYhi3As4_FbMTL9bbK3px-GACLcB/s400/ShopifyMC_A_195X395.gif" width="196" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Example of Android Pay in PaymentRequest</i></td></tr>
</tbody></table>
<b>Drive deeper engagement</b><br />
<br />
Thanks for all the great feedback on our Save to <a href="https://developers.google.com/save-to-android-pay/?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >Android Pay API</a> since launch. You spoke and we’ve listened: We think you’ll be thrilled with the <a href="https://www.youtube.com/watch?v=_JF630CH5_A" >latest improvements</a> to the Save to Android Pay API. The following enhancements help developers build stronger loyalty and engagement with new and existing customers:<br />
<br />
<ul style="text-align: left;">
<li>Enable users to add offers, loyalty cards and gift cards in the Android Pay app with the tap of a button. Simply add a deep link to an email, SMS message, push notification or within an app and you’re all set.</li>
<li>Enroll new customers into a loyalty program in a variety of ways with the new simplified sign-up feature. Customers can sign-up either in store via a NFC tap or through a sign-up page linked from an Android Pay transaction notification.</li>
</ul>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-OlY0UBAKlPA/VzvV3-wV97I/AAAAAAAADBs/a9MOApjMIx4bfBORtxsCtHbYGOHGV7eeACLcB/s1600/Flat%2Bside%2Bby%2Bside%2Bsmall%2B412x395.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="382" src="https://4.bp.blogspot.com/-OlY0UBAKlPA/VzvV3-wV97I/AAAAAAAADBs/a9MOApjMIx4bfBORtxsCtHbYGOHGV7eeACLcB/s400/Flat%2Bside%2Bby%2Bside%2Bsmall%2B412x395.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Example sign-up feature for Walgreens Balance Reward®</i><i style="font-size: 12.8px;">&nbsp;&nbsp;</i><i><br />via Save to Android Pay from transaction notification</i></td></tr>
</tbody></table>
We believe that mobile payments can make for a better, more secure shopping experience - so we're in this together for the long haul. We’re building a robust Android Pay ecosystem, one that’s open and scalable, to enable developers to drive mobile payments - and their businesses - forward. We're very excited for the road ahead and we hope you are too.<br />
<br />
To learn more about Android Pay and share your feedback, visit our <a href="https://developers.google.com/android-pay/?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >developer pages</a>.</div>

<img itemprop="image" style="display:none" src="https://android-pay-toolkit.withgoogle.com/static/images/section-masterbrand/logomark.png">]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/enhancing-android-pay-apis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>What’s new in Google Play at I/O 2016: better betas, the pre-launch report, benchmarks, a new Play Console app, and more</title>
		<link>https://googledata.org/google-android/whats-new-in-google-play-at-io-2016-better-betas-the-pre-launch-report-benchmarks-a-new-play-console-app-and-more/</link>
		<comments>https://googledata.org/google-android/whats-new-in-google-play-at-io-2016-better-betas-the-pre-launch-report-benchmarks-a-new-play-console-app-and-more/#comments</comments>
		<pubDate>Wed, 18 May 2016 19:23:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=36a635042188598647fcad80aaa378ce</guid>
		<description><![CDATA[<div dir="ltr">
<i>Posted by Purnima Kochikar, Director, Google Play Apps &#38; Games</i><br /><p>
Google Play reaches over 1 billion monthly active users giving developers the world&#8217;s largest app distribution platform. Last year, Play users installed apps 65 billion times. To keep that great momentum going, we&#8217;re continuing to listen to your feedback and invest in more ways to help you grow your app or game business. Today, we&#8217;re sharing new features that benefit developers of all sizes.</p>
<br />
&#160;

<!--[Interactive video]  -->
<b><br /></b><br /><b>Improvements to beta tests and app discovery on Google Play</b><br /><br />
Beta testing is a crucial tool that many developers use in the Google Play Developer Console to test their apps with real users, gather feedback, and make improvements before launching widely. Open beta tests are helpful to get feedback from a large group of users and allow any user to join a beta test. <b>We're making open beta tests easier to find and participate in:</b> apps that are available only as open betas and aren&#8217;t in production yet will soon appear in Play search results, users will be able to opt-in from Play store listings directly, and users will be able to send you private feedback through your Play store listing too.<br /><br />
We'll also be adding a new featured section to the store, called <b>Google Play Early Access</b>, showcasing a hand-picked group of promising open betas that haven&#8217;t gone to production yet.<br /><br />
There are more than a million apps available on Google Play and we continue to work on making it easy for people to discover the apps they&#8217;ll love. To that end, you&#8217;ll start seeing new <b>collections</b> on the store for tasks that might require a combination of apps. For example, when you're buying a house, you&#8217;ll see the best apps for finding real estate, keeping notes, getting a mortgage, and travelling in the area in one handy collection. Developers don&#8217;t need to take any action to take advantage of this benefit, apps will automatically be chosen. These contextual collections make it easier for users to discover complimentary apps as well as new types of apps.<br /><table border="1" cellpadding="3" cellspacing="3"><tbody><tr><td><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://2.bp.blogspot.com/-KdPmAqCzo5g/VzuqGOUpzMI/AAAAAAAAC_I/f0oJ4xbq9rcA0QPMhv3cZi3awXmIJ0d3ACKgB/s1600/beta_testing.png"><img border="0" height="400" src="https://2.bp.blogspot.com/-KdPmAqCzo5g/VzuqGOUpzMI/AAAAAAAAC_I/f0oJ4xbq9rcA0QPMhv3cZi3awXmIJ0d3ACKgB/s400/beta_testing.png" width="223"></a></td></tr><tr><td><i><span>Users can now opt-in to beta
tests from the Play Store</span></i></td></tr></tbody></table></td><td><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-GwOiWZzSAyM/VzurTx6w96I/AAAAAAAAC_Q/-A_-7vE29iYx2C2RDjLLZwYdwV3TBgAKQCKgB/s1600/collections.png"><img border="0" height="400" src="https://1.bp.blogspot.com/-GwOiWZzSAyM/VzurTx6w96I/AAAAAAAAC_Q/-A_-7vE29iYx2C2RDjLLZwYdwV3TBgAKQCKgB/s400/collections.png" width="232"></a></td></tr><tr><td><i><span>An example of a new collection
for apps relating to buying a house</span></i></td></tr></tbody></table></td></tr></tbody></table><b>Improve your app with the Play pre-launch report</b><br /><br />
Your app business relies on having high quality apps. To achieve quality, your apps need to be tested on a range of real devices before you ship them to your users. Play&#8217;s new&#160;<b>pre-launch report</b>&#160;summarizes issues found when testing your app on Firebase Test Lab for Android on a wide range of devices.
<br /><div>
</div>
<div>
<table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-BHWdMtnBbS0/Vzv2B17nKLI/AAAAAAAADB8/i08gAiY3cjsa-myJCoCy9vBeDa4P8VYmwCLcB/s1600/pre-launch-report%2B%25281%2529.png"><img border="0" height="640" src="https://1.bp.blogspot.com/-BHWdMtnBbS0/Vzv2B17nKLI/AAAAAAAADB8/i08gAiY3cjsa-myJCoCy9vBeDa4P8VYmwCLcB/s640/pre-launch-report%2B%25281%2529.png" width="625"></a></td></tr><tr><td><i><br /></i>
<i>
</i> <i>The pre-launch report in the Developer Console</i></td></tr></tbody></table></div>
Along with diagnostics to help you fix any crashes we detected in your app, your reports will also include screenshots from devices that use different Android versions, languages, and screen resolutions. These can help you find layout issues. We&#8217;ve also included early warnings of known security vulnerabilities that may have sneaked into your app -- even via third party libraries you rely on. You can <a href="https://play.google.com/apps/publish/?#PreLaunchReportPrefsPlace" target="_blank">enable the pre-launch report</a> in the Developer Console.<br /><b><br /></b>
<b>Gain deeper insights from user reviews at a glance and reply to user reviews more easily</b><br /><br />
Your app reviews offer a wealth of information on what  your users like and dislike about your app. We&#8217;re expanding on the <a href="http://android-developers.blogspot.com/2016/02/new-tools-for-ratings-reviews-on-google.html?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">improvements we made to ratings and reviews</a> earlier this year, to offer you more ways to take advantage of reviews and better engage your audience.<br /><br /><b>Review benchmarks</b> let you see your app&#8217;s rating distribution compared to similar apps in your category for a list of common topics which are relevant for all apps &#8211; like design, stability, and speed. You are also able to see how each area impacts your app&#8217;s rating.&#160;<b>Review topics</b> will let you see your app&#8217;s rating distribution for a list of topics which are specific to your app. With this analysis functionality, you can more easily identify what users think of your app and where to focus your improvement efforts.<br /><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-NXvfQj7iuIQ/Vzu6JLYNyJI/AAAAAAAAC_s/o2phUqTRvhANCEO0SMSYoh3iKH8hHtHHgCLcB/s1600/review_benchmarks.png"><img border="0" height="387" src="https://1.bp.blogspot.com/-NXvfQj7iuIQ/Vzu6JLYNyJI/AAAAAAAAC_s/o2phUqTRvhANCEO0SMSYoh3iKH8hHtHHgCLcB/s640/review_benchmarks.png" width="640"></a></td></tr><tr><td><i><br /></i>
<i>
</i> <i>Review benchmarks in the Developer Console</i></td></tr></tbody></table>
Developers frequently tell us they find replying to reviews valuable as a channel to directly engage their audience and gather feedback. In fact, we have found that users who update their star rating after a developer has responded to their review increase it by an average of 0.7 stars. For developers who have their own customer support solutions, we&#8217;re making replying easier with a new <b>Reply to Reviews API</b>. In the last few months, we&#8217;ve tested the API with <a href="https://www.zendesk.com/apps/google-play-reviews" target="_blank">Zendesk</a> and <a href="http://www.conversocial.com/" target="_blank">Conversocial</a>, so you can now start replying to reviews directly from those popular platforms or build your own <a href="https://developers.google.com/android-publisher/reply-to-reviews?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">custom integration</a>.
<br /><br /><div>
<a href="https://3.bp.blogspot.com/-N1bREcK3hmg/Vzu6fQzhtqI/AAAAAAAAC_4/asHSJuI-IQIEvsp06xDSBWrxAtbFG5BPwCLcB/s1600/zendesk_logo.png"><img border="0" height="74" src="https://3.bp.blogspot.com/-N1bREcK3hmg/Vzu6fQzhtqI/AAAAAAAAC_4/asHSJuI-IQIEvsp06xDSBWrxAtbFG5BPwCLcB/s320/zendesk_logo.png" width="320"></a></div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-9QB58LqH1I0/Vzu6fQ0dIUI/AAAAAAAAC_0/vxjoCH06H9oaFT-0ti0BzARtdeKkWdQiACLcB/s1600/conversocial_logo.png"><img border="0" height="42" src="https://1.bp.blogspot.com/-9QB58LqH1I0/Vzu6fQ0dIUI/AAAAAAAAC_0/vxjoCH06H9oaFT-0ti0BzARtdeKkWdQiACLcB/s320/conversocial_logo.png" width="320"></a></td></tr><tr><td><i><br /></i>
<i>
Developers can now reply to reviews on Google Play from platorms
such as Zendesk and Conversocial</i></td></tr></tbody></table><b>Understand more about user acquisition and conversion, and see how you&#8217;re doing compared to others</b><br /><br />
The User Acquisition performance report in the Developer Console gives you a snapshot of how many users visit your store listing, how many install your app, and how many go on to make purchases. We&#8217;ve now added the ability to see <b>user acquisition data by country</b> and you&#8217;ll soon be able to see <b>user acquisition benchmarks</b> and compare your app&#8217;s conversion rates to similar apps on the Play store. With this data, you can find opportunities to focus your marketing efforts and increase your installs with tools like <a href="https://support.google.com/googleplay/android-developer/answer/6227309?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">Store Listing Experiments</a>.

<br /><br /><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-IOdrI5XXehs/VzvBfaGLr9I/AAAAAAAADAQ/itmUwXz9TNk3mbSimXGJjnYaukTBvaKHgCLcB/s1600/user_acquisition.png"><img border="0" height="275" src="https://1.bp.blogspot.com/-IOdrI5XXehs/VzvBfaGLr9I/AAAAAAAADAQ/itmUwXz9TNk3mbSimXGJjnYaukTBvaKHgCLcB/s400/user_acquisition.png" width="400"></a></td></tr><tr><td><i><br /></i>
<i>User acquisition country data in the Developer Console</i></td></tr></tbody></table><b><br /></b>
<b>Building apps and games for billions of users</b><br /><br />
Hundreds of millions of users, many of them in emerging markets, are coming online and, for many of them, their first experience is on an Android device.<br />
&#160;

<!--[Interactive video]  --><br />


To help you get your app ready for this opportunity, we&#8217;ve created <a href="https://developer.android.com/distribute/essentials/quality/billions.html" target="_blank"><b>Building for Billions guidelines</b></a> with a development checklist to help you optimize your app. You can also get more in-depth tips and best practices for expanding to new markets in the accompanying <a href="http://g.co/play/billionsplaybook" target="_blank"><b>Building for Billions Playbook</b></a>.&#160;
<br /><br />
To help you meet local expectations when you set your prices and make purchases more attractive to your users, the Developer Console will now <b>automatically round prices to local conventions</b> in each market. For example, for a US app priced at $1.99, a user in Japan would see &#65509;200 rather than a non-rounded price from a straight FX conversion. You can also set up pricing templates to change pricing for products in bulk. You can make this change in the Developer Console.<br /><br />
While you're working on getting your app ready for billions of users, we've been enhancing the Google Play experience for them too. With improved compression, we've made app updates more data efficient, and we're focusing on making the Play Store itself faster than ever on all connection types.<br /><br />
We&#8217;ve also revamped how we select visible apps in key markets like <b>India</b> and <b>Brazil</b> to better showcase apps that are more relevant locally and apps made by local developers. And we continue to add more payment methods in new countries, including carrier billing and gift cards in India and Indonesia.<br /><br /><b>Two new apps: Get your app data and important notifications on the go, and stay up to date with best practices</b><br /><br />
To give you access to your data when you need it, and to keep you informed of crucial business updates with notifications, we&#8217;re launching the <a href="http://g.co/play/consoleapp" target="_blank"><b>Play Console app</b></a>. You can access your app&#8217;s data including installs, uninstalls, crashes, ratings, and reviews. You can also receive push notifications for important news like when your app update is live on Google Play. And you can even reply to reviews directly in the app, making it easier and quicker to engage your audience when you want to. <a href="http://g.co/play/consoleapp" target="_blank">Get the Play Console app on Google Play today</a>.<br /><br />
Staying on top of all the features and best practices and strategies you should consider when growing your business can be a challenge. We&#8217;ve built another app, the&#160;<a href="http://g.co/play/playbookbeta" target="_blank"><b>Playbook by Google Play</b></a>. The Playbook is a tailored list, based on your objectives, of the latest articles and videos from Google experts and across the web to help you grow a successful business on Google Play.&#160;<a href="http://g.co/play/playbookbeta" target="_blank">Join the Playbook beta today</a>&#160;and let us know your feedback.<br /><table border="1" cellpadding="3" cellspacing="3"><tbody><tr><td><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://4.bp.blogspot.com/-lypkiJv5lHQ/Vzv5ldTpmVI/AAAAAAAADCM/hr634I2mPGEcvGtBJyPOX9uzfGa8vsengCKgB/s1600/play_console_app.png"><img border="0" height="400" src="https://4.bp.blogspot.com/-lypkiJv5lHQ/Vzv5ldTpmVI/AAAAAAAADCM/hr634I2mPGEcvGtBJyPOX9uzfGa8vsengCKgB/s400/play_console_app.png" width="223"></a></td></tr><tr><td><i><b>The Play Console app</b></i></td></tr></tbody></table></td>   <td><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-Y18q0fq3F4s/Vzv6SOM7ZZI/AAAAAAAADCU/qDPys6GRMLI6Vmph7_nrL20RDFf7h9WbQCKgB/s1600/playbook_app.png"><img border="0" height="400" src="https://1.bp.blogspot.com/-Y18q0fq3F4s/Vzv6SOM7ZZI/AAAAAAAADCU/qDPys6GRMLI6Vmph7_nrL20RDFf7h9WbQCKgB/s400/playbook_app.png" width="223"></a></td></tr><tr><td><i><b>Playbook by Google Play</b></i></td></tr></tbody></table></td>  </tr><tr><td><div>
<a href="http://g.co/play/consoleapp" target="_blank"><img border="0" height="69" src="https://2.bp.blogspot.com/-P2DsqPdlu58/Vzv8NOJtRkI/AAAAAAAADCc/lmQikHBPSaUDdH99D1RoCa1UD09Idxb_ACLcB/s200/get_it_on_play.png" width="180"></a></div>
</td>   <td><div>
<a href="http://g.co/play/playbookbeta" target="_blank"><img border="0" height="69" src="https://2.bp.blogspot.com/-P2DsqPdlu58/Vzv8NOJtRkI/AAAAAAAADCc/lmQikHBPSaUDdH99D1RoCa1UD09Idxb_ACLcB/s200/get_it_on_play.png" width="180"></a></div>
</td></tr></tbody></table><div>
</div>
<div>
<br />
Finally, we will be soon making some updates to the Developer Distribution Agreement (DDA), which includes the ability for family members to share purchased apps on Google Play. Here you can see the <a href="https://play.google.com/about/developer-distribution-agreement/upcoming.html" target="_blank">updated DDA</a>.<br /><br /></div>
<hr size="1" width="100%"><div>
</div>
<div>
<br />
To learn more about all of these features, tune-in live to &#8216;<a href="https://events.google.com/io2016/schedule?filters=Play&#38;sid=fc003c22-230b-e611-a517-00155d5066d7#day2/fc003c22-230b-e611-a517-00155d5066d7" target="_blank">What&#8217;s new in Google Play for developers</a>&#8217; at 11am PDT / 2pm EDT / 7:00pm GMT+1 on May 19 on the <a href="https://www.youtube.com/user/GoogleDevelopers" target="_blank">Google Developers YouTube channel</a>.<br /><br /></div>
<div>
</div>
<div>
If you&#8217;re attending I/O, come and visit the Google Play sandbox to get your app reviewed by experts.</div>
<div>
</div>
<div>
<br />
Whether you&#8217;re attending I/O in person, at one of the many I/O Extended events around the world, or just watching from home, you can find <a href="https://events.google.com/io2016/schedule?filters=Play" target="_blank">more Google Play sessions in the I/O 2016 schedule</a>.</div>
<div>
</div>
<div>
<a href="https://3.bp.blogspot.com/-6kQTDq40iPs/VzvENRRLjFI/AAAAAAAADAo/fFqq9s0-DUIBcacDsgvUkvKEZJEmglcBwCLcB/s1600/google_play_logo.png"><img border="0" height="320" src="https://3.bp.blogspot.com/-6kQTDq40iPs/VzvENRRLjFI/AAAAAAAADAo/fFqq9s0-DUIBcacDsgvUkvKEZJEmglcBwCLcB/s320/google_play_logo.png" width="305"></a></div>
<div>
</div>
</div>

<img src="https://i.ytimg.com/vi/AxZRn8n5iH0/maxresdefault.jpg">]]></description>
				<content:encoded><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">
<i>Posted by Purnima Kochikar, Director, Google Play Apps &amp; Games</i><br />
<p itemprop="description">
Google Play reaches over 1 billion monthly active users giving developers the world’s largest app distribution platform. Last year, Play users installed apps 65 billion times. To keep that great momentum going, we’re continuing to listen to your feedback and invest in more ways to help you grow your app or game business. Today, we’re sharing new features that benefit developers of all sizes.</p>
<br />
&nbsp;

<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/AxZRn8n5iH0" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom: 1em; margin-left: 50px;" width="560"></iframe>
<b><br /></b><br />
<b>Improvements to beta tests and app discovery on Google Play</b><br />
<br />
Beta testing is a crucial tool that many developers use in the Google Play Developer Console to test their apps with real users, gather feedback, and make improvements before launching widely. Open beta tests are helpful to get feedback from a large group of users and allow any user to join a beta test. <b>We're making open beta tests easier to find and participate in:</b> apps that are available only as open betas and aren’t in production yet will soon appear in Play search results, users will be able to opt-in from Play store listings directly, and users will be able to send you private feedback through your Play store listing too.<br />
<br />
We'll also be adding a new featured section to the store, called <b>Google Play Early Access</b>, showcasing a hand-picked group of promising open betas that haven’t gone to production yet.<br />
<br />
There are more than a million apps available on Google Play and we continue to work on making it easy for people to discover the apps they’ll love. To that end, you’ll start seeing new <b>collections</b> on the store for tasks that might require a combination of apps. For example, when you're buying a house, you’ll see the best apps for finding real estate, keeping notes, getting a mortgage, and travelling in the area in one handy collection. Developers don’t need to take any action to take advantage of this benefit, apps will automatically be chosen. These contextual collections make it easier for users to discover complimentary apps as well as new types of apps.<br />
<table border="1" cellpadding="3" cellspacing="3" style="background-color: white; border-collapse: collapse; border: 1px solid rgb(255, 255, 255); color: black; width: 652px;"><tbody>
<tr><td><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-KdPmAqCzo5g/VzuqGOUpzMI/AAAAAAAAC_I/f0oJ4xbq9rcA0QPMhv3cZi3awXmIJ0d3ACKgB/s1600/beta_testing.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://2.bp.blogspot.com/-KdPmAqCzo5g/VzuqGOUpzMI/AAAAAAAAC_I/f0oJ4xbq9rcA0QPMhv3cZi3awXmIJ0d3ACKgB/s400/beta_testing.png" width="223" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 11px;"><i><span style="font-size: x-small;">Users can now opt-in to beta
tests from the Play Store</span></i></td></tr>
</tbody></table>
</td><td><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-GwOiWZzSAyM/VzurTx6w96I/AAAAAAAAC_Q/-A_-7vE29iYx2C2RDjLLZwYdwV3TBgAKQCKgB/s1600/collections.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://1.bp.blogspot.com/-GwOiWZzSAyM/VzurTx6w96I/AAAAAAAAC_Q/-A_-7vE29iYx2C2RDjLLZwYdwV3TBgAKQCKgB/s400/collections.png" width="232" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 11px;"><i><span style="font-size: x-small;">An example of a new collection
for apps relating to buying a house</span></i></td></tr>
</tbody></table>
</td></tr>
</tbody></table>
<b>Improve your app with the Play pre-launch report</b><br />
<br />
Your app business relies on having high quality apps. To achieve quality, your apps need to be tested on a range of real devices before you ship them to your users. Play’s new&nbsp;<b>pre-launch report</b>&nbsp;summarizes issues found when testing your app on Firebase Test Lab for Android on a wide range of devices.
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-BHWdMtnBbS0/Vzv2B17nKLI/AAAAAAAADB8/i08gAiY3cjsa-myJCoCy9vBeDa4P8VYmwCLcB/s1600/pre-launch-report%2B%25281%2529.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="640" src="https://1.bp.blogspot.com/-BHWdMtnBbS0/Vzv2B17nKLI/AAAAAAAADB8/i08gAiY3cjsa-myJCoCy9vBeDa4P8VYmwCLcB/s640/pre-launch-report%2B%25281%2529.png" width="625" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i><br /></i>
<i>
</i> <i>The pre-launch report in the Developer Console</i></td></tr>
</tbody></table>
</div>
Along with diagnostics to help you fix any crashes we detected in your app, your reports will also include screenshots from devices that use different Android versions, languages, and screen resolutions. These can help you find layout issues. We’ve also included early warnings of known security vulnerabilities that may have sneaked into your app -- even via third party libraries you rely on. You can <a href="https://play.google.com/apps/publish/?#PreLaunchReportPrefsPlace" >enable the pre-launch report</a> in the Developer Console.<br />
<b><br /></b>
<b>Gain deeper insights from user reviews at a glance and reply to user reviews more easily</b><br />
<br />
Your app reviews offer a wealth of information on what  your users like and dislike about your app. We’re expanding on the <a href="http://android-developers.blogspot.com/2016/02/new-tools-for-ratings-reviews-on-google.html?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >improvements we made to ratings and reviews</a> earlier this year, to offer you more ways to take advantage of reviews and better engage your audience.<br />
<br />
<b>Review benchmarks</b> let you see your app’s rating distribution compared to similar apps in your category for a list of common topics which are relevant for all apps – like design, stability, and speed. You are also able to see how each area impacts your app’s rating.&nbsp;<b>Review topics</b> will let you see your app’s rating distribution for a list of topics which are specific to your app. With this analysis functionality, you can more easily identify what users think of your app and where to focus your improvement efforts.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-NXvfQj7iuIQ/Vzu6JLYNyJI/AAAAAAAAC_s/o2phUqTRvhANCEO0SMSYoh3iKH8hHtHHgCLcB/s1600/review_benchmarks.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="387" src="https://1.bp.blogspot.com/-NXvfQj7iuIQ/Vzu6JLYNyJI/AAAAAAAAC_s/o2phUqTRvhANCEO0SMSYoh3iKH8hHtHHgCLcB/s640/review_benchmarks.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i><br /></i>
<i>
</i> <i>Review benchmarks in the Developer Console</i></td></tr>
</tbody></table>
Developers frequently tell us they find replying to reviews valuable as a channel to directly engage their audience and gather feedback. In fact, we have found that users who update their star rating after a developer has responded to their review increase it by an average of 0.7 stars. For developers who have their own customer support solutions, we’re making replying easier with a new <b>Reply to Reviews API</b>. In the last few months, we’ve tested the API with <a href="https://www.zendesk.com/apps/google-play-reviews" >Zendesk</a> and <a href="http://www.conversocial.com/" >Conversocial</a>, so you can now start replying to reviews directly from those popular platforms or build your own <a href="https://developers.google.com/android-publisher/reply-to-reviews?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >custom integration</a>.
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-N1bREcK3hmg/Vzu6fQzhtqI/AAAAAAAAC_4/asHSJuI-IQIEvsp06xDSBWrxAtbFG5BPwCLcB/s1600/zendesk_logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="74" src="https://3.bp.blogspot.com/-N1bREcK3hmg/Vzu6fQzhtqI/AAAAAAAAC_4/asHSJuI-IQIEvsp06xDSBWrxAtbFG5BPwCLcB/s320/zendesk_logo.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-9QB58LqH1I0/Vzu6fQ0dIUI/AAAAAAAAC_0/vxjoCH06H9oaFT-0ti0BzARtdeKkWdQiACLcB/s1600/conversocial_logo.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="42" src="https://1.bp.blogspot.com/-9QB58LqH1I0/Vzu6fQ0dIUI/AAAAAAAAC_0/vxjoCH06H9oaFT-0ti0BzARtdeKkWdQiACLcB/s320/conversocial_logo.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i><br /></i>
<i>
Developers can now reply to reviews on Google Play from platorms
such as Zendesk and Conversocial</i></td></tr>
</tbody></table>
<b>Understand more about user acquisition and conversion, and see how you’re doing compared to others</b><br />
<br />
The User Acquisition performance report in the Developer Console gives you a snapshot of how many users visit your store listing, how many install your app, and how many go on to make purchases. We’ve now added the ability to see <b>user acquisition data by country</b> and you’ll soon be able to see <b>user acquisition benchmarks</b> and compare your app’s conversion rates to similar apps on the Play store. With this data, you can find opportunities to focus your marketing efforts and increase your installs with tools like <a href="https://support.google.com/googleplay/android-developer/answer/6227309?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >Store Listing Experiments</a>.

<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-IOdrI5XXehs/VzvBfaGLr9I/AAAAAAAADAQ/itmUwXz9TNk3mbSimXGJjnYaukTBvaKHgCLcB/s1600/user_acquisition.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="275" src="https://1.bp.blogspot.com/-IOdrI5XXehs/VzvBfaGLr9I/AAAAAAAADAQ/itmUwXz9TNk3mbSimXGJjnYaukTBvaKHgCLcB/s400/user_acquisition.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i><br /></i>
<i>User acquisition country data in the Developer Console</i></td></tr>
</tbody></table>
<b><br /></b>
<b>Building apps and games for billions of users</b><br />
<br />
Hundreds of millions of users, many of them in emerging markets, are coming online and, for many of them, their first experience is on an Android device.<br />
&nbsp;

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


To help you get your app ready for this opportunity, we’ve created <a href="https://developer.android.com/distribute/essentials/quality/billions.html" ><b>Building for Billions guidelines</b></a> with a development checklist to help you optimize your app. You can also get more in-depth tips and best practices for expanding to new markets in the accompanying <a href="http://g.co/play/billionsplaybook" ><b>Building for Billions Playbook</b></a>.&nbsp;
<br />
<br />
To help you meet local expectations when you set your prices and make purchases more attractive to your users, the Developer Console will now <b>automatically round prices to local conventions</b> in each market. For example, for a US app priced at $1.99, a user in Japan would see ￥200 rather than a non-rounded price from a straight FX conversion. You can also set up pricing templates to change pricing for products in bulk. You can make this change in the Developer Console.<br />
<br />
While you're working on getting your app ready for billions of users, we've been enhancing the Google Play experience for them too. With improved compression, we've made app updates more data efficient, and we're focusing on making the Play Store itself faster than ever on all connection types.<br />
<br />
We’ve also revamped how we select visible apps in key markets like <b>India</b> and <b>Brazil</b> to better showcase apps that are more relevant locally and apps made by local developers. And we continue to add more payment methods in new countries, including carrier billing and gift cards in India and Indonesia.<br />
<br />
<b>Two new apps: Get your app data and important notifications on the go, and stay up to date with best practices</b><br />
<br />
To give you access to your data when you need it, and to keep you informed of crucial business updates with notifications, we’re launching the <a href="http://g.co/play/consoleapp" ><b>Play Console app</b></a>. You can access your app’s data including installs, uninstalls, crashes, ratings, and reviews. You can also receive push notifications for important news like when your app update is live on Google Play. And you can even reply to reviews directly in the app, making it easier and quicker to engage your audience when you want to. <a href="http://g.co/play/consoleapp" >Get the Play Console app on Google Play today</a>.<br />
<br />
Staying on top of all the features and best practices and strategies you should consider when growing your business can be a challenge. We’ve built another app, the&nbsp;<a href="http://g.co/play/playbookbeta" ><b>Playbook by Google Play</b></a>. The Playbook is a tailored list, based on your objectives, of the latest articles and videos from Google experts and across the web to help you grow a successful business on Google Play.&nbsp;<a href="http://g.co/play/playbookbeta" >Join the Playbook beta today</a>&nbsp;and let us know your feedback.<br />
<table border="1" cellpadding="3" cellspacing="3" style="background-color: white; border-collapse: collapse; border: 1px solid rgb(255, 255, 255); color: black; text-align: center; width: 100%;"> <tbody>
<tr>   <td><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-lypkiJv5lHQ/Vzv5ldTpmVI/AAAAAAAADCM/hr634I2mPGEcvGtBJyPOX9uzfGa8vsengCKgB/s1600/play_console_app.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://4.bp.blogspot.com/-lypkiJv5lHQ/Vzv5ldTpmVI/AAAAAAAADCM/hr634I2mPGEcvGtBJyPOX9uzfGa8vsengCKgB/s400/play_console_app.png" width="223" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i><b>The Play Console app</b></i></td></tr>
</tbody></table>
</td>   <td><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-Y18q0fq3F4s/Vzv6SOM7ZZI/AAAAAAAADCU/qDPys6GRMLI6Vmph7_nrL20RDFf7h9WbQCKgB/s1600/playbook_app.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://1.bp.blogspot.com/-Y18q0fq3F4s/Vzv6SOM7ZZI/AAAAAAAADCU/qDPys6GRMLI6Vmph7_nrL20RDFf7h9WbQCKgB/s400/playbook_app.png" width="223" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i><b>Playbook by Google Play</b></i></td></tr>
</tbody></table>
</td>  </tr>
<tr>   <td><div class="separator" style="clear: both; text-align: center;">
<a href="http://g.co/play/consoleapp" ><img border="0" height="69" src="https://2.bp.blogspot.com/-P2DsqPdlu58/Vzv8NOJtRkI/AAAAAAAADCc/lmQikHBPSaUDdH99D1RoCa1UD09Idxb_ACLcB/s200/get_it_on_play.png" width="180" /></a></div>
</td>   <td><div class="separator" style="clear: both; text-align: center;">
<a href="http://g.co/play/playbookbeta" style="margin-left: 1em; margin-right: 1em;" ><img border="0" height="69" src="https://2.bp.blogspot.com/-P2DsqPdlu58/Vzv8NOJtRkI/AAAAAAAADCc/lmQikHBPSaUDdH99D1RoCa1UD09Idxb_ACLcB/s200/get_it_on_play.png" width="180" /></a></div>
</td></tr>
</tbody></table>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<br />
Finally, we will be soon making some updates to the Developer Distribution Agreement (DDA), which includes the ability for family members to share purchased apps on Google Play. Here you can see the <a href="https://play.google.com/about/developer-distribution-agreement/upcoming.html" >updated DDA</a>.<br />
<br /></div>
<hr color="#000000" size="1" style="text-align: left;" width="100%" />
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<br />
To learn more about all of these features, tune-in live to ‘<a href="https://events.google.com/io2016/schedule?filters=Play-230b-e611-a517-00155d5066d7#day2/fc003c22-230b-e611-a517-00155d5066d7" >What’s new in Google Play for developers</a>’ at 11am PDT / 2pm EDT / 7:00pm GMT+1 on May 19 on the <a href="https://www.youtube.com/user/GoogleDevelopers" >Google Developers YouTube channel</a>.<br />
<br /></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
If you’re attending I/O, come and visit the Google Play sandbox to get your app reviewed by experts.</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<br />
Whether you’re attending I/O in person, at one of the many I/O Extended events around the world, or just watching from home, you can find <a href="https://events.google.com/io2016/schedule?filters=Play" >more Google Play sessions in the I/O 2016 schedule</a>.</div>
<div style="text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-6kQTDq40iPs/VzvENRRLjFI/AAAAAAAADAo/fFqq9s0-DUIBcacDsgvUkvKEZJEmglcBwCLcB/s1600/google_play_logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/-6kQTDq40iPs/VzvENRRLjFI/AAAAAAAADAo/fFqq9s0-DUIBcacDsgvUkvKEZJEmglcBwCLcB/s320/google_play_logo.png" width="305" /></a></div>
<div style="text-align: center;">
</div>
</div>

<img src="https://i.ytimg.com/vi/AxZRn8n5iH0/maxresdefault.jpg" style="display:none" itemprop="image">]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/whats-new-in-google-play-at-io-2016-better-betas-the-pre-launch-report-benchmarks-a-new-play-console-app-and-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>What’s new in Android: the N-Release, Virtual Reality, Android Studio 2.2 and more</title>
		<link>https://googledata.org/google-android/whats-new-in-android-the-n-release-virtual-reality-android-studio-2-2-and-more/</link>
		<comments>https://googledata.org/google-android/whats-new-in-android-the-n-release-virtual-reality-android-studio-2-2-and-more/#comments</comments>
		<pubDate>Wed, 18 May 2016 19:16:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=ec5d083190ffc2a319573e93eedce2c9</guid>
		<description><![CDATA[<div dir="ltr">
<i>Posted by Dave Burke, VP of Engineering</i><br /><br />
In the past year, Android users around the globe have installed apps&#8211;built by developers like you&#8211;over 65 billion times on Google Play. To help developers continue to build amazing experiences on top of Android, today at <a href="https://events.google.com/io2016/" target="_blank">Google I/O</a>, we announced a number of new things we&#8217;re doing with the platform, including the next Developer Preview of Android N, an extension of Android into virtual reality, an update to Android Studio, and much more!<br /><br /><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://3.bp.blogspot.com/-7aUQt2W9K6s/VzwBclQxDzI/AAAAAAAADC4/TmYm_i1KUe0GYjvmGqENICoDPGxZ5n5wwCLcB/s1600/NEXUS-iO-GROUP1_v2b-no-N%2B%25281%2529.jpg"><img border="0" height="347" src="https://3.bp.blogspot.com/-7aUQt2W9K6s/VzwBclQxDzI/AAAAAAAADC4/TmYm_i1KUe0GYjvmGqENICoDPGxZ5n5wwCLcB/s640/NEXUS-iO-GROUP1_v2b-no-N%2B%25281%2529.jpg" width="640"></a></td></tr><tr><td><i>Android N Developer Preview is available to try on a range of devices</i></td></tr></tbody></table><b>Android N: Performance, Productivity and Security</b><br />
With Android N, we want to achieve a new level of product excellence for Android, so we&#8217;ve carried out some pretty deep surgery to the platform, rewriting and redesigning some fundamental aspects of how the system works. For Android N, we are focused on three key themes: performance, productivity and security. The <a href="http://android-developers.blogspot.com/2016/03/first-preview-of-android-n-developer.html?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">first Developer Preview</a> introduced a brand new <a href="https://developer.android.com/preview/api-overview.html#jit_aot?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank"><b>JIT compiler</b></a> to improve software performance, make app installs faster, and take up less storage. The second N Developer Preview included <a href="https://developer.android.com/ndk/guides/graphics/index.html?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank"><b>Vulkan</b></a>, a new 3D rendering API to help game developers deliver high performance graphics on mobile devices. Both previews also brought useful productivity improvements to Android, including <a href="http://developer.android.com/preview/features/multi-window.html?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">Multi-Window support</a> and <a href="http://developer.android.com/preview/features/notification-updates.html#direct?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">Direct Reply</a>.<br /><br /><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://2.bp.blogspot.com/-LoHVFr55etE/VuBFOxthQYI/AAAAAAAACps/I2DHHYXAKGsMB4i-RmTuJdJwvXRjdFAbQCKgB/s1600/image01.jpg"><img border="0" height="329" src="https://2.bp.blogspot.com/-LoHVFr55etE/VuBFOxthQYI/AAAAAAAACps/I2DHHYXAKGsMB4i-RmTuJdJwvXRjdFAbQCKgB/s640/image01.jpg" width="640"></a></td></tr><tr><td><i>Multi-Window mode on Android N</i></td></tr></tbody></table>
Android N also adds some important new features to help keep users safer and more secure. Inspired by how Chromebooks apply updates, we&#8217;re introducing <b>seamless updates</b>, so that new Android devices built on N can install system updates in the background. This means that the next time a user powers up their device, new devices can automatically and seamlessly switch into the new updated system image.<br /><br />
Today&#8217;s release of Android N Developer Preview 3 is our first beta-quality candidate, available to test on your primary phone or tablet. You can opt in to the Android Beta Program at <a href="http://android.com/beta" target="_blank">android.com/beta</a> and run Android N on your Nexus 6, 9, 5X, 6P, Nexus Player, Pixel C, and Android One (General Mobile 4G). By inviting more people to try this beta release, developers can expect to see an uptick in usage of your apps on N; if you&#8217;ve got an Android app, you should be testing how it works on N, and be watching for feedback from users. <br /><br /><b>VR Mode in Android &#160;</b><br />
Android was built for today&#8217;s multi-screen world; in fact, Android powers your phone, your tablet, the watch on your wrist, it even works in your car and in your living room, all the while helping you move seamlessly between each device. As we look to what&#8217;s next, we believe your phone can be a really powerful new way to see the world and experience new content virtually, in a more immersive way; but, until this point, high quality mobile VR wasn&#8217;t possible across the Android ecosystem. That&#8217;s why we&#8217;ve worked at all levels of the Android stack in N&#8211;from how the operating system reads sensor data to how it sends pixels to the display&#8211;to make it especially built to provide high quality mobile VR experiences, with VR Mode in Android. There are a number of performance enhancements designed for developers, including single buffer rendering and access to an exclusive CPU core for VR apps. Within your apps, you can take advantage of smooth head-tracking and stereo notifications that work for VR. Most importantly, Android N provides for very low latency graphics; in fact, motion-to-photon latency on Nexus 6P running Developer Preview 3 is &#60;20 ms, the speed necessary to establish immersion for the user to feel like they are actually in another place. We&#8217;ll be covering all of the new VR updates tomorrow at 9AM PT in the <a href="https://events.google.com/io2016/schedule?sid=46d50c09-0cef-e511-a517-00155d5066d7#day2/46d50c09-0cef-e511-a517-00155d5066d7" target="_blank">VR at Google</a> session, livestreamed from Google I/O.<br /><br /><b>Android Instant Apps: real apps, without the installation&#160;</b><br />
We want to make it easier for users to discover and use your apps. So what if your app was just a tap away? What if users didn't have to install it at all? Today, we're introducing <b><a href="https://developer.android.com/topic/instant-apps/index.html?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">Android Instant Apps</a></b> as part of our effort to evolve the way we think about apps. Whether someone discovers your app from search, social media, messaging or other deep links, they&#8217;ll be able to experience a fast and powerful native Android app without needing to stop and install your app first or reauthenticate. Best of all, Android Instant Apps is compatible with all Android devices running Jellybean or higher (4.1+) with Google Play services. Android Instant Apps functionality is an upgrade to your existing Android app, not a new, separate app; you can <a href="https://developer.android.com/topic/instant-apps/index.html?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">sign-up to request early access</a> to the documentation.<br /><br /><b>Android Wear 2.0: UI changes and standalone apps &#160;</b><br />
This morning at Google I/O, we also announced the most significant Android Wear update since its launch two years ago: Android Wear 2.0. Based on what we&#8217;ve learned from users and developers, we're evolving the platform to improve key watch experiences: watch faces, messaging, and fitness. We&#8217;re also making a number of UI changes and updating our design guidelines to make your apps more consistent, intuitive, and beautiful. &#160;With Android Wear 2.0, apps can be standalone and have direct network access to the cloud via a Bluetooth, Wi-Fi, or cellular connection. &#160;Since your app won&#8217;t have to rely on the <a href="http://developer.android.com/training/wearables/data-layer/index.html?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">Data Layer APIs</a>, it can continue to offer full functionality even if the paired phone is far away or turned off. You can read about all of the new features available in today&#8217;s preview <a href="http://android-developers.blogspot.com/2016/05/android-wear-20-developer-preview.html">here</a>. <br /><br /><div>
<a href="https://4.bp.blogspot.com/-Bbxk6jTyJVk/VzwEnJ_WPGI/AAAAAAAADDE/-04fQdNuUC06NcgBEsqQnSxRbrIHTxxbQCLcB/s1600/AndroidWear20Watches.png"><img border="0" height="320" src="https://4.bp.blogspot.com/-Bbxk6jTyJVk/VzwEnJ_WPGI/AAAAAAAADDE/-04fQdNuUC06NcgBEsqQnSxRbrIHTxxbQCLcB/s640/AndroidWear20Watches.png" width="640"></a></div>
<br /><b>Android Studio 2.2 Preview: a new layout designer, constraint layout, and much more</b><br /><a href="http://developer.android.com/sdk/index.html?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">Android Studio</a> is the quickest way to get up and running with Android N and all our new platform features. Today at Google I/O, we previewed Android Studio 2.2 - another big update to the IDE designed to help you code faster with smart new tooling features built in. One of the headline features is our rewritten layout designer with the new constraint layout. In addition to helping you get out of XML to do your layouts visually, the new tools help you easily design for Android&#8217;s many great devices. Once you&#8217;re happy with a layout, we do all the hard work to automatically calculate constraints for you, so your UIs will resize automatically on different screen sizes . Here&#8217;s an overview of more of what&#8217;s new in 2.2 Preview (we&#8217;ll be diving into more detail this update at 10AM PT tomorrow in <a href="https://events.google.com/io2016/schedule?sid=912d2aeb-0bef-e511-a517-00155d5066d7#day2/912d2aeb-0bef-e511-a517-00155d5066d7" target="_blank">&#8220;What&#8217;s new in Android Development Tools&#8221;</a>, livestreamed from Google I/O):<br /><br /><ul><li><b>Speed: </b>New layout designer and constraint layout, Espresso test recording and even faster builds</li>
<li><b>Smarts:</b> APK analyzer, Layout inspector, expanded Android code analysis and IntelliJ 2016.1</li>
<li><b>Platform Support:</b> Enhanced Jack compiler / Java 8 support, Expanded C++ support with CMake and NDK-Build, Firebase support and enhanced accessibility</li>
</ul><br /><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-_kUnmi7AQ6Q/VzwFEP_4LWI/AAAAAAAADDI/ks69ZKWzu_Q1gIBWer6NDb0c-GrqHBY1QCLcB/s1600/studio_22_hero_image%2B%25281%2529.png"><img border="0" height="438" src="https://1.bp.blogspot.com/-_kUnmi7AQ6Q/VzwFEP_4LWI/AAAAAAAADDI/ks69ZKWzu_Q1gIBWer6NDb0c-GrqHBY1QCLcB/s640/studio_22_hero_image%2B%25281%2529.png" width="640"></a></td></tr><tr><td><i>New Layout Editor and Constraint Layout in Android Studio 2.2 Preview</i></td></tr></tbody></table><br />
This is just a small taste of some of the new updates for Android, announced today at Google I/O. There are more than <a href="https://events.google.com/io2016/schedule?filters=Android" target="_blank">50 Android-related sessions</a> over the next three days; if you&#8217;re not able to join us in person, many of them will be livestreamed, and all of them will be posted to YouTube after we&#8217;re done. We can&#8217;t wait to see what you build!</div>]]></description>
				<content:encoded><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">
<i>Posted by Dave Burke, VP of Engineering</i><br />
<br />
In the past year, Android users around the globe have installed apps–built by developers like you–over 65 billion times on Google Play. To help developers continue to build amazing experiences on top of Android, today at <a href="https://events.google.com/io2016/" >Google I/O</a>, we announced a number of new things we’re doing with the platform, including the next Developer Preview of Android N, an extension of Android into virtual reality, an update to Android Studio, and much more!<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-7aUQt2W9K6s/VzwBclQxDzI/AAAAAAAADC4/TmYm_i1KUe0GYjvmGqENICoDPGxZ5n5wwCLcB/s1600/NEXUS-iO-GROUP1_v2b-no-N%2B%25281%2529.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="347" src="https://3.bp.blogspot.com/-7aUQt2W9K6s/VzwBclQxDzI/AAAAAAAADC4/TmYm_i1KUe0GYjvmGqENICoDPGxZ5n5wwCLcB/s640/NEXUS-iO-GROUP1_v2b-no-N%2B%25281%2529.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Android N Developer Preview is available to try on a range of devices</i></td></tr>
</tbody></table>
<b>Android N: Performance, Productivity and Security</b><br />
With Android N, we want to achieve a new level of product excellence for Android, so we’ve carried out some pretty deep surgery to the platform, rewriting and redesigning some fundamental aspects of how the system works. For Android N, we are focused on three key themes: performance, productivity and security. The <a href="http://android-developers.blogspot.com/2016/03/first-preview-of-android-n-developer.html?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >first Developer Preview</a> introduced a brand new <a href="https://developer.android.com/preview/api-overview.html#jit_aot?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" ><b>JIT compiler</b></a> to improve software performance, make app installs faster, and take up less storage. The second N Developer Preview included <a href="https://developer.android.com/ndk/guides/graphics/index.html?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" ><b>Vulkan</b></a>, a new 3D rendering API to help game developers deliver high performance graphics on mobile devices. Both previews also brought useful productivity improvements to Android, including <a href="http://developer.android.com/preview/features/multi-window.html?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >Multi-Window support</a> and <a href="http://developer.android.com/preview/features/notification-updates.html#direct?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >Direct Reply</a>.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-LoHVFr55etE/VuBFOxthQYI/AAAAAAAACps/I2DHHYXAKGsMB4i-RmTuJdJwvXRjdFAbQCKgB/s1600/image01.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="329" src="https://2.bp.blogspot.com/-LoHVFr55etE/VuBFOxthQYI/AAAAAAAACps/I2DHHYXAKGsMB4i-RmTuJdJwvXRjdFAbQCKgB/s640/image01.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Multi-Window mode on Android N</i></td></tr>
</tbody></table>
Android N also adds some important new features to help keep users safer and more secure. Inspired by how Chromebooks apply updates, we’re introducing <b>seamless updates</b>, so that new Android devices built on N can install system updates in the background. This means that the next time a user powers up their device, new devices can automatically and seamlessly switch into the new updated system image.<br />
<br />
Today’s release of Android N Developer Preview 3 is our first beta-quality candidate, available to test on your primary phone or tablet. You can opt in to the Android Beta Program at <a href="http://android.com/beta" >android.com/beta</a> and run Android N on your Nexus 6, 9, 5X, 6P, Nexus Player, Pixel C, and Android One (General Mobile 4G). By inviting more people to try this beta release, developers can expect to see an uptick in usage of your apps on N; if you’ve got an Android app, you should be testing how it works on N, and be watching for feedback from users. <br />
<br />
<b>VR Mode in Android &nbsp;</b><br />
Android was built for today’s multi-screen world; in fact, Android powers your phone, your tablet, the watch on your wrist, it even works in your car and in your living room, all the while helping you move seamlessly between each device. As we look to what’s next, we believe your phone can be a really powerful new way to see the world and experience new content virtually, in a more immersive way; but, until this point, high quality mobile VR wasn’t possible across the Android ecosystem. That’s why we’ve worked at all levels of the Android stack in N–from how the operating system reads sensor data to how it sends pixels to the display–to make it especially built to provide high quality mobile VR experiences, with VR Mode in Android. There are a number of performance enhancements designed for developers, including single buffer rendering and access to an exclusive CPU core for VR apps. Within your apps, you can take advantage of smooth head-tracking and stereo notifications that work for VR. Most importantly, Android N provides for very low latency graphics; in fact, motion-to-photon latency on Nexus 6P running Developer Preview 3 is &lt;20 ms, the speed necessary to establish immersion for the user to feel like they are actually in another place. We’ll be covering all of the new VR updates tomorrow at 9AM PT in the <a href="https://events.google.com/io2016/schedule?sid=46d50c09-0cef-e511-a517-00155d5066d7#day2/46d50c09-0cef-e511-a517-00155d5066d7" >VR at Google</a> session, livestreamed from Google I/O.<br />
<br />
<b>Android Instant Apps: real apps, without the installation&nbsp;</b><br />
We want to make it easier for users to discover and use your apps. So what if your app was just a tap away? What if users didn't have to install it at all? Today, we're introducing <b><a href="https://developer.android.com/topic/instant-apps/index.html?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >Android Instant Apps</a></b> as part of our effort to evolve the way we think about apps. Whether someone discovers your app from search, social media, messaging or other deep links, they’ll be able to experience a fast and powerful native Android app without needing to stop and install your app first or reauthenticate. Best of all, Android Instant Apps is compatible with all Android devices running Jellybean or higher (4.1+) with Google Play services. Android Instant Apps functionality is an upgrade to your existing Android app, not a new, separate app; you can <a href="https://developer.android.com/topic/instant-apps/index.html?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >sign-up to request early access</a> to the documentation.<br />
<br />
<b>Android Wear 2.0: UI changes and standalone apps &nbsp;</b><br />
This morning at Google I/O, we also announced the most significant Android Wear update since its launch two years ago: Android Wear 2.0. Based on what we’ve learned from users and developers, we're evolving the platform to improve key watch experiences: watch faces, messaging, and fitness. We’re also making a number of UI changes and updating our design guidelines to make your apps more consistent, intuitive, and beautiful. &nbsp;With Android Wear 2.0, apps can be standalone and have direct network access to the cloud via a Bluetooth, Wi-Fi, or cellular connection. &nbsp;Since your app won’t have to rely on the <a href="http://developer.android.com/training/wearables/data-layer/index.html?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >Data Layer APIs</a>, it can continue to offer full functionality even if the paired phone is far away or turned off. You can read about all of the new features available in today’s preview <a href="http://android-developers.blogspot.com/2016/05/android-wear-20-developer-preview.html">here</a>. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-Bbxk6jTyJVk/VzwEnJ_WPGI/AAAAAAAADDE/-04fQdNuUC06NcgBEsqQnSxRbrIHTxxbQCLcB/s1600/AndroidWear20Watches.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://4.bp.blogspot.com/-Bbxk6jTyJVk/VzwEnJ_WPGI/AAAAAAAADDE/-04fQdNuUC06NcgBEsqQnSxRbrIHTxxbQCLcB/s640/AndroidWear20Watches.png" width="640" /></a></div>
<br />
<b>Android Studio 2.2 Preview: a new layout designer, constraint layout, and much more</b><br />
<a href="http://developer.android.com/sdk/index.html?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >Android Studio</a> is the quickest way to get up and running with Android N and all our new platform features. Today at Google I/O, we previewed Android Studio 2.2 - another big update to the IDE designed to help you code faster with smart new tooling features built in. One of the headline features is our rewritten layout designer with the new constraint layout. In addition to helping you get out of XML to do your layouts visually, the new tools help you easily design for Android’s many great devices. Once you’re happy with a layout, we do all the hard work to automatically calculate constraints for you, so your UIs will resize automatically on different screen sizes . Here’s an overview of more of what’s new in 2.2 Preview (we’ll be diving into more detail this update at 10AM PT tomorrow in <a href="https://events.google.com/io2016/schedule?sid=912d2aeb-0bef-e511-a517-00155d5066d7#day2/912d2aeb-0bef-e511-a517-00155d5066d7" >“What’s new in Android Development Tools”</a>, livestreamed from Google I/O):<br />
<br />
<ul style="text-align: left;">
<li><b>Speed: </b>New layout designer and constraint layout, Espresso test recording and even faster builds</li>
<li><b>Smarts:</b> APK analyzer, Layout inspector, expanded Android code analysis and IntelliJ 2016.1</li>
<li><b>Platform Support:</b> Enhanced Jack compiler / Java 8 support, Expanded C++ support with CMake and NDK-Build, Firebase support and enhanced accessibility</li>
</ul>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-_kUnmi7AQ6Q/VzwFEP_4LWI/AAAAAAAADDI/ks69ZKWzu_Q1gIBWer6NDb0c-GrqHBY1QCLcB/s1600/studio_22_hero_image%2B%25281%2529.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="438" src="https://1.bp.blogspot.com/-_kUnmi7AQ6Q/VzwFEP_4LWI/AAAAAAAADDI/ks69ZKWzu_Q1gIBWer6NDb0c-GrqHBY1QCLcB/s640/studio_22_hero_image%2B%25281%2529.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>New Layout Editor and Constraint Layout in Android Studio 2.2 Preview</i></td></tr>
</tbody></table>
<br />
This is just a small taste of some of the new updates for Android, announced today at Google I/O. There are more than <a href="https://events.google.com/io2016/schedule?filters=Android" >50 Android-related sessions</a> over the next three days; if you’re not able to join us in person, many of them will be livestreamed, and all of them will be posted to YouTube after we’re done. We can’t wait to see what you build!</div>
]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/whats-new-in-android-the-n-release-virtual-reality-android-studio-2-2-and-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Google I/O 2016: Develop, Grow &amp; Earn</title>
		<link>https://googledata.org/google-android/google-io-2016-develop-grow-earn/</link>
		<comments>https://googledata.org/google-android/google-io-2016-develop-grow-earn/#comments</comments>
		<pubDate>Wed, 18 May 2016 19:08:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=aad080e672beda38e599189203ad2458</guid>
		<description><![CDATA[<div dir="ltr"><i>By Jason Titus, Vice President, Developer Product Group</i><br /><br />
Earlier today, we kicked off our 10-year celebration of hosting developer events with Google I/O in front of over 7,000 developers at Shoreline Amphitheatre, and with millions of other viewers on the <a href="https://events.google.com/io2016">I/O live stream</a> around the world. During the keynote, we had a number of announcements that featured tools for Android, iOS, and mobile Web developers, showcased the power of machine learning for delivering better user experiences, and introduced a previewed platform for high quality, mobile virtual reality.<br /><br />
And over the next three days at the festival, we&#8217;ll continue to focus on things that matter to you: <i>Develop</i>, to build high quality apps; <i>Grow &#38; Earn</i>, to find high quality users, increase user engagement and create successful businesses; and <i>What&#8217;s Next</i>, a look at new platforms for future growth.<br /><br /><h3>Develop, Grow &#38; Earn with Firebase</h3>Those core themes are best represented in our <a href="http://firebase.googleblog.com/2016/05/firebase-expands-to-become-unified-app-platform.html">launch of Firebase</a>. As shared during the keynote, we&#8217;ve significantly expanded Firebase beyond a mobile backend to include brand new features, like mobile analytics, growth tools, and crash reporting. Firebase is now a suite of 15 features and integrations designed to help you develop your app, grow a user base and earn money. At the heart of the suite is a new mobile analytics tool we built from the ground up called Firebase Analytics. Available for free and unlimited usage, <a href="http://firebase.google.com/?utm_campaign=io_launch_io16_051816&#38;utm_source=anddev&#38;utm_medium=blog">Firebase Analytics</a> is inspired by our decade-long experience running Google Analytics, but designed specifically for the unique needs of apps.<br /><br /><b>Let's also take a closer look at the other major developer news at I/O:</b><br /><br /><h3>Develop</h3><ul><li><a href="http://android-developers.blogspot.com/2016/05/whats-new-in-android-n-release-virtual-reality-android-studio.html">Android N Developer Preview 3</a> &#8212; Get a look at the next release of Android N focused on performance, productivity and security. Even better, Android N is now ready to test on primary phones or tablets.</li>
<li><a href="http://android-developers.blogspot.com/2016/05/whats-new-in-android-n-release-virtual-reality-android-studio.html">Android VR</a> &#8212; A rework of the entire Android stack in N to tailor it to provide high quality mobile VR experiences.</li>
<li><a href="http://android-developers.blogspot.com/2016/05/whats-new-in-android-n-release-virtual-reality-android-studio.html">Android Studio 2.2 Preview</a> &#8212;  Our new preview focuses on speed, smarts, and Android platform support. This major update includes a completely rewritten, feature-rich Layout Designer.</li>
<li><a href="http://android-developers.blogspot.com/2016/05/whats-new-in-android-n-release-virtual-reality-android-studio.html">Android Wear 2.0</a>: A developer preview of the biggest platform update since we launched Android Wear two years ago. It includes updated design guidelines and APIs that make the watch even more useful for watch faces, messaging, and fitness. Apps on the watch can now be standalone, with direct network access to the cloud.</li>
<li><b>Recording APIs</b>: enables Android TV app developers and content providers to bring recording functionality to live channels.</li>
<li>Google Play services 9.0 &#8212; In addition to Firebase, the next release includes new API updates for Ads, Nearby and Play Games services.</li>
<li><a href="https://events.google.com/io2016/schedule?sid=a02d2aeb-0bef-e511-a517-00155d5066d7#day1/a02d2aeb-0bef-e511-a517-00155d5066d7">Android Pay APIs</a> &#8212; A new set of tools that includes support for mobile web, Instant Apps, Save to Android Pay and an API for issuers. We&#8217;ll have more to share during the session &#8220;Android Pay everywhere: New developments&#8221; later today at 2:00 PM PT Stage 1 Hercules.</li>
<li><a href="https://events.google.com/io2016/schedule?sid=e8621cfd-0bef-e511-a517-00155d5066d7#day2/e8621cfd-0bef-e511-a517-00155d5066d7">Progressive Web Apps</a> &#8212; A new set of capabilities to build app-like mobile websites that work reliably on the worst network connections and can send notifications to re-engage users.</li>
<li><b>Credentials API</b> &#8212; The latest version of Chrome now supports the Credential Management API, allowing sites to interact with the browser&#8217;s credential manager to improve the sign in experience for users. The API enables users to sign in with one tap and lets them automatically sign back in when returning to the site.</li>
<li><a href="https://www.ampproject.org/">Accelerated Mobile Pages</a> &#8212; Check out the AMP project, an open source initiative that is helping publishers create mobile-optimized content once and have it load instantly everywhere.</li>
</ul><h3>Grow &#38; Earn</h3><ul><li><a href="http://android-developers.blogspot.com/2016/05/whats-new-in-google-play-at-io-2016.html">Reach a global audience on Google Play</a> &#8212; New and powerful tools to help you grow your business: discover and join beta tests from the Play Store (including a new Early Access section), discover collections of complementary apps to help users solve complex tasks, see how your app runs on real devices with a new pre-launch report, get insights and benchmarks for reviews and user acquisition, monitor your app stats and get notifications when your updates are live with the new Play Console app, and more.</li>
<li><a href="http://android-developers.blogspot.com/2016/05/android-instant-apps-evolving-apps.html">Android Instant Apps</a> &#8212; With Android Instant Apps, users can open your app simply by tapping on a link, even if they don&#8217;t have the app installed. Instant Apps is compatible with Android Jelly Bean and later, reaching over a billion users. We&#8217;re working with a small set of developers now, and we&#8217;ll be gradually expanding access.</li>
<li><a href="https://developer.android.com/distribute/essentials/quality/billions.html" target="_blank">Building for billions</a> &#8212; New resources to help you optimize your app and get your business ready to serve over a billion Android users around the world.</li>
<li><a href="http://adwords.blogspot.com/2016/05/Google-IO-new-features-to-find-the-right-users-for-your-app.html">Universal App Campaigns</a> &#8212; Last year, we introduced Universal App Campaigns as a simple and powerful way to surface apps to the billions of users across Google Play, Search, YouTube, and the Google Display Network. We&#8217;re building on this success by expanding onto iOS and by helping developers use insights to optimize for lifetime value. See our new apps <a href="https://support.google.com/adwords/answer/6154846#mobileapps">best practices</a>.</li>
</ul><h3>What&#8217;s Next</h3><ul><li><a href="http://developers.google.com/awareness">Awareness API</a>: We'll be previewing a new, unified sensing platform that enables apps to be aware of all aspects of a user's context, while managing system health for you. Learn more at the  "Introducing Awareness API: an easy way to make your apps context aware" session later today at 3:00 PM PT in Stage 5 Libra.</li>
<li>Daydream &#8212; We&#8217;ll have more to share on how developers can start building Daydream apps during the &#8220;VR at Google&#8221; session tomorrow (May 19) at 9:00 AM PT in the Amphitheatre and <a href="https://events.google.com/io2016/schedule?filters=Live%20streamed&#38;sid=46d50c09-0cef-e511-a517-00155d5066d7#day2/46d50c09-0cef-e511-a517-00155d5066d7">livestreamed</a>.</li>
<li>Chromebooks &#8212; Hear from the team firsthand what&#8217;s new with Chromebooks tomorrow (May 19) at 11:00 AM PT in Stage 8 Crater.</li>
<li><a href="https://events.google.com/io2016/schedule?sid=947f7532-77f8-e511-a517-00155d5066d7#day2/947f7532-77f8-e511-a517-00155d5066d7">The Mobile Web</a> &#8212; We&#8217;ll share what we&#8217;re doing to improve the mobile web experience for developers and users tomorrow (May 19) at 2:00 PM PT in the Amphitheatre.</li>
</ul></div>]]></description>
				<content:encoded><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on"><i>By Jason Titus, Vice President, Developer Product Group</i><br /><br />
Earlier today, we kicked off our 10-year celebration of hosting developer events with Google I/O in front of over 7,000 developers at Shoreline Amphitheatre, and with millions of other viewers on the <a href="https://events.google.com/io2016">I/O live stream</a> around the world. During the keynote, we had a number of announcements that featured tools for Android, iOS, and mobile Web developers, showcased the power of machine learning for delivering better user experiences, and introduced a previewed platform for high quality, mobile virtual reality.<br /><br />
And over the next three days at the festival, we’ll continue to focus on things that matter to you: <i>Develop</i>, to build high quality apps; <i>Grow &amp; Earn</i>, to find high quality users, increase user engagement and create successful businesses; and <i>What’s Next</i>, a look at new platforms for future growth.<br /><br />
<h3>Develop, Grow &amp; Earn with Firebase</h3>Those core themes are best represented in our <a href="http://firebase.googleblog.com/2016/05/firebase-expands-to-become-unified-app-platform.html">launch of Firebase</a>. As shared during the keynote, we’ve significantly expanded Firebase beyond a mobile backend to include brand new features, like mobile analytics, growth tools, and crash reporting. Firebase is now a suite of 15 features and integrations designed to help you develop your app, grow a user base and earn money. At the heart of the suite is a new mobile analytics tool we built from the ground up called Firebase Analytics. Available for free and unlimited usage, <a href="http://firebase.google.com/?utm_campaign=io_launch_io16_051816&amp;utm_source=anddev&amp;utm_medium=blog">Firebase Analytics</a> is inspired by our decade-long experience running Google Analytics, but designed specifically for the unique needs of apps.<br /><br />
<b>Let's also take a closer look at the other major developer news at I/O:</b><br /><br />
<h3>Develop</h3><ul><li><a href="http://android-developers.blogspot.com/2016/05/whats-new-in-android-n-release-virtual-reality-android-studio.html">Android N Developer Preview 3</a> — Get a look at the next release of Android N focused on performance, productivity and security. Even better, Android N is now ready to test on primary phones or tablets.</li>
<li><a href="http://android-developers.blogspot.com/2016/05/whats-new-in-android-n-release-virtual-reality-android-studio.html">Android VR</a> — A rework of the entire Android stack in N to tailor it to provide high quality mobile VR experiences.</li>
<li><a href="http://android-developers.blogspot.com/2016/05/whats-new-in-android-n-release-virtual-reality-android-studio.html">Android Studio 2.2 Preview</a> —  Our new preview focuses on speed, smarts, and Android platform support. This major update includes a completely rewritten, feature-rich Layout Designer.</li>
<li><a href="http://android-developers.blogspot.com/2016/05/whats-new-in-android-n-release-virtual-reality-android-studio.html">Android Wear 2.0</a>: A developer preview of the biggest platform update since we launched Android Wear two years ago. It includes updated design guidelines and APIs that make the watch even more useful for watch faces, messaging, and fitness. Apps on the watch can now be standalone, with direct network access to the cloud.</li>
<li><b>Recording APIs</b>: enables Android TV app developers and content providers to bring recording functionality to live channels.</li>
<li>Google Play services 9.0 — In addition to Firebase, the next release includes new API updates for Ads, Nearby and Play Games services.</li>
<li><a href="https://events.google.com/io2016/schedule?sid=a02d2aeb-0bef-e511-a517-00155d5066d7#day1/a02d2aeb-0bef-e511-a517-00155d5066d7">Android Pay APIs</a> — A new set of tools that includes support for mobile web, Instant Apps, Save to Android Pay and an API for issuers. We’ll have more to share during the session “Android Pay everywhere: New developments” later today at 2:00 PM PT Stage 1 Hercules.</li>
<li><a href="https://events.google.com/io2016/schedule?sid=e8621cfd-0bef-e511-a517-00155d5066d7#day2/e8621cfd-0bef-e511-a517-00155d5066d7">Progressive Web Apps</a> — A new set of capabilities to build app-like mobile websites that work reliably on the worst network connections and can send notifications to re-engage users.</li>
<li><b>Credentials API</b> — The latest version of Chrome now supports the Credential Management API, allowing sites to interact with the browser’s credential manager to improve the sign in experience for users. The API enables users to sign in with one tap and lets them automatically sign back in when returning to the site.</li>
<li><a href="https://www.ampproject.org/">Accelerated Mobile Pages</a> — Check out the AMP project, an open source initiative that is helping publishers create mobile-optimized content once and have it load instantly everywhere.</li>
</ul><h3>Grow &amp; Earn</h3><ul><li><a href="http://android-developers.blogspot.com/2016/05/whats-new-in-google-play-at-io-2016.html">Reach a global audience on Google Play</a> — New and powerful tools to help you grow your business: discover and join beta tests from the Play Store (including a new Early Access section), discover collections of complementary apps to help users solve complex tasks, see how your app runs on real devices with a new pre-launch report, get insights and benchmarks for reviews and user acquisition, monitor your app stats and get notifications when your updates are live with the new Play Console app, and more.</li>
<li><a href="http://android-developers.blogspot.com/2016/05/android-instant-apps-evolving-apps.html">Android Instant Apps</a> — With Android Instant Apps, users can open your app simply by tapping on a link, even if they don’t have the app installed. Instant Apps is compatible with Android Jelly Bean and later, reaching over a billion users. We’re working with a small set of developers now, and we’ll be gradually expanding access.</li>
<li><a href="https://developer.android.com/distribute/essentials/quality/billions.html" >Building for billions</a> — New resources to help you optimize your app and get your business ready to serve over a billion Android users around the world.</li>
<li><a href="http://adwords.blogspot.com/2016/05/Google-IO-new-features-to-find-the-right-users-for-your-app.html">Universal App Campaigns</a> — Last year, we introduced Universal App Campaigns as a simple and powerful way to surface apps to the billions of users across Google Play, Search, YouTube, and the Google Display Network. We’re building on this success by expanding onto iOS and by helping developers use insights to optimize for lifetime value. See our new apps <a href="https://support.google.com/adwords/answer/6154846#mobileapps">best practices</a>.</li>
</ul><h3>What’s Next</h3><ul><li><a href="http://developers.google.com/awareness">Awareness API</a>: We'll be previewing a new, unified sensing platform that enables apps to be aware of all aspects of a user's context, while managing system health for you. Learn more at the  "Introducing Awareness API: an easy way to make your apps context aware" session later today at 3:00 PM PT in Stage 5 Libra.</li>
<li>Daydream — We’ll have more to share on how developers can start building Daydream apps during the “VR at Google” session tomorrow (May 19) at 9:00 AM PT in the Amphitheatre and <a href="https://events.google.com/io2016/schedule?filters=Live%20streamed-0cef-e511-a517-00155d5066d7#day2/46d50c09-0cef-e511-a517-00155d5066d7">livestreamed</a>.</li>
<li>Chromebooks — Hear from the team firsthand what’s new with Chromebooks tomorrow (May 19) at 11:00 AM PT in Stage 8 Crater.</li>
<li><a href="https://events.google.com/io2016/schedule?sid=947f7532-77f8-e511-a517-00155d5066d7#day2/947f7532-77f8-e511-a517-00155d5066d7">The Mobile Web</a> — We’ll share what we’re doing to improve the mobile web experience for developers and users tomorrow (May 19) at 2:00 PM PT in the Amphitheatre.</li>
</ul></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/google-io-2016-develop-grow-earn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android Wear 2.0 Developer Preview</title>
		<link>https://googledata.org/google-android/android-wear-2-0-developer-preview/</link>
		<comments>https://googledata.org/google-android/android-wear-2-0-developer-preview/#comments</comments>
		<pubDate>Wed, 18 May 2016 19:03:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=95b10feb704ea1a74b54d309b14f0921</guid>
		<description><![CDATA[<i>Posted by David Singleton, VP of Engineering</i><br /><br /><div><a href="https://3.bp.blogspot.com/-fRz3xyNESgY/Vzt9iHAV1HI/AAAAAAAAC8E/YqmiVH2YpAoTw_jDnYqRhH_15KB0gHXkwCLcB/s1600/AndroidWear20Watches.png"><img border="0" src="https://3.bp.blogspot.com/-fRz3xyNESgY/Vzt9iHAV1HI/AAAAAAAAC8E/YqmiVH2YpAoTw_jDnYqRhH_15KB0gHXkwCLcB/s640/AndroidWear20Watches.png"></a></div><p>Today at Google I/O, we announced the most significant Android Wear update since its launch two years ago: Android Wear 2.0. Based on what we&#8217;ve learned from users and developers, we're evolving the platform to improve key experiences on the watch, including watch faces, messaging, and fitness.</p><p>Android Wear 2.0 will be available to users this fall. We&#8217;re making a <a href="http://g.co/wearpreview">Developer Preview</a> available today and plan to release additional updates throughout the summer, so please <a href="http://g.co/wearpreviewbug">send us your feedback</a> early and often. Also, please keep in mind that this preview is a work in progress, and is not yet intended for daily use.</p><h3>What&#8217;s new?</h3><ul><li><strong>Standalone apps:</strong> Your Android Wear app can now access the internet directly over Bluetooth, Wi-Fi, or cellular, without relying on the <a href="http://developer.android.com/training/wearables/data-layer/index.html?utm_campaign=android%20wear_update_io16_051816&#38;utm_source=anddev&#38;utm_medium=blog">Data Layer APIs</a>. This means your app can continue to offer full functionality even if the paired phone is far away or turned off. Removing the requirement to use the Data Layer APIs also enables your app to offer the same functionality regardless of whether the watch is paired with an Android or iPhone. In addition, your app can receive push messages via <a href="https://developers.google.com/cloud-messaging?utm_campaign=android%20wear_update_io16_051816&#38;utm_source=anddev&#38;utm_medium=blog">Google Cloud Messaging</a> and access <code><a href="http://developer.android.com/reference/android/accounts/AccountManager.html?utm_campaign=android%20wear_update_io16_051816&#38;utm_source=anddev&#38;utm_medium=blog">AccountManager</a></code> directly on the watch.</li>
<li><strong>New system UI:</strong> We&#8217;ve made a number of UI changes that will help users interact with your app more easily. A <a href="https://developer.android.com/wear/preview/features/notifications.html?utm_campaign=android%20wear_update_io16_051816&#38;utm_source=anddev&#38;utm_medium=blog">new notification design</a> and app launcher make it easier to take action on notifications and launch your app, and a new watch face picker makes switching watch faces fast and fun. The system UI also adopts a dark color palette and makes better use of round displays. We recommend you test your existing Android Wear app and notifications with the new UI.</li>
<li><strong>Material design for wearables:</strong> The new <a href="http://www.google.com/design/spec-wear">Material Design for Wearables guide</a> will help you make your app&#8217;s interface more consistent, intuitive, and beautiful. The new navigation drawer and action drawer components in the Wearable support library make it easy to align your app with the system UI&#8217;s new vertical layout. We&#8217;ve also provided guidance on how to adopt the dark color palette.</li>
<li><strong><a href="https://developer.android.com/wear/preview/features/complications.html?utm_campaign=android%20wear_update_io16_051816&#38;utm_source=anddev&#38;utm_medium=blog">Complications API</a>:</strong> Complications are bite-sized pieces of information displayed to users directly on the watch face. Android Wear now has a system-wide framework to enable any app to show data on any watch face that implements the API. As an app developer, you can choose to publish your data to a wide variety of watch faces and make it easier for users to launch your app from the watch face. As a watch face developer, you can rely on data from a rich ecosystem of Wear apps without having to worry about sourcing it yourself.</li>
<li><strong><a href="https://developer.android.com/wear/preview/features/ime.html?utm_campaign=android%20wear_update_io16_051816&#38;utm_source=anddev&#38;utm_medium=blog">Input methods</a>:</strong> Keyboard and handwriting input methods open up new ways to accept text from users on the watch. You can now use these new input methods in your app via <code><a href="http://developer.android.com/training/wearables/notifications/voice-input.html?utm_campaign=android%20wear_update_io16_051816&#38;utm_source=anddev&#38;utm_medium=blog">RemoteInput</a></code> and <code><a href="http://developer.android.com/reference/android/widget/EditText.html?utm_campaign=android%20wear_update_io16_051816&#38;utm_source=anddev&#38;utm_medium=blog">EditText</a></code>, and notifications that already use <code>RemoteInput</code> for voice replies will automatically support the new input methods. We&#8217;ve ported over the full Android input method framework to the watch, so you can even create your own custom input methods if you wish.</li>
<li><strong>New <code>MessagingStyle</code> notification:</strong> Android Wear 2.0 includes a new <a href="https://developer.android.com/wear/preview/features/notifications.html#messaging?utm_campaign=android%20wear_update_io16_051816&#38;utm_source=anddev&#38;utm_medium=blog">notification template</a> with a layout optimized for quick and responsive messaging. This template is also available on phones and tablets using Android N, so creating a great cross-device messaging experience is a breeze.</li>
<li><strong>Google Fit platform:</strong> Improvements to the Google Fit platform make it easier for your app to use fitness data and detect activity. You can register a <code>PendingIntent</code> to be notified of changes in the fitness data store, so you don&#8217;t have to keep querying for changes to weight, nutrition, and other data types. It&#8217;s also easier for your app to get a consistent daily step count on Android Wear -- with <code>HistoryApi.readDailyTotal()</code>, a step recording subscription is no longer required. Finally, apps will soon be able to detect (with consent) when the user starts walking, running, or biking.</li>
<li><strong>Support for Android N:</strong> Your Android Wear app can now take advantage of the latest Android N features such as <a href="http://developer.android.com/preview/features/data-saver.html?utm_campaign=android%20wear_update_io16_051816&#38;utm_source=anddev&#38;utm_medium=blog">Data Saver</a> and <a href="http://developer.android.com/preview/j8-jack.html?utm_campaign=android%20wear_update_io16_051816&#38;utm_source=anddev&#38;utm_medium=blog">Java 8 Lambda support</a>. Also, let&#8217;s not forget the new emojis!</li>
</ul><h3>Get started and give us feedback!</h3>The Android Wear 2.0 Developer Preview includes an updated SDK with tools, and system images for testing on the official Android emulator, the <a href="https://store.google.com/product/lg_watch_urbane_2nd_edition_lte">LG Watch Urbane 2nd Edition LTE</a>, and the <a href="https://store.google.com/product/huawei_watch">Huawei Watch</a>.<br />
To get started, follow these steps:<br /><ol><li>Take a <a href="https://www.youtube.com/watch?v=8gLwk8o9LW0">video tour</a> of the Android Wear 2.0 developer preview</li>
<li>Update to Android Studio v2.1.1 or later</li>
<li>Visit the <a href="http://g.co/wearpreview">Android Wear 2.0 Developer Preview site</a> for downloads and documentation</li>
<li>Get the emulator system images through the SDK Manager or download the device system images</li>
<li>Test your app with your supported device or emulator</li>
<li><a href="http://g.co/wearpreviewbug">Give us feedback</a></li>
</ol>We will update this developer preview over the next few months based on your feedback. The sooner we hear from you, the more we can include in the final release, so <a href="http://g.co/wearpreviewbug">don't be shy!</a>]]></description>
				<content:encoded><![CDATA[<i>Posted by David Singleton, VP of Engineering</i><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-fRz3xyNESgY/Vzt9iHAV1HI/AAAAAAAAC8E/YqmiVH2YpAoTw_jDnYqRhH_15KB0gHXkwCLcB/s1600/AndroidWear20Watches.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-fRz3xyNESgY/Vzt9iHAV1HI/AAAAAAAAC8E/YqmiVH2YpAoTw_jDnYqRhH_15KB0gHXkwCLcB/s640/AndroidWear20Watches.png" /></a></div><p>Today at Google I/O, we announced the most significant Android Wear update since its launch two years ago: Android Wear 2.0. Based on what we’ve learned from users and developers, we're evolving the platform to improve key experiences on the watch, including watch faces, messaging, and fitness.</p><p>Android Wear 2.0 will be available to users this fall. We’re making a <a href="http://g.co/wearpreview">Developer Preview</a> available today and plan to release additional updates throughout the summer, so please <a href="http://g.co/wearpreviewbug">send us your feedback</a> early and often. Also, please keep in mind that this preview is a work in progress, and is not yet intended for daily use.</p><h3>What’s new?</h3><ul><li><strong>Standalone apps:</strong> Your Android Wear app can now access the internet directly over Bluetooth, Wi-Fi, or cellular, without relying on the <a href="http://developer.android.com/training/wearables/data-layer/index.html?utm_campaign=android%20wear_update_io16_051816&amp;utm_source=anddev&amp;utm_medium=blog">Data Layer APIs</a>. This means your app can continue to offer full functionality even if the paired phone is far away or turned off. Removing the requirement to use the Data Layer APIs also enables your app to offer the same functionality regardless of whether the watch is paired with an Android or iPhone. In addition, your app can receive push messages via <a href="https://developers.google.com/cloud-messaging?utm_campaign=android%20wear_update_io16_051816&utm_source=anddev&utm_medium=blog">Google Cloud Messaging</a> and access <code><a href="http://developer.android.com/reference/android/accounts/AccountManager.html?utm_campaign=android%20wear_update_io16_051816&utm_source=anddev&utm_medium=blog">AccountManager</a></code> directly on the watch.</li>
<li><strong>New system UI:</strong> We’ve made a number of UI changes that will help users interact with your app more easily. A <a href="https://developer.android.com/wear/preview/features/notifications.html?utm_campaign=android%20wear_update_io16_051816&utm_source=anddev&utm_medium=blog">new notification design</a> and app launcher make it easier to take action on notifications and launch your app, and a new watch face picker makes switching watch faces fast and fun. The system UI also adopts a dark color palette and makes better use of round displays. We recommend you test your existing Android Wear app and notifications with the new UI.</li>
<li><strong>Material design for wearables:</strong> The new <a href="http://www.google.com/design/spec-wear">Material Design for Wearables guide</a> will help you make your app’s interface more consistent, intuitive, and beautiful. The new navigation drawer and action drawer components in the Wearable support library make it easy to align your app with the system UI’s new vertical layout. We’ve also provided guidance on how to adopt the dark color palette.</li>
<li><strong><a href="https://developer.android.com/wear/preview/features/complications.html?utm_campaign=android%20wear_update_io16_051816&utm_source=anddev&utm_medium=blog">Complications API</a>:</strong> Complications are bite-sized pieces of information displayed to users directly on the watch face. Android Wear now has a system-wide framework to enable any app to show data on any watch face that implements the API. As an app developer, you can choose to publish your data to a wide variety of watch faces and make it easier for users to launch your app from the watch face. As a watch face developer, you can rely on data from a rich ecosystem of Wear apps without having to worry about sourcing it yourself.</li>
<li><strong><a href="https://developer.android.com/wear/preview/features/ime.html?utm_campaign=android%20wear_update_io16_051816&utm_source=anddev&utm_medium=blog">Input methods</a>:</strong> Keyboard and handwriting input methods open up new ways to accept text from users on the watch. You can now use these new input methods in your app via <code><a href="http://developer.android.com/training/wearables/notifications/voice-input.html?utm_campaign=android%20wear_update_io16_051816&utm_source=anddev&utm_medium=blog">RemoteInput</a></code> and <code><a href="http://developer.android.com/reference/android/widget/EditText.html?utm_campaign=android%20wear_update_io16_051816&utm_source=anddev&utm_medium=blog">EditText</a></code>, and notifications that already use <code>RemoteInput</code> for voice replies will automatically support the new input methods. We’ve ported over the full Android input method framework to the watch, so you can even create your own custom input methods if you wish.</li>
<li><strong>New <code>MessagingStyle</code> notification:</strong> Android Wear 2.0 includes a new <a href="https://developer.android.com/wear/preview/features/notifications.html#messaging?utm_campaign=android%20wear_update_io16_051816&utm_source=anddev&utm_medium=blog">notification template</a> with a layout optimized for quick and responsive messaging. This template is also available on phones and tablets using Android N, so creating a great cross-device messaging experience is a breeze.</li>
<li><strong>Google Fit platform:</strong> Improvements to the Google Fit platform make it easier for your app to use fitness data and detect activity. You can register a <code>PendingIntent</code> to be notified of changes in the fitness data store, so you don’t have to keep querying for changes to weight, nutrition, and other data types. It’s also easier for your app to get a consistent daily step count on Android Wear -- with <code>HistoryApi.readDailyTotal()</code>, a step recording subscription is no longer required. Finally, apps will soon be able to detect (with consent) when the user starts walking, running, or biking.</li>
<li><strong>Support for Android N:</strong> Your Android Wear app can now take advantage of the latest Android N features such as <a href="http://developer.android.com/preview/features/data-saver.html?utm_campaign=android%20wear_update_io16_051816&utm_source=anddev&utm_medium=blog">Data Saver</a> and <a href="http://developer.android.com/preview/j8-jack.html?utm_campaign=android%20wear_update_io16_051816&utm_source=anddev&utm_medium=blog">Java 8 Lambda support</a>. Also, let’s not forget the new emojis!</li>
</ul><h3>Get started and give us feedback!</h3>The Android Wear 2.0 Developer Preview includes an updated SDK with tools, and system images for testing on the official Android emulator, the <a href="https://store.google.com/product/lg_watch_urbane_2nd_edition_lte">LG Watch Urbane 2nd Edition LTE</a>, and the <a href="https://store.google.com/product/huawei_watch">Huawei Watch</a>.<br />
To get started, follow these steps:<br />
<ol><li>Take a <a href="https://www.youtube.com/watch?v=8gLwk8o9LW0">video tour</a> of the Android Wear 2.0 developer preview</li>
<li>Update to Android Studio v2.1.1 or later</li>
<li>Visit the <a href="http://g.co/wearpreview">Android Wear 2.0 Developer Preview site</a> for downloads and documentation</li>
<li>Get the emulator system images through the SDK Manager or download the device system images</li>
<li>Test your app with your supported device or emulator</li>
<li><a href="http://g.co/wearpreviewbug">Give us feedback</a></li>
</ol>We will update this developer preview over the next few months based on your feedback. The sooner we hear from you, the more we can include in the final release, so <a href="http://g.co/wearpreviewbug">don't be shy!</a>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-wear-2-0-developer-preview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Introducing Android Instant Apps</title>
		<link>https://googledata.org/google-android/introducing-android-instant-apps/</link>
		<comments>https://googledata.org/google-android/introducing-android-instant-apps/#comments</comments>
		<pubDate>Wed, 18 May 2016 19:01:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=e5b40f4e21634074b91c4b8dd64091dd</guid>
		<description><![CDATA[<div dir="ltr">
<div dir="ltr">
<i>Posted by Suresh Ganapathy, Product Manager</i><br /><i><br /></i>
Developers have built amazing Android apps. They use your mobile device to the fullest, including the camera, GPS, and sensors to connect to the real world. They&#8217;re beautiful and immersive, with Material Design and smooth animations running at 60 frames per second. They use access to identity and payments to create seamless experiences.<br /><br />
But developers tell us they wish they could bring users into their apps more quickly and easily. With the web, you can click on a link and land on a web page &#8212; it takes one click and just a few seconds. It should be easier for users to access a wider range of apps, and for developers to reach more people.<br /><br />
So, we asked ourselves: How do we make it possible for people to access a wider range of apps, seamlessly? How do we help developers reach more people? And how do we do that while giving developers access to the range of capabilities and experiences that Android apps provide?<br /><p>
Today we&#8217;re sharing a preview of a new project that we think will change how people experience Android apps. We call it Android Instant Apps, and it evolves Android apps to be able to run instantly, without requiring installation. With Instant Apps, a tap on a URL can open right in an Android app, even if the user doesn&#8217;t have that app installed.<br /></p>
As a developer, you won&#8217;t need to build a new, separate app. It&#8217;s the same Android APIs, the same project, the same source code. You&#8217;ll simply update your existing Android app to take advantage of Instant Apps functionality. In fact, it can take less than a day to get up and running for some developers, though the effort involved will vary depending on how your app is structured. You modularize your app, and Google Play downloads only the parts that are needed, on the fly. And when you do upgrade, your app will be available to more than a billion users on Android devices going back to Jelly Bean.<br /><br />
This is a big change, so it's going to take some time. We&#8217;ve been working with a small set of partners to help refine the experience, including developers like BuzzFeed, B&#38;H Photo, Medium, Hotel Tonight, Zumper and Disney. We&#8217;ll be gradually expanding access for developers and bringing Instant Apps to users later this year.<br /><br /><table border="0" cellpadding="3" cellspacing="3"><tbody><tr><td><div>
<a href="https://4.bp.blogspot.com/-p5WOrD6wVy8/VzyIpsDqULI/AAAAAAAADD0/xbtQjurJZ6EEji_MPaY1sLK5wVkXSvxJgCKgB/s1600/B%2526H%2B-%2BDevice%2B%2528Final%2529.gif"><img border="0" height="400" src="https://4.bp.blogspot.com/-p5WOrD6wVy8/VzyIpsDqULI/AAAAAAAADD0/xbtQjurJZ6EEji_MPaY1sLK5wVkXSvxJgCKgB/s800/B%2526H%2B-%2BDevice%2B%2528Final%2529.gif"></a></div>
</td>
  <td><div>
<a href="https://2.bp.blogspot.com/-q5ApCzECuNA/VzyKa9l0t2I/AAAAAAAADEI/nYhhMClDl5Y3qL5-wiOb2J2QjtGWwbF2wCLcB/s1600/BuzzFeed-Device-Install%2B%2528Final%2529.gif"><img border="0" height="400" src="https://2.bp.blogspot.com/-q5ApCzECuNA/VzyKa9l0t2I/AAAAAAAADEI/nYhhMClDl5Y3qL5-wiOb2J2QjtGWwbF2wCLcB/s800/BuzzFeed-Device-Install%2B%2528Final%2529.gif"></a></div>
</td>
  <td><div>
<a href="https://2.bp.blogspot.com/-mVhKMMzhxms/VzyKg25ihBI/AAAAAAAADEM/dJN6_8H7qkwRyulCF7Yr2234-GGUXzC6ACLcB/s1600/Park%2Band%2BPay%2B-%2BDevice%2Bwith%2BMeter%2B%2528Final%2529.gif"><img border="0" height="400" src="https://2.bp.blogspot.com/-mVhKMMzhxms/VzyKg25ihBI/AAAAAAAADEM/dJN6_8H7qkwRyulCF7Yr2234-GGUXzC6ACLcB/s800/Park%2Band%2BPay%2B-%2BDevice%2Bwith%2BMeter%2B%2528Final%2529.gif"></a></div>
</td>
 </tr><tr><td><div>
<span><i>B&#38;H Photo</i></span></div>
<div>
<span><i>(via Google Search)</i></span></div>
</td>
  <td><div>
<span><i>BuzzFeedVideo</i></span></div>
<div>
<span><i>(via a shared link)</i></span></div>
</td>
  <td><div>
<span><i>Park and Pay (example)</i></span></div>
<div>
<span><i>(via NFC)</i></span></div>
</td>
 </tr></tbody></table></div>
<table border="1" cellpadding="3" cellspacing="3"><tbody><tr><td><div>
<br /><div dir="ltr">
If you&#8217;re interested in learning more about Android Instant Apps, please check out the <a href="https://developer.android.com/topic/instant-apps/index.html?utm_campaign=io16&#38;utm_source=anddev&#38;utm_medium=blog" target="_blank">Android developers website</a>, where you can sign up for updates as they become available. We can&#8217;t wait to see what you build when your app is just a tap away.</div>
</div>
</td></tr></tbody></table></div>]]></description>
				<content:encoded><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<i>Posted by Suresh Ganapathy, Product Manager</i><br />
<i><br /></i>
Developers have built amazing Android apps. They use your mobile device to the fullest, including the camera, GPS, and sensors to connect to the real world. They’re beautiful and immersive, with Material Design and smooth animations running at 60 frames per second. They use access to identity and payments to create seamless experiences.<br />
<br />
But developers tell us they wish they could bring users into their apps more quickly and easily. With the web, you can click on a link and land on a web page — it takes one click and just a few seconds. It should be easier for users to access a wider range of apps, and for developers to reach more people.<br />
<br />
So, we asked ourselves: How do we make it possible for people to access a wider range of apps, seamlessly? How do we help developers reach more people? And how do we do that while giving developers access to the range of capabilities and experiences that Android apps provide?<br />
<p itemprop="description">
Today we’re sharing a preview of a new project that we think will change how people experience Android apps. We call it Android Instant Apps, and it evolves Android apps to be able to run instantly, without requiring installation. With Instant Apps, a tap on a URL can open right in an Android app, even if the user doesn’t have that app installed.<br />
</p>
As a developer, you won’t need to build a new, separate app. It’s the same Android APIs, the same project, the same source code. You’ll simply update your existing Android app to take advantage of Instant Apps functionality. In fact, it can take less than a day to get up and running for some developers, though the effort involved will vary depending on how your app is structured. You modularize your app, and Google Play downloads only the parts that are needed, on the fly. And when you do upgrade, your app will be available to more than a billion users on Android devices going back to Jelly Bean.<br />
<br />
This is a big change, so it's going to take some time. We’ve been working with a small set of partners to help refine the experience, including developers like BuzzFeed, B&amp;H Photo, Medium, Hotel Tonight, Zumper and Disney. We’ll be gradually expanding access for developers and bringing Instant Apps to users later this year.<br />
<br />
<table border="0" cellpadding="3" cellspacing="3" style="background-color: white; border-collapse: collapse; border:none;">
 <tbody>
<tr>
  <td><div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-p5WOrD6wVy8/VzyIpsDqULI/AAAAAAAADD0/xbtQjurJZ6EEji_MPaY1sLK5wVkXSvxJgCKgB/s1600/B%2526H%2B-%2BDevice%2B%2528Final%2529.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://4.bp.blogspot.com/-p5WOrD6wVy8/VzyIpsDqULI/AAAAAAAADD0/xbtQjurJZ6EEji_MPaY1sLK5wVkXSvxJgCKgB/s800/B%2526H%2B-%2BDevice%2B%2528Final%2529.gif" /></a></div>
</td>
  <td><div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-q5ApCzECuNA/VzyKa9l0t2I/AAAAAAAADEI/nYhhMClDl5Y3qL5-wiOb2J2QjtGWwbF2wCLcB/s1600/BuzzFeed-Device-Install%2B%2528Final%2529.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://2.bp.blogspot.com/-q5ApCzECuNA/VzyKa9l0t2I/AAAAAAAADEI/nYhhMClDl5Y3qL5-wiOb2J2QjtGWwbF2wCLcB/s800/BuzzFeed-Device-Install%2B%2528Final%2529.gif" /></a></div>
</td>
  <td><div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-mVhKMMzhxms/VzyKg25ihBI/AAAAAAAADEM/dJN6_8H7qkwRyulCF7Yr2234-GGUXzC6ACLcB/s1600/Park%2Band%2BPay%2B-%2BDevice%2Bwith%2BMeter%2B%2528Final%2529.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img itemprop="image" border="0" height="400" src="https://2.bp.blogspot.com/-mVhKMMzhxms/VzyKg25ihBI/AAAAAAAADEM/dJN6_8H7qkwRyulCF7Yr2234-GGUXzC6ACLcB/s800/Park%2Band%2BPay%2B-%2BDevice%2Bwith%2BMeter%2B%2528Final%2529.gif" /></a></div>
</td>
 </tr>
<tr>
  <td><div style="text-align: center;">
<span style="font-size: x-small;"><i>B&amp;H Photo</i></span></div>
<div style="text-align: center;">
<span style="font-size: x-small;"><i>(via Google Search)</i></span></div>
</td>
  <td><div style="text-align: center;">
<span style="font-size: x-small;"><i>BuzzFeedVideo</i></span></div>
<div style="text-align: center;">
<span style="font-size: x-small;"><i>(via a shared link)</i></span></div>
</td>
  <td><div style="text-align: center;">
<span style="font-size: x-small;"><i>Park and Pay (example)</i></span></div>
<div style="text-align: center;">
<span style="font-size: x-small;"><i>(via NFC)</i></span></div>
</td>
 </tr>
</tbody></table>
</div>
<table border="1" cellpadding="3" cellspacing="3" style="background-color: white; border-collapse: collapse; border: 1px solid rgb(255, 255, 255); color: black; text-align: center; width: 100%;"><tbody>
<tr><td><div style="text-align: center;">
<br />
<div dir="ltr" style="text-align: left;" trbidi="on">
If you’re interested in learning more about Android Instant Apps, please check out the <a href="https://developer.android.com/topic/instant-apps/index.html?utm_campaign=io16&amp;utm_source=anddev&amp;utm_medium=blog" >Android developers website</a>, where you can sign up for updates as they become available. We can’t wait to see what you build when your app is just a tap away.</div>
</div>
</td></tr>
</tbody></table>
</div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/introducing-android-instant-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Improving the Security and User Experience of your Google Sign In Implementation</title>
		<link>https://googledata.org/google-android/improving-the-security-and-user-experience-of-your-google-sign-in-implementation/</link>
		<comments>https://googledata.org/google-android/improving-the-security-and-user-experience-of-your-google-sign-in-implementation/#comments</comments>
		<pubDate>Tue, 17 May 2016 23:52:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=607ce69a30416b4e0e22dc3200ad7ff3</guid>
		<description><![CDATA[<div dir="ltr">
<i>Posted by <a href="http://stackoverflow.com/users/5827947/isabella-chen">Isabella Chen</a>, Software Engineer</i><br /><br />
We launched a fully revamped <a href="http://android-developers.blogspot.com/2015/12/api-updates-for-sign-in-with-google.html">Sign-In API</a> with Google Play services 8.3 providing a much more streamlined user
experience and enabling easy server <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">authentication</a> and <a href="http://android-developers.blogspot.com/2016/02/using-credentials-between-your-server.html">authorization</a>. We&#8217;ve heard from many developers that they&#8217;ve found these APIs simple and
less error prone to use. But when we look at applications in the Play Store, we
see many that are still using legacy Plus.API / GoogleAuthUtil.getToken and do
not follow best practices for <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">authentication</a> and <a href="http://android-developers.blogspot.com/2016/02/using-credentials-between-your-server.html">authorization</a>. Not following best practices can make your apps easily vulnerable to attack.<br />
It&#8217;s also worth noting that developers who don&#8217;t want to worry about managing the security implications of different API flows or keeping up to date with the latest &#160;APIs can use <a href="https://firebase.google.com/docs/auth/" target="_blank">Firebase Authentication</a> to manage the entire authentication lifecycle.<br /><br /><strong></strong><br /><h3>
<strong>Ensuring your apps are secure</strong></h3>
<br />
Developers should ensure that their apps are not open to the following
vulnerabilities:
<br /><ul><li> <strong>Email or user ID substitution attack</strong> 
After signing in with Google on Android, some apps directly send email or
user ID in plain text to their backend server as the identity credential. These
server endpoints enable a malicious attacker to easily forge a request and gain
access to any user&#8217;s account by guessing their email / user ID.

<div>
<a href="https://1.bp.blogspot.com/-RMlvtl4ZHxA/VzuSf6eBJzI/AAAAAAAAC8c/W9U1YZ2nwqUQkLdeNkCg6PBT7Y33Is0IQCLcB/s1600/image03.png"><img border="0" src="https://1.bp.blogspot.com/-RMlvtl4ZHxA/VzuSf6eBJzI/AAAAAAAAC8c/W9U1YZ2nwqUQkLdeNkCg6PBT7Y33Is0IQCLcB/s640/image03.png"></a></div>
<strong>Figure 1. Email / User ID Substitution Attack
</strong><br />


We see a number of developers implement this anti-pattern by using <strong><code>getAccountName</code></strong> or <strong><code>getId</code></strong> from the Plus.API and sending it to their backend.<br /><span><strong><u>
<br /></u>Problematic implementations, DO NOT COPY</strong></span>
<div>
<a href="https://3.bp.blogspot.com/-H9sZdOY3IKY/VzuSu9v5TlI/AAAAAAAAC8g/SA2ia0Ktzlwpn0FqB6QU6VVbTwKXG0t5ACLcB/s1600/image01.png"><img border="0" src="https://3.bp.blogspot.com/-H9sZdOY3IKY/VzuSu9v5TlI/AAAAAAAAC8g/SA2ia0Ktzlwpn0FqB6QU6VVbTwKXG0t5ACLcB/s640/image01.png"></a></div>
</li>
</ul><ul><li> <strong>Access token substitution attack</strong> 
After signing in with Google on Android, many apps send an access token
obtained via GoogleAuthUtil.getToken to their backend server as the identity
assertion.  Access tokens are bearer tokens and backend servers cannot easily
check if the token is issued to them. A malicious attacker can phish the user
to sign-in on another application and use that different access token to forge
a request to your backend.

<div>
<a href="https://4.bp.blogspot.com/-G5zOMziEmeQ/VzuS8ER-reI/AAAAAAAAC8o/ARnkmwIYPYMZcR9fMskDqDGGd9aiHIlTgCLcB/s1600/image08.png"><img border="0" src="https://4.bp.blogspot.com/-G5zOMziEmeQ/VzuS8ER-reI/AAAAAAAAC8o/ARnkmwIYPYMZcR9fMskDqDGGd9aiHIlTgCLcB/s640/image08.png"></a></div>
<strong>Figure 2. Access Token Substitution Attack</strong><br /><strong>
</strong>Many developers implement this anti-pattern by using GoogleAuthUtil to retrieve
an access token and sending it to their server to authenticate like in the
following example:
<br /><br /><span><strong>Problematic implementation, DO NOT COPY
</strong></span></li>
</ul><div>
<a href="https://4.bp.blogspot.com/-HNXsCPi6pVM/VzuTJL50-FI/AAAAAAAAC8w/7Jww-_BM0zYmsvU1KgxVJpBsD5zZf6rPwCLcB/s1600/image04.png"><img border="0" src="https://4.bp.blogspot.com/-HNXsCPi6pVM/VzuTJL50-FI/AAAAAAAAC8w/7Jww-_BM0zYmsvU1KgxVJpBsD5zZf6rPwCLcB/s640/image04.png"></a></div>
<strong>Solution</strong><br /><ol><li> Many developers who have built the above anti-patterns into their apps simply
call our tokenInfo (<a href="https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=XYZ">www.googleapis.com/oauth2/v3/tokeninfo</a>) which is debug-only or unnecessarily call the G+ (<a href="https://www.googleapis.com/plus/v1/people/me">www.googleapis.com/plus/v1/people/me</a>) endpoint for user&#8217;s profile information. These apps should instead implement
our recommended <a href="https://developers.google.com/identity/sign-in/android/backend-auth">ID token flow</a> explained in <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">this blog post</a>. Check out <a href="https://developers.google.com/identity/sign-in/android/migration-guide#migrate_to_the_id_token_flow">migration guide</a> to move to a both secure and efficient pattern.
  </li>
<li> If your server needs access to other Google services, e.g. Drive, you should
use <a href="https://devsite.googleplex.com/identity/sign-in/android/offline-access#before_you_begin">server auth code flow</a>. You can also check out <a href="http://android-developers.blogspot.com/2016/02/using-credentials-between-your-server.html">this blogpost</a>. <strong> </strong>Worth mentioning, you can also get an ID token using server auth code flow,
from which you can retrieve user id / email / name / profile url without
additional network call. Check out the <a href="https://developers.google.com/identity/sign-in/android/migration-guide#migrate_to_the_server_auth_code_flow">migration guide</a>.
</li>
</ol><strong></strong><br /><h3>
<strong>Improving the user experience and performance of your apps</strong></h3>
<br />
There are still many apps using GoogleAuthUtil for server auth and their users
are losing out the improved user experience while the developers of those apps
need to maintain a significantly more complicated implementation. <br />
Here are some of the common problems that we see:<br /><br /><strong></strong><br /><h3>
<strong>Requesting unnecessary permissions and displaying redundant user experience</strong></h3>
<br />
Many apps request GET_ACCOUNTS permission and draw their own customized picker
with all email addresses. After getting the email address, the app calls either
GoogleAuthUtil or Plus.API to do OAuth consent for basic sign in. For those
apps, users will see redundant user experience like:<br /><div>
<a href="https://4.bp.blogspot.com/-lMCEBpjtdyI/VzuTQWN534I/AAAAAAAAC80/-cIGqTzopwkxoEBGu-oxnRoUMdAbISUVQCLcB/s1600/image00.png"><img border="0" src="https://4.bp.blogspot.com/-lMCEBpjtdyI/VzuTQWN534I/AAAAAAAAC80/-cIGqTzopwkxoEBGu-oxnRoUMdAbISUVQCLcB/s640/image00.png"></a></div>
<strong>Figure 3. GET_ACCOUNTS runtime permission and redundant user experience</strong><br /><br />
The worst thing is the GET_ACCOUNTS permission. On Marshmallow and above, this
permission is displayed to the user as &#8216;Contacts&#8217;. Many users are unwilling to
grant access to this runtime permission. <br /><br /><strong>Solution</strong><br /><br />
Switch to our new <a href="https://developers.google.com/identity/sign-in/android/">Auth.GOOGLE_SIGN_IN_API</a> for a streamlined user consent experience by providing an intuitive one-tap
interface to provide your app with the user&#8217;s name, email address and profile
picture. Your app receives an OAuth grant when the user selects an account,
making it easier to sign the user in on other devices. <a href="http://android-developers.blogspot.com/2015/11/improvements-to-sign-in-with-google.html">Learn more</a><br /><div>
<a href="https://4.bp.blogspot.com/-kSUK_emI8z8/VzuoCrzO1WI/AAAAAAAAC-E/ivROwzOkDh0o99Gc-E_X1uvQzvVRTOrfgCLcB/s1600/image02.png"><img border="0" src="https://4.bp.blogspot.com/-kSUK_emI8z8/VzuoCrzO1WI/AAAAAAAAC-E/ivROwzOkDh0o99Gc-E_X1uvQzvVRTOrfgCLcB/s320/image02.png"></a></div>
<br /><strong>Figure 4. New streamlined, one-tap sign-in experience</strong><br /><br /><h3>
<strong>Getting ID Token from GoogleAuthUtil for your backend</strong></h3>
<br />
Before we released revamped <a href="http://android-developers.blogspot.com/2015/12/api-updates-for-sign-in-with-google.html">Sign-In API</a>, GoogleAuthUtil.getToken was the previously recommended way to retrieve an ID
token via a &#8220;magic string.&#8221;
<br /><br /><span><strong>Wrong pattern, DO NOT COPY</strong></span>
<br /><div>
<a href="https://2.bp.blogspot.com/-xKco0e2vjGA/VzupVPuRnVI/AAAAAAAAC-k/aW247cOlEkUPMVxe9BkhR5N4RJ_3B2jwgCLcB/s1600/image07.png"><img border="0" src="https://2.bp.blogspot.com/-xKco0e2vjGA/VzupVPuRnVI/AAAAAAAAC-k/aW247cOlEkUPMVxe9BkhR5N4RJ_3B2jwgCLcB/s640/image07.png"></a></div>
<br />
GoogleAuthUtil.getToken needs to take an email address, which usually leads to
the undesirable user experience in Figure 3. Also, user&#8217;s profile information
like name, profile picture url is valuable information to store in your server.
The ID token obtained via <a href="https://developers.google.com/identity/sign-in/android/">Auth.GOOGLE_SIGN_IN_API</a> will contain profile information and your server won&#8217;t need additional network
calls to retrieve them.

<br /><strong>Solution
</strong>Switch to the <a href="https://developers.google.com/identity/sign-in/android/backend-auth">ID token flow</a> using the new <a href="https://developers.google.com/identity/sign-in/android/">Auth.GOOGLE_SIGN_IN_API</a> and get the one-tap experience. You can also check out <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">this blogpost</a> and the <a href="https://developers.google.com/identity/sign-in/android/migration-guide#migrate_from_the_googleauthutil_id_token_flow">migration guide</a> for more details.<br /><br /><h3>
<strong>Getting auth code from GoogleAuthUtil for your backend</strong></h3>
<br />
We once recommended using GoogleAuthUtil.getToken to retrieve a server auth
code via another &#8220;magic string.&#8221;<u>
<br /><br /><span><strong></strong></span></u>Wrong pattern, DO NOT COPY<br /><div>
<a href="https://1.bp.blogspot.com/-K1Ntsla7-bQ/VzutfYG2AmI/AAAAAAAAC_Y/5hSRjUvYWpspcWjFVscr0bSNjVx45nzpwCLcB/s1600/image06.png"><img border="0" src="https://1.bp.blogspot.com/-K1Ntsla7-bQ/VzutfYG2AmI/AAAAAAAAC_Y/5hSRjUvYWpspcWjFVscr0bSNjVx45nzpwCLcB/s640/image06.png"></a></div>
<br />
In addition to the possible redundant user experience in Figure 3, another
problem with this implementation was that if a user had signed in to your
application in the past and then switched to a new device, they would likely
see this confusing dialog:<br /><a href="https://1.bp.blogspot.com/-xy6y3Gylwos/Vzup3t3g-AI/AAAAAAAAC-0/gKgmA2iwTz0a047-9JvKeXIJtkPJyc_2wCLcB/s1600/image05.png"><img border="0" src="https://1.bp.blogspot.com/-xy6y3Gylwos/Vzup3t3g-AI/AAAAAAAAC-0/gKgmA2iwTz0a047-9JvKeXIJtkPJyc_2wCLcB/s320/image05.png"></a>

<br /><strong>Figure 5. Confusing consent dialog for returned user if using
GoogleAuthUtil.getToken for auth code</strong><br /><strong>Solution</strong><br /><br />
To easily avoid this &#8220;Have offline access&#8221; consent dialog, you should switch to <a href="https://developers.google.com/identity/sign-in/android/offline-access#before_you_begin">server auth code flow</a> using the new <a href="https://developers.google.com/identity/sign-in/android/">Auth.GOOGLE_SIGN_IN_API </a>. We will issue you an auth code silently for a previously signed-in user.  You
can also check out <a href="http://android-developers.blogspot.com/2016/02/using-credentials-between-your-server.html">this blogpost</a> and <a href="https://developers.google.com/identity/sign-in/android/migration-guide#migrate_from_the_googleauthutil_server_auth_code_flow">migration guide</a> for more info. <br /><br /><h3>
<strong>Should I ever use GoogleAuthUtil.getToken?</strong></h3>
<br />
In general, you should NOT use GoogleAuthUtil.getToken, unless you are making
REST API call on Android client. Use <a href="https://developers.google.com/identity/sign-in/android/">Auth.GOOGLE_SIGN_IN_API</a> instead. Whenever possible, use native Android API in Google Play services
SDK. You can check out those APIs at <a href="https://developers.google.com/android/">Google APIs for Android</a>.<br />
And starting from Google Play services SDK 9.0, you will need to include -auth SDK split to use GoogleAuthUtil.getToken and related classes<br />
AccountChangeEvent/AccountChangeEventsRequest/AccountChangeEventsResponse.<br /><code>dependencies {
    compile 'com.google.android.gms:play-services-auth:9.0.0'
}</code>
</div>]]></description>
				<content:encoded><![CDATA[<div dir="ltr" style="text-align: left;" trbidi="on">
<i>Posted by <a href="http://stackoverflow.com/users/5827947/isabella-chen">Isabella Chen</a>, Software Engineer</i><br />
<br />
We launched a fully revamped <a href="http://android-developers.blogspot.com/2015/12/api-updates-for-sign-in-with-google.html">Sign-In API</a> with Google Play services 8.3 providing a much more streamlined user
experience and enabling easy server <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">authentication</a> and <a href="http://android-developers.blogspot.com/2016/02/using-credentials-between-your-server.html">authorization</a>. We’ve heard from many developers that they’ve found these APIs simple and
less error prone to use. But when we look at applications in the Play Store, we
see many that are still using legacy Plus.API / GoogleAuthUtil.getToken and do
not follow best practices for <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">authentication</a> and <a href="http://android-developers.blogspot.com/2016/02/using-credentials-between-your-server.html">authorization</a>. Not following best practices can make your apps easily vulnerable to attack.<br />
It’s also worth noting that developers who don’t want to worry about managing the security implications of different API flows or keeping up to date with the latest &nbsp;APIs can use <a href="https://firebase.google.com/docs/auth/" >Firebase Authentication</a> to manage the entire authentication lifecycle.<br />
<br />
<strong></strong><br />
<h3>
<strong>Ensuring your apps are secure</strong></h3>
<br />
Developers should ensure that their apps are not open to the following
vulnerabilities:
<br />
<ul>
<li> <strong>Email or user ID substitution attack</strong> 
After signing in with Google on Android, some apps directly send email or
user ID in plain text to their backend server as the identity credential. These
server endpoints enable a malicious attacker to easily forge a request and gain
access to any user’s account by guessing their email / user ID.

<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-RMlvtl4ZHxA/VzuSf6eBJzI/AAAAAAAAC8c/W9U1YZ2nwqUQkLdeNkCg6PBT7Y33Is0IQCLcB/s1600/image03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-RMlvtl4ZHxA/VzuSf6eBJzI/AAAAAAAAC8c/W9U1YZ2nwqUQkLdeNkCg6PBT7Y33Is0IQCLcB/s640/image03.png" /></a></div>
<strong>Figure 1. Email / User ID Substitution Attack
</strong><br />


We see a number of developers implement this anti-pattern by using <strong><code>getAccountName</code></strong> or <strong><code>getId</code></strong> from the Plus.API and sending it to their backend.<br />


<span style="color: red;"><strong><u>
<br />
</u>Problematic implementations, DO NOT COPY</strong></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-H9sZdOY3IKY/VzuSu9v5TlI/AAAAAAAAC8g/SA2ia0Ktzlwpn0FqB6QU6VVbTwKXG0t5ACLcB/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-H9sZdOY3IKY/VzuSu9v5TlI/AAAAAAAAC8g/SA2ia0Ktzlwpn0FqB6QU6VVbTwKXG0t5ACLcB/s640/image01.png" /></a></div>
</li>
</ul>
<ul>
<li> <strong>Access token substitution attack</strong> 
After signing in with Google on Android, many apps send an access token
obtained via GoogleAuthUtil.getToken to their backend server as the identity
assertion.  Access tokens are bearer tokens and backend servers cannot easily
check if the token is issued to them. A malicious attacker can phish the user
to sign-in on another application and use that different access token to forge
a request to your backend.

<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-G5zOMziEmeQ/VzuS8ER-reI/AAAAAAAAC8o/ARnkmwIYPYMZcR9fMskDqDGGd9aiHIlTgCLcB/s1600/image08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-G5zOMziEmeQ/VzuS8ER-reI/AAAAAAAAC8o/ARnkmwIYPYMZcR9fMskDqDGGd9aiHIlTgCLcB/s640/image08.png" /></a></div>
<strong>Figure 2. Access Token Substitution Attack</strong><br />


<strong>
</strong>Many developers implement this anti-pattern by using GoogleAuthUtil to retrieve
an access token and sending it to their server to authenticate like in the
following example:
<br />
<br />
<span style="color: red;"><strong>Problematic implementation, DO NOT COPY
</strong></span></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-HNXsCPi6pVM/VzuTJL50-FI/AAAAAAAAC8w/7Jww-_BM0zYmsvU1KgxVJpBsD5zZf6rPwCLcB/s1600/image04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-HNXsCPi6pVM/VzuTJL50-FI/AAAAAAAAC8w/7Jww-_BM0zYmsvU1KgxVJpBsD5zZf6rPwCLcB/s640/image04.png" /></a></div>
<strong>Solution</strong><br />
<ol>
<li> Many developers who have built the above anti-patterns into their apps simply
call our tokenInfo (<a href="https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=XYZ">www.googleapis.com/oauth2/v3/tokeninfo</a>) which is debug-only or unnecessarily call the G+ (<a href="https://www.googleapis.com/plus/v1/people/me">www.googleapis.com/plus/v1/people/me</a>) endpoint for user’s profile information. These apps should instead implement
our recommended <a href="https://developers.google.com/identity/sign-in/android/backend-auth">ID token flow</a> explained in <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">this blog post</a>. Check out <a href="https://developers.google.com/identity/sign-in/android/migration-guide#migrate_to_the_id_token_flow">migration guide</a> to move to a both secure and efficient pattern.
  </li>
<li> If your server needs access to other Google services, e.g. Drive, you should
use <a href="https://devsite.googleplex.com/identity/sign-in/android/offline-access#before_you_begin">server auth code flow</a>. You can also check out <a href="http://android-developers.blogspot.com/2016/02/using-credentials-between-your-server.html">this blogpost</a>. <strong> </strong>Worth mentioning, you can also get an ID token using server auth code flow,
from which you can retrieve user id / email / name / profile url without
additional network call. Check out the <a href="https://developers.google.com/identity/sign-in/android/migration-guide#migrate_to_the_server_auth_code_flow">migration guide</a>.
</li>
</ol>
<strong></strong><br />
<h3>
<strong>Improving the user experience and performance of your apps</strong></h3>
<br />
There are still many apps using GoogleAuthUtil for server auth and their users
are losing out the improved user experience while the developers of those apps
need to maintain a significantly more complicated implementation. <br />
Here are some of the common problems that we see:<br />
<br />
<strong></strong><br />
<h3>
<strong>Requesting unnecessary permissions and displaying redundant user experience</strong></h3>
<br />
Many apps request GET_ACCOUNTS permission and draw their own customized picker
with all email addresses. After getting the email address, the app calls either
GoogleAuthUtil or Plus.API to do OAuth consent for basic sign in. For those
apps, users will see redundant user experience like:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-lMCEBpjtdyI/VzuTQWN534I/AAAAAAAAC80/-cIGqTzopwkxoEBGu-oxnRoUMdAbISUVQCLcB/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-lMCEBpjtdyI/VzuTQWN534I/AAAAAAAAC80/-cIGqTzopwkxoEBGu-oxnRoUMdAbISUVQCLcB/s640/image00.png" /></a></div>
<strong>Figure 3. GET_ACCOUNTS runtime permission and redundant user experience</strong><br />
<br />
The worst thing is the GET_ACCOUNTS permission. On Marshmallow and above, this
permission is displayed to the user as ‘Contacts’. Many users are unwilling to
grant access to this runtime permission. <br />
<br />
<strong>Solution</strong><br />
<br />
Switch to our new <a href="https://developers.google.com/identity/sign-in/android/">Auth.GOOGLE_SIGN_IN_API</a> for a streamlined user consent experience by providing an intuitive one-tap
interface to provide your app with the user’s name, email address and profile
picture. Your app receives an OAuth grant when the user selects an account,
making it easier to sign the user in on other devices. <a href="http://android-developers.blogspot.com/2015/11/improvements-to-sign-in-with-google.html">Learn more</a><br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://4.bp.blogspot.com/-kSUK_emI8z8/VzuoCrzO1WI/AAAAAAAAC-E/ivROwzOkDh0o99Gc-E_X1uvQzvVRTOrfgCLcB/s1600/image02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-kSUK_emI8z8/VzuoCrzO1WI/AAAAAAAAC-E/ivROwzOkDh0o99Gc-E_X1uvQzvVRTOrfgCLcB/s320/image02.png" /></a></div>
<br />
<strong>Figure 4. New streamlined, one-tap sign-in experience</strong><br />
<br />
<h3 id="getting_id_token_from_googleauthutil_for_your_backend">
<strong>Getting ID Token from GoogleAuthUtil for your backend</strong></h3>
<br />
Before we released revamped <a href="http://android-developers.blogspot.com/2015/12/api-updates-for-sign-in-with-google.html">Sign-In API</a>, GoogleAuthUtil.getToken was the previously recommended way to retrieve an ID
token via a “magic string.”
<br />
<br />
<span style="color: red;"><strong>Wrong pattern, DO NOT COPY</strong></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-xKco0e2vjGA/VzupVPuRnVI/AAAAAAAAC-k/aW247cOlEkUPMVxe9BkhR5N4RJ_3B2jwgCLcB/s1600/image07.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-xKco0e2vjGA/VzupVPuRnVI/AAAAAAAAC-k/aW247cOlEkUPMVxe9BkhR5N4RJ_3B2jwgCLcB/s640/image07.png" /></a></div>
<br />
GoogleAuthUtil.getToken needs to take an email address, which usually leads to
the undesirable user experience in Figure 3. Also, user’s profile information
like name, profile picture url is valuable information to store in your server.
The ID token obtained via <a href="https://developers.google.com/identity/sign-in/android/">Auth.GOOGLE_SIGN_IN_API</a> will contain profile information and your server won’t need additional network
calls to retrieve them.

<br />
<strong>Solution
</strong>Switch to the <a href="https://developers.google.com/identity/sign-in/android/backend-auth">ID token flow</a> using the new <a href="https://developers.google.com/identity/sign-in/android/">Auth.GOOGLE_SIGN_IN_API</a> and get the one-tap experience. You can also check out <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">this blogpost</a> and the <a href="https://developers.google.com/identity/sign-in/android/migration-guide#migrate_from_the_googleauthutil_id_token_flow">migration guide</a> for more details.<br />
<br />
<h3 id="getting_auth_code_from_googleauthutil_for_your_backend">
<strong>Getting auth code from GoogleAuthUtil for your backend</strong></h3>
<br />
We once recommended using GoogleAuthUtil.getToken to retrieve a server auth
code via another “magic string.”<u>
<br />
<br />
<span style="color: red;"><strong></strong></span></u>Wrong pattern, DO NOT COPY<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://1.bp.blogspot.com/-K1Ntsla7-bQ/VzutfYG2AmI/AAAAAAAAC_Y/5hSRjUvYWpspcWjFVscr0bSNjVx45nzpwCLcB/s1600/image06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-K1Ntsla7-bQ/VzutfYG2AmI/AAAAAAAAC_Y/5hSRjUvYWpspcWjFVscr0bSNjVx45nzpwCLcB/s640/image06.png" /></a></div>
<br />
In addition to the possible redundant user experience in Figure 3, another
problem with this implementation was that if a user had signed in to your
application in the past and then switched to a new device, they would likely
see this confusing dialog:<br />
<a href="https://1.bp.blogspot.com/-xy6y3Gylwos/Vzup3t3g-AI/AAAAAAAAC-0/gKgmA2iwTz0a047-9JvKeXIJtkPJyc_2wCLcB/s1600/image05.png" imageanchor="1"><img border="0" src="https://1.bp.blogspot.com/-xy6y3Gylwos/Vzup3t3g-AI/AAAAAAAAC-0/gKgmA2iwTz0a047-9JvKeXIJtkPJyc_2wCLcB/s320/image05.png" /></a>

<br />
<strong>Figure 5. Confusing consent dialog for returned user if using
GoogleAuthUtil.getToken for auth code</strong><br />
<strong>Solution</strong><br />
<br />
To easily avoid this “Have offline access” consent dialog, you should switch to <a href="https://developers.google.com/identity/sign-in/android/offline-access#before_you_begin">server auth code flow</a> using the new <a href="https://developers.google.com/identity/sign-in/android/">Auth.GOOGLE_SIGN_IN_API </a>. We will issue you an auth code silently for a previously signed-in user.  You
can also check out <a href="http://android-developers.blogspot.com/2016/02/using-credentials-between-your-server.html">this blogpost</a> and <a href="https://developers.google.com/identity/sign-in/android/migration-guide#migrate_from_the_googleauthutil_server_auth_code_flow">migration guide</a> for more info. <br />
<br />
<h3 id="should_i_ever_use_googleauthutil_gettoken">
<strong>Should I ever use GoogleAuthUtil.getToken?</strong></h3>
<br />
In general, you should NOT use GoogleAuthUtil.getToken, unless you are making
REST API call on Android client. Use <a href="https://developers.google.com/identity/sign-in/android/">Auth.GOOGLE_SIGN_IN_API</a> instead. Whenever possible, use native Android API in Google Play services
SDK. You can check out those APIs at <a href="https://developers.google.com/android/">Google APIs for Android</a>.<br />
And starting from Google Play services SDK 9.0, you will need to include -auth SDK split to use GoogleAuthUtil.getToken and related classes<br />
AccountChangeEvent/AccountChangeEventsRequest/AccountChangeEventsResponse.<br />
<code>dependencies {
    compile 'com.google.android.gms:play-services-auth:9.0.0'
}</code>
</div>
]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/improving-the-security-and-user-experience-of-your-google-sign-in-implementation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Building better mobile apps for work</title>
		<link>https://googledata.org/google-android/building-better-mobile-apps-for-work/</link>
		<comments>https://googledata.org/google-android/building-better-mobile-apps-for-work/#comments</comments>
		<pubDate>Tue, 17 May 2016 15:58:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=c521b7c336cee2ebf9222ee670550567</guid>
		<description><![CDATA[<i></i><p>Posted by Matt Goodridge - Google Play for Work Product Manager</p>

<p>Last year, we introduced Android for Work, a program designed to pair the
strength of the Android platform with support from the rich ecosystem of OEMs
(device manufacturers like Samsung), EMMs (Enterprise Mobility Managers) and
carriers with the goal of transforming the workplace.  This means that
developers get the support they need to develop apps that configure to meet
business needs without customization.</p>

<p>With Android for Work, developers have been able to build apps for business and
make them available via Google Play for Work to all types of industries. No
matter the place or use case, Android for Work has helped lead businesses to
foster employee productivity and creativity through increased mobility. </p>

<div><a href="https://3.bp.blogspot.com/-CfFnE0sXdsc/Vzs70ZD_wVI/AAAAAAAAC7w/fW4q2TnqR-I3NP4iOFM17GD_9IZSJ7_9gCLcB/s1600/image00.jpg"><img border="0" src="https://3.bp.blogspot.com/-CfFnE0sXdsc/Vzs70ZD_wVI/AAAAAAAAC7w/fW4q2TnqR-I3NP4iOFM17GD_9IZSJ7_9gCLcB/s640/image00.jpg"></a></div>

<p>Today we are announcing  the Android for Work DevHub, a place for developers to
keep up with Android in the workplace and engage fellow business app developers
in an open forum. Android for Work DevHub members will receive access to Google
Play for Work and Android for Work product betas and developer events and will
have the opportunity to learn from Google experts on topics like how to:</p>

<ul><li> leverage tools and resources provided by the <a href="http://www.appconfig.org/">AppConfig</a> Community, which established a standard that provides Android developers a
simple way set up app configurations, 
  </li><li> improve app security by integrating with Android for Work APIs, 
  </li><li> get an app featured on Google Play for Work,
  </li><li> and more&#8230;
</li></ul><p>Among the early members of the Android for Work DevHub is Keeper, a
mobile-first company committed to securing corporate credentials and sensitive
information. Darren Guccione, Keeper&#8217;s CEO and co-founder, said: &#8220;Having our
team be able to talk with Google experts as a part of the Android for Work
DevHub has been very helpful in optimizing Keeper, as an essential product, for
the workplace.&#8221; In addition to Keeper, select developers across an array of
industries are already represented in the Android for Work DevHub, and&#8212;starting
today&#8212;any<a href="https://www.google.com/work/android/developers/applyDevHub/"> business developer can apply to become a member</a>, too.</p>

<p>To learn more about Android for Work, join us at Google I/O Thursday, May 19th
at 2pm on Stage 10 Cassiopeia.  I&#8217;ll be joined live on stage with James Kelly,
product manager in Android for Work and Rich Hyndman, and Android developer
advocate, to walk through the latest developments in Android for Work that will
help you make awesome apps for businesses and to meet the Android for Work team
in-person at our  shop to see the Android for Work retail
experience.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Matt Goodridge - Google Play for Work Product Manager</p></i>

<p>Last year, we introduced Android for Work, a program designed to pair the
strength of the Android platform with support from the rich ecosystem of OEMs
(device manufacturers like Samsung), EMMs (Enterprise Mobility Managers) and
carriers with the goal of transforming the workplace.  This means that
developers get the support they need to develop apps that configure to meet
business needs without customization.</p>

<p>With Android for Work, developers have been able to build apps for business and
make them available via Google Play for Work to all types of industries. No
matter the place or use case, Android for Work has helped lead businesses to
foster employee productivity and creativity through increased mobility. </p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-CfFnE0sXdsc/Vzs70ZD_wVI/AAAAAAAAC7w/fW4q2TnqR-I3NP4iOFM17GD_9IZSJ7_9gCLcB/s1600/image00.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-CfFnE0sXdsc/Vzs70ZD_wVI/AAAAAAAAC7w/fW4q2TnqR-I3NP4iOFM17GD_9IZSJ7_9gCLcB/s640/image00.jpg" /></a></div>

<p>Today we are announcing  the Android for Work DevHub, a place for developers to
keep up with Android in the workplace and engage fellow business app developers
in an open forum. Android for Work DevHub members will receive access to Google
Play for Work and Android for Work product betas and developer events and will
have the opportunity to learn from Google experts on topics like how to:</p>

<ul>
  <li> leverage tools and resources provided by the <a href="http://www.appconfig.org/">AppConfig</a> Community, which established a standard that provides Android developers a
simple way set up app configurations, 
  <li> improve app security by integrating with Android for Work APIs, 
  <li> get an app featured on Google Play for Work,
  <li> and more…
</ul>

<p>Among the early members of the Android for Work DevHub is Keeper, a
mobile-first company committed to securing corporate credentials and sensitive
information. Darren Guccione, Keeper’s CEO and co-founder, said: “Having our
team be able to talk with Google experts as a part of the Android for Work
DevHub has been very helpful in optimizing Keeper, as an essential product, for
the workplace.” In addition to Keeper, select developers across an array of
industries are already represented in the Android for Work DevHub, and—starting
today—any<a href="https://www.google.com/work/android/developers/applyDevHub/"> business developer can apply to become a member</a>, too.</p>

<p>To learn more about Android for Work, join us at Google I/O Thursday, May 19th
at 2pm on Stage 10 Cassiopeia.  I’ll be joined live on stage with James Kelly,
product manager in Android for Work and Rich Hyndman, and Android developer
advocate, to walk through the latest developments in Android for Work that will
help you make awesome apps for businesses and to meet the Android for Work team
in-person at our <SweetBytes> shop to see the Android for Work retail
experience.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/building-better-mobile-apps-for-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Designing for Multi-Window</title>
		<link>https://googledata.org/google-android/designing-for-multi-window/</link>
		<comments>https://googledata.org/google-android/designing-for-multi-window/#comments</comments>
		<pubDate>Thu, 12 May 2016 01:13:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

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

<p>As a developer, there&#8217;s a wide range of <a href="http://developer.android.com/preview/api-overview.html?utm_campaign=android_series_design_multiwindow_blog_051116&#38;utm_source=anddev&#38;utm_medium=blog">features added in Android N</a> <a href="http://developer.android.com/preview/api-overview.html">to take advantage of</a>, but when it comes to <strong>designing</strong> and building your UI, having strong <a href="http://developer.android.com/preview/features/multi-window.html?utm_campaign=android_series_design_multiwindow_blog_051116&#38;utm_source=anddev&#38;utm_medium=blog">multi-window support</a> should be at the forefront.</p>

<p>The primary mode that users will be interacting with multi-window is through <strong>split-screen mode</strong>, which is available on both handheld devices and larger tablets. In this mode,
two apps split the available screen space and the user can drag the divider
between the two split screens to resize the apps. As you might imagine, this
mode offers some unique design challenges beyond what was needed previously.</p>

<h3><strong>An even more responsive UI</strong></h3>


<p>The lessons learned from previous versions of Android, the mobile web, and
desktop environments still apply to Android N. Designing a <a href="https://www.google.com/design/spec/layout/responsive-ui.html?utm_campaign=android_series_design_multiwindow_blog_051116&#38;utm_source=anddev&#38;utm_medium=blog">responsive UI</a> is still an important first step towards an amazing multi-window experience.</p>

<div><a href="https://1.bp.blogspot.com/--GKdCDLqZ8A/VzPJuFycg3I/AAAAAAAAC7Q/a6F-DKHdjF0v3viV_Wl-F33AS4zsmxrWACLcB/s1600/image00.png"><img border="0" src="https://1.bp.blogspot.com/--GKdCDLqZ8A/VzPJuFycg3I/AAAAAAAAC7Q/a6F-DKHdjF0v3viV_Wl-F33AS4zsmxrWACLcB/s640/image00.png"></a></div>

<p>A responsive UI is one that adapts to the size provided, picking the best
representation of the content and the appropriate <a href="https://www.google.com/design/spec/patterns/navigation.html?utm_campaign=android_series_design_multiwindow_blog_051116&#38;utm_source=anddev&#38;utm_medium=blog">navigation patterns</a> to make a great user experience on any device. Check out the <strong><a href="https://medium.com/google-developers/building-a-responsive-ui-in-android-7dc7e4efcbb3?utm_campaign=android_series_design_multiwindow_blog_051116&#38;utm_source=anddev&#38;utm_medium=blog">Building a Responsive UI blog post</a></strong> for details on how to design and build an effective responsive UI.</p>

<h3><strong>Adapting your layout</strong></h3>


<p>As you&#8217;re designing layouts for the largest and smallest screens and everything
in between, it is important to make resizing a smooth and seamless transition
as mentioned in the <a href="https://www.google.com/design/spec/layout/split-screen.html?utm_campaign=android_series_design_multiwindow_blog_051116&#38;utm_source=anddev&#38;utm_medium=blog#split-screen-layout">split screen layout guidelines</a>. If you already have a similar layout between mobile and tablet, you&#8217;ll find
much of your work taken care of for you.</p>

<p>However, if your mobile and tablet layouts are vastly different and there&#8217;s no
way to smoothly transition between the two, <strong>you should not transition between them</strong> when resizing. Instead, focus on making your tablet UI scale down using the
same responsive UI patterns. This ensures that users do not have to relearn
their UI when resizing your app.</p>

<p>Note that the <code>minimalHeight</code> and <code>minimalWidth</code> <a href="http://developer.android.com/preview/features/multi-window.html?utm_campaign=android_series_design_multiwindow_blog_051116&#38;utm_source=anddev&#38;utm_medium=blog#layout">layout attributes</a> allow you to set a minimum size you want reported to your Activity, but they
do <strong>not</strong> mean the user cannot resize your activity smaller - it actually means that
your activity will be cropped to the size the user requests, potentially
forcing elements of your UI off the screen. Strive to support down to the
minimum size of 220x220dp.</p>

<h3><strong>Design configurations to consider</strong></h3>


<p>While many of the sizes and aspect ratios possible in multi-window are similar
to existing devices (1/3rd of a landscape tablet is similar to existing mobile
devices in screen size), there are a few configurations that are much more
common when considering multi-window.</p>

<div><a href="https://3.bp.blogspot.com/-8waL89ybuXc/VzPKIbV2yWI/AAAAAAAAC7U/ZZ82eirfU3gJZMrpjZ7YV6LO0SIAdmmWQCLcB/s1600/image01.png"><img border="0" src="https://3.bp.blogspot.com/-8waL89ybuXc/VzPKIbV2yWI/AAAAAAAAC7U/ZZ82eirfU3gJZMrpjZ7YV6LO0SIAdmmWQCLcB/s640/image01.png"></a></div>

<p>The first is a 16x9 layout on mobile devices in portrait. In this case, the
vertical space is extremely limited. If you have a number of fixed elements
stacked on top of one another (a toolbar, scrolling content, and a bottom
navigation bar), you might find there&#8217;s not actually any room for the scrolling
content - the most important part!</p>

<p>The second case to consider is the 34.15% layout on tablets. The very wide
aspect ratio in device portrait or very tall aspect ratio in device landscape
orientation are more extreme than what is found on existing devices. Consider
using your mobile layouts as a starting point for this configuration.</p>

<h3><strong>Patterns to avoid</strong></h3>


<p>When it comes to multi-window, there are a few patterns you want to avoid
entirely.</p>

<p>The first is UI interactions that rely on swiping from the edge of the screen.
This has already been somewhat of an issue when it comes to the on screen
navigation bar prominent on many devices (such as Nexus devices), but is even
more so in split-screen mode. Since there is (purposefully) no way to determine
if your activity is on the top or bottom or the left or the right, <strong>don&#8217;t make edge swipes the only way to access functionality in your app</strong>. That doesn&#8217;t mean you have to avoid them entirely - just make sure there is
an alternative. A good example of this is the temporary <a href="https://www.google.com/design/spec/patterns/navigation-drawer.html?utm_campaign=android_series_design_multiwindow_blog_051116&#38;utm_source=anddev&#38;utm_medium=blog#navigation-drawer-behavior">navigation drawer</a> - an edge swipe opens the drawer, but it is also accessible by pressing the
hamburger icon in the toolbar.</p>

<p>The second is disabling multi-window entirely. While there are certainly cases
where this makes sense (i.e., it is fundamentally an immersive experience such
as a game), there are also cases where your activity and any Activities
launched from that Activity are <strong>forced</strong> to support multi-window. As mentioned in the <strong><a href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64?utm_campaign=android_series_design_multiwindow_blog_051116&#38;utm_source=anddev&#38;utm_medium=blog#5895">Preparing for Multi-Window blog post</a></strong>, when you support external apps launching your activity, <strong>your activity inherits the multi-window properties of the calling Activity.</strong></p>

<h3><strong>Designing for Multi-Window is designing for every device</strong></h3>


<p>Building a responsive UI that reacts to the space available is critical to a
great multi-window experience, but it is an exercise that can benefit all of
your users across the wide variety of Android devices.</p>

<p>So use this as an opportunity to #BuildBetterApps</p>

<p>Follow the <a href="https://plus.google.com/collection/sLR0p?utm_campaign=android_series_design_multiwindow_blog_051116&#38;utm_source=anddev&#38;utm_medium=blog">Android Development Patterns Collection</a> for more!</p>

<div><a href="https://plus.google.com/collection/sLR0p?utm_campaign=android_series_design_multiwindow_blog_051116&#38;utm_source=anddev&#38;utm_medium=blog"><img border="0" src="https://4.bp.blogspot.com/-wU5JfO0J0uA/VzPKidXS-8I/AAAAAAAAC7c/eq-qanWn3FQcYuI-EZYfB5hKlrkDGVO_gCLcB/s300/image02.png"></a></div>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by <a href="https://plus.google.com/+IanLake">Ian Lake</a>, Developer Advocate</p></i>

<p>As a developer, there’s a wide range of <a href="http://developer.android.com/preview/api-overview.html?utm_campaign=android_series_design_multiwindow_blog_051116&utm_source=anddev&utm_medium=blog">features added in Android N</a> <a href="http://developer.android.com/preview/api-overview.html">to take advantage of</a>, but when it comes to <strong>designing</strong> and building your UI, having strong <a href="http://developer.android.com/preview/features/multi-window.html?utm_campaign=android_series_design_multiwindow_blog_051116&utm_source=anddev&utm_medium=blog">multi-window support</a> should be at the forefront.</p>

<p>The primary mode that users will be interacting with multi-window is through <strong>split-screen mode</strong>, which is available on both handheld devices and larger tablets. In this mode,
two apps split the available screen space and the user can drag the divider
between the two split screens to resize the apps. As you might imagine, this
mode offers some unique design challenges beyond what was needed previously.</p>

<h3 id=an_even_more_responsive_ui><strong>An even more responsive UI</strong></h3>


<p>The lessons learned from previous versions of Android, the mobile web, and
desktop environments still apply to Android N. Designing a <a href="https://www.google.com/design/spec/layout/responsive-ui.html?utm_campaign=android_series_design_multiwindow_blog_051116&utm_source=anddev&utm_medium=blog">responsive UI</a> is still an important first step towards an amazing multi-window experience.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/--GKdCDLqZ8A/VzPJuFycg3I/AAAAAAAAC7Q/a6F-DKHdjF0v3viV_Wl-F33AS4zsmxrWACLcB/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/--GKdCDLqZ8A/VzPJuFycg3I/AAAAAAAAC7Q/a6F-DKHdjF0v3viV_Wl-F33AS4zsmxrWACLcB/s640/image00.png" /></a></div>

<p>A responsive UI is one that adapts to the size provided, picking the best
representation of the content and the appropriate <a href="https://www.google.com/design/spec/patterns/navigation.html?utm_campaign=android_series_design_multiwindow_blog_051116&utm_source=anddev&utm_medium=blog">navigation patterns</a> to make a great user experience on any device. Check out the <strong><a href="https://medium.com/google-developers/building-a-responsive-ui-in-android-7dc7e4efcbb3?utm_campaign=android_series_design_multiwindow_blog_051116&utm_source=anddev&utm_medium=blog">Building a Responsive UI blog post</a></strong> for details on how to design and build an effective responsive UI.</p>

<h3 id=adapting_your_layout><strong>Adapting your layout</strong></h3>


<p>As you’re designing layouts for the largest and smallest screens and everything
in between, it is important to make resizing a smooth and seamless transition
as mentioned in the <a href="https://www.google.com/design/spec/layout/split-screen.html?utm_campaign=android_series_design_multiwindow_blog_051116&utm_source=anddev&utm_medium=blog#split-screen-layout">split screen layout guidelines</a>. If you already have a similar layout between mobile and tablet, you’ll find
much of your work taken care of for you.</p>

<p>However, if your mobile and tablet layouts are vastly different and there’s no
way to smoothly transition between the two, <strong>you should not transition between them</strong> when resizing. Instead, focus on making your tablet UI scale down using the
same responsive UI patterns. This ensures that users do not have to relearn
their UI when resizing your app.</p>

<p>Note that the <code>minimalHeight</code> and <code>minimalWidth</code> <a href="http://developer.android.com/preview/features/multi-window.html?utm_campaign=android_series_design_multiwindow_blog_051116&utm_source=anddev&utm_medium=blog#layout">layout attributes</a> allow you to set a minimum size you want reported to your Activity, but they
do <strong>not</strong> mean the user cannot resize your activity smaller - it actually means that
your activity will be cropped to the size the user requests, potentially
forcing elements of your UI off the screen. Strive to support down to the
minimum size of 220x220dp.</p>

<h3 id=design_configurations_to_consider><strong>Design configurations to consider</strong></h3>


<p>While many of the sizes and aspect ratios possible in multi-window are similar
to existing devices (1/3rd of a landscape tablet is similar to existing mobile
devices in screen size), there are a few configurations that are much more
common when considering multi-window.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-8waL89ybuXc/VzPKIbV2yWI/AAAAAAAAC7U/ZZ82eirfU3gJZMrpjZ7YV6LO0SIAdmmWQCLcB/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-8waL89ybuXc/VzPKIbV2yWI/AAAAAAAAC7U/ZZ82eirfU3gJZMrpjZ7YV6LO0SIAdmmWQCLcB/s640/image01.png" /></a></div>

<p>The first is a 16x9 layout on mobile devices in portrait. In this case, the
vertical space is extremely limited. If you have a number of fixed elements
stacked on top of one another (a toolbar, scrolling content, and a bottom
navigation bar), you might find there’s not actually any room for the scrolling
content - the most important part!</p>

<p>The second case to consider is the 34.15% layout on tablets. The very wide
aspect ratio in device portrait or very tall aspect ratio in device landscape
orientation are more extreme than what is found on existing devices. Consider
using your mobile layouts as a starting point for this configuration.</p>

<h3 id=patterns_to_avoid><strong>Patterns to avoid</strong></h3>


<p>When it comes to multi-window, there are a few patterns you want to avoid
entirely.</p>

<p>The first is UI interactions that rely on swiping from the edge of the screen.
This has already been somewhat of an issue when it comes to the on screen
navigation bar prominent on many devices (such as Nexus devices), but is even
more so in split-screen mode. Since there is (purposefully) no way to determine
if your activity is on the top or bottom or the left or the right, <strong>don’t make edge swipes the only way to access functionality in your app</strong>. That doesn’t mean you have to avoid them entirely - just make sure there is
an alternative. A good example of this is the temporary <a href="https://www.google.com/design/spec/patterns/navigation-drawer.html?utm_campaign=android_series_design_multiwindow_blog_051116&utm_source=anddev&utm_medium=blog#navigation-drawer-behavior">navigation drawer</a> - an edge swipe opens the drawer, but it is also accessible by pressing the
hamburger icon in the toolbar.</p>

<p>The second is disabling multi-window entirely. While there are certainly cases
where this makes sense (i.e., it is fundamentally an immersive experience such
as a game), there are also cases where your activity and any Activities
launched from that Activity are <strong>forced</strong> to support multi-window. As mentioned in the <strong><a href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64?utm_campaign=android_series_design_multiwindow_blog_051116&utm_source=anddev&utm_medium=blog#5895">Preparing for Multi-Window blog post</a></strong>, when you support external apps launching your activity, <strong>your activity inherits the multi-window properties of the calling Activity.</strong></p>

<h3 id=designing_for_multi-window_is_designing_for_every_device><strong>Designing for Multi-Window is designing for every device</strong></h3>


<p>Building a responsive UI that reacts to the space available is critical to a
great multi-window experience, but it is an exercise that can benefit all of
your users across the wide variety of Android devices.</p>

<p>So use this as an opportunity to #BuildBetterApps</p>

<p>Follow the <a href="https://plus.google.com/collection/sLR0p?utm_campaign=android_series_design_multiwindow_blog_051116&utm_source=anddev&utm_medium=blog">Android Development Patterns Collection</a> for more!</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://plus.google.com/collection/sLR0p?utm_campaign=android_series_design_multiwindow_blog_051116&utm_source=anddev&utm_medium=blog"><img border="0" src="https://4.bp.blogspot.com/-wU5JfO0J0uA/VzPKidXS-8I/AAAAAAAAC7c/eq-qanWn3FQcYuI-EZYfB5hKlrkDGVO_gCLcB/s300/image02.png" /></a></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/designing-for-multi-window/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Introducing the second class of Launchpad Accelerator</title>
		<link>https://googledata.org/google-android/introducing-the-second-class-of-launchpad-accelerator/</link>
		<comments>https://googledata.org/google-android/introducing-the-second-class-of-launchpad-accelerator/#comments</comments>
		<pubDate>Wed, 11 May 2016 19:19:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=ead8746366ac6975625ee3c694429b3d</guid>
		<description><![CDATA[<i></i><p>Originally posted on <a href="https://developers.googleblog.com/2016/05/introducing-second-class-of-launchpad.html">Google Developers blog</a></p>

<i></i><p>Roy Glasberg, Global Lead, Launchpad Program &#38; Accelerator</p>

<p>This week <a href="https://developers.google.com/startups/accelerator/">Launchpad Accelerator</a> announces its second class, which includes 24 promising startups from around
the world. While the number of accelerators is at an <a href="http://www.seed-db.com/accelerators">all-time high</a>, we take a different approach with Launchpad Accelerator, a program that
exclusively works with late-stage tech startups in emerging markets -- Brazil,
Indonesia, India and Mexico. </p>

<p>See what it&#8217;s like to participate in the Accelerator.</p>


<!--[Interactive video]  --><br /><p>&#8220;We provide comprehensive mentorship that delivers results,&#8221; says<a href="https://developers.google.com/experts/people/jacob-greenshpan"> Jacob Greenshpan</a>, one of Launchpad&#8217;s lead mentors. &#8220;We start by running a &#8216;patient diagnostic&#8217;
to determine each startup&#8217;s critical challenges, and then deploy precise
mentorship, actionable solutions, and Google resources that enables the app to
scale.&#8221; </p>

<p>Class 2 kicks off June 13. The startups will descend on Google HQ for an
intensive 2 week bootcamp. Under the tutelage of Google product teams and
mentors from the global Launchpad network, they will receive intensive,
targeted mentoring, equity-free funding, and more benefits during the 6-month
program. </p>

<p>Here&#8217;s the full list of startups (by country):</p>

<h3>Brazil</h3>

<table border="1" cellpadding="3" cellspacing="3"><tr><td><a href="https://www.bankfacil.com.br/">BankFacil</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.el.empregoligado&#38;referrer=utm_source%3Dsite%26utm_medium%3Dhome-b2c%26utm_content%3Dtudo:tudo:home:160307%26utm_campaign%3Ddownload:tudo:tudo&#38;e=-EnableAppDetailsPageRedesign">Emprego Ligado</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.ioasys.appprova&#38;e=-EnableAppDetailsPageRedesign">AppProva</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=br.com.getninjas.pro&#38;referrer=utm_source%3Dgetninjas%26utm_medium%3Dsite%26utm_campaign%3Dhome&#38;e=-EnableAppDetailsPageRedesign">GetNinjas</a></td>
  <td><a href="http://www.edools.com/en">Edools</a></td>
                <td><a href="https://play.google.com/store/apps/details?id=com.lovemondays.app&#38;e=-EnableAppDetailsPageRedesign">Love Mondays</a></td>
 </tr><tr><td><div><a href="https://3.bp.blogspot.com/-T1r7TKf62is/VzNZTKx6PrI/AAAAAAAABfA/TPBEp06VnpY0iuXrXfXti-Ids3CO_9NMACLcB/s60/image11.png"><img border="0" src="https://3.bp.blogspot.com/-T1r7TKf62is/VzNZTKx6PrI/AAAAAAAABfA/TPBEp06VnpY0iuXrXfXti-Ids3CO_9NMACLcB/s150/image11.png"></a></div></td>
  <td><a href="https://1.bp.blogspot.com/-7FrdoobW1FI/VzNbmiygyxI/AAAAAAAABfM/oVecEgEzO80wHz0djElWPPckff6JcyroACLcB/s150/image04.png"><img border="0" src="https://1.bp.blogspot.com/-7FrdoobW1FI/VzNbmiygyxI/AAAAAAAABfM/oVecEgEzO80wHz0djElWPPckff6JcyroACLcB/s90/image04.png"></a></td>
  <td><a href="https://1.bp.blogspot.com/-zhW0ZyyjusI/VzNb6DtmrEI/AAAAAAAABfU/X8Tae2Mdh_cEtIKmLUalqp25Ki7XN_azQCLcB/s1600/image15.png"><img border="0" src="https://1.bp.blogspot.com/-zhW0ZyyjusI/VzNb6DtmrEI/AAAAAAAABfU/X8Tae2Mdh_cEtIKmLUalqp25Ki7XN_azQCLcB/s100/image15.png"></a></td>
  <td><a href="https://3.bp.blogspot.com/-VHVSchmil4g/VzNcK-ASCiI/AAAAAAAABfY/p6vwaokHcbYAD8fH12Xoem2RXUMF8gP7QCLcB/s1600/image10.png"><img border="0" src="https://3.bp.blogspot.com/-VHVSchmil4g/VzNcK-ASCiI/AAAAAAAABfY/p6vwaokHcbYAD8fH12Xoem2RXUMF8gP7QCLcB/s90/image10.png"></a></td>
  <td><a href="https://3.bp.blogspot.com/-tKtyAYC4UeM/VzNchJPyBsI/AAAAAAAABfg/CcaJrZJ2fnEZiXz4A6KuX0PIKU6rSqsfgCLcB/s1600/image21.png"><img border="0" src="https://3.bp.blogspot.com/-tKtyAYC4UeM/VzNchJPyBsI/AAAAAAAABfg/CcaJrZJ2fnEZiXz4A6KuX0PIKU6rSqsfgCLcB/s90/image21.png"></a></td>
  <td><a href="https://2.bp.blogspot.com/-MDIy-VOGxsQ/VzNcqXiMjcI/AAAAAAAABfk/GN1HbqGkfLQR_nD9w5Vbqpa-nWNrSl-QwCLcB/s1600/image01.png"><img border="0" src="https://2.bp.blogspot.com/-MDIy-VOGxsQ/VzNcqXiMjcI/AAAAAAAABfk/GN1HbqGkfLQR_nD9w5Vbqpa-nWNrSl-QwCLcB/s100/image01.png"></a></td>
 </tr></table><h3>Indonesia</h3>

<table border="1" cellpadding="3" cellspacing="3"><tr><td><a href="https://www.hijup.com/">HijUp</a></td>
  <td><a href="https://talenta.co/">Talenta</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.jarvisstore&#38;e=-EnableAppDetailsPageRedesign">Jarvis Store</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.ruangguru.livestudents&#38;e=-EnableAppDetailsPageRedesign">Ruangguru</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.idntimes.idntimes&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">IDNtimes</a></td>
                <td><a href="https://www.codapay.com/">Codapay</a></td>
 </tr><tr><td><div><a href="https://3.bp.blogspot.com/-YeJAeREPS0Y/VzNdPhs8KHI/AAAAAAAABfs/_KyyWgoqonAM6omFInIs9LrHupumxqqTwCLcB/s1600/image12.png"><img border="0" src="https://3.bp.blogspot.com/-YeJAeREPS0Y/VzNdPhs8KHI/AAAAAAAABfs/_KyyWgoqonAM6omFInIs9LrHupumxqqTwCLcB/s90/image12.png"></a></div></td>
  <td><a href="https://2.bp.blogspot.com/-eHAqRLe1qjo/VzNdd-rzw8I/AAAAAAAABf0/OyXn_pdnzMQt9q2eIVD30FBqV9y7bUScgCLcB/s1600/image13.png"><img border="0" src="https://2.bp.blogspot.com/-eHAqRLe1qjo/VzNdd-rzw8I/AAAAAAAABf0/OyXn_pdnzMQt9q2eIVD30FBqV9y7bUScgCLcB/s90/image13.png"></a></td>
  <td><a href="https://3.bp.blogspot.com/-pNzd4YFrxYI/VzNdnlUS7EI/AAAAAAAABf4/rneFdoJKzYw48AMEIZp1yr1zIUgHOOAggCLcB/s1600/image09.png"><img border="0" src="https://3.bp.blogspot.com/-pNzd4YFrxYI/VzNdnlUS7EI/AAAAAAAABf4/rneFdoJKzYw48AMEIZp1yr1zIUgHOOAggCLcB/s90/image09.png"></a></td>
  <td><a href="https://3.bp.blogspot.com/-L4QMqxxQ-qM/VzNd0mSFngI/AAAAAAAABgA/fSC2V2zX3PQgOmDnkM8h253i6bGuSpHyACLcB/s1600/image03.png"><img border="0" src="https://3.bp.blogspot.com/-L4QMqxxQ-qM/VzNd0mSFngI/AAAAAAAABgA/fSC2V2zX3PQgOmDnkM8h253i6bGuSpHyACLcB/s90/image03.png"></a></td>
  <td><a href="https://4.bp.blogspot.com/-Z9MkAoOIEUU/VzNd_I1NI9I/AAAAAAAABgE/q9KRsu5cnbg_3wjjy8TsVi49GO9ZCEoCgCLcB/s1600/image05.png"><img border="0" src="https://4.bp.blogspot.com/-Z9MkAoOIEUU/VzNd_I1NI9I/AAAAAAAABgE/q9KRsu5cnbg_3wjjy8TsVi49GO9ZCEoCgCLcB/s90/image05.png"></a></td>
  <td><a href="https://1.bp.blogspot.com/-b7oRptrIxb0/VzNeF2anVPI/AAAAAAAABgI/2_1HQVpwq1I4AXgVyErTxiUGX6QDx3eOACLcB/s1600/image02.png"><img border="0" src="https://1.bp.blogspot.com/-b7oRptrIxb0/VzNeF2anVPI/AAAAAAAABgI/2_1HQVpwq1I4AXgVyErTxiUGX6QDx3eOACLcB/s90/image02.png"></a></td>
 </tr></table><h3>India</h3>

<table border="1" cellpadding="3" cellspacing="3"><tr><td><a href="https://play.google.com/store/apps/details?id=com.taskbob.http.taskbob&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Taskbob</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.freeit.java&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Programming Hub</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=in.mohalla.sharechat&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">ShareChat</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.redcarpetup.rewardpay&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">RedCarpet</a></td>
  <td><a href="https://play.google.com/store/apps/developer?id=PlaySimple%20Games&#38;hl=en">PlaySimple Games</a></td>
                <td><a href="https://play.google.com/store/apps/details?id=com.magicpin.local&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">MagicPin</a></td>
 </tr><tr><td><a href="https://2.bp.blogspot.com/-WPBjhkGu_lw/VzNel0SSujI/AAAAAAAABgQ/dKGOG9OU5SAhL1glpMey4A_LTPYg5v7fACLcB/s1600/image14.png"><img border="0" src="https://2.bp.blogspot.com/-WPBjhkGu_lw/VzNel0SSujI/AAAAAAAABgQ/dKGOG9OU5SAhL1glpMey4A_LTPYg5v7fACLcB/s90/image14.png"></a></td>
  <td><a href="https://1.bp.blogspot.com/-X0jhOCHYulc/VzNes0Dq_8I/AAAAAAAABgU/lWMsCx__41QALuVa2TuAAF6J2iB4TnYhACLcB/s1600/image08.png"><img border="0" src="https://1.bp.blogspot.com/-X0jhOCHYulc/VzNes0Dq_8I/AAAAAAAABgU/lWMsCx__41QALuVa2TuAAF6J2iB4TnYhACLcB/s90/image08.png"></a></td>
  <td><a href="https://2.bp.blogspot.com/-X9HLDcdd0ak/VzNe16KtsVI/AAAAAAAABgc/Mb9K3UVkTac3cPipckjkOGVI-JbPCK26QCLcB/s1600/image17.png"><img border="0" src="https://2.bp.blogspot.com/-X9HLDcdd0ak/VzNe16KtsVI/AAAAAAAABgc/Mb9K3UVkTac3cPipckjkOGVI-JbPCK26QCLcB/s90/image17.png"></a></td>
  <td><a href="https://4.bp.blogspot.com/-P_YHpVTUtxM/VzNfF7i50OI/AAAAAAAABgg/7QxvaEsNaSAN6sdREBlzSyiRmFC3MKnlQCLcB/s1600/image22.png"><img border="0" src="https://4.bp.blogspot.com/-P_YHpVTUtxM/VzNfF7i50OI/AAAAAAAABgg/7QxvaEsNaSAN6sdREBlzSyiRmFC3MKnlQCLcB/s90/image22.png"></a></td>
  <td><a href="https://1.bp.blogspot.com/-CjQg7V2d-dY/VzNfNBI2uhI/AAAAAAAABgo/Y41VBIa6lU4aXgTamfUYAgzDPHoivLY0ACLcB/s1600/image07.png"><img border="0" src="https://1.bp.blogspot.com/-CjQg7V2d-dY/VzNfNBI2uhI/AAAAAAAABgo/Y41VBIa6lU4aXgTamfUYAgzDPHoivLY0ACLcB/s90/image07.png"></a></td>
  <td><a href="https://1.bp.blogspot.com/-nzW7sSvFmVg/VzNfW5DEvrI/AAAAAAAABgs/o8OhgCAGaPMLo9KnhwH5aJloQ0pPx8ixQCLcB/s1600/image18.png"><img border="0" src="https://1.bp.blogspot.com/-nzW7sSvFmVg/VzNfW5DEvrI/AAAAAAAABgs/o8OhgCAGaPMLo9KnhwH5aJloQ0pPx8ixQCLcB/s90/image18.png"></a></td>
 </tr></table><h3>Mexico</h3>

<table border="1" cellpadding="3" cellspacing="3"><tr><td><a href="https://aliada.mx/">Aliada</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.safertaxi&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">SaferTaxi</a></td>
  <td><a href="https://www.conekta.io/en">Conekta</a></td>
  <td><a href="https://konfio.mx/">Konfio</a></td>
  <td><a href="https://www.kichink.com/">Kichink</a></td>
                <td><a href="http://www.miroculus.com/">Miroculus</a></td>
 </tr><tr><td><a href="https://3.bp.blogspot.com/-YflT0K5mR7w/VzNfxAucKSI/AAAAAAAABg0/iOgP-XtcXq43PzyRRpWC4Qvgp51mAU7agCLcB/s1600/image00.png"><img border="0" src="https://3.bp.blogspot.com/-YflT0K5mR7w/VzNfxAucKSI/AAAAAAAABg0/iOgP-XtcXq43PzyRRpWC4Qvgp51mAU7agCLcB/s90/image00.png"></a></td>
  <td><a href="https://2.bp.blogspot.com/-E3pQSpQvTRo/VzNf4OCqNNI/AAAAAAAABg8/nRiD8FiBu4AzalJ8VjfTDbVvmVlX_pfQQCLcB/s1600/image20.png"><img border="0" src="https://2.bp.blogspot.com/-E3pQSpQvTRo/VzNf4OCqNNI/AAAAAAAABg8/nRiD8FiBu4AzalJ8VjfTDbVvmVlX_pfQQCLcB/s90/image20.png"></a></td>
  <td><a href="https://1.bp.blogspot.com/-q7WxEGnIQmM/VzNgB4vVYHI/AAAAAAAABhE/I6G-jBWMyXw9a2Y3xsjyTKcO0wCKbB6cwCLcB/s1600/image16.png"><img border="0" src="https://1.bp.blogspot.com/-q7WxEGnIQmM/VzNgB4vVYHI/AAAAAAAABhE/I6G-jBWMyXw9a2Y3xsjyTKcO0wCKbB6cwCLcB/s90/image16.png"></a></td>
  <td><a href="https://1.bp.blogspot.com/-cWnZARgdLBQ/VzNgMHz6_-I/AAAAAAAABhI/2aUnrgta1X8sQLsueb7r-SRTM1emED1ogCLcB/s1600/image23.png"><img border="0" src="https://1.bp.blogspot.com/-cWnZARgdLBQ/VzNgMHz6_-I/AAAAAAAABhI/2aUnrgta1X8sQLsueb7r-SRTM1emED1ogCLcB/s90/image23.png"></a></td>
  <td><a href="https://3.bp.blogspot.com/-q88PH3cWYiI/VzNgYNz0WRI/AAAAAAAABhM/bL1lUjHxOgUMGM8F2kB7OrE0Ut8GEiZlACLcB/s1600/image19.png"><img border="0" src="https://3.bp.blogspot.com/-q88PH3cWYiI/VzNgYNz0WRI/AAAAAAAABhM/bL1lUjHxOgUMGM8F2kB7OrE0Ut8GEiZlACLcB/s90/image19.png"></a></td>
  <td><a href="https://3.bp.blogspot.com/-RfsoIFzlTVo/VzNgiKrRUHI/AAAAAAAABhU/9uLeHtmOFREU2bz-t_b_D68wHB6g216_wCLcB/s1600/image06.png"><img border="0" src="https://3.bp.blogspot.com/-RfsoIFzlTVo/VzNgiKrRUHI/AAAAAAAABhU/9uLeHtmOFREU2bz-t_b_D68wHB6g216_wCLcB/s90/image06.png"></a></td>
 </tr></table><p><strong>Google&#8217;s &#8220;Scalerator&#8221; Drives Results for Alumni </strong></p>

<p>What advice do Class 1 alumni give to the new intake? &#8220;Come to the accelerator
with an open mind. You will be shocked to find how many things are going wrong
in your app. Thankfully the mentors will help you implement better solutions,&#8221;
says Vinicius Heimbeck, Founder of Brazilian mobile game developer UpBeat
Games.</p>

<p>UpBeat Games had more than 1,000% increase in daily app installations in Asia
during the period of a feature, as well as a 200% overall increase in active
users after following a long list of improvements Accelerator mentors
suggested. &#8220;We made optimizations that led us to be featured in Google Play,
which changed everything for us.&#8221; 

</p><p>See Upbeat Games at the Accelerator in <a href="https://www.youtube.com/watch?v=4RQkpR4-YtE&#38;feature=youtu.be">this video</a>.</p>

<p>&#8220;Believe you can build a world class product. The mentors will push you to bet
on yourself,&#8221; says Amarendra Sahu, Nestaway Co-founder and Class 1 alumni.
NestAway just closed a <a href="http://techcrunch.com/2016/04/19/nestaway/">$30M Series C</a>, one of the largest investment rounds in India this year. </p>

<p>&#8220;Your biggest enemy is not failure; it is the temptation to be ordinary. But
the mentors will push you to build an extraordinary product and scale an
extraordinary startup," says eFishery Co-founder and CEO Gibran Chuzaefah Amsi
El Farizy, who was announced as one of the <a href="https://e27.co/top-27-innovators-who-pushed-indonesian-startups-forward-20160329/">top 27 </a>leaders in Indonesia&#8217;s startup ecosystem, after participating in the
Accelerator program. </p>]]></description>
				<content:encoded><![CDATA[<i><p>Originally posted on <a href="https://developers.googleblog.com/2016/05/introducing-second-class-of-launchpad.html">Google Developers blog</a></p></i>

<i><p>Roy Glasberg, Global Lead, Launchpad Program & Accelerator</p></i>

<p>This week <a href="https://developers.google.com/startups/accelerator/">Launchpad Accelerator</a> announces its second class, which includes 24 promising startups from around
the world. While the number of accelerators is at an <a href="http://www.seed-db.com/accelerators">all-time high</a>, we take a different approach with Launchpad Accelerator, a program that
exclusively works with late-stage tech startups in emerging markets -- Brazil,
Indonesia, India and Mexico. </p>

<p>See what it’s like to participate in the Accelerator.</p>


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

<p>“We provide comprehensive mentorship that delivers results,” says<a href="https://developers.google.com/experts/people/jacob-greenshpan"> Jacob Greenshpan</a>, one of Launchpad’s lead mentors. “We start by running a ‘patient diagnostic’
to determine each startup’s critical challenges, and then deploy precise
mentorship, actionable solutions, and Google resources that enables the app to
scale.” </p>

<p>Class 2 kicks off June 13. The startups will descend on Google HQ for an
intensive 2 week bootcamp. Under the tutelage of Google product teams and
mentors from the global Launchpad network, they will receive intensive,
targeted mentoring, equity-free funding, and more benefits during the 6-month
program. </p>

<p>Here’s the full list of startups (by country):</p>

<center><h3>Brazil</h3></center>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="3" cellspacing="3">
 <tr>
  <td><a href="https://www.bankfacil.com.br/">BankFacil</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.el.empregoligado&referrer=utm_source%3Dsite%26utm_medium%3Dhome-b2c%26utm_content%3Dtudo:tudo:home:160307%26utm_campaign%3Ddownload:tudo:tudo&e=-EnableAppDetailsPageRedesign">Emprego Ligado</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.ioasys.appprova&e=-EnableAppDetailsPageRedesign">AppProva</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=br.com.getninjas.pro&referrer=utm_source%3Dgetninjas%26utm_medium%3Dsite%26utm_campaign%3Dhome&e=-EnableAppDetailsPageRedesign">GetNinjas</a></td>
  <td><a href="http://www.edools.com/en">Edools</a></td>
                <td><a href="https://play.google.com/store/apps/details?id=com.lovemondays.app&e=-EnableAppDetailsPageRedesign">Love Mondays</a></td>
 </tr>
 <tr>
  <td><div class="separator" style="clear: both; text-align: left;"><a href="https://3.bp.blogspot.com/-T1r7TKf62is/VzNZTKx6PrI/AAAAAAAABfA/TPBEp06VnpY0iuXrXfXti-Ids3CO_9NMACLcB/s60/image11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-T1r7TKf62is/VzNZTKx6PrI/AAAAAAAABfA/TPBEp06VnpY0iuXrXfXti-Ids3CO_9NMACLcB/s150/image11.png" /></a></div></td>
  <td><a href="https://1.bp.blogspot.com/-7FrdoobW1FI/VzNbmiygyxI/AAAAAAAABfM/oVecEgEzO80wHz0djElWPPckff6JcyroACLcB/s150/image04.png" imageanchor="1" ><img border="0" src="https://1.bp.blogspot.com/-7FrdoobW1FI/VzNbmiygyxI/AAAAAAAABfM/oVecEgEzO80wHz0djElWPPckff6JcyroACLcB/s90/image04.png" /></a></td>
  <td><a href="https://1.bp.blogspot.com/-zhW0ZyyjusI/VzNb6DtmrEI/AAAAAAAABfU/X8Tae2Mdh_cEtIKmLUalqp25Ki7XN_azQCLcB/s1600/image15.png" imageanchor="1" ><img border="0" src="https://1.bp.blogspot.com/-zhW0ZyyjusI/VzNb6DtmrEI/AAAAAAAABfU/X8Tae2Mdh_cEtIKmLUalqp25Ki7XN_azQCLcB/s100/image15.png" /></a></td>
  <td><a href="https://3.bp.blogspot.com/-VHVSchmil4g/VzNcK-ASCiI/AAAAAAAABfY/p6vwaokHcbYAD8fH12Xoem2RXUMF8gP7QCLcB/s1600/image10.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-VHVSchmil4g/VzNcK-ASCiI/AAAAAAAABfY/p6vwaokHcbYAD8fH12Xoem2RXUMF8gP7QCLcB/s90/image10.png" /></a></td>
  <td><a href="https://3.bp.blogspot.com/-tKtyAYC4UeM/VzNchJPyBsI/AAAAAAAABfg/CcaJrZJ2fnEZiXz4A6KuX0PIKU6rSqsfgCLcB/s1600/image21.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-tKtyAYC4UeM/VzNchJPyBsI/AAAAAAAABfg/CcaJrZJ2fnEZiXz4A6KuX0PIKU6rSqsfgCLcB/s90/image21.png" /></a></td>
  <td><a href="https://2.bp.blogspot.com/-MDIy-VOGxsQ/VzNcqXiMjcI/AAAAAAAABfk/GN1HbqGkfLQR_nD9w5Vbqpa-nWNrSl-QwCLcB/s1600/image01.png" imageanchor="1" ><img border="0" src="https://2.bp.blogspot.com/-MDIy-VOGxsQ/VzNcqXiMjcI/AAAAAAAABfk/GN1HbqGkfLQR_nD9w5Vbqpa-nWNrSl-QwCLcB/s100/image01.png" /></a></td>
 </tr>
</table>

<center><h3>Indonesia</h3></center>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="3" cellspacing="3">
 <tr>
  <td><a href="https://www.hijup.com/">HijUp</a></td>
  <td><a href="https://talenta.co/">Talenta</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.jarvisstore&e=-EnableAppDetailsPageRedesign">Jarvis Store</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.ruangguru.livestudents&e=-EnableAppDetailsPageRedesign">Ruangguru</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.idntimes.idntimes&hl=en&e=-EnableAppDetailsPageRedesign">IDNtimes</a></td>
                <td><a href="https://www.codapay.com/">Codapay</a></td>
 </tr>
 <tr>
  <td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-YeJAeREPS0Y/VzNdPhs8KHI/AAAAAAAABfs/_KyyWgoqonAM6omFInIs9LrHupumxqqTwCLcB/s1600/image12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-YeJAeREPS0Y/VzNdPhs8KHI/AAAAAAAABfs/_KyyWgoqonAM6omFInIs9LrHupumxqqTwCLcB/s90/image12.png" /></a></div></td>
  <td><a href="https://2.bp.blogspot.com/-eHAqRLe1qjo/VzNdd-rzw8I/AAAAAAAABf0/OyXn_pdnzMQt9q2eIVD30FBqV9y7bUScgCLcB/s1600/image13.png" imageanchor="1" ><img border="0" src="https://2.bp.blogspot.com/-eHAqRLe1qjo/VzNdd-rzw8I/AAAAAAAABf0/OyXn_pdnzMQt9q2eIVD30FBqV9y7bUScgCLcB/s90/image13.png" /></a></td>
  <td><a href="https://3.bp.blogspot.com/-pNzd4YFrxYI/VzNdnlUS7EI/AAAAAAAABf4/rneFdoJKzYw48AMEIZp1yr1zIUgHOOAggCLcB/s1600/image09.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-pNzd4YFrxYI/VzNdnlUS7EI/AAAAAAAABf4/rneFdoJKzYw48AMEIZp1yr1zIUgHOOAggCLcB/s90/image09.png" /></a></td>
  <td><a href="https://3.bp.blogspot.com/-L4QMqxxQ-qM/VzNd0mSFngI/AAAAAAAABgA/fSC2V2zX3PQgOmDnkM8h253i6bGuSpHyACLcB/s1600/image03.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-L4QMqxxQ-qM/VzNd0mSFngI/AAAAAAAABgA/fSC2V2zX3PQgOmDnkM8h253i6bGuSpHyACLcB/s90/image03.png" /></a></td>
  <td><a href="https://4.bp.blogspot.com/-Z9MkAoOIEUU/VzNd_I1NI9I/AAAAAAAABgE/q9KRsu5cnbg_3wjjy8TsVi49GO9ZCEoCgCLcB/s1600/image05.png" imageanchor="1" ><img border="0" src="https://4.bp.blogspot.com/-Z9MkAoOIEUU/VzNd_I1NI9I/AAAAAAAABgE/q9KRsu5cnbg_3wjjy8TsVi49GO9ZCEoCgCLcB/s90/image05.png" /></a></td>
  <td><a href="https://1.bp.blogspot.com/-b7oRptrIxb0/VzNeF2anVPI/AAAAAAAABgI/2_1HQVpwq1I4AXgVyErTxiUGX6QDx3eOACLcB/s1600/image02.png" imageanchor="1" ><img border="0" src="https://1.bp.blogspot.com/-b7oRptrIxb0/VzNeF2anVPI/AAAAAAAABgI/2_1HQVpwq1I4AXgVyErTxiUGX6QDx3eOACLcB/s90/image02.png" /></a></td>
 </tr>
</table>

<center><h3>India</h3></center>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="3" cellspacing="3">
 <tr>
  <td><a href="https://play.google.com/store/apps/details?id=com.taskbob.http.taskbob&hl=en&e=-EnableAppDetailsPageRedesign">Taskbob</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.freeit.java&hl=en&e=-EnableAppDetailsPageRedesign">Programming Hub</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=in.mohalla.sharechat&hl=en&e=-EnableAppDetailsPageRedesign">ShareChat</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.redcarpetup.rewardpay&hl=en&e=-EnableAppDetailsPageRedesign">RedCarpet</a></td>
  <td><a href="https://play.google.com/store/apps/developer?id=PlaySimple%20Games&hl=en">PlaySimple Games</a></td>
                <td><a href="https://play.google.com/store/apps/details?id=com.magicpin.local&hl=en&e=-EnableAppDetailsPageRedesign">MagicPin</a></td>
 </tr>
 <tr>
  <td><a href="https://2.bp.blogspot.com/-WPBjhkGu_lw/VzNel0SSujI/AAAAAAAABgQ/dKGOG9OU5SAhL1glpMey4A_LTPYg5v7fACLcB/s1600/image14.png" imageanchor="1" ><img border="0" src="https://2.bp.blogspot.com/-WPBjhkGu_lw/VzNel0SSujI/AAAAAAAABgQ/dKGOG9OU5SAhL1glpMey4A_LTPYg5v7fACLcB/s90/image14.png" /></a></td>
  <td><a href="https://1.bp.blogspot.com/-X0jhOCHYulc/VzNes0Dq_8I/AAAAAAAABgU/lWMsCx__41QALuVa2TuAAF6J2iB4TnYhACLcB/s1600/image08.png" imageanchor="1" ><img border="0" src="https://1.bp.blogspot.com/-X0jhOCHYulc/VzNes0Dq_8I/AAAAAAAABgU/lWMsCx__41QALuVa2TuAAF6J2iB4TnYhACLcB/s90/image08.png" /></a></td>
  <td><a href="https://2.bp.blogspot.com/-X9HLDcdd0ak/VzNe16KtsVI/AAAAAAAABgc/Mb9K3UVkTac3cPipckjkOGVI-JbPCK26QCLcB/s1600/image17.png" imageanchor="1" ><img border="0" src="https://2.bp.blogspot.com/-X9HLDcdd0ak/VzNe16KtsVI/AAAAAAAABgc/Mb9K3UVkTac3cPipckjkOGVI-JbPCK26QCLcB/s90/image17.png" /></a></td>
  <td><a href="https://4.bp.blogspot.com/-P_YHpVTUtxM/VzNfF7i50OI/AAAAAAAABgg/7QxvaEsNaSAN6sdREBlzSyiRmFC3MKnlQCLcB/s1600/image22.png" imageanchor="1" ><img border="0" src="https://4.bp.blogspot.com/-P_YHpVTUtxM/VzNfF7i50OI/AAAAAAAABgg/7QxvaEsNaSAN6sdREBlzSyiRmFC3MKnlQCLcB/s90/image22.png" /></a></td>
  <td><a href="https://1.bp.blogspot.com/-CjQg7V2d-dY/VzNfNBI2uhI/AAAAAAAABgo/Y41VBIa6lU4aXgTamfUYAgzDPHoivLY0ACLcB/s1600/image07.png" imageanchor="1" ><img border="0" src="https://1.bp.blogspot.com/-CjQg7V2d-dY/VzNfNBI2uhI/AAAAAAAABgo/Y41VBIa6lU4aXgTamfUYAgzDPHoivLY0ACLcB/s90/image07.png" /></a></td>
  <td><a href="https://1.bp.blogspot.com/-nzW7sSvFmVg/VzNfW5DEvrI/AAAAAAAABgs/o8OhgCAGaPMLo9KnhwH5aJloQ0pPx8ixQCLcB/s1600/image18.png" imageanchor="1" ><img border="0" src="https://1.bp.blogspot.com/-nzW7sSvFmVg/VzNfW5DEvrI/AAAAAAAABgs/o8OhgCAGaPMLo9KnhwH5aJloQ0pPx8ixQCLcB/s90/image18.png" /></a></td>
 </tr>
</table>

<center><h3>Mexico</h3></center>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="3" cellspacing="3">
 <tr>
  <td><a href="https://aliada.mx/">Aliada</a></td>
  <td><a href="https://play.google.com/store/apps/details?id=com.safertaxi&hl=en&e=-EnableAppDetailsPageRedesign">SaferTaxi</a></td>
  <td><a href="https://www.conekta.io/en">Conekta</a></td>
  <td><a href="https://konfio.mx/">Konfio</a></td>
  <td><a href="https://www.kichink.com/">Kichink</a></td>
                <td><a href="http://www.miroculus.com/">Miroculus</a></td>
 </tr>
 <tr>
  <td><a href="https://3.bp.blogspot.com/-YflT0K5mR7w/VzNfxAucKSI/AAAAAAAABg0/iOgP-XtcXq43PzyRRpWC4Qvgp51mAU7agCLcB/s1600/image00.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-YflT0K5mR7w/VzNfxAucKSI/AAAAAAAABg0/iOgP-XtcXq43PzyRRpWC4Qvgp51mAU7agCLcB/s90/image00.png" /></a></td>
  <td><a href="https://2.bp.blogspot.com/-E3pQSpQvTRo/VzNf4OCqNNI/AAAAAAAABg8/nRiD8FiBu4AzalJ8VjfTDbVvmVlX_pfQQCLcB/s1600/image20.png" imageanchor="1" ><img border="0" src="https://2.bp.blogspot.com/-E3pQSpQvTRo/VzNf4OCqNNI/AAAAAAAABg8/nRiD8FiBu4AzalJ8VjfTDbVvmVlX_pfQQCLcB/s90/image20.png" /></a></td>
  <td><a href="https://1.bp.blogspot.com/-q7WxEGnIQmM/VzNgB4vVYHI/AAAAAAAABhE/I6G-jBWMyXw9a2Y3xsjyTKcO0wCKbB6cwCLcB/s1600/image16.png" imageanchor="1" ><img border="0" src="https://1.bp.blogspot.com/-q7WxEGnIQmM/VzNgB4vVYHI/AAAAAAAABhE/I6G-jBWMyXw9a2Y3xsjyTKcO0wCKbB6cwCLcB/s90/image16.png" /></a></td>
  <td><a href="https://1.bp.blogspot.com/-cWnZARgdLBQ/VzNgMHz6_-I/AAAAAAAABhI/2aUnrgta1X8sQLsueb7r-SRTM1emED1ogCLcB/s1600/image23.png" imageanchor="1" ><img border="0" src="https://1.bp.blogspot.com/-cWnZARgdLBQ/VzNgMHz6_-I/AAAAAAAABhI/2aUnrgta1X8sQLsueb7r-SRTM1emED1ogCLcB/s90/image23.png" /></a></td>
  <td><a href="https://3.bp.blogspot.com/-q88PH3cWYiI/VzNgYNz0WRI/AAAAAAAABhM/bL1lUjHxOgUMGM8F2kB7OrE0Ut8GEiZlACLcB/s1600/image19.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-q88PH3cWYiI/VzNgYNz0WRI/AAAAAAAABhM/bL1lUjHxOgUMGM8F2kB7OrE0Ut8GEiZlACLcB/s90/image19.png" /></a></td>
  <td><a href="https://3.bp.blogspot.com/-RfsoIFzlTVo/VzNgiKrRUHI/AAAAAAAABhU/9uLeHtmOFREU2bz-t_b_D68wHB6g216_wCLcB/s1600/image06.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-RfsoIFzlTVo/VzNgiKrRUHI/AAAAAAAABhU/9uLeHtmOFREU2bz-t_b_D68wHB6g216_wCLcB/s90/image06.png" /></a></td>
 </tr>
</table>

<p><strong>Google’s “Scalerator” Drives Results for Alumni </strong></p>

<p>What advice do Class 1 alumni give to the new intake? “Come to the accelerator
with an open mind. You will be shocked to find how many things are going wrong
in your app. Thankfully the mentors will help you implement better solutions,”
says Vinicius Heimbeck, Founder of Brazilian mobile game developer UpBeat
Games.</p>

<p>UpBeat Games had more than 1,000% increase in daily app installations in Asia
during the period of a feature, as well as a 200% overall increase in active
users after following a long list of improvements Accelerator mentors
suggested. “We made optimizations that led us to be featured in Google Play,
which changed everything for us.” 

<p>See Upbeat Games at the Accelerator in <a href="https://www.youtube.com/watch?v=4RQkpR4-YtE&feature=youtu.be">this video</a>.</p>

<p>“Believe you can build a world class product. The mentors will push you to bet
on yourself,” says Amarendra Sahu, Nestaway Co-founder and Class 1 alumni.
NestAway just closed a <a href="http://techcrunch.com/2016/04/19/nestaway/">$30M Series C</a>, one of the largest investment rounds in India this year. </p>

<p>“Your biggest enemy is not failure; it is the temptation to be ordinary. But
the mentors will push you to build an extraordinary product and scale an
extraordinary startup," says eFishery Co-founder and CEO Gibran Chuzaefah Amsi
El Farizy, who was announced as one of the <a href="https://e27.co/top-27-innovators-who-pushed-indonesian-startups-forward-20160329/">top 27 </a>leaders in Indonesia’s startup ecosystem, after participating in the
Accelerator program. </p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/introducing-the-second-class-of-launchpad-accelerator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Get the guide to News app success on Google Play and see how Nabd engages readers with Material Design</title>
		<link>https://googledata.org/google-android/get-the-guide-to-news-app-success-on-google-play-and-see-how-nabd-engages-readers-with-material-design/</link>
		<comments>https://googledata.org/google-android/get-the-guide-to-news-app-success-on-google-play-and-see-how-nabd-engages-readers-with-material-design/#comments</comments>
		<pubDate>Wed, 11 May 2016 17:19:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=b160af882bdf18ac132349fd35e263ca</guid>
		<description><![CDATA[<i></i><p>Posted by Tamzin Taylor - Strategic Partner Lead, Google Play</p>

<div><a href="http://g.co/play/newspublisherplaybook"><img border="0" src="https://4.bp.blogspot.com/-m5JsmlB0G9Q/VzNXxGB-CUI/AAAAAAAAC6A/9i-u33jYYtM3Sp6J3IkAsnDZLaux6FBsQCLcB/s320/image00.png"></a></div><p>
Today we&#8217;re releasing <a href="https://play.google.com/store/books/details/Google_Inc_The_News_Publisher_Playbook_for_Android?id=O7T3CwAAQBAJ&#38;e=-EnableAppDetailsPageRedesign">The News Publisher Playbook</a>, where you will learn best practices for developing a successful news mobile strategy on Android. This is a new companion guide to our business playbook for developers, <a href="http://g.co/play/developerguide">The Secrets to App Success on Google Play</a>, focused on the news apps segment.
</p>

<p>
The guide includes tips and useful resources to help you optimize your news content on mobile, identifying the best distribution channels to reach the right audience, build your brand and maximize your revenue.</p>

<p>You will find tips on mobile website optimization, how to create a Google Play Newsstand edition, and how to improve your native app. You will also get an overview of ways to acquire and engage your readers as well as how to monetize and grow your revenue.</p>

<p>Once you&#8217;ve checked out the guide, we&#8217;d love to hear your feedback, so we can continue to improve our developer resources. <a href="https://docs.google.com/a/google.com/forms/d/1SI4y0hnVuhJIMFSITIkRUArjnF3SS5y73SrJPkPeiuE/viewform">Please let us know what you think.</a></p>
<b>
</b><p>Android Developer Story: Nabd improves reader engagement with Material Design</p>

<p>
</p><div><a href="https://play.google.com/store/books/details/Google_Inc_The_News_Publisher_Playbook_for_Android?id=O7T3CwAAQBAJ&#38;hl=en_GB&#38;e=-EnableAppDetailsPageRedesign"><img border="0" src="https://4.bp.blogspot.com/-0M6RNd7Orsg/VzNaQlnFpzI/AAAAAAAAC6Y/dExnozLWY-k618B07w_hq9TnQ6Kcv6zvACLcB/s200/image02.png"></a></div>Founded in 2012, <a href="https://play.google.com/store/apps/details?id=com.waveline.nabd&#38;hl=en_GB&#38;e=-EnableAppDetailsPageRedesign">Nabd</a> is a personalised Arabic news aggregator app based in Kuwait, reaching over 10 million people, of which, 60% use Android devices. <a href="https://www.youtube.com/watch?v=anJufxr44EA&#38;list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c&#38;index=44">Watch this Android Developer Story</a> to hear Abdur-Rahman El-Sayed, Co-founder and CEO, and Abdullah El-Sayed, Co-founder and VP of Engineering, explain how adopting Material Design increased user engagement and improved ratings.
<br /><!--[Interactive video]  -->

<p><a href="https://play.google.com/store/books/details/Google_Inc_The_News_Publisher_Playbook_for_Android?id=O7T3CwAAQBAJ&#38;hl=en_GB">Get the News Publisher Playbook</a> to help you find success on Google Play.</p>
<br /><div><a href="https://3.bp.blogspot.com/-lGVSKbtz-pQ/VzNpK9jt5rI/AAAAAAAAC68/Gtb5ObYBA005RMgXqopcR53p-6aVvLzBwCLcB/s1600/image01.png"><img border="0" src="https://3.bp.blogspot.com/-lGVSKbtz-pQ/VzNpK9jt5rI/AAAAAAAAC68/Gtb5ObYBA005RMgXqopcR53p-6aVvLzBwCLcB/s200/image01.png"></a></div>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Tamzin Taylor - Strategic Partner Lead, Google Play</p></i>

<div class="separator" style="clear: both; text-align: center;"><a href="http://g.co/play/newspublisherplaybook" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://4.bp.blogspot.com/-m5JsmlB0G9Q/VzNXxGB-CUI/AAAAAAAAC6A/9i-u33jYYtM3Sp6J3IkAsnDZLaux6FBsQCLcB/s320/image00.png" /></a></div><p>
Today we’re releasing <a href="https://play.google.com/store/books/details/Google_Inc_The_News_Publisher_Playbook_for_Android?id=O7T3CwAAQBAJ&e=-EnableAppDetailsPageRedesign">The News Publisher Playbook</a>, where you will learn best practices for developing a successful news mobile strategy on Android. This is a new companion guide to our business playbook for developers, <a href="http://g.co/play/developerguide">The Secrets to App Success on Google Play</a>, focused on the news apps segment.
</p>

<p>
The guide includes tips and useful resources to help you optimize your news content on mobile, identifying the best distribution channels to reach the right audience, build your brand and maximize your revenue.</p>

<p>You will find tips on mobile website optimization, how to create a Google Play Newsstand edition, and how to improve your native app. You will also get an overview of ways to acquire and engage your readers as well as how to monetize and grow your revenue.</p>

<p>Once you’ve checked out the guide, we’d love to hear your feedback, so we can continue to improve our developer resources. <a href="https://docs.google.com/a/google.com/forms/d/1SI4y0hnVuhJIMFSITIkRUArjnF3SS5y73SrJPkPeiuE/viewform">Please let us know what you think.</a></p>
<b>
<p>Android Developer Story: Nabd improves reader engagement with Material Design</p></b>

<p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://play.google.com/store/books/details/Google_Inc_The_News_Publisher_Playbook_for_Android?id=O7T3CwAAQBAJ&hl=en_GB&e=-EnableAppDetailsPageRedesign" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://4.bp.blogspot.com/-0M6RNd7Orsg/VzNaQlnFpzI/AAAAAAAAC6Y/dExnozLWY-k618B07w_hq9TnQ6Kcv6zvACLcB/s200/image02.png" /></a></div>Founded in 2012, <a href="https://play.google.com/store/apps/details?id=com.waveline.nabd&hl=en_GB&e=-EnableAppDetailsPageRedesign">Nabd</a> is a personalised Arabic news aggregator app based in Kuwait, reaching over 10 million people, of which, 60% use Android devices. <a href="https://www.youtube.com/watch?v=anJufxr44EA&list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c&index=44">Watch this Android Developer Story</a> to hear Abdur-Rahman El-Sayed, Co-founder and CEO, and Abdullah El-Sayed, Co-founder and VP of Engineering, explain how adopting Material Design increased user engagement and improved ratings.</p>
<br>
<!--[Interactive video]  --><iframe width="557" height="370" " frameborder="0" src="https://www.youtube.com/embed/anJufxr44EA?list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 80px;" allowfullscreen></iframe>

<P><a href="https://play.google.com/store/books/details/Google_Inc_The_News_Publisher_Playbook_for_Android?id=O7T3CwAAQBAJ&hl=en_GB">Get the News Publisher Playbook</a> to help you find success on Google Play.</P>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-lGVSKbtz-pQ/VzNpK9jt5rI/AAAAAAAAC68/Gtb5ObYBA005RMgXqopcR53p-6aVvLzBwCLcB/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-lGVSKbtz-pQ/VzNpK9jt5rI/AAAAAAAAC68/Gtb5ObYBA005RMgXqopcR53p-6aVvLzBwCLcB/s200/image01.png" /></a></div>






]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/get-the-guide-to-news-app-success-on-google-play-and-see-how-nabd-engages-readers-with-material-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Hardening the media stack</title>
		<link>https://googledata.org/google-android/hardening-the-media-stack/</link>
		<comments>https://googledata.org/google-android/hardening-the-media-stack/#comments</comments>
		<pubDate>Thu, 05 May 2016 19:02:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=394d776df3e5cd80d20f53df19727952</guid>
		<description><![CDATA[<i></i><p>Posted by Dan Austin and Jeff Vander Stoep, Android Security team</p>

<p>To help make Android more secure, we encourage and <a href="https://www.google.com/about/appsecurity/android-rewards/">reward</a> researchers who discover vulnerabilities. In 2015, a series of bugs in
mediaserver&#8217;s libstagefright were disclosed to Google. We released updates for
these issues with our August and September 2015 <a href="http://source.android.com/security/bulletin/index.html">security bulletins</a>.</p>

<p>In addition to addressing issues on a monthly basis, we&#8217;ve also been working on
new security features designed to enhance the existing security model and
provide additional defense in-depth. These defense measures attempt to achieve
two goals:</p>

<ul><li> <strong>Prevention</strong>: Stop bugs from becoming vulnerabilities
  </li><li> <strong>Containment</strong>: Protect the system by de-privileging and isolating components that handle
untrusted content
</li></ul><br /><h3>Prevention</h3>


<p>Most of the vulnerabilities found in libstagefright were heap overflows
resulting from unsigned <a href="https://www.owasp.org/index.php/Integer_overflow">integer overflows</a>. A number of integer overflows in libstagefright allowed an attacker to
allocate a buffer with less space than necessary for the incoming data,
resulting in a buffer overflow in the heap.</p>

<p>The result of an unsigned integer overflow is well defined, but the ensuing
behavior could be unexpected or unsafe. In contrast, signed integer overflows
are considered undefined behavior in C/C++, which means the result of an
overflow is not guaranteed, and the compiler author may choose the resulting
behavior&#8212;typically what is fastest or simplest. We have added compiler changes
that are designed to provide safer defaults for both signed and unsigned
integer overflows.</p>

<p>The UndefinedBehaviorSanitizer (<a href="http://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html">UBSan</a>) is part of the LLVM/Clang compiler toolchain that detects undefined or
unintended behavior. UBSan can check for multiple types of undefined and unsafe
behavior, including signed and unsigned integer overflow. These checks add code
to the resulting executable, testing for integer overflow conditions during
runtime. For example, figure 1 shows source code for the <code>parseChunk</code> function in the <code>MPEG4Extractor</code> component of libstagefright after the original researcher-supplied patch was
applied. The modification, which is contained in the black box below, appears
to prevent integer overflows from occurring. Unfortunately, while <code>SIZE_MAX</code> and <code>size</code> are 32-bit values, <code>chunk_size</code> is a 64-bit value, resulting in an incomplete check and the potential for
integer overflow. In the line within the red box, the addition of <code>size</code> and <code>chunk_size</code> may result in an integer overflow and creation of buffer smaller than <code>size</code> elements. The subsequent <code>memcpy</code> could then lead to exploitable memory corruption, as <code>size</code> + <code>chunk_size</code> could be less than <code>size</code>, which is highlighted in the blue box. The mechanics of a potential exploit
vector for this vulnerability are explained in more detail by <a href="http://googleprojectzero.blogspot.com/2015/09/stagefrightened.html">Project Zero</a>.</p>

<div><a href="https://1.bp.blogspot.com/-q1wloCizVXs/VyuNQkSyhWI/AAAAAAAAC5U/_ENUgwJd-OUZywTaJWBZVdrW1Cj_sLz6ACLcB/s1600/image01.png"><img border="0" src="https://1.bp.blogspot.com/-q1wloCizVXs/VyuNQkSyhWI/AAAAAAAAC5U/_ENUgwJd-OUZywTaJWBZVdrW1Cj_sLz6ACLcB/s640/image01.png"></a></div>

<p><strong>Figure 1.</strong> Source code demonstrating a subtle unsigned integer overflow.</p>

<p>Figure 2 compares assembly generated from the code segment above with a second
version compiled with integer sanitization enabled. The add operation that
results in the integer overflow is contained in the red box. </p>

<p>In the unsanitized version, <code>size</code> (<code>r6</code>) and <code>chunk_size</code> (<code>r7</code>) are added together, potentially resulting in <code>r0</code> overflowing and being less than <code>size</code>. Then, <code>buffer</code> is allocated with the <code>size</code> specified in <code>r0</code>, and <code>size</code> bytes are copied to it. If <code>r0</code> is less than <code>r6</code>, this results in memory corruption.</p>

<p>In the sanitized version, <code>size</code> (<code>r7</code>) and <code>chunk_size</code> (<code>r5</code>) are added together with the result stored in <code>r0</code>. Later, <code>r0</code> is checked against <code>r7</code>, if <code>r0</code> is less than <code>r7</code>, as indicated by the <code>CC</code> condition code, <code>r3</code> is set to 1. If <code>r3</code> is 1, and the carry bit was set, then an integer overflow occurred, and an
abort is triggered, preventing memory corruption.</p>

<p>Note that the incomplete check provided in the patch was not included in figure
2. The overflow occurs in the <code>buffer</code> allocation&#8217;s <code>add</code> operation. This addition triggers an integer sanitization check, which turns
this exploitable flaw into a harmless abort. </p>

<div><a href="https://3.bp.blogspot.com/-4oXE0qKB5VE/VyuNZhQXdiI/AAAAAAAAC5Y/LOTqWfulNMoE7hexzrFEBffIgk7f8mMRwCLcB/s1600/image00.png"><img border="0" src="https://3.bp.blogspot.com/-4oXE0qKB5VE/VyuNZhQXdiI/AAAAAAAAC5Y/LOTqWfulNMoE7hexzrFEBffIgk7f8mMRwCLcB/s640/image00.png"></a></div>

<p><strong>Figure 2.</strong> Comparing unsanitized and sanitized compiler output.</p>

<p>While the integer sanitizers were originally intended as code hygiene tools,
they effectively prevent the majority of reported libstagefright
vulnerabilities. Turning on the integer overflow checks was just the first
step. Preventing the runtime abort by finding and fixing integer overflows,
most of which are not exploitable, represented a large effort by Android's
media team. Most of the discovered overflows were fixed and those that remain
(mostly for performance reasons) were verified and marked as safe to prevent
the runtime abort.</p>

<p>In Android N, signed and unsigned integer overflow detection is enabled on the
entire media stack, including libstagefright. This makes it harder to exploit
integer overflows, and also helps to prevent future additions to Android from
introducing new integer overflow bugs. </p>

<h3>Containment</h3>


<p>For Android M and earlier, the mediaserver process in Android was responsible
for most media-related tasks. This meant that it required access to all
permissions needed by those responsibilities and, although mediaserver ran in
its own sandbox, it still had access to a lot of resources and capabilities.
This is why the libstagefright bugs from 2015 were significant&#8212;mediaserver
could access several important resources on an Android device including camera,
microphone, graphics, phone, Bluetooth, and internet.</p>

<p>A root cause analysis showed that the libstagefright bugs primarily occurred in
code responsible for parsing file formats and media codecs. This is not
surprising&#8212;parsing complex file formats and codecs while trying to optimize for
speed is hard, and the large number of edge cases makes such code susceptible
to both accidental and malicious malformed inputs. </p>

<p>However, media parsers do not require access to most of the privileged
permissions held by mediaserver. Because of this, the media team re-architected
mediaserver in Android N to better adhere to the principle of least privilege.
Figure 3 illustrates how the monolithic mediaserver and its permissions have
been divided, using the following heuristics:</p>

<ul><li> parsing code moved into unprivileged sandboxes that have few or no permissions
  </li><li> components that require sensitive permissions moved into separate sandboxes
that only grant access to the specific resources the component needs. For
example, only the cameraserver may access the camera, only the audioserver may
access Bluetooth, and only the drmserver may access DRM resources.
</li></ul><div><a href="https://1.bp.blogspot.com/-D59NoibUBw4/VyuNgVFoSdI/AAAAAAAAC5c/c5qwM6mdSzAw_So4y0PFmXV1-AYNIP3ggCLcB/s1600/image02.png"><img border="0" src="https://1.bp.blogspot.com/-D59NoibUBw4/VyuNgVFoSdI/AAAAAAAAC5c/c5qwM6mdSzAw_So4y0PFmXV1-AYNIP3ggCLcB/s640/image02.png"></a></div>

<p><strong>Figure 3</strong>. How mediaserver and its permissions have been divided in Android N.</p>

<p>Comparing the potential impact of the libstagefright bugs on Android N and
older versions demonstrates the value of this strategy. Gaining code execution
in libstagefright previously granted access to all the permissions and
resources available to the monolithic mediaserver process including graphics
driver, camera driver, or sockets, which present a rich kernel attack surface.</p>

<p>In Android N, libstagefright runs within the mediacodec sandbox with access to
very few permissions. Access to camera, microphone, photos, phone, Bluetooth,
and internet as well as dynamic code loading are disallowed by <a href="https://source.android.com/security/selinux/">SELinux</a>. Interaction with the kernel is further restricted by <a href="https://en.wikipedia.org/wiki/Seccomp">seccomp</a>. This means that compromising libstagefright would grant the attacker access
to significantly fewer permissions and also mitigates privilege escalation by
reducing the attack surface exposed by the kernel.</p>

<h3>Conclusion</h3>


<p>The media hardening project is an ongoing effort focused on moving
functionality into less privileged sandboxes and further reducing the
permissions granted to those sandboxes. While the techniques discussed here
were applied to the Android media framework, they are suitable across the
Android codebase. These hardening techniques&#8212;and others&#8212;are being actively
applied to additional components within Android. As always, we appreciate
feedback on our work and welcome suggestions for how we can improve Android.
Contact us at <a href="mailto:security@android.com">security@android.com</a>.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Dan Austin and Jeff Vander Stoep, Android Security team</p></i>

<p>To help make Android more secure, we encourage and <a href="https://www.google.com/about/appsecurity/android-rewards/">reward</a> researchers who discover vulnerabilities. In 2015, a series of bugs in
mediaserver’s libstagefright were disclosed to Google. We released updates for
these issues with our August and September 2015 <a href="http://source.android.com/security/bulletin/index.html">security bulletins</a>.</p>

<p>In addition to addressing issues on a monthly basis, we’ve also been working on
new security features designed to enhance the existing security model and
provide additional defense in-depth. These defense measures attempt to achieve
two goals:</p>

<ul>
  <li> <strong>Prevention</strong>: Stop bugs from becoming vulnerabilities
  <li> <strong>Containment</strong>: Protect the system by de-privileging and isolating components that handle
untrusted content
</ul>
<br>
<h3 id=prevention>Prevention</h3>


<p>Most of the vulnerabilities found in libstagefright were heap overflows
resulting from unsigned <a href="https://www.owasp.org/index.php/Integer_overflow">integer overflows</a>. A number of integer overflows in libstagefright allowed an attacker to
allocate a buffer with less space than necessary for the incoming data,
resulting in a buffer overflow in the heap.</p>

<p>The result of an unsigned integer overflow is well defined, but the ensuing
behavior could be unexpected or unsafe. In contrast, signed integer overflows
are considered undefined behavior in C/C++, which means the result of an
overflow is not guaranteed, and the compiler author may choose the resulting
behavior—typically what is fastest or simplest. We have added compiler changes
that are designed to provide safer defaults for both signed and unsigned
integer overflows.</p>

<p>The UndefinedBehaviorSanitizer (<a href="http://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html">UBSan</a>) is part of the LLVM/Clang compiler toolchain that detects undefined or
unintended behavior. UBSan can check for multiple types of undefined and unsafe
behavior, including signed and unsigned integer overflow. These checks add code
to the resulting executable, testing for integer overflow conditions during
runtime. For example, figure 1 shows source code for the <code>parseChunk</code> function in the <code>MPEG4Extractor</code> component of libstagefright after the original researcher-supplied patch was
applied. The modification, which is contained in the black box below, appears
to prevent integer overflows from occurring. Unfortunately, while <code>SIZE_MAX</code> and <code>size</code> are 32-bit values, <code>chunk_size</code> is a 64-bit value, resulting in an incomplete check and the potential for
integer overflow. In the line within the red box, the addition of <code>size</code> and <code>chunk_size</code> may result in an integer overflow and creation of buffer smaller than <code>size</code> elements. The subsequent <code>memcpy</code> could then lead to exploitable memory corruption, as <code>size</code> + <code>chunk_size</code> could be less than <code>size</code>, which is highlighted in the blue box. The mechanics of a potential exploit
vector for this vulnerability are explained in more detail by <a href="http://googleprojectzero.blogspot.com/2015/09/stagefrightened.html">Project Zero</a>.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-q1wloCizVXs/VyuNQkSyhWI/AAAAAAAAC5U/_ENUgwJd-OUZywTaJWBZVdrW1Cj_sLz6ACLcB/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-q1wloCizVXs/VyuNQkSyhWI/AAAAAAAAC5U/_ENUgwJd-OUZywTaJWBZVdrW1Cj_sLz6ACLcB/s640/image01.png" /></a></div>

<p><strong>Figure 1.</strong> Source code demonstrating a subtle unsigned integer overflow.</p>

<p>Figure 2 compares assembly generated from the code segment above with a second
version compiled with integer sanitization enabled. The add operation that
results in the integer overflow is contained in the red box. </p>

<p>In the unsanitized version, <code>size</code> (<code>r6</code>) and <code>chunk_size</code> (<code>r7</code>) are added together, potentially resulting in <code>r0</code> overflowing and being less than <code>size</code>. Then, <code>buffer</code> is allocated with the <code>size</code> specified in <code>r0</code>, and <code>size</code> bytes are copied to it. If <code>r0</code> is less than <code>r6</code>, this results in memory corruption.</p>

<p>In the sanitized version, <code>size</code> (<code>r7</code>) and <code>chunk_size</code> (<code>r5</code>) are added together with the result stored in <code>r0</code>. Later, <code>r0</code> is checked against <code>r7</code>, if <code>r0</code> is less than <code>r7</code>, as indicated by the <code>CC</code> condition code, <code>r3</code> is set to 1. If <code>r3</code> is 1, and the carry bit was set, then an integer overflow occurred, and an
abort is triggered, preventing memory corruption.</p>

<p>Note that the incomplete check provided in the patch was not included in figure
2. The overflow occurs in the <code>buffer</code> allocation’s <code>add</code> operation. This addition triggers an integer sanitization check, which turns
this exploitable flaw into a harmless abort. </p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-4oXE0qKB5VE/VyuNZhQXdiI/AAAAAAAAC5Y/LOTqWfulNMoE7hexzrFEBffIgk7f8mMRwCLcB/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-4oXE0qKB5VE/VyuNZhQXdiI/AAAAAAAAC5Y/LOTqWfulNMoE7hexzrFEBffIgk7f8mMRwCLcB/s640/image00.png" /></a></div>

<p><strong>Figure 2.</strong> Comparing unsanitized and sanitized compiler output.</p>

<p>While the integer sanitizers were originally intended as code hygiene tools,
they effectively prevent the majority of reported libstagefright
vulnerabilities. Turning on the integer overflow checks was just the first
step. Preventing the runtime abort by finding and fixing integer overflows,
most of which are not exploitable, represented a large effort by Android's
media team. Most of the discovered overflows were fixed and those that remain
(mostly for performance reasons) were verified and marked as safe to prevent
the runtime abort.</p>

<p>In Android N, signed and unsigned integer overflow detection is enabled on the
entire media stack, including libstagefright. This makes it harder to exploit
integer overflows, and also helps to prevent future additions to Android from
introducing new integer overflow bugs. </p>

<h3 id=containment>Containment</h3>


<p>For Android M and earlier, the mediaserver process in Android was responsible
for most media-related tasks. This meant that it required access to all
permissions needed by those responsibilities and, although mediaserver ran in
its own sandbox, it still had access to a lot of resources and capabilities.
This is why the libstagefright bugs from 2015 were significant—mediaserver
could access several important resources on an Android device including camera,
microphone, graphics, phone, Bluetooth, and internet.</p>

<p>A root cause analysis showed that the libstagefright bugs primarily occurred in
code responsible for parsing file formats and media codecs. This is not
surprising—parsing complex file formats and codecs while trying to optimize for
speed is hard, and the large number of edge cases makes such code susceptible
to both accidental and malicious malformed inputs. </p>

<p>However, media parsers do not require access to most of the privileged
permissions held by mediaserver. Because of this, the media team re-architected
mediaserver in Android N to better adhere to the principle of least privilege.
Figure 3 illustrates how the monolithic mediaserver and its permissions have
been divided, using the following heuristics:</p>

<ul>
  <li> parsing code moved into unprivileged sandboxes that have few or no permissions
  <li> components that require sensitive permissions moved into separate sandboxes
that only grant access to the specific resources the component needs. For
example, only the cameraserver may access the camera, only the audioserver may
access Bluetooth, and only the drmserver may access DRM resources.
</ul>

<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-D59NoibUBw4/VyuNgVFoSdI/AAAAAAAAC5c/c5qwM6mdSzAw_So4y0PFmXV1-AYNIP3ggCLcB/s1600/image02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" itemprop="image" src="https://1.bp.blogspot.com/-D59NoibUBw4/VyuNgVFoSdI/AAAAAAAAC5c/c5qwM6mdSzAw_So4y0PFmXV1-AYNIP3ggCLcB/s640/image02.png" /></a></div>

<p><strong>Figure 3</strong>. How mediaserver and its permissions have been divided in Android N.</p>

<p>Comparing the potential impact of the libstagefright bugs on Android N and
older versions demonstrates the value of this strategy. Gaining code execution
in libstagefright previously granted access to all the permissions and
resources available to the monolithic mediaserver process including graphics
driver, camera driver, or sockets, which present a rich kernel attack surface.</p>

<p>In Android N, libstagefright runs within the mediacodec sandbox with access to
very few permissions. Access to camera, microphone, photos, phone, Bluetooth,
and internet as well as dynamic code loading are disallowed by <a href="https://source.android.com/security/selinux/">SELinux</a>. Interaction with the kernel is further restricted by <a href="https://en.wikipedia.org/wiki/Seccomp">seccomp</a>. This means that compromising libstagefright would grant the attacker access
to significantly fewer permissions and also mitigates privilege escalation by
reducing the attack surface exposed by the kernel.</p>

<h3 id=conclusion>Conclusion</h3>


<p>The media hardening project is an ongoing effort focused on moving
functionality into less privileged sandboxes and further reducing the
permissions granted to those sandboxes. While the techniques discussed here
were applied to the Android media framework, they are suitable across the
Android codebase. These hardening techniques—and others—are being actively
applied to additional components within Android. As always, we appreciate
feedback on our work and welcome suggestions for how we can improve Android.
Contact us at <a href="mailto:security@android.com">security@android.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/hardening-the-media-stack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Enhancing App Security on Google Play</title>
		<link>https://googledata.org/google-android/enhancing-app-security-on-google-play/</link>
		<comments>https://googledata.org/google-android/enhancing-app-security-on-google-play/#comments</comments>
		<pubDate>Thu, 28 Apr 2016 21:08:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=051560277835a33115be7a8658c68317</guid>
		<description><![CDATA[<i></i><p>Posted by <a href="https://google.com/+EricDavis1">Eric Davis</a>, Android Security Team</p>

<p>We&#8217;re constantly investing in new tools and services to help developers build secure Android applications. This includes the <a href="http://source.android.com/security/index.html">application sandbox</a> and Security APIs in the platform, <a href="http://developer.android.com/training/articles/security-gms-provider.html?utm_campaign=android_discussion_security_042816&#38;utm_source=anddev&#38;utm_medium=blog">Security APIs</a> in Google Play Services, and even open source <a href="https://github.com/google/nogotofail">testing tools</a>. Last year, Google Play also helped developers enhance the security of their applications by looking directly at the code they&#8217;ve written and offering suggestions for improvements.</p>

<p>The Google Play App Security Improvement Program is the first of its kind. It has two core components: We provide developers with <a href="http://developer.android.com/training/articles/security-tips.html?utm_campaign=android_discussion_security_042816&#38;utm_source=anddev&#38;utm_medium=blog">security tips</a> to help them build more secure apps, and we help developers identify potential security enhancements when uploaded to Google Play. This week, to help educate developers, Kristian Monsen, one of our engineers, <a href="https://www.samsungdevelopers.com/sdc2016/schedule?search=Kristian%20Monsen">gave a presentation about security best practices</a> at the Samsung Developer Conference. And in 2015, we worked with developers to improve the security of over 100,000 apps through the program.</p>

<b></b><p>How it works</p>

<p>Before any app is accepted into Google Play, it is scanned for safety and security, including potential security issues. We also continuously re-scan the over one million apps in Google Play for additional threats.</p>

<p>If your app is flagged for a potential security issue, you will be notified immediately to help you quickly address the issue and help keep your users safe. We&#8217;ll deliver alerts to you using both email and the <a href="https://play.google.com/apps/publish">Google Play Developer Console</a>, with links to a support page with details about how to improve the app.</p>
<br /><div><a href="https://1.bp.blogspot.com/-mMBYiwnqmIc/VyJ7o5VMPqI/AAAAAAAAC40/I82SX4xXSa0WQDk2XvTbtmChWJzb8kRhACLcB/s1600/image00.png"><img border="0" src="https://1.bp.blogspot.com/-mMBYiwnqmIc/VyJ7o5VMPqI/AAAAAAAAC40/I82SX4xXSa0WQDk2XvTbtmChWJzb8kRhACLcB/s640/image00.png"></a></div>

<p>Typically, these notifications will include a timeline for delivering the improvement to users as quickly as possible. Applications may be required to make security improvements before any other app updates can be be published.</p>

<p>
You can confirm that you&#8217;ve fully addressed the issue by uploading the new version of your app to the Google Play Developer Console. Be sure to <a href="http://developer.android.com/tools/publishing/versioning.html?utm_campaign=android_discussion_security_042816&#38;utm_source=anddev&#38;utm_medium=blog">increment the version number</a> of the fixed app. After a few hours, check the Developer Console for the security alert; if it&#8217;s no longer there, you&#8217;re all set!</p>

<p>The success of this program rests on our partnership with you&#8212;the developers of apps on Google Play&#8212;and the security community. We&#8217;re all responsible for providing safe, secure apps to our users. For feedback or questions, please reach out to us through the <a href="https://support.google.com/googleplay/android-developer/contact/publishing">Google Play Developer Help Center</a>. To report potential security issues in apps, please reach out to us at <a href="http://android-developers.blogspot.com/security+asi@android.com">security+asi@android.com</a>.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by <a href="https://google.com/+EricDavis1">Eric Davis</a>, Android Security Team</p></i>

<P>We’re constantly investing in new tools and services to help developers build secure Android applications. This includes the <a href="http://source.android.com/security/index.html">application sandbox</a> and Security APIs in the platform, <a href="http://developer.android.com/training/articles/security-gms-provider.html?utm_campaign=android_discussion_security_042816&utm_source=anddev&utm_medium=blog">Security APIs</a> in Google Play Services, and even open source <a href="https://github.com/google/nogotofail">testing tools</a>. Last year, Google Play also helped developers enhance the security of their applications by looking directly at the code they’ve written and offering suggestions for improvements.</p>

<p>The Google Play App Security Improvement Program is the first of its kind. It has two core components: We provide developers with <a href="http://developer.android.com/training/articles/security-tips.html?utm_campaign=android_discussion_security_042816&utm_source=anddev&utm_medium=blog">security tips</a> to help them build more secure apps, and we help developers identify potential security enhancements when uploaded to Google Play. This week, to help educate developers, Kristian Monsen, one of our engineers, <a href="https://www.samsungdevelopers.com/sdc2016/schedule?search=Kristian%20Monsen">gave a presentation about security best practices</a> at the Samsung Developer Conference. And in 2015, we worked with developers to improve the security of over 100,000 apps through the program.</p>

<b><p>How it works</p></b>

<p>Before any app is accepted into Google Play, it is scanned for safety and security, including potential security issues. We also continuously re-scan the over one million apps in Google Play for additional threats.</p>

<p>If your app is flagged for a potential security issue, you will be notified immediately to help you quickly address the issue and help keep your users safe. We’ll deliver alerts to you using both email and the <a href="https://play.google.com/apps/publish">Google Play Developer Console</a>, with links to a support page with details about how to improve the app.</p>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-mMBYiwnqmIc/VyJ7o5VMPqI/AAAAAAAAC40/I82SX4xXSa0WQDk2XvTbtmChWJzb8kRhACLcB/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-mMBYiwnqmIc/VyJ7o5VMPqI/AAAAAAAAC40/I82SX4xXSa0WQDk2XvTbtmChWJzb8kRhACLcB/s640/image00.png" /></a></div>

<P>Typically, these notifications will include a timeline for delivering the improvement to users as quickly as possible. Applications may be required to make security improvements before any other app updates can be be published.</P>

<P>
You can confirm that you’ve fully addressed the issue by uploading the new version of your app to the Google Play Developer Console. Be sure to <a href="http://developer.android.com/tools/publishing/versioning.html?utm_campaign=android_discussion_security_042816&utm_source=anddev&utm_medium=blog">increment the version number</a> of the fixed app. After a few hours, check the Developer Console for the security alert; if it’s no longer there, you’re all set!</P>

<P>The success of this program rests on our partnership with you—the developers of apps on Google Play—and the security community. We’re all responsible for providing safe, secure apps to our users. For feedback or questions, please reach out to us through the <a href="https://support.google.com/googleplay/android-developer/contact/publishing">Google Play Developer Help Center</a>. To report potential security issues in apps, please reach out to us at <a href="http://android-developers.blogspot.com/2016/04/security+asi@android.com">security+asi@android.com</a>.</p>












]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/enhancing-app-security-on-google-play/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Developing for Direct Boot</title>
		<link>https://googledata.org/google-android/developing-for-direct-boot/</link>
		<comments>https://googledata.org/google-android/developing-for-direct-boot/#comments</comments>
		<pubDate>Wed, 27 Apr 2016 21:06:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=00c05294795c24cdddca229d1972ae69</guid>
		<description><![CDATA[<i></i><p>Posted by Wojtek Kalici&#324;ski, Developer Advocate</p>

<p>Starting with Android N, a device that has been powered on can boot into a new mode called Direct Boot before the user has a chance to unlock it for the first time. In this mode, the operating system is fully operational, but access to private app data is limited and only apps that have been updated to be Direct Boot aware can run.</p>

<h3>Is Direct Boot right for my app?</h3>
<p>Not every app should run in Direct Boot mode, so before you start coding check if your app fits these common use cases:</p>
<ul><li>Apps that schedule alarms, such as alarm clocks.</li>
  <li>Apps that provide important and timely notifications, like messaging apps.</li>
  <li>Apps that provide services to other apps or the system, such as Accessibility Services.</li>
</ul><p>Please note that this is not an exhaustive list and we look forward to seeing what other kinds of apps can benefit from Direct Boot.</p>

<h3>Making your app Direct Boot aware</h3>
<p>In order to let your app run before the user unlocks the device, you have to explicitly mark components as being <i>Direct Boot aware</i> in the manifest:</p>

<pre><code> &#60;activity&#124;provider&#124;receiver&#124;service ...  
     android:directBootAware=&#8221;true&#8221;&#62;  
</code></pre>

<p>You can pick the subset of your app components that need to be Direct Boot aware, but if you are using a custom Application class, it is assumed to be Direct Boot aware if any component inside your app is marked as Direct Boot aware.</p>


<p>For apps that need to run as soon as the system starts in Direct Boot mode, there is a new Intent.ACTION_LOCKED_BOOT_COMPLETED broadcast. All apps will still receive Intent.ACTION_BOOT_COMPLETED after the user unlocks the device.</p>

<h3>Using the device protected storage area</h3>

<p>To support running apps before the user provides the credentials needed to unlock private app data, all Android N devices now provide two storage locations for data:</p>
<ul><li><i>Credential protected</i> storage, which is the default storage location for all apps, available <b>only after</b> the user has unlocked the device</li>
  <li><i>Device protected</i> storage, which is a new storage location that can be accessed at all times when the device is booted, including during Direct Boot</li>
</ul><p>Components of your app that are marked as Direct Boot aware must rely on <i>device protected</i> storage for any data required for their operation during Direct Boot mode. They may still access <i>credential protected</i> storage after the user has unlocked the device.</p>

<p>To access <i>device protected</i> storage you need to create and use a secondary Context object for all file-related APIs:</p>

<pre><code> Context deviceProtectedContext = context.createDeviceProtectedStorageContext();  
 deviceProtectedContext.openFileInput( ... )  
</code></pre>

<p>When your app gets updated to a Direct Boot aware version, you might have previously saved Shared Preferences or databases that need to be migrated to <i>device</i> protected storage. You should use Context.moveSharedPreferencesFrom() and Context.moveDatabaseFrom() before accessing them to make sure the app continues to work properly even when data is backed up and restored from older versions or other devices.</p>

<h3>Things to watch out for</h3>

<p>You should think carefully about what you put in the <i>device</i> protected storage. This should be a minimum set of data that will let your app work during Direct Boot. For example, in a messaging app you could store an access token with a narrow scope that only has access to the number of new messages on your server. All sensitive, private information, like the full message history and a read/write access token, should still be saved in <i>credential</i> protected storage.</p>

<p>Another thing to remember is that during Direct Boot apps can only access other Direct Boot aware apps and components. If your app depends on external Services and Activities, make sure you gracefully handle the situation when they&#8217;re not available. Intent filters will by default match only components available in the current user state (locked / unlocked). There are two new flags for explicitly telling the Package Manager which components to enumerate: PackageManager.MATCH_DIRECT_BOOT_AWARE and PackageManager.MATCH_DIRECT_BOOT_UNAWARE.</p>

<h3>What&#8217;s next?</h3>
<p>Until devices with Android N that support Direct Boot out of the box are released, you can test your apps using Android N Developer Preview builds. On Nexus 5X and Nexus 6P, you can <b>wipe all user data</b> and enable full Direct Boot mode by using <b>Settings &#62; Developer options &#62; Convert to file encryption</b>. Alternatively, you can reboot into bootloader and issue the appropriate fastboot command:</p>

<pre><code> $ adb reboot-bootloader  
 $ fastboot --wipe-and-use-fbe  
</code></pre>

<p><b>Warning:</b> Both methods will perform a factory reset and delete all user data on your device.</p>

<p>Alternatively, you can use an emulated Direct Boot mode. To enable it, set a lock pattern on the device, choose "No thanks" if prompted for a secure start-up screen when setting a lock pattern, and then use the following adb shell commands to enable and disable emulation:</p>

<pre><code> $ adb shell sm set-emulate-fbe true  
 $ adb shell sm set-emulate-fbe false  
</code></pre>

<p>Please note that using these commands will cause your device to reboot. You should only be using emulated Direct Boot mode on test devices, as it may cause data loss.</p>

<p>#BuildBetterApps</p>

<p>Follow the <a href="https://plus.google.com/collection/sLR0p">Android Development Patterns Collection</a> for more!</p>

<div><a href="https://plus.google.com/collection/sLR0p"><img border="0" src="https://1.bp.blogspot.com/-VlE8eNr6iYA/VyEbAECCu8I/AAAAAAAAC4Y/dUTSt8lt4vshyjhsHpV6x-bU8PUEngLsQCLcB/s300/ADP_Logo.png"></a></div>

<img src="https://developer.android.com/images/cards/card-nyc_2x.jpg">]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Wojtek Kaliciński, Developer Advocate</p></i>

<p>Starting with Android N, a device that has been powered on can boot into a new mode called Direct Boot before the user has a chance to unlock it for the first time. In this mode, the operating system is fully operational, but access to private app data is limited and only apps that have been updated to be Direct Boot aware can run.</p>

<h3>Is Direct Boot right for my app?</h3>
<p>Not every app should run in Direct Boot mode, so before you start coding check if your app fits these common use cases:</p>
<ul>
  <li>Apps that schedule alarms, such as alarm clocks.</li>
  <li>Apps that provide important and timely notifications, like messaging apps.</li>
  <li>Apps that provide services to other apps or the system, such as Accessibility Services.</li>
</ul>  

<p>Please note that this is not an exhaustive list and we look forward to seeing what other kinds of apps can benefit from Direct Boot.</p>

<h3>Making your app Direct Boot aware</h3>
<p>In order to let your app run before the user unlocks the device, you have to explicitly mark components as being <i>Direct Boot aware</i> in the manifest:</p>

<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> &lt;activity|provider|receiver|service ...  
     android:directBootAware=”true”&gt;  
</code></pre>

<p>You can pick the subset of your app components that need to be Direct Boot aware, but if you are using a custom <font face ="Inconsolata">Application</font> class, it is assumed to be Direct Boot aware if any component inside your app is marked as Direct Boot aware.</p>


<p>For apps that need to run as soon as the system starts in Direct Boot mode, there is a new<FONT FACE="Monaco"> Intent.ACTION_LOCKED_BOOT_COMPLETED</font> broadcast. All apps will still receive <FONT FACE="Monaco">Intent.ACTION_BOOT_COMPLETED</font> after the user unlocks the device.</p>

<h3>Using the device protected storage area</h3>

<p>To support running apps before the user provides the credentials needed to unlock private app data, all Android N devices now provide two storage locations for data:</p>
<ul>
  <li><i>Credential protected</i> storage, which is the default storage location for all apps, available <b>only after</b> the user has unlocked the device</li>
  <li><i>Device protected</i> storage, which is a new storage location that can be accessed at all times when the device is booted, including during Direct Boot</li>
</ul> 

<p>Components of your app that are marked as Direct Boot aware must rely on <i>device protected</i> storage for any data required for their operation during Direct Boot mode. They may still access <i>credential protected</i> storage after the user has unlocked the device.</p>

<p>To access <i>device protected</i> storage you need to create and use a secondary Context object for all file-related APIs:</p>

<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> Context deviceProtectedContext = context.createDeviceProtectedStorageContext();  
 deviceProtectedContext.openFileInput( ... )  
</code></pre>

<p>When your app gets updated to a Direct Boot aware version, you might have previously saved Shared Preferences or databases that need to be migrated to <i>device</i> protected storage. You should use <FONT FACE="Monaco">Context.moveSharedPreferencesFrom()</font> and <FONT FACE="Monaco">Context.moveDatabaseFrom()</font> before accessing them to make sure the app continues to work properly even when data is backed up and restored from older versions or other devices.</p>

<h3>Things to watch out for</h3>

<p>You should think carefully about what you put in the <i>device</i> protected storage. This should be a minimum set of data that will let your app work during Direct Boot. For example, in a messaging app you could store an access token with a narrow scope that only has access to the number of new messages on your server. All sensitive, private information, like the full message history and a read/write access token, should still be saved in <i>credential</i> protected storage.</p>

<p>Another thing to remember is that during Direct Boot apps can only access other Direct Boot aware apps and components. If your app depends on external Services and Activities, make sure you gracefully handle the situation when they’re not available. Intent filters will by default match only components available in the current user state (locked / unlocked). There are two new flags for explicitly telling the Package Manager which components to enumerate: <FONT FACE="Monaco">PackageManager.MATCH_DIRECT_BOOT_AWARE</font> and <FONT FACE="Monaco">PackageManager.MATCH_DIRECT_BOOT_UNAWARE</font>.</p>

<h3>What’s next?</h3>
<p>Until devices with Android N that support Direct Boot out of the box are released, you can test your apps using Android N Developer Preview builds. On Nexus 5X and Nexus 6P, you can <b>wipe all user data</b> and enable full Direct Boot mode by using <b>Settings > Developer options > Convert to file encryption</b>. Alternatively, you can reboot into bootloader and issue the appropriate fastboot command:</p>

<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> $ adb reboot-bootloader  
 $ fastboot --wipe-and-use-fbe  
</code></pre>

<p><b>Warning:</b> Both methods will perform a factory reset and delete all user data on your device.</P>

<P>Alternatively, you can use an emulated Direct Boot mode. To enable it, set a lock pattern on the device, choose "No thanks" if prompted for a secure start-up screen when setting a lock pattern, and then use the following adb shell commands to enable and disable emulation:</P>

<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> $ adb shell sm set-emulate-fbe true  
 $ adb shell sm set-emulate-fbe false  
</code></pre>

<p>Please note that using these commands will cause your device to reboot. You should only be using emulated Direct Boot mode on test devices, as it may cause data loss.</p>

<p>#BuildBetterApps</p>

<p>Follow the <a href="https://plus.google.com/collection/sLR0p">Android Development Patterns Collection</a> for more!</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://plus.google.com/collection/sLR0p"><img border="0" src="https://1.bp.blogspot.com/-VlE8eNr6iYA/VyEbAECCu8I/AAAAAAAAC4Y/dUTSt8lt4vshyjhsHpV6x-bU8PUEngLsQCLcB/s300/ADP_Logo.png" /></a></div>

<img style="display:none" itemprop="image" src="https://developer.android.com/images/cards/card-nyc_2x.jpg">



























]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/developing-for-direct-boot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android Studio 2.1 supports Android N Developer Preview</title>
		<link>https://googledata.org/google-android/android-studio-2-1-supports-android-n-developer-preview/</link>
		<comments>https://googledata.org/google-android/android-studio-2-1-supports-android-n-developer-preview/#comments</comments>
		<pubDate>Tue, 26 Apr 2016 21:49:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=008ad1b0a93de6b67d564d3330c34cda</guid>
		<description><![CDATA[<p><i>Posted by <a href="https://www.google.com/+JamalEason">Jamal Eason</a>, Product Manager, Android</i></p>

<div><a href="https://2.bp.blogspot.com/-dZ76ETKzXUk/Vx-zIwkojdI/AAAAAAAAC4A/hsdZJzoKPnoVh8WkzQ9Fv9AUKIaacsGqACLcB/s1600/image01.png"><img border="0" src="https://2.bp.blogspot.com/-dZ76ETKzXUk/Vx-zIwkojdI/AAAAAAAAC4A/hsdZJzoKPnoVh8WkzQ9Fv9AUKIaacsGqACLcB/s200/image01.png"></a></div><p>With the launch <a href="http://android-developers.blogspot.com/2016/03/first-preview-of-android-n-developer.html">Android N Developer Preview</a>, we wanted to give you an easy and comprehensive way to build, test and validate your apps on the latest release with Android Studio. Built on the speed and feature enhancements of <a href="http://android-developers.blogspot.com/2016/04/android-studio-2-0.html">Android Studio 2.0</a>, the stable release of Android Studio 2.1 includes updates to the IDE wizards, build system and Android Emulator so that you can try out new features and APIs of the developer preview including the new <a href="https://source.android.com/source/jack.html">Jack compiler</a> and <a href="http://developer.android.com/preview/j8-jack.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&#38;utm_source=anddev&#38;utm_medium=blog">Java 8 language support</a>. In addition to support for the N Developer Preview, Android Studio 2.1 also includes performance improvements to Instant Run which leads to faster edit and deploy build speeds. If you are developing and validating your app with the N Developer Preview or want faster Instant Run speeds, you should <a href="http://developer.android.com/sdk/?utm_campaign=android_discussion_studiondeveloperpreview_042616&#38;utm_source=anddev&#38;utm_medium=blog">download</a> or update on the stable release channel to  Android Studio 2.1.</p>

<p>Android Studio 2.1 includes the following new features:</p>
<ul><li><b>N Developer Preview Support:</b> Android Studio 2.1 is the best IDE to test and validate your app with the N Developer Preview. Get the latest versions of the preview SDK, experiment with the new Java 8 support, and gain access to the only official Android Emulator able to run N Developer Preview Emulator System Images to help in your testing.  </li>
  <li><b>Instant Run:</b> For those of you who enjoyed the fast edit, build and deploy cycle with Android Studio 2.0, Instant Run now can now update incremental changes to your app code significantly faster.</li>
</ul><br /><h3>Deeper Dive into the New Features</h3>

<b></b><p>N Developer Preview</p>

<p>On top of <a href="http://developer.android.com/preview/api-overview.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&#38;utm_source=anddev&#38;utm_medium=blog">new features and APIs</a> of the N Developer Preview, Android Studio 2.1 release includes support for the new <a href="https://source.android.com/source/jack.html">Jack compiler</a> and support for <a href="http://developer.android.com/preview/j8-jack.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&#38;utm_source=anddev&#38;utm_medium=blog">Java 8</a>. With the Jack compiler, lambdas, method references, compile-time type annotations, intersection types and type inference are available on all versions of the Android platform. Default and static methods and repeatable annotations are available on Android N and higher. To use Java 8 language features when developing with the N Developer Preview, you need to use the Jack compiler. The New Project Wizard [File&#8594; New&#8594; Project] generates the correct configurations for projects targeting the N.</p>

<p>Getting started with development is as easy generating a new project or updating a few settings in your <a href="http://developer.android.com/preview/setup-sdk.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&#38;utm_source=anddev&#38;utm_medium=blog">existing project</a>. Once you are ready to test, you can create a fresh <a href="http://developer.android.com/tools/devices/managing-avds.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&#38;utm_source=anddev&#38;utm_medium=blog">Android Virtual Device (AVD)</a> and run your app on the N Developer Preview using the new Android Emulator.</p>
<br /><div><a href="https://2.bp.blogspot.com/-ul6IgxFFBMw/Vx-zgFmCqhI/AAAAAAAAC4E/15d9DmS-VJoohzUTn93M7X9Du1AfRGj2ACLcB/s1600/image02.png"><img border="0" src="https://2.bp.blogspot.com/-ul6IgxFFBMw/Vx-zgFmCqhI/AAAAAAAAC4E/15d9DmS-VJoohzUTn93M7X9Du1AfRGj2ACLcB/s640/image02.png"></a></div>
<i></i><p></p>N Developer Preview on the new Android Emulator

<b></b><p>Instant Run &#38; General Build Performance Improvements</p>

<p><a href="http://developer.android.com/tools/building/building-studio.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&#38;utm_source=anddev&#38;utm_medium=blog#instant-run">Instant Run</a> and general build speed are now faster with two new features: incremental Java compilation and in-process dex.</p>

<p>In previous versions of Android Studio, a single line of Java code change will cause all the Java sources in the module to be recompiled. Now in Android Studio 2.1, incremental Java compilation is enabled by default to reduce compilation time by compiling only what is needed.</p>

<p>We are also speeding up build times by using in-process dex, which converts class files to dex files within the Gradle daemon process. This avoids the costly processing operation of creating separate dex processes. To use this feature, you will need to increase the amount of memory available to the Gradle daemon to at least 2GB (1 GB is the default). This feature will help speed up both incremental and full builds.</p>

<p>We&#8217;d appreciate your feedback as we continue to improve Instant Run and general build performance. We are going to keep working on making build times even faster in coming releases. Click <a href="http://developer.android.com/tools/revisions/gradle-plugin.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&#38;utm_source=anddev&#38;utm_medium=blog#revisions">here</a> to learn even more about the build changes.</p>

<h3>What's Next</h3>
<b>
</b><p>Update</p>

<p>If you are using a previous version of Android Studio, you can check for updates on the Stable channel from the navigation menu (Help &#8594; Check for Update [Windows/Linux] , Android Studio &#8594; Check for Updates [OS X]). If you need a new copy of Android Studio, you can download it <a href="http://developer.android.com/sdk/?utm_campaign=android_discussion_studiondeveloperpreview_042616&#38;utm_source=anddev&#38;utm_medium=blog">here</a>.</p>

<b></b><p>Test and Validate Apps with N Developer Preview</p>

<p>After you update to or <a href="http://developer.android.com/sdk/?utm_campaign=android_discussion_studiondeveloperpreview_042616&#38;utm_source=anddev&#38;utm_medium=blog">download</a>  Android Studio 2.1 and you want to test and develop your apps with the N Developer Preview, create a fresh Android Virtual Device (AVD) for the new Android emulator, and check out these additional setup <a href="http://developer.android.com/preview/setup-sdk.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&#38;utm_source=anddev&#38;utm_medium=blog#get-as13">instructions</a>.</p>

<p>
We appreciate any feedback on things you like, issues or features you would like to see. Connect with us -- the Android Studio development team -- on our <a href="https://plus.google.com/103342515830390186255">Google+</a> page or on <a href="http://www.twitter.com/androidstudio">Twitter</a>.</p>

<!--[Interactive video]  -->]]></description>
				<content:encoded><![CDATA[<p><i>Posted by <a href="https://www.google.com/+JamalEason">Jamal Eason</a>, Product Manager, Android</p></i>

<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-dZ76ETKzXUk/Vx-zIwkojdI/AAAAAAAAC4A/hsdZJzoKPnoVh8WkzQ9Fv9AUKIaacsGqACLcB/s1600/image01.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://2.bp.blogspot.com/-dZ76ETKzXUk/Vx-zIwkojdI/AAAAAAAAC4A/hsdZJzoKPnoVh8WkzQ9Fv9AUKIaacsGqACLcB/s200/image01.png" /></a></div><p>With the launch <a href="http://android-developers.blogspot.com/2016/03/first-preview-of-android-n-developer.html">Android N Developer Preview</a>, we wanted to give you an easy and comprehensive way to build, test and validate your apps on the latest release with Android Studio. Built on the speed and feature enhancements of <a href="http://android-developers.blogspot.com/2016/04/android-studio-2-0.html">Android Studio 2.0</a>, the stable release of Android Studio 2.1 includes updates to the IDE wizards, build system and Android Emulator so that you can try out new features and APIs of the developer preview including the new <a href="https://source.android.com/source/jack.html">Jack compiler</a> and <a href="http://developer.android.com/preview/j8-jack.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&utm_source=anddev&utm_medium=blog">Java 8 language support</a>. In addition to support for the N Developer Preview, Android Studio 2.1 also includes performance improvements to Instant Run which leads to faster edit and deploy build speeds. If you are developing and validating your app with the N Developer Preview or want faster Instant Run speeds, you should <a href="http://developer.android.com/sdk/?utm_campaign=android_discussion_studiondeveloperpreview_042616&utm_source=anddev&utm_medium=blog">download</a> or update on the stable release channel to  Android Studio 2.1.</p>

<p>Android Studio 2.1 includes the following new features:</p>
<ul>
  <li><b>N Developer Preview Support:</b> Android Studio 2.1 is the best IDE to test and validate your app with the N Developer Preview. Get the latest versions of the preview SDK, experiment with the new Java 8 support, and gain access to the only official Android Emulator able to run N Developer Preview Emulator System Images to help in your testing.  </li>
  <li><b>Instant Run:</b> For those of you who enjoyed the fast edit, build and deploy cycle with Android Studio 2.0, Instant Run now can now update incremental changes to your app code significantly faster.</li>
</ul>  
<br>
<h3>Deeper Dive into the New Features</h3>

<b><p>N Developer Preview</p></b>

<p>On top of <a href="http://developer.android.com/preview/api-overview.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&utm_source=anddev&utm_medium=blog">new features and APIs</a> of the N Developer Preview, Android Studio 2.1 release includes support for the new <a href="https://source.android.com/source/jack.html">Jack compiler</a> and support for <a href="http://developer.android.com/preview/j8-jack.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&utm_source=anddev&utm_medium=blog">Java 8</a>. With the Jack compiler, lambdas, method references, compile-time type annotations, intersection types and type inference are available on all versions of the Android platform. Default and static methods and repeatable annotations are available on Android N and higher. To use Java 8 language features when developing with the N Developer Preview, you need to use the Jack compiler. The New Project Wizard [File→ New→ Project] generates the correct configurations for projects targeting the N.</p>

<p>Getting started with development is as easy generating a new project or updating a few settings in your <a href="http://developer.android.com/preview/setup-sdk.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&utm_source=anddev&utm_medium=blog">existing project</a>. Once you are ready to test, you can create a fresh <a href="http://developer.android.com/tools/devices/managing-avds.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&utm_source=anddev&utm_medium=blog">Android Virtual Device (AVD)</a> and run your app on the N Developer Preview using the new Android Emulator.</p>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-ul6IgxFFBMw/Vx-zgFmCqhI/AAAAAAAAC4E/15d9DmS-VJoohzUTn93M7X9Du1AfRGj2ACLcB/s1600/image02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-ul6IgxFFBMw/Vx-zgFmCqhI/AAAAAAAAC4E/15d9DmS-VJoohzUTn93M7X9Du1AfRGj2ACLcB/s640/image02.png" /></a></div>
<i><P><center>N Developer Preview on the new Android Emulator</p></center></i>

<b><p>Instant Run & General Build Performance Improvements</p></b>

<p><a href="http://developer.android.com/tools/building/building-studio.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&utm_source=anddev&utm_medium=blog#instant-run">Instant Run</a> and general build speed are now faster with two new features: incremental Java compilation and in-process dex.</p>

<p>In previous versions of Android Studio, a single line of Java code change will cause all the Java sources in the module to be recompiled. Now in Android Studio 2.1, incremental Java compilation is enabled by default to reduce compilation time by compiling only what is needed.</p>

<p>We are also speeding up build times by using in-process dex, which converts class files to dex files within the Gradle daemon process. This avoids the costly processing operation of creating separate dex processes. To use this feature, you will need to increase the amount of memory available to the Gradle daemon to at least 2GB (1 GB is the default). This feature will help speed up both incremental and full builds.</p>

<p>We’d appreciate your feedback as we continue to improve Instant Run and general build performance. We are going to keep working on making build times even faster in coming releases. Click <a href="http://developer.android.com/tools/revisions/gradle-plugin.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&utm_source=anddev&utm_medium=blog#revisions">here</a> to learn even more about the build changes.</p>

<h3>What's Next</h3>
<b>
<p>Update</p></b>

<p>If you are using a previous version of Android Studio, you can check for updates on the Stable channel from the navigation menu (Help → Check for Update [Windows/Linux] , Android Studio → Check for Updates [OS X]). If you need a new copy of Android Studio, you can download it <a href="http://developer.android.com/sdk/?utm_campaign=android_discussion_studiondeveloperpreview_042616&utm_source=anddev&utm_medium=blog">here</a>.</p>

<b><p>Test and Validate Apps with N Developer Preview</p></b>

<p>After you update to or <a href="http://developer.android.com/sdk/?utm_campaign=android_discussion_studiondeveloperpreview_042616&utm_source=anddev&utm_medium=blog">download</a>  Android Studio 2.1 and you want to test and develop your apps with the N Developer Preview, create a fresh Android Virtual Device (AVD) for the new Android emulator, and check out these additional setup <a href="http://developer.android.com/preview/setup-sdk.html?utm_campaign=android_discussion_studiondeveloperpreview_042616&utm_source=anddev&utm_medium=blog#get-as13">instructions</a>.</p>

<p>
We appreciate any feedback on things you like, issues or features you would like to see. Connect with us -- the Android Studio development team -- on our <a href="https://plus.google.com/103342515830390186255">Google+</a> page or on <a href="http://www.twitter.com/androidstudio">Twitter</a>.</p>

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





















]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-studio-2-1-supports-android-n-developer-preview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Building TV Channels</title>
		<link>https://googledata.org/google-android/building-tv-channels/</link>
		<comments>https://googledata.org/google-android/building-tv-channels/#comments</comments>
		<pubDate>Mon, 25 Apr 2016 21:59:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

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

<p>Channel surfing is a popular way of watching TV. You pick up the remote, lean back, and flip through channels to see what&#8217;s on. On Android TV, app developers can create their own channel-like experiences using the TV Input Framework.</p>

<p>
To the user, the channels you create look and feel just like regular TV channel. But behind the scenes, they stream video over the internet. For example, you can create a channel from a video playlist.</p>

<p>Watch this DevByte for an overview of how to build to a channel, and see the <a href="https://github.com/googlesamples/androidtv-sample-inputs">sample app</a> and <a href="http://developer.android.com/training/tv/tif/index.html">developer training</a> for more info. The sample shows how to work with a variety of media formats, including HLS, MPEG-Dash, and HTTP Progressive.</p>
<br /><!--[Interactive video]  --><br /><p>If you already have an app that streams video, consider also making your content available as a channel. It&#8217;s a great opportunity to increase engagement. We&#8217;re excited to see what you develop, and look forward to seeing your content on the big screen!</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by <a href="http://google.com/+JBGordon">Josh Gordon</a>, Developer Advocate</p></i>

<p>Channel surfing is a popular way of watching TV. You pick up the remote, lean back, and flip through channels to see what’s on. On Android TV, app developers can create their own channel-like experiences using the TV Input Framework.</p>

<p>
To the user, the channels you create look and feel just like regular TV channel. But behind the scenes, they stream video over the internet. For example, you can create a channel from a video playlist.</p>

<p>Watch this DevByte for an overview of how to build to a channel, and see the <a href="https://github.com/googlesamples/androidtv-sample-inputs">sample app</a> and <a href="http://developer.android.com/training/tv/tif/index.html">developer training</a> for more info. The sample shows how to work with a variety of media formats, including HLS, MPEG-Dash, and HTTP Progressive.</p>
<br>
<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/rtnObmsbs8k" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 50px;" width="560"></iframe><br/>

<p>If you already have an app that streams video, consider also making your content available as a channel. It’s a great opportunity to increase engagement. We’re excited to see what you develop, and look forward to seeing your content on the big screen!</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/building-tv-channels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Protecting against unintentional regressions to cleartext traffic in your Android apps</title>
		<link>https://googledata.org/google-android/protecting-against-unintentional-regressions-to-cleartext-traffic-in-your-android-apps/</link>
		<comments>https://googledata.org/google-android/protecting-against-unintentional-regressions-to-cleartext-traffic-in-your-android-apps/#comments</comments>
		<pubDate>Mon, 25 Apr 2016 21:30:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=a32bc52a6b104bce85af032b9e2849bb</guid>
		<description><![CDATA[<i></i><p>Posted by Alex Klyubin, Android Security team</p>

<p>When your app communicates with servers using cleartext network traffic, such as HTTP, the traffic risks being eavesdropped upon and tampered with by third parties. This may leak information about your users and open your app up to injection of unauthorized content or exploits. Ideally, your app should use secure traffic only, such as by using <a href="https://developers.google.com/web/fundamentals/security/encrypt-in-transit/">HTTPS instead of HTTP</a>. Such traffic is protected against eavesdropping and tampering.</p>

<p>Many Android apps already use secure traffic only. However, some of them occasionally regress to cleartext traffic by accident. For example, an inadvertent change in one of the server components could make the server provide the app with HTTP URLs instead of HTTPS URLs. The app would then proceed to communicate in cleartext, without any user-visible symptoms. This situation may go unnoticed by the app&#8217;s developer and users.</p>

<p>Even if you believe your app is only using secure traffic, make sure to use the new mechanisms provided by Android Marshmallow (Android 6.0) to catch and prevent accidental regressions.</p>

<h2>New protection mechanisms</h2>

<p>For apps which only use secure traffic, Android 6.0 Marshmallow (API Level 23) introduced two mechanisms to address regressions to cleartext traffic: (1) in production / installed base, block cleartext traffic, and (2) during development / QA, log or crash whenever non-TLS/SSL traffic is encountered. The following sections provide more information about these mechanisms.</p>

<h3>Block cleartext traffic in production</h3>

<p>To protect the installed base of your app against regressions to cleartext traffic, declare <a href="https://developer.android.com/guide/topics/manifest/application-element.html?utm_campaign=android_discussion_security_042516&#38;utm_source=anddev&#38;utm_medium=blog#usesCleartextTraffic">android:usesCleartextTraffic</a>=&#8221;false&#8221; attribute on the <a href="https://developer.android.com/guide/topics/manifest/application-element.html?utm_campaign=android_discussion_security_042516&#38;utm_source=anddev&#38;utm_medium=blog">application</a> element in your app&#8217;s AndroidManifest.xml. This declares that the app is not supposed to use cleartext network traffic and makes the platform network stacks of Android Marshmallow block cleartext traffic in the app. For example, if your app accidentally attempts to sign in the user via a cleartext HTTP request, the request will be blocked and the user&#8217;s identity and password will not leak to the network.</p>

<p>You don&#8217;t have to set minSdkVersion or targetSdkVersion of your app to 23 (Android Marshmallow) to use android:usesCleartextTraffic. On older platforms, this attribute is simply ignored and thus has no effect.</p>

<p>Please note that WebView does not yet honor this feature.</p>

<p>And under certain circumstances cleartext traffic may still leave or enter the app. For example, Socket API ignores the cleartext policy because it does not know whether the data it transmits or receives can be classified as cleartext. Android platform HTTP stacks, on the other hand, honor the policy because they know whether traffic is cleartext.</p>

<p>Google AdMob is also built to honor this policy. When your app declares that it does not use cleartext traffic, only HTTPS-only ads should be served to the app.</p>

<p>Third-party network, ad, and analytics libraries are encouraged to add support for this policy. They can query the cleartext traffic policy via the <a href="https://developer.android.com/reference/android/security/NetworkSecurityPolicy.html?utm_campaign=android_discussion_security_042516&#38;utm_source=anddev&#38;utm_medium=blog">NetworkSecurityPolicy</a> class.</p>

<h3>Detect cleartext traffic during development</h3>

<p>To spot cleartext traffic during development or QA, <a href="https://developer.android.com/reference/android/os/StrictMode.html?utm_campaign=android_discussion_security_042516&#38;utm_source=anddev&#38;utm_medium=blog">StrictMode API</a> lets you modify your app to detect non-TLS/SSL traffic and then either log violations to system log or crash the app (see <a href="https://developer.android.com/reference/android/os/StrictMode.VmPolicy.Builder.html?utm_campaign=android_discussion_security_042516&#38;utm_source=anddev&#38;utm_medium=blog#detectCleartextNetwork()">StrictMode.VmPolicy.Builder.detectCleartextNetwork()</a>). This is a useful tool for identifying which bits of the app are using non-TLS/SSL (and DLTS) traffic. Unlike the android:usesCleartextTraffic attribute, this feature is not meant to be enabled in app builds distributed to users.</p>

<p>Firstly, this feature is supposed to flag secure traffic that is not TLS/SSL. More importantly, TLS/SSL traffic via HTTP proxy also may be  flagged. This is an issue because as a developer, you have no control over whether a particular user of your app may have configured their Android device to use an HTTP proxy. Finally, the implementation of the feature is not future-proof and thus may reject future TLS/SSL protocol versions. Thus, this feature is intended to be used only during the development and QA phase.</p>

<h3>Declare finer-grained cleartext policy in Network Security Config</h3>

<p><a href="https://developer.android.com/preview/index.html?utm_campaign=android_discussion_security_042516&#38;utm_source=anddev&#38;utm_medium=blog">Android N</a> offers finer-grained control over cleartext traffic policy. As opposed to android:usesCleartextTraffic attribute, which applies to all destinations with which an app communicates, Android N&#8217;s <a href="https://developer.android.com/preview/features/security-config.html?utm_campaign=android_discussion_security_042516&#38;utm_source=anddev&#38;utm_medium=blog">Network Security Config</a> lets an app specify cleartext policy for specific destinations. For example, to facilitate a more gradual transition towards a policy that does not allow cleartext traffic, an app can at first block accidental cleartext only for communication with its most important backends and permit cleartext to be used for other destinations.</p>

<h2>Next steps</h2>

<p>It is a security best practice to only use secure network traffic for communication between your app and its servers. Android Marshmallow enables you to enforce this practice, so give it a try!</p>

<p>As always, we appreciate feedback and welcome suggestions for improving Android. Contact us at <a href="http://android-developers.blogspot.com/security@android.com">security@android.com</a>.
HTTPS, Android-Security</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Alex Klyubin, Android Security team</p></i>

<p>When your app communicates with servers using cleartext network traffic, such as HTTP, the traffic risks being eavesdropped upon and tampered with by third parties. This may leak information about your users and open your app up to injection of unauthorized content or exploits. Ideally, your app should use secure traffic only, such as by using <a href="https://developers.google.com/web/fundamentals/security/encrypt-in-transit/">HTTPS instead of HTTP</a>. Such traffic is protected against eavesdropping and tampering.</p>

<p>Many Android apps already use secure traffic only. However, some of them occasionally regress to cleartext traffic by accident. For example, an inadvertent change in one of the server components could make the server provide the app with HTTP URLs instead of HTTPS URLs. The app would then proceed to communicate in cleartext, without any user-visible symptoms. This situation may go unnoticed by the app’s developer and users.</p>

<p>Even if you believe your app is only using secure traffic, make sure to use the new mechanisms provided by Android Marshmallow (Android 6.0) to catch and prevent accidental regressions.</p>

<h2>New protection mechanisms</h2>

<p>For apps which only use secure traffic, Android 6.0 Marshmallow (API Level 23) introduced two mechanisms to address regressions to cleartext traffic: (1) in production / installed base, block cleartext traffic, and (2) during development / QA, log or crash whenever non-TLS/SSL traffic is encountered. The following sections provide more information about these mechanisms.</p>

<h3>Block cleartext traffic in production</h3>

<p>To protect the installed base of your app against regressions to cleartext traffic, declare <a href="https://developer.android.com/guide/topics/manifest/application-element.html?utm_campaign=android_discussion_security_042516&utm_source=anddev&utm_medium=blog#usesCleartextTraffic"><font face=courier new>android:usesCleartextTraffic</a>=”false”</font> attribute on the <a href="https://developer.android.com/guide/topics/manifest/application-element.html?utm_campaign=android_discussion_security_042516&utm_source=anddev&utm_medium=blog"><font face=courier new>application</font></a> element in your app’s AndroidManifest.xml. This declares that the app is not supposed to use cleartext network traffic and makes the platform network stacks of Android Marshmallow block cleartext traffic in the app. For example, if your app accidentally attempts to sign in the user via a cleartext HTTP request, the request will be blocked and the user’s identity and password will not leak to the network.</p>

<p>You don’t have to set <font face=courier new>minSdkVersion</font> or <font face=courier new>targetSdkVersion</font> of your app to 23 (Android Marshmallow) to use <font face=courier new>android:usesCleartextTraffic.</font> On older platforms, this attribute is simply ignored and thus has no effect.</p>

<p>Please note that WebView does not yet honor this feature.</p>

<p>And under certain circumstances cleartext traffic may still leave or enter the app. For example, Socket API ignores the cleartext policy because it does not know whether the data it transmits or receives can be classified as cleartext. Android platform HTTP stacks, on the other hand, honor the policy because they know whether traffic is cleartext.</p>

<p>Google AdMob is also built to honor this policy. When your app declares that it does not use cleartext traffic, only HTTPS-only ads should be served to the app.</p>

<p>Third-party network, ad, and analytics libraries are encouraged to add support for this policy. They can query the cleartext traffic policy via the <a href="https://developer.android.com/reference/android/security/NetworkSecurityPolicy.html?utm_campaign=android_discussion_security_042516&utm_source=anddev&utm_medium=blog">NetworkSecurityPolicy</a> class.</p>

<h3>Detect cleartext traffic during development</h3>

<p>To spot cleartext traffic during development or QA, <a href="https://developer.android.com/reference/android/os/StrictMode.html?utm_campaign=android_discussion_security_042516&utm_source=anddev&utm_medium=blog">StrictMode API</a> lets you modify your app to detect non-TLS/SSL traffic and then either log violations to system log or crash the app (see <a href="https://developer.android.com/reference/android/os/StrictMode.VmPolicy.Builder.html?utm_campaign=android_discussion_security_042516&utm_source=anddev&utm_medium=blog#detectCleartextNetwork()">StrictMode.VmPolicy.Builder.detectCleartextNetwork()</a>). This is a useful tool for identifying which bits of the app are using non-TLS/SSL (and DLTS) traffic. Unlike the <font face=courier new>android:usesCleartextTraffic</font> attribute, this feature is not meant to be enabled in app builds distributed to users.</p>

<p>Firstly, this feature is supposed to flag secure traffic that is not TLS/SSL. More importantly, TLS/SSL traffic via HTTP proxy also may be  flagged. This is an issue because as a developer, you have no control over whether a particular user of your app may have configured their Android device to use an HTTP proxy. Finally, the implementation of the feature is not future-proof and thus may reject future TLS/SSL protocol versions. Thus, this feature is intended to be used only during the development and QA phase.</p>

<h3>Declare finer-grained cleartext policy in Network Security Config</h3>

<p><a href="https://developer.android.com/preview/index.html?utm_campaign=android_discussion_security_042516&utm_source=anddev&utm_medium=blog">Android N</a> offers finer-grained control over cleartext traffic policy. As opposed to <font face=courier new>android:usesCleartextTraffic</font> attribute, which applies to all destinations with which an app communicates, Android N’s <a href="https://developer.android.com/preview/features/security-config.html?utm_campaign=android_discussion_security_042516&utm_source=anddev&utm_medium=blog">Network Security Config</a> lets an app specify cleartext policy for specific destinations. For example, to facilitate a more gradual transition towards a policy that does not allow cleartext traffic, an app can at first block accidental cleartext only for communication with its most important backends and permit cleartext to be used for other destinations.</p>

<h2>Next steps</h2>

<p>It is a security best practice to only use secure network traffic for communication between your app and its servers. Android Marshmallow enables you to enforce this practice, so give it a try!</p>

<p>As always, we appreciate feedback and welcome suggestions for improving Android. Contact us at <a href="http://android-developers.blogspot.com/2016/04/security@android.com">security@android.com</a>.
HTTPS, Android-Security</p>


























]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/protecting-against-unintentional-regressions-to-cleartext-traffic-in-your-android-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>An Outsourcing Playbook for Android development</title>
		<link>https://googledata.org/google-android/an-outsourcing-playbook-for-android-development/</link>
		<comments>https://googledata.org/google-android/an-outsourcing-playbook-for-android-development/#comments</comments>
		<pubDate>Mon, 25 Apr 2016 16:21:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=14a548d6404e571a144b7befb86c009a</guid>
		<description><![CDATA[<i></i><p>Posted by Rupert Whitehead, Developer Relations</p>

<p>We recently updated <a href="http://g.co/play/developerguide">The Secrets to App Success on Google Play</a> with tools and tips to help app and game developers grow successful businesses on Google Play. However, many great apps are created by agencies and freelancers on behalf of companies. Today, we&#8217;re releasing a new playbook to help companies of any size who are considering outsourcing their Android app development.</p>

<p>How do you choose an agency? What are the pitfalls you should avoid? What can you do to make your app successful? These are some of the questions tackled by the new <a href="http://g.co/play/outsourcingplaybook">Outsourcing Playbook</a> that you can read on Google Play.</p>
<br /><table border="1" cellpadding="3" cellspacing="3"><tr><td><div><a href="https://play.google.com/store/books/details?id=PlTjCwAAQBAJ"><img border="0" src="https://2.bp.blogspot.com/-rOuKJ9GRk50/VyOKYYusChI/AAAAAAAAC5E/JnSi0CfXKMoblGoHnayF4Sb9QGioHaayQCLcB/s400/image01.png"></a></div></td>
 </tr><tr><td><div><a href="https://play.google.com/store/books/details?id=PlTjCwAAQBAJ"><img border="0" src="https://3.bp.blogspot.com/-wW7ancicQMM/Vx5D4ZCK-oI/AAAAAAAAC3s/yHdxaWCSk0Y7oIz5vw_KPBcdnDQ_zVnVACLcB/s200/image00.png"></a></div></td>
 </tr></table><b>
</b><p>Let us know your feedback</p>

<p>Once you&#8217;ve checked out the guide, we&#8217;d love to hear your feedback so we can continue to improve our developer resources and support. <a href="http://goo.gl/UGMZns">Let us know what you think</a>.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Rupert Whitehead, Developer Relations</p></i>

<p>We recently updated <a href="http://g.co/play/developerguide">The Secrets to App Success on Google Play</a> with tools and tips to help app and game developers grow successful businesses on Google Play. However, many great apps are created by agencies and freelancers on behalf of companies. Today, we’re releasing a new playbook to help companies of any size who are considering outsourcing their Android app development.</p>

<p>How do you choose an agency? What are the pitfalls you should avoid? What can you do to make your app successful? These are some of the questions tackled by the new <a href="http://g.co/play/outsourcingplaybook">Outsourcing Playbook</a> that you can read on Google Play.</p>
<br>
<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="3" cellspacing="3">
 <tr>
  <td><div class="separator" style="clear: both; text-align: center;"><a href="https://play.google.com/store/books/details?id=PlTjCwAAQBAJ" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-rOuKJ9GRk50/VyOKYYusChI/AAAAAAAAC5E/JnSi0CfXKMoblGoHnayF4Sb9QGioHaayQCLcB/s400/image01.png" /></a></div></td>
 </tr>
 <tr>
  <td><div class="separator" style="clear: both; text-align: center;"><a href="https://play.google.com/store/books/details?id=PlTjCwAAQBAJ" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-wW7ancicQMM/Vx5D4ZCK-oI/AAAAAAAAC3s/yHdxaWCSk0Y7oIz5vw_KPBcdnDQ_zVnVACLcB/s200/image00.png" /></a></div></td>
 </tr>
</table>

<b>
<p>Let us know your feedback</p></b>

<p>Once you’ve checked out the guide, we’d love to hear your feedback so we can continue to improve our developer resources and support. <a href="http://goo.gl/UGMZns">Let us know what you think</a>.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/an-outsourcing-playbook-for-android-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>The Google Play Awards coming to Google I/O</title>
		<link>https://googledata.org/google-android/the-google-play-awards-coming-to-google-io/</link>
		<comments>https://googledata.org/google-android/the-google-play-awards-coming-to-google-io/#comments</comments>
		<pubDate>Thu, 21 Apr 2016 18:30:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=79c822d399ca64b3859eb958f89d92a7</guid>
		<description><![CDATA[<p><i>Posted by Purnima Kochikar, Director, Apps and Games Business Development, Google Play</i></p>

<p>Google Play has seen tremendous growth over the past year, reaching more than 1 billion Android users across 190 countries. As a way to recognize our incredible developer community and highlight some of the best apps and games, we&#8217;re kicking off our first-ever Google Play Awards. </p>

<div><a href="https://1.bp.blogspot.com/-tJzB7TiQuqU/VxkFPCnc9DI/AAAAAAAACx4/GGA21vduYe0cHDwZWnOAnJmvE5NoH5OcwCLcB/s1600/image34.png"><img border="0" src="https://1.bp.blogspot.com/-tJzB7TiQuqU/VxkFPCnc9DI/AAAAAAAACx4/GGA21vduYe0cHDwZWnOAnJmvE5NoH5OcwCLcB/s400/image34.png"></a></div>

<p>The program will showcase five nominees across 10 award categories and feature them in a dedicated <a href="http://g.co/play/googleplayawards">collection</a> on Google Play. Nominees were selected by a panel of experts on the Google Play team based on criteria emphasizing app quality, innovation, and having a launch or major update in the last 12 months. The winners of each category will be announced at Google I/O in May. </p>

<p>The full list of categories and nominees are below: </p>

<h3>Standout Startup</h3>
<p>Apps from new developers that offer a unique experience while achieving strong install growth. And the nominees are...</p>

<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td><a href="https://play.google.com/store/apps/details?id=com.mobilemotion.dubsmash&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Dubsmash</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.hopper.mountainview.play&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Hopper</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.zhiliaoapp.musically&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Musical.ly</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.robinhood.android&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Robinhood</a></td>

<td><a href="https://play.google.com/store/apps/details?id=com.shakingearthdigital.vrsecardboard&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Vrse</a></td>
</tr><tr><td><div><a href="https://3.bp.blogspot.com/-GlTcaMGAMRw/VxkGM-CNIaI/AAAAAAAACyU/fIZV5J4Vg-cR5ZMFkJOmNDuTEdjN7H2fQCLcB/s1600/image39.png"><img border="0" src="https://3.bp.blogspot.com/-GlTcaMGAMRw/VxkGM-CNIaI/AAAAAAAACyU/fIZV5J4Vg-cR5ZMFkJOmNDuTEdjN7H2fQCLcB/s100/image39.png"></a></div></td>
<td><div><a href="https://3.bp.blogspot.com/-Iib2TvFEkg4/VxkF0h0XqeI/AAAAAAAACyA/ZnZ4EV95K6QQDu44Ye1mls4-9FdjXwBMACLcB/s1600/image33.png"><img border="0" src="https://3.bp.blogspot.com/-Iib2TvFEkg4/VxkF0h0XqeI/AAAAAAAACyA/ZnZ4EV95K6QQDu44Ye1mls4-9FdjXwBMACLcB/s100/image33.png"></a></div></td>
<td><div><a href="https://4.bp.blogspot.com/-w9M9Pyr6kIA/VxkF55FojvI/AAAAAAAACyI/1BpRxj8VeRsGekqstY4_ZwqFmKoLQ_A_gCLcB/s1600/image04.png"><img border="0" src="https://4.bp.blogspot.com/-w9M9Pyr6kIA/VxkF55FojvI/AAAAAAAACyI/1BpRxj8VeRsGekqstY4_ZwqFmKoLQ_A_gCLcB/s100/image04.png"></a></div></td>
<td><div><a href="https://1.bp.blogspot.com/-78-uQzN6KoI/VxkF-BPhJNI/AAAAAAAACyM/MK9qQPDK4PYuUl-ru9eldhstelDysE0_QCLcB/s1600/image00.png"><img border="0" src="https://1.bp.blogspot.com/-78-uQzN6KoI/VxkF-BPhJNI/AAAAAAAACyM/MK9qQPDK4PYuUl-ru9eldhstelDysE0_QCLcB/s100/image00.png"></a></div></td>
<td><div><a href="https://2.bp.blogspot.com/-80O3bxbhWkw/VxkGDPkTVwI/AAAAAAAACyQ/9tDQllsotDQuxXkGr4aP5B2NW7zmb0B2wCLcB/s1600/image29.png"><img border="0" src="https://2.bp.blogspot.com/-80O3bxbhWkw/VxkGDPkTVwI/AAAAAAAACyQ/9tDQllsotDQuxXkGr4aP5B2NW7zmb0B2wCLcB/s100/image29.png"></a></div></td></tr></tbody></table><h3>Standout Indie</h3>
<p>Games from indie developers that focus on artistic design, high quality and innovative gameplay. And the nominees are... </p>

<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td><a href="https://play.google.com/store/apps/details?id=com.spryfox.alphabear&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Alphabear</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.noodlecake.altosadventure&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Alto&#8217;s Adventure</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.waybefore.fastlikeafox&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Fast like a Fox</a></td>


<td><a href="https://play.google.com/store/apps/details?id=jp.co.hit_point.nekoatsume&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Neko Atsume: Kitty Collector</a></td>

<td><a href="https://play.google.com/store/apps/details?id=com.Polyculture.Prune&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Prune</a></td>
</tr><tr><td><div><a href="https://1.bp.blogspot.com/-DY7vXxLQ-zY/VxkI196y4UI/AAAAAAAACyk/30L-S_I_Liolu7HhKV7_plSRRYVSL6CogCLcB/s1600/image12.png"><img border="0" src="https://1.bp.blogspot.com/-DY7vXxLQ-zY/VxkI196y4UI/AAAAAAAACyk/30L-S_I_Liolu7HhKV7_plSRRYVSL6CogCLcB/s100/image12.png"></a></div></td>
<td><div><a href="https://3.bp.blogspot.com/-0hF6_7wYt2Y/VxkJAmlXfgI/AAAAAAAACyo/Em1tpI5WtLgLN45p9i0JElZJFXnm464EACLcB/s1600/image35.png"><img border="0" src="https://3.bp.blogspot.com/-0hF6_7wYt2Y/VxkJAmlXfgI/AAAAAAAACyo/Em1tpI5WtLgLN45p9i0JElZJFXnm464EACLcB/s100/image35.png"></a></div></td>
<td><div><a href="https://2.bp.blogspot.com/-LDg02_uHPi4/VxkJHdU1VJI/AAAAAAAACys/m9xQfMk0e_s9qDrhMJ9v0Seif3IqU9FBgCLcB/s1600/image08.png"><img border="0" src="https://2.bp.blogspot.com/-LDg02_uHPi4/VxkJHdU1VJI/AAAAAAAACys/m9xQfMk0e_s9qDrhMJ9v0Seif3IqU9FBgCLcB/s100/image08.png"></a></div></td>
<td><div><a href="https://1.bp.blogspot.com/-ZCI9JddtHUc/VxkJOr36RtI/AAAAAAAACyw/muhVJWyxaPg1ERicvq9WRAxEfUkEnPgkgCLcB/s1600/image15.png"><img border="0" src="https://1.bp.blogspot.com/-ZCI9JddtHUc/VxkJOr36RtI/AAAAAAAACyw/muhVJWyxaPg1ERicvq9WRAxEfUkEnPgkgCLcB/s100/image15.png"></a></div></td>
<td><div><a href="https://1.bp.blogspot.com/-Vssu_NIvjmc/VxkJUUwbPQI/AAAAAAAACy0/RLL08CZcAyop8O3HrGF94pi-VbPi1-9lwCLcB/s1600/image02.png"><img border="0" src="https://1.bp.blogspot.com/-Vssu_NIvjmc/VxkJUUwbPQI/AAAAAAAACy0/RLL08CZcAyop8O3HrGF94pi-VbPi1-9lwCLcB/s100/image02.png"></a></div></td></tr></tbody></table><h3>Best Families App</h3>
<p>Apps or games with family friendly design that encourage creativity and exploration. And the nominees are... </p>

<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td><a href="https://play.google.com/store/apps/details?id=com.turner.cardwars&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Card Wars - Adventure Time</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.wb.goog.legojurassicworld&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">LEGO Jurassic World&#8482;</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.storytoys.myveryhungrycaterpillar.free.android.googleplay&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">My Very Hungry Caterpillar</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.avokiddo.games.thinkrolls2&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Thinkrolls 2</a></td>

<td><a href="https://play.google.com/store/apps/details?id=com.tocaboca.tocanature&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Toca Nature</a></td>
</tr><tr><td><div><a href="https://3.bp.blogspot.com/-99R9At9XAvA/VxkKdIu8l5I/AAAAAAAACzE/HDT78VeyYiw0VT8OfDSyaZ_NzvOjA2s6wCLcB/s1600/image47.png"><img border="0" src="https://3.bp.blogspot.com/-99R9At9XAvA/VxkKdIu8l5I/AAAAAAAACzE/HDT78VeyYiw0VT8OfDSyaZ_NzvOjA2s6wCLcB/s100/image47.png"></a></div></td>
<td><div><a href="https://2.bp.blogspot.com/-DOERpzyKI1U/VxkKkuYO-fI/AAAAAAAACzI/G8BoYgq3I1wXa6jzZIn8vH--xXyROYDbACLcB/s1600/image40.png"><img border="0" src="https://2.bp.blogspot.com/-DOERpzyKI1U/VxkKkuYO-fI/AAAAAAAACzI/G8BoYgq3I1wXa6jzZIn8vH--xXyROYDbACLcB/s100/image40.png"></a></div></td>
<td><div><a href="https://4.bp.blogspot.com/-EJTh6PJ8Uw4/VxkKsJwwXfI/AAAAAAAACzM/m0LRtIFrzzMjdCAn4WKQwEvcKU8M69grACLcB/s1600/image24.png"><img border="0" src="https://4.bp.blogspot.com/-EJTh6PJ8Uw4/VxkKsJwwXfI/AAAAAAAACzM/m0LRtIFrzzMjdCAn4WKQwEvcKU8M69grACLcB/s100/image24.png"></a></div></td>
<td><div><a href="https://2.bp.blogspot.com/-juVV7aLiVfY/VxkK3FLU6QI/AAAAAAAACzQ/PrsThqmNi-wlleH5QI7FK4hVr2Q_Ean5ACLcB/s1600/image18.png"><img border="0" src="https://2.bp.blogspot.com/-juVV7aLiVfY/VxkK3FLU6QI/AAAAAAAACzQ/PrsThqmNi-wlleH5QI7FK4hVr2Q_Ean5ACLcB/s100/image18.png"></a></div></td>
<td><div><a href="https://1.bp.blogspot.com/-Fc2t7X2akjo/VxkLBAy5TnI/AAAAAAAACzU/B6SuEyAf_nAswO4c0Nn1zZYlOxmyVL-fACLcB/s1600/image32.png"><img border="0" src="https://1.bp.blogspot.com/-Fc2t7X2akjo/VxkLBAy5TnI/AAAAAAAACzU/B6SuEyAf_nAswO4c0Nn1zZYlOxmyVL-fACLcB/s100/image32.png"></a></div></td></tr></tbody></table><h3>Best Use of Material Design</h3>
<p>First-class implementation of material design concepts that deliver an immersive and innovative user experience. And the nominees are... </p>

<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td><a href="https://play.google.com/store/apps/details?id=ch.publisheria.bring&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Bring!</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.robinhood.android&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Robinhood</a></td>


<td><a href="https://play.google.com/store/apps/details?id=co.thefabulous.app&#38;hl=en">The Fabulous</a></td>

<td><a href="https://play.google.com/store/apps/details?id=com.todoist&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Todoist</a></td>

<td><a href="https://play.google.com/store/apps/details?id=com.vevo&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Vevo</a></td>
</tr><tr><td><div><a href="https://1.bp.blogspot.com/-IKixQXQrnm4/VxkMAR8y6rI/AAAAAAAACzk/a8wxNIxtv7E-TIT_aK6emF9lWKVZjCAewCLcB/s1600/image27.png"><img border="0" src="https://1.bp.blogspot.com/-IKixQXQrnm4/VxkMAR8y6rI/AAAAAAAACzk/a8wxNIxtv7E-TIT_aK6emF9lWKVZjCAewCLcB/s100/image27.png"></a></div></td>
<td><div><a href="https://4.bp.blogspot.com/-OUv2_AHcwEg/VxkMFSGCL3I/AAAAAAAACzo/GPuyNrxrJuEdOG3FQZJdPIUDLAJFrnkWQCLcB/s1600/image00.png"><img border="0" src="https://4.bp.blogspot.com/-OUv2_AHcwEg/VxkMFSGCL3I/AAAAAAAACzo/GPuyNrxrJuEdOG3FQZJdPIUDLAJFrnkWQCLcB/s100/image00.png"></a></div></td>
<td><div><a href="https://2.bp.blogspot.com/-3bb03iqLvS0/VxkMOG1hB_I/AAAAAAAACzs/z6B-3LQqrCUpkEsuUp9QOJnmfz8BRPXwQCLcB/s1600/image14.png"><img border="0" src="https://2.bp.blogspot.com/-3bb03iqLvS0/VxkMOG1hB_I/AAAAAAAACzs/z6B-3LQqrCUpkEsuUp9QOJnmfz8BRPXwQCLcB/s100/image14.png"></a></div></td>
<td><div><a href="https://1.bp.blogspot.com/-simNEdk4sME/VxkMU6MDPTI/AAAAAAAACzw/olroLy2l4Bg_Pa_g82nfHxqMvbDaOa1iwCLcB/s1600/image17.png"><img border="0" src="https://1.bp.blogspot.com/-simNEdk4sME/VxkMU6MDPTI/AAAAAAAACzw/olroLy2l4Bg_Pa_g82nfHxqMvbDaOa1iwCLcB/s100/image17.png"></a></div></td>
<td><div><a href="https://2.bp.blogspot.com/-eUZrz7_1V10/VxkMZ61lkbI/AAAAAAAACz0/F4N8CBxMpmcNz1KsteUPNhLLf1WQlbMqgCLcB/s1600/image23.png"><img border="0" src="https://2.bp.blogspot.com/-eUZrz7_1V10/VxkMZ61lkbI/AAAAAAAACz0/F4N8CBxMpmcNz1KsteUPNhLLf1WQlbMqgCLcB/s100/image23.png"></a></div></td></tr></tbody></table><h3>Best Use of Google Play Game Services </h3>
<p>High quality games with several strong GPGS feature implementations. And the nominees are... </p>

<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td><a href="https://play.google.com/store/apps/details?id=com.byril.seabattle2&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Sea Battle 2</a></td>


<td><a href="https://play.google.com/store/apps/details?id=uk.co.yakuto.TableTennisTouch&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Table Tennis Touch</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.underwater.clickers&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Tapventures</a></td>

<td><a href="https://play.google.com/store/apps/details?id=com.limbic.towermadness2&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">TowerMadness 2</a></td>

<td><a href="https://play.google.com/store/apps/details?id=com.auxbrain.zh2&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Zombie Highway 2</a></td>
</tr><tr></tr><td><div><a href="https://3.bp.blogspot.com/-q5NtbnqHHTI/VxkNcrw6FAI/AAAAAAAAC0E/siRDoKy2GHgY7npuah4Nxs5MIRauIQD7QCLcB/s1600/image25.png"><img border="0" src="https://3.bp.blogspot.com/-q5NtbnqHHTI/VxkNcrw6FAI/AAAAAAAAC0E/siRDoKy2GHgY7npuah4Nxs5MIRauIQD7QCLcB/s100/image25.png"></a></div></td>
<td><div><a href="https://1.bp.blogspot.com/-8ujXG4T_XEE/VxkNmiRveUI/AAAAAAAAC0I/zJLUSHZxAPY7CiEZ9g4WhVbeAjbZ2p0yACLcB/s1600/image30.png"><img border="0" src="https://1.bp.blogspot.com/-8ujXG4T_XEE/VxkNmiRveUI/AAAAAAAAC0I/zJLUSHZxAPY7CiEZ9g4WhVbeAjbZ2p0yACLcB/s100/image30.png"></a></div></td>
<td><div><a href="https://4.bp.blogspot.com/-bXfbbJlLRdg/VxkNy1NYSiI/AAAAAAAAC0M/7i9y9XBfKC0N3pByY8thOxiJSI09aLLJgCLcB/s1600/image10.png"><img border="0" src="https://4.bp.blogspot.com/-bXfbbJlLRdg/VxkNy1NYSiI/AAAAAAAAC0M/7i9y9XBfKC0N3pByY8thOxiJSI09aLLJgCLcB/s100/image10.png"></a></div></td>
<td><div><a href="https://3.bp.blogspot.com/--Qc2QR-A7D4/VxkN7lCQBxI/AAAAAAAAC0Q/l6y0fBEgFJ8Pgd8xoNeUjSyqLEoy999cwCLcB/s1600/image43.png"><img border="0" src="https://3.bp.blogspot.com/--Qc2QR-A7D4/VxkN7lCQBxI/AAAAAAAAC0Q/l6y0fBEgFJ8Pgd8xoNeUjSyqLEoy999cwCLcB/s100/image43.png"></a></div></td>
<td><div><a href="https://1.bp.blogspot.com/-iGDdK1lLIRE/VxkOAcTL_rI/AAAAAAAAC0U/u9XY49KmBBwhvl3eOy9LE07Bob2ykBWcACLcB/s1600/image07.png"><img border="0" src="https://1.bp.blogspot.com/-iGDdK1lLIRE/VxkOAcTL_rI/AAAAAAAAC0U/u9XY49KmBBwhvl3eOy9LE07Bob2ykBWcACLcB/s100/image07.png"></a></div></td>

</tbody></table><h3>Early Adopter</h3>
<p>Early adopter of a nascent technology or platform, providing a delightful user experience. And the nominees are... </p>

<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td><a href="https://play.google.com/store/apps/details?id=com.glidetalk.glideapp&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Glide</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.playdigious.mechanicescape&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Mechanic Escape</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.telltalegames.minecraft100&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">
Minecraft: Story Mode</a></td>

<td><a href="https://play.google.com/store/apps/details?id=app.WTInfoTech.WorldAroundMeLite&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">World Around Me</a></td>

<td><a href="https://play.google.com/store/apps/details?id=com.zumper.rentals&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">
Zumper</a></td>
</tr><tr></tr><td><div><a href="https://4.bp.blogspot.com/-EI3ePTPiOUo/VxkPx6ZgvpI/AAAAAAAAC0k/Z5anubg2sb0WkWbLG0VJBnvFWwfLfOKyACLcB/s1600/image37.png"><img border="0" src="https://4.bp.blogspot.com/-EI3ePTPiOUo/VxkPx6ZgvpI/AAAAAAAAC0k/Z5anubg2sb0WkWbLG0VJBnvFWwfLfOKyACLcB/s100/image37.png"></a></div></td>
<td><div><a href="https://3.bp.blogspot.com/-DjwegyXbWhI/VxkP31A7Y7I/AAAAAAAAC0o/ohuNBIQn3Uc97qcFNyzso6EXKCikieibgCLcB/s1600/image06.png"><img border="0" src="https://3.bp.blogspot.com/-DjwegyXbWhI/VxkP31A7Y7I/AAAAAAAAC0o/ohuNBIQn3Uc97qcFNyzso6EXKCikieibgCLcB/s100/image06.png"></a></div></td>
<td><div><a href="https://1.bp.blogspot.com/-ClQjww35DbE/VxkP-C-LZRI/AAAAAAAAC0s/i1e4xEzrns8yDDgQ-BxSTxYNcd5JFQlMgCLcB/s1600/image03.png"><img border="0" src="https://1.bp.blogspot.com/-ClQjww35DbE/VxkP-C-LZRI/AAAAAAAAC0s/i1e4xEzrns8yDDgQ-BxSTxYNcd5JFQlMgCLcB/s100/image03.png"></a></div></td>
<td><div><a href="https://2.bp.blogspot.com/-9Su5DIyzo58/VxkQEF7YZKI/AAAAAAAAC0w/9V7LNeWP-ogEy_K73YGkDi7B2b4JyNKhACLcB/s1600/image31.png"><img border="0" src="https://2.bp.blogspot.com/-9Su5DIyzo58/VxkQEF7YZKI/AAAAAAAAC0w/9V7LNeWP-ogEy_K73YGkDi7B2b4JyNKhACLcB/s100/image31.png"></a></div></td>
<td><div><a href="https://3.bp.blogspot.com/-VG9NOG3VeJ4/VxkQIS3BhHI/AAAAAAAAC00/9NnYPz3b1WoRIKpdeNAAmBCOYfS1FOM0gCLcB/s1600/image11.png"><img border="0" src="https://3.bp.blogspot.com/-VG9NOG3VeJ4/VxkQIS3BhHI/AAAAAAAAC00/9NnYPz3b1WoRIKpdeNAAmBCOYfS1FOM0gCLcB/s100/image11.png"></a></div></td>

</tbody></table><h3>Go Global</h3>
<p>Apps or games with great localization and culturalization, or subject matter appeal, across multiple regions. And the nominees are... </p>

<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td><a href="https://play.google.com/store/apps/details?id=com.bandainamcogames.dbzdokkanww&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Dragon Ball Z Dokkan Battle</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.freeletics.lite&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Freeletics Bodyweight</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.memrise.android.memrisecompanion&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">
Memrise</a></td>

<td><a href="https://play.google.com/store/apps/details?id=com.musixmatch.android.lyrify&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Musixmatch</a></td>

<td><a href="https://play.google.com/store/apps/details?id=jp.pokemon.poketoru&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Pok&#233;mon Shuffle Mobile</a></td>
</tr><tr></tr><td><div><a href="https://2.bp.blogspot.com/-KbqBhw6XObM/VxkRHrrO6_I/AAAAAAAAC1E/tNyUwYRXhR82qiDsl5FYbqb4Zh_WgsiqACLcB/s1600/image38.png"><img border="0" src="https://2.bp.blogspot.com/-KbqBhw6XObM/VxkRHrrO6_I/AAAAAAAAC1E/tNyUwYRXhR82qiDsl5FYbqb4Zh_WgsiqACLcB/s100/image38.png"></a></div></td>
<td><div><a href="https://1.bp.blogspot.com/-kicwL7embGE/VxkRM4ucLZI/AAAAAAAAC1I/R-jTnNYmUc8pjTV_jAKX_hriLOCAIYYrACLcB/s1600/image01.png"><img border="0" src="https://1.bp.blogspot.com/-kicwL7embGE/VxkRM4ucLZI/AAAAAAAAC1I/R-jTnNYmUc8pjTV_jAKX_hriLOCAIYYrACLcB/s100/image01.png"></a></div></td>
<td><div><a href="https://3.bp.blogspot.com/-0F9W2uG0gPM/VxkRV8IdhyI/AAAAAAAAC1M/1WeefduENlwHTA0NL_SoZLPAH0AJHeabACLcB/s1600/image44.png"><img border="0" src="https://3.bp.blogspot.com/-0F9W2uG0gPM/VxkRV8IdhyI/AAAAAAAAC1M/1WeefduENlwHTA0NL_SoZLPAH0AJHeabACLcB/s100/image44.png"></a></div></td>
<td><div><a href="https://1.bp.blogspot.com/-fwAbvCpFyqU/VxkRbj9kOVI/AAAAAAAAC1Q/ErvBZuL7tss640j_fCTdoX46iA0NP_VYQCLcB/s1600/image22.png"><img border="0" src="https://1.bp.blogspot.com/-fwAbvCpFyqU/VxkRbj9kOVI/AAAAAAAAC1Q/ErvBZuL7tss640j_fCTdoX46iA0NP_VYQCLcB/s100/image22.png"></a></div></td>
<td><div><a href="https://4.bp.blogspot.com/-NyIPUD4E-yk/VxkRgX0uhaI/AAAAAAAAC1U/0-KrJCPXQuAnqOWT8y05AgUkRVH2AVJ-wCLcB/s1600/image05.png"><img border="0" src="https://4.bp.blogspot.com/-NyIPUD4E-yk/VxkRgX0uhaI/AAAAAAAAC1U/0-KrJCPXQuAnqOWT8y05AgUkRVH2AVJ-wCLcB/s100/image05.png"></a></div></td>

</tbody></table><h3>Most Innovative</h3>
<p>Apps or games offering a highly engaging novelty experience or unique benefit. And the nominees are... </p>

<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td><a href="https://play.google.com/store/apps/details?id=com.waybefore.fastlikeafox&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Fast like a Fox</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.im360nytvr&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">NYT VR</a></td>


<td><a href="https://play.google.com/store/apps/details?id=jp.gocro.smartnews.android&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">
SmartNews</a></td>

<td><a href="https://play.google.com/store/apps/details?id=co.thefabulous.app&#38;hl=en">The Fabulous</a></td>

<td><a href="https://play.google.com/store/apps/details?id=com.elevenbitstudios.twommobile&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">This War of Mine</a></td>
</tr><tr></tr><td><div><a href="https://3.bp.blogspot.com/-XCjTY7HUjO4/VxkSmMC7uoI/AAAAAAAAC1k/pSM14IMPQrwA5L3ijT26m6anLw3XrVMGwCLcB/s1600/image08.png"><img border="0" src="https://3.bp.blogspot.com/-XCjTY7HUjO4/VxkSmMC7uoI/AAAAAAAAC1k/pSM14IMPQrwA5L3ijT26m6anLw3XrVMGwCLcB/s100/image08.png"></a></div></td>
<td><div><a href="https://1.bp.blogspot.com/-kXS2YMIy77o/VxkSrJ6x1GI/AAAAAAAAC1o/9pjnVCoOkUk97BUe-ecYMFSwJIsCQcDjQCLcB/s1600/image13.png"><img border="0" src="https://1.bp.blogspot.com/-kXS2YMIy77o/VxkSrJ6x1GI/AAAAAAAAC1o/9pjnVCoOkUk97BUe-ecYMFSwJIsCQcDjQCLcB/s100/image13.png"></a></div></td>
<td><div><a href="https://3.bp.blogspot.com/-Dn4mNILkLk4/VxkSyoP_aiI/AAAAAAAAC1s/ZBQZPXgJ78Ar2qjjwRODK9XQT3Ug7GHwACLcB/s1600/image36.png"><img border="0" src="https://3.bp.blogspot.com/-Dn4mNILkLk4/VxkSyoP_aiI/AAAAAAAAC1s/ZBQZPXgJ78Ar2qjjwRODK9XQT3Ug7GHwACLcB/s100/image36.png"></a></div></td>
<td><div><a href="https://3.bp.blogspot.com/-R8u5wt4CV5s/VxkS7jNCOtI/AAAAAAAAC1w/KaH_AjYPmAUrBnmtIBoPK_1Jzsww-RnnACLcB/s1600/image14.png"><img border="0" src="https://3.bp.blogspot.com/-R8u5wt4CV5s/VxkS7jNCOtI/AAAAAAAAC1w/KaH_AjYPmAUrBnmtIBoPK_1Jzsww-RnnACLcB/s100/image14.png"></a></div></td>
<td><div><a href="https://4.bp.blogspot.com/-kAy0Ze0IM-8/VxkTBs_EwwI/AAAAAAAAC10/zKsqrcaRLDkV3daJ81Jnvoz7HP6HHFDmACLcB/s1600/image16.png"><img border="0" src="https://4.bp.blogspot.com/-kAy0Ze0IM-8/VxkTBs_EwwI/AAAAAAAAC10/zKsqrcaRLDkV3daJ81Jnvoz7HP6HHFDmACLcB/s100/image16.png"></a></div></td>

</tbody></table><h3>Best App </h3>
<p>A true representation of beautiful design, intuitive UX and high user appeal, quality and rating. And the nominees are...</p> 


<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td><a href="https://play.google.com/store/apps/details?id=com.buzzfeed.news">BuzzFeed News</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.fungamesforfree.colorfy&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Colorfy</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.houzz.app&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">
Houzz</a></td>

<td><a href="https://play.google.com/store/apps/details?id=tunein.player&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">TuneIn Radio</a></td>

<td><a href="https://play.google.com/store/apps/details?id=com.yummly.android&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Yummly</a></td>
</tr><tr></tr><td><div><a href="https://4.bp.blogspot.com/-XriosRGkHA8/Vxp-jSmBTrI/AAAAAAAAC3Q/cgZdvPiW4fgc0z3j9k3ckE72iDAblcPswCLcB/s1600/image04.png"><img border="0" src="https://4.bp.blogspot.com/-XriosRGkHA8/Vxp-jSmBTrI/AAAAAAAAC3Q/cgZdvPiW4fgc0z3j9k3ckE72iDAblcPswCLcB/s100/image04.png"></a></div></td>
<td><div><a href="https://3.bp.blogspot.com/-3oiA6jCddok/VxkUf_oHO4I/AAAAAAAAC2I/bex5g6rGOTc6bYMufIgZGbNhFo3AAPoYwCLcB/s1600/image21.png"><img border="0" src="https://3.bp.blogspot.com/-3oiA6jCddok/VxkUf_oHO4I/AAAAAAAAC2I/bex5g6rGOTc6bYMufIgZGbNhFo3AAPoYwCLcB/s100/image21.png"></a></div></td>
<td><div><a href="https://3.bp.blogspot.com/-rr-4_dV5Kwk/VxkUnvAkPmI/AAAAAAAAC2M/OUoRQtpWdJUONsOV7MmRpdX0iChCmv82gCLcB/s1600/image28.png"><img border="0" src="https://3.bp.blogspot.com/-rr-4_dV5Kwk/VxkUnvAkPmI/AAAAAAAAC2M/OUoRQtpWdJUONsOV7MmRpdX0iChCmv82gCLcB/s100/image28.png"></a></div></td>
<td><div><a href="https://4.bp.blogspot.com/-tRN_8Jw466Y/VxkX88yeeUI/AAAAAAAAC2c/uXiNL9941bsygS1qhgv2Y1GCKmIvnCvQgCLcB/s1600/image45.png"><img border="0" src="https://4.bp.blogspot.com/-tRN_8Jw466Y/VxkX88yeeUI/AAAAAAAAC2c/uXiNL9941bsygS1qhgv2Y1GCKmIvnCvQgCLcB/s100/image45.png"></a></div></td>
<td><div><a href="https://3.bp.blogspot.com/-cg6GvJxfcmk/VxkYDvlZBQI/AAAAAAAAC2g/W-rKLeCWntghwK52hfIWjnY1LvzIRTAFACLcB/s1600/image20.png"><img border="0" src="https://3.bp.blogspot.com/-cg6GvJxfcmk/VxkYDvlZBQI/AAAAAAAAC2g/W-rKLeCWntghwK52hfIWjnY1LvzIRTAFACLcB/s100/image20.png"></a></div></td>

</tbody></table><h3>Best Game</h3>
<p>Games with strong mechanics, informative tutorial, broad appeal and tasteful design. And the nominees are... </p>


<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td><a href="https://play.google.com/store/apps/details?id=com.spryfox.alphabear&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Alphabear</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.hcg.cok.gp&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Clash of Kings</a></td>


<td><a href="https://play.google.com/store/apps/details?id=com.supercell.clashroyale&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">
Clash Royale</a></td>

<td><a href="https://play.google.com/store/apps/details?id=com.netmarble.mherosgb&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">MARVEL Future Fight</a></td>

<td><a href="https://play.google.com/store/apps/details?id=com.ea.game.starwarscapital_row&#38;hl=en&#38;e=-EnableAppDetailsPageRedesign">Star Wars&#8482;: Galaxy of Heroes</a></td>
</tr><tr></tr><td><div><a href="https://2.bp.blogspot.com/-rRm0nmQcZKo/VxkZBsviksI/AAAAAAAAC2s/fi7VYG65RIE1QE_1v5CzMGcVzd2Izva7ACLcB/s1600/image12.png"><img border="0" src="https://2.bp.blogspot.com/-rRm0nmQcZKo/VxkZBsviksI/AAAAAAAAC2s/fi7VYG65RIE1QE_1v5CzMGcVzd2Izva7ACLcB/s100/image12.png"></a></div></td>
<td><div><a href="https://2.bp.blogspot.com/-mi8q_gxZQog/VxkZLqtuFOI/AAAAAAAAC2w/1q5UFfi_3aMTdC21CYE0HIZDp7lzthP-ACLcB/s1600/image09.png"><img border="0" src="https://2.bp.blogspot.com/-mi8q_gxZQog/VxkZLqtuFOI/AAAAAAAAC2w/1q5UFfi_3aMTdC21CYE0HIZDp7lzthP-ACLcB/s100/image09.png"></a></div></td>
<td><div><a href="https://3.bp.blogspot.com/-6NUEdlDRpa0/VxkZS9S243I/AAAAAAAAC20/d031x-eP06U9FQZWmEZCQdbLe-wUeZS6ACLcB/s1600/image26.png"><img border="0" src="https://3.bp.blogspot.com/-6NUEdlDRpa0/VxkZS9S243I/AAAAAAAAC20/d031x-eP06U9FQZWmEZCQdbLe-wUeZS6ACLcB/s100/image26.png"></a></div></td>
<td><div><a href="https://2.bp.blogspot.com/-bZA7evIeo_0/VxkZbP5VIXI/AAAAAAAAC24/5gLY_0MFchs_h0frOy4CPQMTcO3vv3MGACLcB/s1600/image46.png"><img border="0" src="https://2.bp.blogspot.com/-bZA7evIeo_0/VxkZbP5VIXI/AAAAAAAAC24/5gLY_0MFchs_h0frOy4CPQMTcO3vv3MGACLcB/s100/image46.png"></a></div></td>
<td><div><a href="https://3.bp.blogspot.com/-wcadmOoqxiY/VxkZnnmObTI/AAAAAAAAC28/5Qek5fsXArwBmrs_awopo4MFlTv2nTMNQCLcB/s1600/image41.png"><img border="0" src="https://3.bp.blogspot.com/-wcadmOoqxiY/VxkZnnmObTI/AAAAAAAAC28/5Qek5fsXArwBmrs_awopo4MFlTv2nTMNQCLcB/s100/image41.png"></a></div></td></tbody></table><p>Join us live at the <a href="https://events.google.com/io2016/schedule?sid=d09c1403-0cef-e511-a517-00155d5066d7#day2/d09c1403-0cef-e511-a517-00155d5066d7">ceremony</a> on May 19th at 7:00 pm PDT on stage 7 at Google I/O or via the <a href="https://events.google.com/io2016/?utm_campaign=io_update_awards_042116&#38;utm_source=anddev&#38;utm_medium=blog">live stream</a>. You can also track the conversation on Twitter and G+ using the hashtags #io16.</p>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Purnima Kochikar, Director, Apps and Games Business Development, Google Play</i></p>

<p>Google Play has seen tremendous growth over the past year, reaching more than 1 billion Android users across 190 countries. As a way to recognize our incredible developer community and highlight some of the best apps and games, we’re kicking off our first-ever Google Play Awards. </p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-tJzB7TiQuqU/VxkFPCnc9DI/AAAAAAAACx4/GGA21vduYe0cHDwZWnOAnJmvE5NoH5OcwCLcB/s1600/image34.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-tJzB7TiQuqU/VxkFPCnc9DI/AAAAAAAACx4/GGA21vduYe0cHDwZWnOAnJmvE5NoH5OcwCLcB/s400/image34.png" /></a></div>

<p>The program will showcase five nominees across 10 award categories and feature them in a dedicated <a href="http://g.co/play/googleplayawards">collection</a> on Google Play. Nominees were selected by a panel of experts on the Google Play team based on criteria emphasizing app quality, innovation, and having a launch or major update in the last 12 months. The winners of each category will be announced at Google I/O in May. </p>

<p>The full list of categories and nominees are below: </p>

<h3><center>Standout Startup</center></h3>
<p>Apps from new developers that offer a unique experience while achieving strong install growth. And the nominees are...</p>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tbody><tr>


<td><center><a href="https://play.google.com/store/apps/details?id=com.mobilemotion.dubsmash&hl=en&e=-EnableAppDetailsPageRedesign">Dubsmash</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.hopper.mountainview.play&hl=en&e=-EnableAppDetailsPageRedesign">Hopper</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.zhiliaoapp.musically&hl=en&e=-EnableAppDetailsPageRedesign">Musical.ly</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.robinhood.android&hl=en&e=-EnableAppDetailsPageRedesign">Robinhood</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=com.shakingearthdigital.vrsecardboard&hl=en&e=-EnableAppDetailsPageRedesign">Vrse</a></center></td>
</tr>
<tr>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-GlTcaMGAMRw/VxkGM-CNIaI/AAAAAAAACyU/fIZV5J4Vg-cR5ZMFkJOmNDuTEdjN7H2fQCLcB/s1600/image39.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-GlTcaMGAMRw/VxkGM-CNIaI/AAAAAAAACyU/fIZV5J4Vg-cR5ZMFkJOmNDuTEdjN7H2fQCLcB/s100/image39.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-Iib2TvFEkg4/VxkF0h0XqeI/AAAAAAAACyA/ZnZ4EV95K6QQDu44Ye1mls4-9FdjXwBMACLcB/s1600/image33.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-Iib2TvFEkg4/VxkF0h0XqeI/AAAAAAAACyA/ZnZ4EV95K6QQDu44Ye1mls4-9FdjXwBMACLcB/s100/image33.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-w9M9Pyr6kIA/VxkF55FojvI/AAAAAAAACyI/1BpRxj8VeRsGekqstY4_ZwqFmKoLQ_A_gCLcB/s1600/image04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-w9M9Pyr6kIA/VxkF55FojvI/AAAAAAAACyI/1BpRxj8VeRsGekqstY4_ZwqFmKoLQ_A_gCLcB/s100/image04.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-78-uQzN6KoI/VxkF-BPhJNI/AAAAAAAACyM/MK9qQPDK4PYuUl-ru9eldhstelDysE0_QCLcB/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-78-uQzN6KoI/VxkF-BPhJNI/AAAAAAAACyM/MK9qQPDK4PYuUl-ru9eldhstelDysE0_QCLcB/s100/image00.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-80O3bxbhWkw/VxkGDPkTVwI/AAAAAAAACyQ/9tDQllsotDQuxXkGr4aP5B2NW7zmb0B2wCLcB/s1600/image29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-80O3bxbhWkw/VxkGDPkTVwI/AAAAAAAACyQ/9tDQllsotDQuxXkGr4aP5B2NW7zmb0B2wCLcB/s100/image29.png" /></a></div></td></tr></tbody></table>

<h3><center>Standout Indie</center></h3>
<p>Games from indie developers that focus on artistic design, high quality and innovative gameplay. And the nominees are... </p>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tbody><tr>


<td><center><a href="https://play.google.com/store/apps/details?id=com.spryfox.alphabear&hl=en&e=-EnableAppDetailsPageRedesign">Alphabear</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.noodlecake.altosadventure&hl=en&e=-EnableAppDetailsPageRedesign">Alto’s Adventure</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.waybefore.fastlikeafox&hl=en&e=-EnableAppDetailsPageRedesign">Fast like a Fox</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=jp.co.hit_point.nekoatsume&hl=en&e=-EnableAppDetailsPageRedesign">Neko Atsume: Kitty Collector</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=com.Polyculture.Prune&hl=en&e=-EnableAppDetailsPageRedesign">Prune</a></center></td>
</tr>
<tr>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-DY7vXxLQ-zY/VxkI196y4UI/AAAAAAAACyk/30L-S_I_Liolu7HhKV7_plSRRYVSL6CogCLcB/s1600/image12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-DY7vXxLQ-zY/VxkI196y4UI/AAAAAAAACyk/30L-S_I_Liolu7HhKV7_plSRRYVSL6CogCLcB/s100/image12.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-0hF6_7wYt2Y/VxkJAmlXfgI/AAAAAAAACyo/Em1tpI5WtLgLN45p9i0JElZJFXnm464EACLcB/s1600/image35.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-0hF6_7wYt2Y/VxkJAmlXfgI/AAAAAAAACyo/Em1tpI5WtLgLN45p9i0JElZJFXnm464EACLcB/s100/image35.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-LDg02_uHPi4/VxkJHdU1VJI/AAAAAAAACys/m9xQfMk0e_s9qDrhMJ9v0Seif3IqU9FBgCLcB/s1600/image08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-LDg02_uHPi4/VxkJHdU1VJI/AAAAAAAACys/m9xQfMk0e_s9qDrhMJ9v0Seif3IqU9FBgCLcB/s100/image08.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-ZCI9JddtHUc/VxkJOr36RtI/AAAAAAAACyw/muhVJWyxaPg1ERicvq9WRAxEfUkEnPgkgCLcB/s1600/image15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-ZCI9JddtHUc/VxkJOr36RtI/AAAAAAAACyw/muhVJWyxaPg1ERicvq9WRAxEfUkEnPgkgCLcB/s100/image15.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Vssu_NIvjmc/VxkJUUwbPQI/AAAAAAAACy0/RLL08CZcAyop8O3HrGF94pi-VbPi1-9lwCLcB/s1600/image02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-Vssu_NIvjmc/VxkJUUwbPQI/AAAAAAAACy0/RLL08CZcAyop8O3HrGF94pi-VbPi1-9lwCLcB/s100/image02.png" /></a></div></td></tr></tbody></table>


<h3><center>Best Families App</center></h3>
<p>Apps or games with family friendly design that encourage creativity and exploration. And the nominees are... </p>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tbody><tr>


<td><center><a href="https://play.google.com/store/apps/details?id=com.turner.cardwars&hl=en&e=-EnableAppDetailsPageRedesign">Card Wars - Adventure Time</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.wb.goog.legojurassicworld&hl=en&e=-EnableAppDetailsPageRedesign">LEGO Jurassic World™</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.storytoys.myveryhungrycaterpillar.free.android.googleplay&hl=en&e=-EnableAppDetailsPageRedesign">My Very Hungry Caterpillar</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.avokiddo.games.thinkrolls2&hl=en&e=-EnableAppDetailsPageRedesign">Thinkrolls 2</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=com.tocaboca.tocanature&hl=en&e=-EnableAppDetailsPageRedesign">Toca Nature</a></center></td>
</tr>
<tr>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-99R9At9XAvA/VxkKdIu8l5I/AAAAAAAACzE/HDT78VeyYiw0VT8OfDSyaZ_NzvOjA2s6wCLcB/s1600/image47.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-99R9At9XAvA/VxkKdIu8l5I/AAAAAAAACzE/HDT78VeyYiw0VT8OfDSyaZ_NzvOjA2s6wCLcB/s100/image47.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-DOERpzyKI1U/VxkKkuYO-fI/AAAAAAAACzI/G8BoYgq3I1wXa6jzZIn8vH--xXyROYDbACLcB/s1600/image40.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-DOERpzyKI1U/VxkKkuYO-fI/AAAAAAAACzI/G8BoYgq3I1wXa6jzZIn8vH--xXyROYDbACLcB/s100/image40.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-EJTh6PJ8Uw4/VxkKsJwwXfI/AAAAAAAACzM/m0LRtIFrzzMjdCAn4WKQwEvcKU8M69grACLcB/s1600/image24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-EJTh6PJ8Uw4/VxkKsJwwXfI/AAAAAAAACzM/m0LRtIFrzzMjdCAn4WKQwEvcKU8M69grACLcB/s100/image24.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-juVV7aLiVfY/VxkK3FLU6QI/AAAAAAAACzQ/PrsThqmNi-wlleH5QI7FK4hVr2Q_Ean5ACLcB/s1600/image18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-juVV7aLiVfY/VxkK3FLU6QI/AAAAAAAACzQ/PrsThqmNi-wlleH5QI7FK4hVr2Q_Ean5ACLcB/s100/image18.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Fc2t7X2akjo/VxkLBAy5TnI/AAAAAAAACzU/B6SuEyAf_nAswO4c0Nn1zZYlOxmyVL-fACLcB/s1600/image32.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-Fc2t7X2akjo/VxkLBAy5TnI/AAAAAAAACzU/B6SuEyAf_nAswO4c0Nn1zZYlOxmyVL-fACLcB/s100/image32.png" /></a></div></td></tr></tbody></table>

<h3><center>Best Use of Material Design</center></h3>
<p>First-class implementation of material design concepts that deliver an immersive and innovative user experience. And the nominees are... </p>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tbody><tr>


<td><center><a href="https://play.google.com/store/apps/details?id=ch.publisheria.bring&hl=en&e=-EnableAppDetailsPageRedesign">Bring!</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.robinhood.android&hl=en&e=-EnableAppDetailsPageRedesign">Robinhood</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=co.thefabulous.app&hl=en">The Fabulous</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=com.todoist&hl=en&e=-EnableAppDetailsPageRedesign">Todoist</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=com.vevo&hl=en&e=-EnableAppDetailsPageRedesign">Vevo</a></center></td>
</tr>
<tr>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-IKixQXQrnm4/VxkMAR8y6rI/AAAAAAAACzk/a8wxNIxtv7E-TIT_aK6emF9lWKVZjCAewCLcB/s1600/image27.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-IKixQXQrnm4/VxkMAR8y6rI/AAAAAAAACzk/a8wxNIxtv7E-TIT_aK6emF9lWKVZjCAewCLcB/s100/image27.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-OUv2_AHcwEg/VxkMFSGCL3I/AAAAAAAACzo/GPuyNrxrJuEdOG3FQZJdPIUDLAJFrnkWQCLcB/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-OUv2_AHcwEg/VxkMFSGCL3I/AAAAAAAACzo/GPuyNrxrJuEdOG3FQZJdPIUDLAJFrnkWQCLcB/s100/image00.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-3bb03iqLvS0/VxkMOG1hB_I/AAAAAAAACzs/z6B-3LQqrCUpkEsuUp9QOJnmfz8BRPXwQCLcB/s1600/image14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-3bb03iqLvS0/VxkMOG1hB_I/AAAAAAAACzs/z6B-3LQqrCUpkEsuUp9QOJnmfz8BRPXwQCLcB/s100/image14.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-simNEdk4sME/VxkMU6MDPTI/AAAAAAAACzw/olroLy2l4Bg_Pa_g82nfHxqMvbDaOa1iwCLcB/s1600/image17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-simNEdk4sME/VxkMU6MDPTI/AAAAAAAACzw/olroLy2l4Bg_Pa_g82nfHxqMvbDaOa1iwCLcB/s100/image17.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-eUZrz7_1V10/VxkMZ61lkbI/AAAAAAAACz0/F4N8CBxMpmcNz1KsteUPNhLLf1WQlbMqgCLcB/s1600/image23.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-eUZrz7_1V10/VxkMZ61lkbI/AAAAAAAACz0/F4N8CBxMpmcNz1KsteUPNhLLf1WQlbMqgCLcB/s100/image23.png" /></a></div></td></tr></tbody></table>


<h3><center>Best Use of Google Play Game Services</center> </h3>
<p>High quality games with several strong GPGS feature implementations. And the nominees are... </p>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tbody><tr>


<td><center><a href="https://play.google.com/store/apps/details?id=com.byril.seabattle2&hl=en&e=-EnableAppDetailsPageRedesign">Sea Battle 2</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=uk.co.yakuto.TableTennisTouch&hl=en&e=-EnableAppDetailsPageRedesign">Table Tennis Touch</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.underwater.clickers&hl=en&e=-EnableAppDetailsPageRedesign">Tapventures</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=com.limbic.towermadness2&hl=en&e=-EnableAppDetailsPageRedesign">TowerMadness 2</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=com.auxbrain.zh2&hl=en&e=-EnableAppDetailsPageRedesign">Zombie Highway 2</a></center></td>
</tr>
<tr>
</tr><td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-q5NtbnqHHTI/VxkNcrw6FAI/AAAAAAAAC0E/siRDoKy2GHgY7npuah4Nxs5MIRauIQD7QCLcB/s1600/image25.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-q5NtbnqHHTI/VxkNcrw6FAI/AAAAAAAAC0E/siRDoKy2GHgY7npuah4Nxs5MIRauIQD7QCLcB/s100/image25.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-8ujXG4T_XEE/VxkNmiRveUI/AAAAAAAAC0I/zJLUSHZxAPY7CiEZ9g4WhVbeAjbZ2p0yACLcB/s1600/image30.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-8ujXG4T_XEE/VxkNmiRveUI/AAAAAAAAC0I/zJLUSHZxAPY7CiEZ9g4WhVbeAjbZ2p0yACLcB/s100/image30.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-bXfbbJlLRdg/VxkNy1NYSiI/AAAAAAAAC0M/7i9y9XBfKC0N3pByY8thOxiJSI09aLLJgCLcB/s1600/image10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-bXfbbJlLRdg/VxkNy1NYSiI/AAAAAAAAC0M/7i9y9XBfKC0N3pByY8thOxiJSI09aLLJgCLcB/s100/image10.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/--Qc2QR-A7D4/VxkN7lCQBxI/AAAAAAAAC0Q/l6y0fBEgFJ8Pgd8xoNeUjSyqLEoy999cwCLcB/s1600/image43.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/--Qc2QR-A7D4/VxkN7lCQBxI/AAAAAAAAC0Q/l6y0fBEgFJ8Pgd8xoNeUjSyqLEoy999cwCLcB/s100/image43.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-iGDdK1lLIRE/VxkOAcTL_rI/AAAAAAAAC0U/u9XY49KmBBwhvl3eOy9LE07Bob2ykBWcACLcB/s1600/image07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-iGDdK1lLIRE/VxkOAcTL_rI/AAAAAAAAC0U/u9XY49KmBBwhvl3eOy9LE07Bob2ykBWcACLcB/s100/image07.png" /></a></div></td>

</tbody></table>


<h3><center>Early Adopter</center></h3>
<p>Early adopter of a nascent technology or platform, providing a delightful user experience. And the nominees are... </p>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tbody><tr>


<td><center><a href="https://play.google.com/store/apps/details?id=com.glidetalk.glideapp&hl=en&e=-EnableAppDetailsPageRedesign">Glide</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.playdigious.mechanicescape&hl=en&e=-EnableAppDetailsPageRedesign">Mechanic Escape</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.telltalegames.minecraft100&hl=en&e=-EnableAppDetailsPageRedesign">
Minecraft: Story Mode</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=app.WTInfoTech.WorldAroundMeLite&hl=en&e=-EnableAppDetailsPageRedesign">World Around Me</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=com.zumper.rentals&hl=en&e=-EnableAppDetailsPageRedesign">
Zumper</a></center></td>
</tr>
<tr>
</tr><td><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-EI3ePTPiOUo/VxkPx6ZgvpI/AAAAAAAAC0k/Z5anubg2sb0WkWbLG0VJBnvFWwfLfOKyACLcB/s1600/image37.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-EI3ePTPiOUo/VxkPx6ZgvpI/AAAAAAAAC0k/Z5anubg2sb0WkWbLG0VJBnvFWwfLfOKyACLcB/s100/image37.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-DjwegyXbWhI/VxkP31A7Y7I/AAAAAAAAC0o/ohuNBIQn3Uc97qcFNyzso6EXKCikieibgCLcB/s1600/image06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-DjwegyXbWhI/VxkP31A7Y7I/AAAAAAAAC0o/ohuNBIQn3Uc97qcFNyzso6EXKCikieibgCLcB/s100/image06.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-ClQjww35DbE/VxkP-C-LZRI/AAAAAAAAC0s/i1e4xEzrns8yDDgQ-BxSTxYNcd5JFQlMgCLcB/s1600/image03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-ClQjww35DbE/VxkP-C-LZRI/AAAAAAAAC0s/i1e4xEzrns8yDDgQ-BxSTxYNcd5JFQlMgCLcB/s100/image03.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-9Su5DIyzo58/VxkQEF7YZKI/AAAAAAAAC0w/9V7LNeWP-ogEy_K73YGkDi7B2b4JyNKhACLcB/s1600/image31.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-9Su5DIyzo58/VxkQEF7YZKI/AAAAAAAAC0w/9V7LNeWP-ogEy_K73YGkDi7B2b4JyNKhACLcB/s100/image31.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-VG9NOG3VeJ4/VxkQIS3BhHI/AAAAAAAAC00/9NnYPz3b1WoRIKpdeNAAmBCOYfS1FOM0gCLcB/s1600/image11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-VG9NOG3VeJ4/VxkQIS3BhHI/AAAAAAAAC00/9NnYPz3b1WoRIKpdeNAAmBCOYfS1FOM0gCLcB/s100/image11.png" /></a></div></td>

</tbody></table>


<h3><center>Go Global</center></h3>
<p>Apps or games with great localization and culturalization, or subject matter appeal, across multiple regions. And the nominees are... </p>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tbody><tr>


<td><center><a href="https://play.google.com/store/apps/details?id=com.bandainamcogames.dbzdokkanww&hl=en&e=-EnableAppDetailsPageRedesign">Dragon Ball Z Dokkan Battle</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.freeletics.lite&hl=en&e=-EnableAppDetailsPageRedesign">Freeletics Bodyweight</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.memrise.android.memrisecompanion&hl=en&e=-EnableAppDetailsPageRedesign">
Memrise</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=com.musixmatch.android.lyrify&hl=en&e=-EnableAppDetailsPageRedesign">Musixmatch</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=jp.pokemon.poketoru&hl=en&e=-EnableAppDetailsPageRedesign">Pokémon Shuffle Mobile</a></center></td>
</tr>
<tr>
</tr><td><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-KbqBhw6XObM/VxkRHrrO6_I/AAAAAAAAC1E/tNyUwYRXhR82qiDsl5FYbqb4Zh_WgsiqACLcB/s1600/image38.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-KbqBhw6XObM/VxkRHrrO6_I/AAAAAAAAC1E/tNyUwYRXhR82qiDsl5FYbqb4Zh_WgsiqACLcB/s100/image38.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-kicwL7embGE/VxkRM4ucLZI/AAAAAAAAC1I/R-jTnNYmUc8pjTV_jAKX_hriLOCAIYYrACLcB/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-kicwL7embGE/VxkRM4ucLZI/AAAAAAAAC1I/R-jTnNYmUc8pjTV_jAKX_hriLOCAIYYrACLcB/s100/image01.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-0F9W2uG0gPM/VxkRV8IdhyI/AAAAAAAAC1M/1WeefduENlwHTA0NL_SoZLPAH0AJHeabACLcB/s1600/image44.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-0F9W2uG0gPM/VxkRV8IdhyI/AAAAAAAAC1M/1WeefduENlwHTA0NL_SoZLPAH0AJHeabACLcB/s100/image44.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-fwAbvCpFyqU/VxkRbj9kOVI/AAAAAAAAC1Q/ErvBZuL7tss640j_fCTdoX46iA0NP_VYQCLcB/s1600/image22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-fwAbvCpFyqU/VxkRbj9kOVI/AAAAAAAAC1Q/ErvBZuL7tss640j_fCTdoX46iA0NP_VYQCLcB/s100/image22.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-NyIPUD4E-yk/VxkRgX0uhaI/AAAAAAAAC1U/0-KrJCPXQuAnqOWT8y05AgUkRVH2AVJ-wCLcB/s1600/image05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-NyIPUD4E-yk/VxkRgX0uhaI/AAAAAAAAC1U/0-KrJCPXQuAnqOWT8y05AgUkRVH2AVJ-wCLcB/s100/image05.png" /></a></div></td>

</tbody></table>


<h3><center>Most Innovative</center></h3>
<p>Apps or games offering a highly engaging novelty experience or unique benefit. And the nominees are... </p>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tbody><tr>


<td><center><a href="https://play.google.com/store/apps/details?id=com.waybefore.fastlikeafox&hl=en&e=-EnableAppDetailsPageRedesign">Fast like a Fox</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.im360nytvr&hl=en&e=-EnableAppDetailsPageRedesign">NYT VR</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=jp.gocro.smartnews.android&hl=en&e=-EnableAppDetailsPageRedesign">
SmartNews</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=co.thefabulous.app&hl=en">The Fabulous</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=com.elevenbitstudios.twommobile&hl=en&e=-EnableAppDetailsPageRedesign">This War of Mine</a></center></td>
</tr>
<tr>
</tr><td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-XCjTY7HUjO4/VxkSmMC7uoI/AAAAAAAAC1k/pSM14IMPQrwA5L3ijT26m6anLw3XrVMGwCLcB/s1600/image08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-XCjTY7HUjO4/VxkSmMC7uoI/AAAAAAAAC1k/pSM14IMPQrwA5L3ijT26m6anLw3XrVMGwCLcB/s100/image08.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-kXS2YMIy77o/VxkSrJ6x1GI/AAAAAAAAC1o/9pjnVCoOkUk97BUe-ecYMFSwJIsCQcDjQCLcB/s1600/image13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-kXS2YMIy77o/VxkSrJ6x1GI/AAAAAAAAC1o/9pjnVCoOkUk97BUe-ecYMFSwJIsCQcDjQCLcB/s100/image13.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-Dn4mNILkLk4/VxkSyoP_aiI/AAAAAAAAC1s/ZBQZPXgJ78Ar2qjjwRODK9XQT3Ug7GHwACLcB/s1600/image36.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-Dn4mNILkLk4/VxkSyoP_aiI/AAAAAAAAC1s/ZBQZPXgJ78Ar2qjjwRODK9XQT3Ug7GHwACLcB/s100/image36.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-R8u5wt4CV5s/VxkS7jNCOtI/AAAAAAAAC1w/KaH_AjYPmAUrBnmtIBoPK_1Jzsww-RnnACLcB/s1600/image14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-R8u5wt4CV5s/VxkS7jNCOtI/AAAAAAAAC1w/KaH_AjYPmAUrBnmtIBoPK_1Jzsww-RnnACLcB/s100/image14.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-kAy0Ze0IM-8/VxkTBs_EwwI/AAAAAAAAC10/zKsqrcaRLDkV3daJ81Jnvoz7HP6HHFDmACLcB/s1600/image16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-kAy0Ze0IM-8/VxkTBs_EwwI/AAAAAAAAC10/zKsqrcaRLDkV3daJ81Jnvoz7HP6HHFDmACLcB/s100/image16.png" /></a></div></td>

</tr></tbody></table>


<h3><center>Best App</center> </h3>
<p>A true representation of beautiful design, intuitive UX and high user appeal, quality and rating. And the nominees are...</p> 


<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tbody><tr>


<td><center><a href="https://play.google.com/store/apps/details?id=com.buzzfeed.news">BuzzFeed News</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.fungamesforfree.colorfy&hl=en&e=-EnableAppDetailsPageRedesign">Colorfy</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.houzz.app&hl=en&e=-EnableAppDetailsPageRedesign">
Houzz</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=tunein.player&hl=en&e=-EnableAppDetailsPageRedesign">TuneIn Radio</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=com.yummly.android&hl=en&e=-EnableAppDetailsPageRedesign">Yummly</a></center></td>
</tr>
<tr>
</tr><td><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-XriosRGkHA8/Vxp-jSmBTrI/AAAAAAAAC3Q/cgZdvPiW4fgc0z3j9k3ckE72iDAblcPswCLcB/s1600/image04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-XriosRGkHA8/Vxp-jSmBTrI/AAAAAAAAC3Q/cgZdvPiW4fgc0z3j9k3ckE72iDAblcPswCLcB/s100/image04.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-3oiA6jCddok/VxkUf_oHO4I/AAAAAAAAC2I/bex5g6rGOTc6bYMufIgZGbNhFo3AAPoYwCLcB/s1600/image21.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-3oiA6jCddok/VxkUf_oHO4I/AAAAAAAAC2I/bex5g6rGOTc6bYMufIgZGbNhFo3AAPoYwCLcB/s100/image21.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-rr-4_dV5Kwk/VxkUnvAkPmI/AAAAAAAAC2M/OUoRQtpWdJUONsOV7MmRpdX0iChCmv82gCLcB/s1600/image28.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-rr-4_dV5Kwk/VxkUnvAkPmI/AAAAAAAAC2M/OUoRQtpWdJUONsOV7MmRpdX0iChCmv82gCLcB/s100/image28.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-tRN_8Jw466Y/VxkX88yeeUI/AAAAAAAAC2c/uXiNL9941bsygS1qhgv2Y1GCKmIvnCvQgCLcB/s1600/image45.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-tRN_8Jw466Y/VxkX88yeeUI/AAAAAAAAC2c/uXiNL9941bsygS1qhgv2Y1GCKmIvnCvQgCLcB/s100/image45.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-cg6GvJxfcmk/VxkYDvlZBQI/AAAAAAAAC2g/W-rKLeCWntghwK52hfIWjnY1LvzIRTAFACLcB/s1600/image20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-cg6GvJxfcmk/VxkYDvlZBQI/AAAAAAAAC2g/W-rKLeCWntghwK52hfIWjnY1LvzIRTAFACLcB/s100/image20.png" /></a></div></td></tr>

</tbody></table>

<h3><center>Best Game</center></h3>
<p>Games with strong mechanics, informative tutorial, broad appeal and tasteful design. And the nominees are... </p>


<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tbody><tr>


<td><center><a href="https://play.google.com/store/apps/details?id=com.spryfox.alphabear&hl=en&e=-EnableAppDetailsPageRedesign">Alphabear</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.hcg.cok.gp&hl=en&e=-EnableAppDetailsPageRedesign">Clash of Kings</a></center></td>


<td><center><a href="https://play.google.com/store/apps/details?id=com.supercell.clashroyale&hl=en&e=-EnableAppDetailsPageRedesign">
Clash Royale</a></center></td>

<td><center><a href="https://play.google.com/store/apps/details?id=com.netmarble.mherosgb&hl=en&e=-EnableAppDetailsPageRedesign">MARVEL Future Fight</a></center></td>

<td><a href="https://play.google.com/store/apps/details?id=com.ea.game.starwarscapital_row&hl=en&e=-EnableAppDetailsPageRedesign">Star Wars™: Galaxy of Heroes</a></center></td>
</tr>
<tr>
</tr><td><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-rRm0nmQcZKo/VxkZBsviksI/AAAAAAAAC2s/fi7VYG65RIE1QE_1v5CzMGcVzd2Izva7ACLcB/s1600/image12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-rRm0nmQcZKo/VxkZBsviksI/AAAAAAAAC2s/fi7VYG65RIE1QE_1v5CzMGcVzd2Izva7ACLcB/s100/image12.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-mi8q_gxZQog/VxkZLqtuFOI/AAAAAAAAC2w/1q5UFfi_3aMTdC21CYE0HIZDp7lzthP-ACLcB/s1600/image09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-mi8q_gxZQog/VxkZLqtuFOI/AAAAAAAAC2w/1q5UFfi_3aMTdC21CYE0HIZDp7lzthP-ACLcB/s100/image09.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-6NUEdlDRpa0/VxkZS9S243I/AAAAAAAAC20/d031x-eP06U9FQZWmEZCQdbLe-wUeZS6ACLcB/s1600/image26.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-6NUEdlDRpa0/VxkZS9S243I/AAAAAAAAC20/d031x-eP06U9FQZWmEZCQdbLe-wUeZS6ACLcB/s100/image26.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-bZA7evIeo_0/VxkZbP5VIXI/AAAAAAAAC24/5gLY_0MFchs_h0frOy4CPQMTcO3vv3MGACLcB/s1600/image46.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-bZA7evIeo_0/VxkZbP5VIXI/AAAAAAAAC24/5gLY_0MFchs_h0frOy4CPQMTcO3vv3MGACLcB/s100/image46.png" /></a></div></td>
<td><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-wcadmOoqxiY/VxkZnnmObTI/AAAAAAAAC28/5Qek5fsXArwBmrs_awopo4MFlTv2nTMNQCLcB/s1600/image41.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-wcadmOoqxiY/VxkZnnmObTI/AAAAAAAAC28/5Qek5fsXArwBmrs_awopo4MFlTv2nTMNQCLcB/s100/image41.png" /></a></div></td></tr></tbody></table>


<p>Join us live at the <a href="https://events.google.com/io2016/schedule?sid=d09c1403-0cef-e511-a517-00155d5066d7#day2/d09c1403-0cef-e511-a517-00155d5066d7">ceremony</a> on May 19th at 7:00 pm PDT on stage 7 at Google I/O or via the <a href="https://events.google.com/io2016/?utm_campaign=io_update_awards_042116&utm_source=anddev&utm_medium=blog">live stream</a>. You can also track the conversation on Twitter and G+ using the hashtags #io16.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/the-google-play-awards-coming-to-google-io/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Build beautifully for Android Wear’s Round Screen using API 23’s -round identifier</title>
		<link>https://googledata.org/google-android/build-beautifully-for-android-wears-round-screen-using-api-23s-round-identifier/</link>
		<comments>https://googledata.org/google-android/build-beautifully-for-android-wears-round-screen-using-api-23s-round-identifier/#comments</comments>
		<pubDate>Wed, 20 Apr 2016 22:16:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=a5ea9c06d1d3adfe9be2c14ed50d809d</guid>
		<description><![CDATA[<i></i><p>Posted by <a href="https://twitter.com/hoitab">Hoi Lam</a>, Android Wear Developer Advocate</p>

<p>Android Wear is about choice. From the beginning, users could choose the style they wanted, including watches with circular screens. With Android Wear API 23, we have enabled even better developer support so that you can code delightful experiences backed by beautiful code. The key component of this is the new round resource identifier which helps you separate resource files such as layouts, dimens between round and square devices. In this blog post, I will lay out the options that developers have and why you should consider dimens.xml! In addition, I will outline how best to deal with devices which have a chin.</p>

<h3>Getting started? Consider BoxInsetLayout!</h3>
<p>If all your content can fit into a single square screen, use the <a href="http://developer.android.com/reference/android/support/wearable/view/BoxInsetLayout.html">BoxInsetLayout</a>. This class has been included in the <a href="http://developer.android.com/training/wearables/apps/layouts.html?utm_campaign=android%20wear_discussion_roundscreen_042016&#38;utm_source=anddev&#38;utm_medium=blog#UiLibrary">Wearable Support Library</a> from the start and helps you put all the content into the middle square area of the circular screen and is ignored by square screens. For details on how to use the BoxInsetLayout, refer to the Use a <a href="http://developer.android.com/training/wearables/ui/layouts.html?utm_campaign=android%20wear_discussion_roundscreen_042016&#38;utm_source=anddev&#38;utm_medium=blog#same-layout">Shape-Aware Layout</a> section in our developer guide.</p>

<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td>Without BoxInsetLayout</td>
  <td>With BoxInsetLayout</td>
 </tr><tr><td><div><a href="https://1.bp.blogspot.com/-BgQprlmuVWQ/VxVBUhUYSaI/AAAAAAAACu4/Sgf0zOKPnoAqXZJ7fjdfFE04cQM3lY2XQCLcB/s1600/image06.png"><img border="0" src="https://1.bp.blogspot.com/-BgQprlmuVWQ/VxVBUhUYSaI/AAAAAAAACu4/Sgf0zOKPnoAqXZJ7fjdfFE04cQM3lY2XQCLcB/s320/image06.png"></a></div></td>
  <td><div><a href="https://4.bp.blogspot.com/-EAgLTKJx5JY/VxVBe9PK7tI/AAAAAAAACu8/Cf0H8eiHg_AL_Ai2aed4J5CEPVwjooP9QCLcB/s1600/image00.png"><img border="0" src="https://4.bp.blogspot.com/-EAgLTKJx5JY/VxVBe9PK7tI/AAAAAAAACu8/Cf0H8eiHg_AL_Ai2aed4J5CEPVwjooP9QCLcB/s320/image00.png"></a></div></td>
 </tr></tbody></table><br /><h3>Goodbye WatchViewStub, Hello layout-round!</h3>
<p>Developers have been able to specify different layouts for square and round watches using <a href="http://developer.android.com/reference/android/support/wearable/view/WatchViewStub.html?utm_campaign=android%20wear_discussion_roundscreen_042016&#38;utm_source=anddev&#38;utm_medium=blog">WatchViewStub</a> from the beginning. With Android Wear API 23, this has become even easier. Developers can put different layouts into layout-round and layout folders. Previously with WatchViewStub, developers needed to wait until the layout was inflated before attaching view elements, this added significant complexity to the code. This is eliminated using the -round identifier:</p>
<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td>
        <b></b><p>&#160;Pre Android Wear API 23  - WatchViewStub (4 files)</p>
    </td></tr><tr><td>

<b>1. layout/activity_main.xml</b>

<pre><code><span>&#160;&#60;?</span><span>xml version</span><span>=</span><span>"1.0"</span><span> encoding</span><span>=</span><span>"utf-8"</span><span>?&#62;</span><span> &#160;<br />&#160;</span><span>&#60;</span><span>android</span><span>.</span><span>support</span><span>.</span><span>wearable</span><span>.</span><span>view</span><span>.</span><span>WatchViewStub</span><span> &#160; &#160;<br />&#160; &#160; &#160;xmlns</span><span>:</span><span>android</span><span>=</span><span>"http://schemas.android.com/apk/res/android"</span><span> &#160;<br />&#160; &#160; &#160;xmlns</span><span>:</span><span>app</span><span>=</span><span>"http://schemas.android.com/apk/res-auto"</span><span> &#160;<br />&#160; &#160; &#160;xmlns</span><span>:</span><span>tools</span><span>=</span><span>"http://schemas.android.com/tools"</span><span> &#160;<br />&#160; &#160; &#160;android</span><span>:</span><span>id</span><span>=</span><span>"@+id/watch_view_stub"</span><span> &#160;<br />&#160; &#160; &#160;android</span><span>:</span><span>layout_width</span><span>=</span><span>"match_parent"</span><span> &#160;<br />&#160; &#160; &#160;android</span><span>:</span><span>layout_height</span><span>=</span><span>"match_parent"</span><span> &#160;<br />&#160; &#160; &#160;app</span><span>:</span><span>rectLayout</span><span>=</span><span>"@layout/rect_activity_main"</span><span> &#160;<br />&#160; &#160; &#160;app</span><span>:</span><span>roundLayout</span><span>=</span><span>"@layout/round_activity_main"</span><span> &#160;<br />&#160; &#160; &#160;tools</span><span>:</span><span>context</span><span>=</span><span>"com.android.example.watchviewstub.MainActivity"</span><span> &#160;<br />&#160; &#160; &#160;tools</span><span>:</span><span>deviceIds</span><span>=</span><span>"wear"</span><span>&#62;&#60;/</span><span>android</span><span>.</span><span>support</span><span>.</span><span>wearable</span><span>.</span><span>view</span><span>.</span><span>WatchViewStub</span><span>&#62;</span><span><br /></span></code></pre>
 <p><b>2. layout/rect_activity_main.xml</b> - layout for square watches</p>
 <p><b>3. layout/round_activity_main.xml</b> - layout for round watches</p>
<b> 4. MainAcitivity.java</b>
<pre><code><span>&#160; <br />&#160;</span><span>protected</span><span> </span><span>void</span><span> onCreate</span><span>(</span><span>Bundle</span><span> savedInstanceState</span><span>)</span><span> </span><span>{</span><span> &#160;<br />&#160; &#160;</span><span>super</span><span>.</span><span>onCreate</span><span>(</span><span>savedInstanceState</span><span>);</span><span> &#160;<br />&#160; &#160;setContentView</span><span>(</span><span>R</span><span>.</span><span>layout</span><span>.</span><span>activity_main</span><span>);</span><span> &#160;<br />&#160; &#160;</span><span>final</span><span> </span><span>WatchViewStub</span><span> stub </span><span>=</span><span> </span><span>(</span><span>WatchViewStub</span><span>)</span><span> findViewById</span><span>(</span><span>R</span><span>.</span><span>id</span><span>.</span><span>watch_view_stub</span><span>);</span><span> &#160;<br />&#160; &#160;stub</span><span>.</span><span>setOnLayoutInflatedListener</span><span>(</span><span>new</span><span> </span><span>WatchViewStub</span><span>.</span><span>OnLayoutInflatedListener</span><span>()</span><span> </span><span>{</span><span> &#160;<br />&#160; &#160; &#160;</span><span>@Override</span><span> &#160;<br />&#160; &#160; &#160;</span><span>public</span><span> </span><span>void</span><span> onLayoutInflated</span><span>(</span><span>WatchViewStub</span><span> stub</span><span>)</span><span> </span><span>{</span><span> &#160;<br />&#160; &#160; &#160; &#160;mTextView </span><span>=</span><span> </span><span>(</span><span>TextView</span><span>)</span><span> stub</span><span>.</span><span>findViewById</span><span>(</span><span>R</span><span>.</span><span>id</span><span>.</span><span>text</span><span>);</span><span> &#160;<br />&#160; &#160; &#160;</span><span>}</span><span> &#160;<br />&#160; &#160;</span><span>});</span><span> &#160;<br />&#160;</span><span>}</span><span> &#160;<br /></span></code></pre>
    </td></tr><tr><td>
        <b></b><p>&#160;After Android Wear API 23 - layout-round (3 files)</p>
    </td></tr><tr><td>

<p><b> 1. layout-notround/activity_main.xml</b> - layout for square watches</p>
<p><b> 2. layout-round/activity_main.xml </b> - layout for round watches</p>
<b>3. MainAcitivity.java</b>
<pre><code><span>&#160;</span><span>protected</span><span> </span><span>void</span><span> onCreate</span><span>(</span><span>Bundle</span><span> savedInstanceState</span><span>)</span><span> </span><span>{</span><span> &#160;<br />&#160; &#160; &#160;</span><span>super</span><span>.</span><span>onCreate</span><span>(</span><span>savedInstanceState</span><span>);</span><span> &#160;<br />&#160; &#160; &#160;setContentView</span><span>(</span><span>R</span><span>.</span><span>layout</span><span>.</span><span>activity_main</span><span>);</span><span> &#160;<br />&#160; &#160; &#160;mTextView </span><span>=</span><span> </span><span>(</span><span>TextView</span><span>)</span><span> findViewById</span><span>(</span><span>R</span><span>.</span><span>id</span><span>.</span><span>text</span><span>);</span><span> &#160; &#160;<br />&#160;</span><span>}</span><span> &#160;<br /></span></code></pre>
</td></tr></tbody></table><p>That said, since WatchViewStub is part of the Android Wear Support Library, if your current code uses it, it is not a breaking change and you can refactor your code at your convenience. In addition to the -round identifier, developers also use the -notround idenifier to separate resources. So why would you want to use it in place of the default layout? It&#8217;s a matter of style. If you have a mixture of layouts, you might consider organising layouts in this way:</p>
<p></p><ul><li><b>layout/</b> - Layouts which works for both circular and square watches</li>
  <li><b>layout-round/ and layout-notround/</b> - Screen shape specific layouts</li>
</ul><h3>An even better way to develop for round - values-round/dimens.xml</h3>
<p>Maintaining multiple layout files is potentially painful. Each time you add a screen element, you need to go to all the layout files and add this. With mobile devices, you will usually only do this to specify different layouts for phones and tablets and rarely for different phone resolutions. For watches, unless your screen layout is significantly different between round and square (which is rare based on the applications I have seen thus far), you should consider using different dimens.xml instead.</p>

<p>As I experimented with the -round identifier, I found that the easiest way to build for round and square watches is actually by specifying values/dimens.xml and values-round/dimens.xml. By specifying different padding settings, I am able to create the following layout with the same layout.xml file and two dimens files - one for square and one for round. The values used suits this layout, you should experiment with different values to see what works best:</p>
<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td><b>values-round/dimens.xml</b></td>
  <td><b>values/dimens.xml</b></td>
 </tr><tr><td><pre><code><span>&#160;</span><span>&#60;dimen</span><span> </span><span>name</span><span>=</span><span>"header_start_padding"</span><span>&#62;</span><span>36dp</span><span>&#60;/dimen&#62;</span><span> &#160;<br />&#160;</span><span>&#60;dimen</span><span> </span><span>name</span><span>=</span><span>"header_end_padding"</span><span>&#62;</span><span>22dp</span><span>&#60;/dimen&#62;</span><span> &#160;<br />&#160;</span><span>&#60;dimen</span><span> </span><span>name</span><span>=</span><span>"list_start_padding"</span><span>&#62;</span><span>36dp</span><span>&#60;/dimen&#62;</span><span> &#160;<br />&#160;</span><span>&#60;dimen</span><span> </span><span>name</span><span>=</span><span>"list_end_padding"</span><span>&#62;</span><span>22dp</span><span>&#60;/dimen&#62;</span><span> &#160;<br /></span></code></pre></td>
  <td><pre><code><span>&#160;</span><span>&#60;dimen</span><span> </span><span>name</span><span>=</span><span>"header_start_padding"</span><span>&#62;</span><span>16dp</span><span>&#60;/dimen&#62;</span><span> &#160;<br />&#160;</span><span>&#60;dimen</span><span> </span><span>name</span><span>=</span><span>"header_end_padding"</span><span>&#62;</span><span>16dp</span><span>&#60;/dimen&#62;</span><span> &#160;<br />&#160;</span><span>&#60;dimen</span><span> </span><span>name</span><span>=</span><span>"list_start_padding"</span><span>&#62;</span><span>10dp</span><span>&#60;/dimen&#62;</span><span> &#160;<br />&#160;</span><span>&#60;dimen</span><span> </span><span>name</span><span>=</span><span>"list_end_padding"</span><span>&#62;</span><span>10dp</span><span>&#60;/dimen&#62;</span><span> &#160;<br /></span></code></pre></td>
 </tr><tr><td><div><a href="https://3.bp.blogspot.com/-3FAl0rw_InE/VxVMXlVY7zI/AAAAAAAACvs/5gE1fqdtRgopSk4pPZnEdmczznqkg-thACLcB/s1600/adwear1.png"><img border="0" src="https://3.bp.blogspot.com/-3FAl0rw_InE/VxVMXlVY7zI/AAAAAAAACvs/5gE1fqdtRgopSk4pPZnEdmczznqkg-thACLcB/s320/adwear1.png"></a></div></td>
                <td><div><a href="https://4.bp.blogspot.com/-HdhlKlOc7X8/VxVNPsMYadI/AAAAAAAACv4/-zEyqpIdKVQEAPecdiB0UriN6UGbPiVSgCLcB/s1600/adwear2.png"><img border="0" src="https://4.bp.blogspot.com/-HdhlKlOc7X8/VxVNPsMYadI/AAAAAAAACv4/-zEyqpIdKVQEAPecdiB0UriN6UGbPiVSgCLcB/s320/adwear2.png"></a></div></td>
 </tr></tbody></table><br /><p>Before API 23, to do the same would have involved a significant amount of boilerplate code manually specifying the different dimensions for all elements on the screen. With the -round identifier, this is now easy to do in API 23 and is my favourite way to build round / square layouts.</p>

<h3>Don&#8217;t forget the chin!</h3>
<p>Some watches have an inset (also know as a &#8220;chin&#8221;) in an otherwise circular screen. So how should you can you build a beautiful layout while keeping your code elegant? Consider this design:

</p><table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td><a href="https://1.bp.blogspot.com/-qxQzm6hpyFk/VxVnN4I3Y7I/AAAAAAAACxg/IWHxouLeU9ElMb0937t1KrGDQhyGYBUpACLcB/s1600/image08.png"><img border="0" src="https://1.bp.blogspot.com/-qxQzm6hpyFk/VxVnN4I3Y7I/AAAAAAAACxg/IWHxouLeU9ElMb0937t1KrGDQhyGYBUpACLcB/s320/image08.png"></a></td>
  <td><p><b>activity_main.xml</b></p>
<pre><code><span>&#160;&#60;</span><span>FrameLayout</span><span> &#160;<br />&#160; &#160;</span><span>...&#62;</span><span> &#160;<br />&#160; &#160;</span><span>&#60;</span><span>android</span><span>.</span><span>support</span><span>.</span><span>wearable</span><span>.</span><span>view</span><span>.</span><span>CircledImageView</span><span> &#160;<br />&#160; &#160; &#160;android</span><span>:</span><span>id</span><span>=</span><span>"@+id/androidbtn"</span><span> &#160;<br />&#160; &#160; &#160;android</span><span>:</span><span>src</span><span>=</span><span>"@drawable/ic_android"</span><span> &#160;<br />&#160; &#160; &#160;</span><span>.../&#62;</span><span> &#160;<br />&#160; &#160;</span><span>&#60;</span><span>ImageButton</span><span> &#160;<br />&#160; &#160; &#160;android</span><span>:</span><span>id</span><span>=</span><span>"@+id/lovebtn"</span><span> &#160;<br />&#160; &#160; &#160;android</span><span>:</span><span>src</span><span>=</span><span>"@drawable/ic_favourite"</span><span> &#160;<br />&#160; &#160; &#160;android</span><span>:</span><span>paddingTop</span><span>=</span><span>"5dp"</span><span> &#160;<br />&#160; &#160; &#160;android</span><span>:</span><span>paddingBottom</span><span>=</span><span>"5dp"</span><span> &#160;<br />&#160; &#160; &#160;android</span><span>:</span><span>layout_gravity</span><span>=</span><span>"bottom"</span><span> &#160;<br />&#160; &#160; &#160;</span><span>.../&#62;</span><span> &#160;<br />&#160;</span><span>&#60;/</span><span>FrameLayout</span><span>&#62;</span><span> &#160;<br /></span></code></pre></td>
 </tr></tbody></table><p>If we are to do nothing, the heart shape button will disappear into the chin. Luckily, there&#8217;s an easy way to fix this with <a href="https://medium.com/google-developers/why-would-i-want-to-fitssystemwindows-4e26d9ce1eec#.kkx8rd6f8">fitsSystemWindows</a>:</p>
<pre><code><span>&#160;</span><span>&#60;ImageButton</span><span> &#160;<br />&#160; &#160; &#160;</span><span>android:id</span><span>=</span><span>"@+id/lovebtn"</span><span> &#160;<br />&#160; &#160; &#160;</span><span>android:src</span><span>=</span><span>"@drawable/ic_favourite"</span><span> &#160;<br />&#160; &#160; &#160;</span><span>android:paddingTop</span><span>=</span><span>"5dp"</span><span> &#160;<br />&#160; &#160; &#160;</span><span>android:paddingBottom</span><span>=</span><span>"5dp"</span><span> &#160;<br />&#160; &#160; </span><b><u><span>android:fitsSystemWindows</span><span>=</span><span>"true"</span></u></b><span> &#160;<br />&#160; &#160; &#160;...</span><span>/&#62;</span><span> &#160;<br /></span></code></pre>

<p>For the eagle-eyed (middle image of the screen shown below under &#8220;fitsSystemWindows=&#8221;true&#8221;&#8221;), you might noticed that the top and bottom padding that we have put in is lost. This is one of the main side effect of using fitsSystemWindows. This is because fitsSystemWindows works by overriding the padding to make it fits the system window. So how do we fix this? We can replace padding with <a href="http://developer.android.com/guide/topics/resources/drawable-resource.html?utm_campaign=android%20wear_discussion_roundscreen_042016&#38;utm_source=anddev&#38;utm_medium=blog#Inset">InsetDrawables</a>:</p>
<b>
</b><p>inset_favourite.xml</p>
<pre><code><span>&#160;</span><span>&#60;inset</span><span> &#160;<br />&#160; &#160;</span><span>xmlns:android</span><span>=</span><span>"http://schemas.android.com/apk/res/android"</span><span> &#160;<br />&#160; &#160;</span><b><u><span>android:drawable</span><span>=</span><span>"@drawable/ic_favourite"</span></u></b><span> <br />&#160; &#160;</span><b><u><span>android:insetTop</span><span>=</span><span>"5dp"</span></u><span> &#160;<br />&#160; &#160;</span><span>android:insetBottom</span><span>=</span><span>"5dp"</span></b><span> </span><span>/&#62;</span><span> &#160;<br /></span></code></pre>

<b></b><p>activity_main.xml</p>
<pre><code><span>&#160;</span><span>&#60;ImageButton</span><span> &#160;<br />&#160; &#160; &#160;</span><span>android:id</span><span>=</span><span>"@+id/lovebtn"</span><span> &#160;<br />&#160; &#160; &#160;</span><span>android:src</span><span>=</span><span>"@drawable/inset_favourite"</span><span> &#160;<br />&#160; &#160; &#160;</span><strike><span>android:paddingTop</span><span>=</span><span>"5dp"</span></strike><span> &#160;<br />&#160; &#160; &#160;</span><strike><span>android:paddingBottom</span><span>=</span><span>"5dp"</span></strike><span> &#160;<br />&#160; &#160; &#160;</span><span>android:fitsSystemWindows</span><span>=</span><span>"true"</span><span> &#160;<br />&#160; &#160; &#160;...</span><span>/&#62;</span><span> &#160;<br /></span></code></pre>

<p>
Although the padding setting in the layout will be ignored, the code is tidier if we remove this redundant code.</p>

<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td>Do nothing</td>
  <td>fitsSystemWindows=&#8221;true&#8221;</td>
  <td>fitsSystemWindows=&#8221;true&#8221;<br />and use InsetDrawable</td>
 </tr><tr><td><div><a href="https://3.bp.blogspot.com/-z-HpNRZ9Xno/VxVaxlS3NYI/AAAAAAAACwo/IemJxGqJCe4MgIF5KjybMFQcuH07WcPZgCLcB/s1600/image05.png"><img border="0" src="https://3.bp.blogspot.com/-z-HpNRZ9Xno/VxVaxlS3NYI/AAAAAAAACwo/IemJxGqJCe4MgIF5KjybMFQcuH07WcPZgCLcB/s320/image05.png"></a></div></td>
  <td><div><a href="https://1.bp.blogspot.com/-1NypnluHPoI/VxVaCoXC4gI/AAAAAAAACwc/Gj2mBHD6eckFl__BmV5GgMaxtdMIINW8QCLcB/s1600/image01.png"><img border="0" src="https://1.bp.blogspot.com/-1NypnluHPoI/VxVaCoXC4gI/AAAAAAAACwc/Gj2mBHD6eckFl__BmV5GgMaxtdMIINW8QCLcB/s320/image01.png"></a></div></td>
  <td><div><a href="https://1.bp.blogspot.com/-oj1nkie7bLw/VxVl6v-rFlI/AAAAAAAACxM/hrSUaZiyEGEca93X5zr2ZFsYrtINwcioQCLcB/s1600/image03.png"><img border="0" src="https://1.bp.blogspot.com/-oj1nkie7bLw/VxVl6v-rFlI/AAAAAAAACxM/hrSUaZiyEGEca93X5zr2ZFsYrtINwcioQCLcB/s320/image03.png"></a></div></td>
 </tr></tbody></table><p>If you require more control than what is possible declaratively using xml, you can also programmatically adjust your layout. To obtain the size of the chin you should attach a <a href="http://developer.android.com/reference/android/view/View.OnApplyWindowInsetsListener.html">View.OnApplyWindowInsetsListener</a> to the outermost view of your layout. Also don&#8217;t forget to call v.onApplyWindowInsets(insets). Otherwise, the new listener will consume the inset and inner elements which react to insets may not react.</p>

<b></b><p>How to obtain the screen chin size programmatically</p>
<b></b><p>MainActivity.java</p>
<pre><code><span>&#160;</span><span>private</span><span> </span><span>int</span><span> mChinSize</span><span>;</span><span> &#160;<br />&#160;</span><span>protected</span><span> </span><span>void</span><span> onCreate</span><span>(</span><span>Bundle</span><span> savedInstanceState</span><span>)</span><span> </span><span>{</span><span> &#160;<br />&#160; &#160; &#160;</span><span>super</span><span>.</span><span>onCreate</span><span>(</span><span>savedInstanceState</span><span>);</span><span> &#160;<br />&#160; &#160; &#160;setContentView</span><span>(</span><span>R</span><span>.</span><span>layout</span><span>.</span><span>activity_main</span><span>);</span><span> &#160;<br />&#160; &#160; &#160;</span><span>// find the outermost element &#160;</span><span><br />&#160; &#160; &#160;</span><b><u><span>final</span><span> </span><span>View</span><span> container </span><span>=</span><span> findViewById</span><span>(</span><span>R</span><span>.</span><span>id</span><span>.</span><span>outer_container</span><span>);</span></u></b><span> &#160;<br />&#160; &#160; &#160;</span><span>// attach a View.OnApplyWindowInsetsListener &#160;</span><span><br />&#160; &#160; &#160;</span><b><u><span>container</span><span>.</span><span>setOnApplyWindowInsetsListener</span><span>(</span><span>new</span><span> </span><span>View</span><span>.</span><span>OnApplyWindowInsetsListener</span><span>()</span><span> </span><span>{</span></u></b><span> &#160;<br />&#160; &#160; &#160; &#160; &#160;</span><span>@Override</span><span> &#160;<br />&#160; &#160; &#160; &#160; &#160;</span><span>public</span><span> </span><span>WindowInsets</span><span> onApplyWindowInsets</span><span>(</span><span>View</span><span> v</span><span>,</span><span> </span><span>WindowInsets</span><span> insets</span><span>)</span><span> </span><span>{</span><span> &#160;<br />&#160; &#160; &#160; &#160; &#160; &#160; &#160;mChinSize </span><span>=</span><span> insets</span><span>.</span><span>getSystemWindowInsetBottom</span><span>();</span><span> &#160;<br />&#160; &#160; &#160; &#160; &#160; &#160; </span><b>&#160;<u><span>// The following line is important for inner elements which react to insets &#160;</span><span></span></u><br />&#160; &#160; &#160; &#160; &#160; &#160; &#160;<u>v<span>.</span><span>onApplyWindowInsets</span><span>(</span><span>insets</span><span>);</span><span> </span></u></b><span><br />&#160; &#160; &#160; &#160; &#160; &#160; &#160;</span><span>return</span><span> insets</span><span>;</span><span> &#160;<br />&#160; &#160; &#160;</span><span>}</span><span> &#160;<br />&#160; &#160;</span><span>});</span><span> &#160;<br />&#160;</span><span>}</span><span> &#160;<br /></span></code></pre>

<p>Last but not least, remember to test your code! Since last year, we have included several device images for Android Wear devices with a chin to make testing easier and faster:</p>

<div><a href="https://3.bp.blogspot.com/-NALEyt1rGY8/VxVAjZ-iAWI/AAAAAAAACu0/sfKXhlHjnb0DiRfpr4Q5jxbYeInsTBvwQCLcB/s1600/image04.png"><img border="0" src="https://3.bp.blogspot.com/-NALEyt1rGY8/VxVAjZ-iAWI/AAAAAAAACu0/sfKXhlHjnb0DiRfpr4Q5jxbYeInsTBvwQCLcB/s640/image04.png"></a></div>

<h3>Square peg in a round hole no more!</h3>
<p>Android Wear has always been about empowering users to wear what they want. A major part in enabling this is the round screen. With API 23 and the -round resource identifier, it is easier than ever to build for both round and square watches - delightful experiences backed by beautiful code!</p>

<h3>Additional Resources</h3>
<p><a href="https://medium.com/google-developers/why-would-i-want-to-fitssystemwindows-4e26d9ce1eec#.kkx8rd6f8">Why would I want to fitsSystemWindows?</a> by <a href="https://google.com/+IanLake">Ian Lake</a> - Best practice for using this powerful tool including its limitations.
<a href="https://github.com/google/wear-screeninfo">ScreenInfo Utility</a> by <a href="https://google.com/+WaynePiekarski">Wayne Piekarski</a> - Get useful information for your display including DPI, chin size, etc.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by <a href="https://twitter.com/hoitab">Hoi Lam</a>, Android Wear Developer Advocate</p></i>

<p>Android Wear is about choice. From the beginning, users could choose the style they wanted, including watches with circular screens. With Android Wear API 23, we have enabled even better developer support so that you can code delightful experiences backed by beautiful code. The key component of this is the new round resource identifier which helps you separate resource files such as layouts, dimens between round and square devices. In this blog post, I will lay out the options that developers have and why you should consider dimens.xml! In addition, I will outline how best to deal with devices which have a chin.</p>

<h3>Getting started? Consider BoxInsetLayout!</h3>
<p>If all your content can fit into a single square screen, use the <a href="http://developer.android.com/reference/android/support/wearable/view/BoxInsetLayout.html">BoxInsetLayout</a>. This class has been included in the <a href="http://developer.android.com/training/wearables/apps/layouts.html?utm_campaign=android%20wear_discussion_roundscreen_042016&utm_source=anddev&utm_medium=blog#UiLibrary">Wearable Support Library</a> from the start and helps you put all the content into the middle square area of the circular screen and is ignored by square screens. For details on how to use the BoxInsetLayout, refer to the Use a <a href="http://developer.android.com/training/wearables/ui/layouts.html?utm_campaign=android%20wear_discussion_roundscreen_042016&utm_source=anddev&utm_medium=blog#same-layout">Shape-Aware Layout</a> section in our developer guide.</p>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tbody><tr>
  <td style="width:50%;"><center>Without BoxInsetLayout</center></td>
  <td style="width:50%;"><center>With BoxInsetLayout</center></td>
 </tr>
 <tr>
  <td style="width:50%;"><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-BgQprlmuVWQ/VxVBUhUYSaI/AAAAAAAACu4/Sgf0zOKPnoAqXZJ7fjdfFE04cQM3lY2XQCLcB/s1600/image06.png" imageanchor="1"><img border="0" src="https://1.bp.blogspot.com/-BgQprlmuVWQ/VxVBUhUYSaI/AAAAAAAACu4/Sgf0zOKPnoAqXZJ7fjdfFE04cQM3lY2XQCLcB/s320/image06.png"></a></div></td>
  <td style="width:50%;"><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-EAgLTKJx5JY/VxVBe9PK7tI/AAAAAAAACu8/Cf0H8eiHg_AL_Ai2aed4J5CEPVwjooP9QCLcB/s1600/image00.png" imageanchor="1"><img border="0" src="https://4.bp.blogspot.com/-EAgLTKJx5JY/VxVBe9PK7tI/AAAAAAAACu8/Cf0H8eiHg_AL_Ai2aed4J5CEPVwjooP9QCLcB/s320/image00.png"></a></div></td>
 </tr>
</tbody></table>

<br>
<h3>Goodbye WatchViewStub, Hello layout-round!</h3>
<p>Developers have been able to specify different layouts for square and round watches using <a href="http://developer.android.com/reference/android/support/wearable/view/WatchViewStub.html?utm_campaign=android%20wear_discussion_roundscreen_042016&utm_source=anddev&utm_medium=blog">WatchViewStub</a> from the beginning. With Android Wear API 23, this has become even easier. Developers can put different layouts into layout-round and layout folders. Previously with WatchViewStub, developers needed to wait until the layout was inflated before attaching view elements, this added significant complexity to the code. This is eliminated using the -round identifier:</p>
<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
    <tbody><tr><td style="background-color:#CFD8DC;">
        <b><p style="-webkit-margin-after: 0em;">&nbsp;Pre Android Wear API 23  - WatchViewStub (4 files)</p></b>
    </tr></td><tr><td>

<style type="text/css">
pre.CICodeFormatter{
 font-family:arial;
 font-size:12px;
 border:1px dashed #CCCCCC;
 width:99%;
 height:auto;
 overflow:auto;
 background:#f0f0f0;
 line-height:20px;
 
 padding:0px;
 color:#000000;
 text-align:left;
}
pre.CICodeFormatter code{
 color:#000000;
 word-wrap:normal;
}
</style>
<b>1. layout/activity_main.xml</b>

<pre class="CICodeFormatter prettyprint"><code class="CICodeFormatter"><span class="pun">&nbsp;&lt;?</span><span class="pln">xml version</span><span class="pun">=</span><span class="str">"1.0"</span><span class="pln"> encoding</span><span class="pun">=</span><span class="str">"utf-8"</span><span class="pun">?&gt;</span><span class="pln"> &nbsp;<br>&nbsp;</span><span class="pun">&lt;</span><span class="pln">android</span><span class="pun">.</span><span class="pln">support</span><span class="pun">.</span><span class="pln">wearable</span><span class="pun">.</span><span class="pln">view</span><span class="pun">.</span><span class="typ">WatchViewStub</span><span class="pln"> &nbsp; &nbsp;<br>&nbsp; &nbsp; &nbsp;xmlns</span><span class="pun">:</span><span class="pln">android</span><span class="pun">=</span><span class="str">"http://schemas.android.com/apk/res/android"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;xmlns</span><span class="pun">:</span><span class="pln">app</span><span class="pun">=</span><span class="str">"http://schemas.android.com/apk/res-auto"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;xmlns</span><span class="pun">:</span><span class="pln">tools</span><span class="pun">=</span><span class="str">"http://schemas.android.com/tools"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;android</span><span class="pun">:</span><span class="pln">id</span><span class="pun">=</span><span class="str">"@+id/watch_view_stub"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;android</span><span class="pun">:</span><span class="pln">layout_width</span><span class="pun">=</span><span class="str">"match_parent"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;android</span><span class="pun">:</span><span class="pln">layout_height</span><span class="pun">=</span><span class="str">"match_parent"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;app</span><span class="pun">:</span><span class="pln">rectLayout</span><span class="pun">=</span><span class="str">"@layout/rect_activity_main"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;app</span><span class="pun">:</span><span class="pln">roundLayout</span><span class="pun">=</span><span class="str">"@layout/round_activity_main"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;tools</span><span class="pun">:</span><span class="pln">context</span><span class="pun">=</span><span class="str">"com.android.example.watchviewstub.MainActivity"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;tools</span><span class="pun">:</span><span class="pln">deviceIds</span><span class="pun">=</span><span class="str">"wear"</span><span class="pun">&gt;&lt;/</span><span class="pln">android</span><span class="pun">.</span><span class="pln">support</span><span class="pun">.</span><span class="pln">wearable</span><span class="pun">.</span><span class="pln">view</span><span class="pun">.</span><span class="typ">WatchViewStub</span><span class="pun">&gt;</span><span class="pln"><br></span></code></pre>
 <p><b>2. layout/rect_activity_main.xml</b> - layout for square watches</p>
 <p><b>3. layout/round_activity_main.xml</b> - layout for round watches</p>
<b> 4. MainAcitivity.java</b>
<pre class="CICodeFormatter prettyprint"><code class="CICodeFormatter"><span class="pln">&nbsp; <br>&nbsp;</span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> onCreate</span><span class="pun">(</span><span class="typ">Bundle</span><span class="pln"> savedInstanceState</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp;</span><span class="kwd">super</span><span class="pun">.</span><span class="pln">onCreate</span><span class="pun">(</span><span class="pln">savedInstanceState</span><span class="pun">);</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp;setContentView</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">layout</span><span class="pun">.</span><span class="pln">activity_main</span><span class="pun">);</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp;</span><span class="kwd">final</span><span class="pln"> </span><span class="typ">WatchViewStub</span><span class="pln"> stub </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="typ">WatchViewStub</span><span class="pun">)</span><span class="pln"> findViewById</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">id</span><span class="pun">.</span><span class="pln">watch_view_stub</span><span class="pun">);</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp;stub</span><span class="pun">.</span><span class="pln">setOnLayoutInflatedListener</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">WatchViewStub</span><span class="pun">.</span><span class="typ">OnLayoutInflatedListener</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="lit">@Override</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> onLayoutInflated</span><span class="pun">(</span><span class="typ">WatchViewStub</span><span class="pln"> stub</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp;mTextView </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="typ">TextView</span><span class="pun">)</span><span class="pln"> stub</span><span class="pun">.</span><span class="pln">findViewById</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">id</span><span class="pun">.</span><span class="pln">text</span><span class="pun">);</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="pun">}</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp;</span><span class="pun">});</span><span class="pln"> &nbsp;<br>&nbsp;</span><span class="pun">}</span><span class="pln"> &nbsp;<br></span></code></pre>
    </tr></td><tr><td style="background-color:#CFD8DC;">
        <b><p style="-webkit-margin-after: 0em;">&nbsp;After Android Wear API 23 - layout-round (3 files)</p></b>
    </tr></td><tr><td>

<p><b> 1. layout-notround/activity_main.xml</b> - layout for square watches</p>
<p><b> 2. layout-round/activity_main.xml </b> - layout for round watches</p>
<b>3. MainAcitivity.java</b>
<style type="text/css">
pre.CICodeFormatter{
 font-family:arial;
 font-size:12px;
 border:1px dashed #CCCCCC;
 width:99%;
 height:auto;
 overflow:auto;
 background:#f0f0f0;
 line-height:20px;
 
 padding:0px;
 color:#000000;
 text-align:left;
}
pre.CICodeFormatter code{
 color:#000000;
 word-wrap:normal;
}
</style>
<pre class="CICodeFormatter prettyprint"><code class="CICodeFormatter"><span class="pln">&nbsp;</span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> onCreate</span><span class="pun">(</span><span class="typ">Bundle</span><span class="pln"> savedInstanceState</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="kwd">super</span><span class="pun">.</span><span class="pln">onCreate</span><span class="pun">(</span><span class="pln">savedInstanceState</span><span class="pun">);</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;setContentView</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">layout</span><span class="pun">.</span><span class="pln">activity_main</span><span class="pun">);</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;mTextView </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="typ">TextView</span><span class="pun">)</span><span class="pln"> findViewById</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">id</span><span class="pun">.</span><span class="pln">text</span><span class="pun">);</span><span class="pln"> &nbsp; &nbsp;<br>&nbsp;</span><span class="pun">}</span><span class="pln"> &nbsp;<br></span></code></pre>
</tr></td></tbody></table>

<p>That said, since WatchViewStub is part of the Android Wear Support Library, if your current code uses it, it is not a breaking change and you can refactor your code at your convenience. In addition to the -round identifier, developers also use the -notround idenifier to separate resources. So why would you want to use it in place of the default layout? It’s a matter of style. If you have a mixture of layouts, you might consider organising layouts in this way:</p>
<p><ul>
  <li><b>layout/</b> - Layouts which works for both circular and square watches</li>
  <li><b>layout-round/ and layout-notround/</b> - Screen shape specific layouts</li>
</ul></p>

<h3>An even better way to develop for round - values-round/dimens.xml</h3>
<p>Maintaining multiple layout files is potentially painful. Each time you add a screen element, you need to go to all the layout files and add this. With mobile devices, you will usually only do this to specify different layouts for phones and tablets and rarely for different phone resolutions. For watches, unless your screen layout is significantly different between round and square (which is rare based on the applications I have seen thus far), you should consider using different dimens.xml instead.</p>

<p>As I experimented with the -round identifier, I found that the easiest way to build for round and square watches is actually by specifying values/dimens.xml and values-round/dimens.xml. By specifying different padding settings, I am able to create the following layout with the same layout.xml file and two dimens files - one for square and one for round. The values used suits this layout, you should experiment with different values to see what works best:</p>
<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tbody><tr>
  <td style="width:50%;"><b>values-round/dimens.xml</b></td>
  <td style="width:50%;"><b>values/dimens.xml</b></td>
 </tr>
 <tr>
  <td style="width:50%;"><style type="text/css">
pre.CICodeFormatter{
 font-family:arial;
 font-size:12px;
 border:1px dashed #CCCCCC;
 width:99%;
 height:auto;
 overflow:auto;
 background:#f0f0f0;
 line-height:20px;
 
 padding:0px;
 color:#000000;
 text-align:left;
}
pre.CICodeFormatter code{
 color:#000000;
 word-wrap:normal;
}
</style>
<pre class="CICodeFormatter prettyprint"><code class="CICodeFormatter"><span class="pln">&nbsp;</span><span class="tag">&lt;dimen</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"header_start_padding"</span><span class="tag">&gt;</span><span class="pln">36dp</span><span class="tag">&lt;/dimen&gt;</span><span class="pln"> &nbsp;<br>&nbsp;</span><span class="tag">&lt;dimen</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"header_end_padding"</span><span class="tag">&gt;</span><span class="pln">22dp</span><span class="tag">&lt;/dimen&gt;</span><span class="pln"> &nbsp;<br>&nbsp;</span><span class="tag">&lt;dimen</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"list_start_padding"</span><span class="tag">&gt;</span><span class="pln">36dp</span><span class="tag">&lt;/dimen&gt;</span><span class="pln"> &nbsp;<br>&nbsp;</span><span class="tag">&lt;dimen</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"list_end_padding"</span><span class="tag">&gt;</span><span class="pln">22dp</span><span class="tag">&lt;/dimen&gt;</span><span class="pln"> &nbsp;<br></span></code></pre></td>
  <td style="width:50%;"><style type="text/css">
pre.CICodeFormatter{
 font-family:arial;
 font-size:12px;
 border:1px dashed #CCCCCC;
 width:99%;
 height:auto;
 overflow:auto;
 background:#f0f0f0;
 line-height:20px;
 
 padding:0px;
 color:#000000;
 text-align:left;
}
pre.CICodeFormatter code{
 color:#000000;
 word-wrap:normal;
}
</style>
<pre class="CICodeFormatter prettyprint"><code class="CICodeFormatter"><span class="pln">&nbsp;</span><span class="tag">&lt;dimen</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"header_start_padding"</span><span class="tag">&gt;</span><span class="pln">16dp</span><span class="tag">&lt;/dimen&gt;</span><span class="pln"> &nbsp;<br>&nbsp;</span><span class="tag">&lt;dimen</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"header_end_padding"</span><span class="tag">&gt;</span><span class="pln">16dp</span><span class="tag">&lt;/dimen&gt;</span><span class="pln"> &nbsp;<br>&nbsp;</span><span class="tag">&lt;dimen</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"list_start_padding"</span><span class="tag">&gt;</span><span class="pln">10dp</span><span class="tag">&lt;/dimen&gt;</span><span class="pln"> &nbsp;<br>&nbsp;</span><span class="tag">&lt;dimen</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"list_end_padding"</span><span class="tag">&gt;</span><span class="pln">10dp</span><span class="tag">&lt;/dimen&gt;</span><span class="pln"> &nbsp;<br></span></code></pre></td>
 </tr>
 <tr>
  <td style="width:50%;"><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-3FAl0rw_InE/VxVMXlVY7zI/AAAAAAAACvs/5gE1fqdtRgopSk4pPZnEdmczznqkg-thACLcB/s1600/adwear1.png" imageanchor="1"><img border="0" src="https://3.bp.blogspot.com/-3FAl0rw_InE/VxVMXlVY7zI/AAAAAAAACvs/5gE1fqdtRgopSk4pPZnEdmczznqkg-thACLcB/s320/adwear1.png"></a></div></td>
                <td style="width:50%;"><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-HdhlKlOc7X8/VxVNPsMYadI/AAAAAAAACv4/-zEyqpIdKVQEAPecdiB0UriN6UGbPiVSgCLcB/s1600/adwear2.png" imageanchor="1"><img border="0" src="https://4.bp.blogspot.com/-HdhlKlOc7X8/VxVNPsMYadI/AAAAAAAACv4/-zEyqpIdKVQEAPecdiB0UriN6UGbPiVSgCLcB/s320/adwear2.png"></a></div></td>
 </tr>
</tbody></table>

<br>
<p>Before API 23, to do the same would have involved a significant amount of boilerplate code manually specifying the different dimensions for all elements on the screen. With the -round identifier, this is now easy to do in API 23 and is my favourite way to build round / square layouts.</p>

<h3>Don’t forget the chin!</h3>
<p>Some watches have an inset (also know as a “chin”) in an otherwise circular screen. So how should you can you build a beautiful layout while keeping your code elegant? Consider this design:

</p><table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tbody><tr>
  <td><a href="https://1.bp.blogspot.com/-qxQzm6hpyFk/VxVnN4I3Y7I/AAAAAAAACxg/IWHxouLeU9ElMb0937t1KrGDQhyGYBUpACLcB/s1600/image08.png" imageanchor="1"><img border="0" src="https://1.bp.blogspot.com/-qxQzm6hpyFk/VxVnN4I3Y7I/AAAAAAAACxg/IWHxouLeU9ElMb0937t1KrGDQhyGYBUpACLcB/s320/image08.png"></a></td>
  <td><style type="text/css">
pre.CICodeFormatter{
 font-family:arial;
 font-size:12px;
 border:1px dashed #CCCCCC;
 width:99%;
 height:auto;
 overflow:auto;
 background:#f0f0f0;
 line-height:20px;
 
 padding:0px;
 color:#000000;
 text-align:left;
}
pre.CICodeFormatter code{
 color:#000000;
 word-wrap:normal;
}
</style>
        <p><b>activity_main.xml</b></p>
<pre class="CICodeFormatter prettyprint"><code class="CICodeFormatter"><span class="pun">&nbsp;&lt;</span><span class="typ">FrameLayout</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp;</span><span class="pun">...&gt;</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp;</span><span class="pun">&lt;</span><span class="pln">android</span><span class="pun">.</span><span class="pln">support</span><span class="pun">.</span><span class="pln">wearable</span><span class="pun">.</span><span class="pln">view</span><span class="pun">.</span><span class="typ">CircledImageView</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;android</span><span class="pun">:</span><span class="pln">id</span><span class="pun">=</span><span class="str">"@+id/androidbtn"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;android</span><span class="pun">:</span><span class="pln">src</span><span class="pun">=</span><span class="str">"@drawable/ic_android"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="pun">.../&gt;</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp;</span><span class="pun">&lt;</span><span class="typ">ImageButton</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;android</span><span class="pun">:</span><span class="pln">id</span><span class="pun">=</span><span class="str">"@+id/lovebtn"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;android</span><span class="pun">:</span><span class="pln">src</span><span class="pun">=</span><span class="str">"@drawable/ic_favourite"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;android</span><span class="pun">:</span><span class="pln">paddingTop</span><span class="pun">=</span><span class="str">"5dp"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;android</span><span class="pun">:</span><span class="pln">paddingBottom</span><span class="pun">=</span><span class="str">"5dp"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;android</span><span class="pun">:</span><span class="pln">layout_gravity</span><span class="pun">=</span><span class="str">"bottom"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="pun">.../&gt;</span><span class="pln"> &nbsp;<br>&nbsp;</span><span class="pun">&lt;/</span><span class="typ">FrameLayout</span><span class="pun">&gt;</span><span class="pln"> &nbsp;<br></span></code></pre></td>
 </tr>
</tbody></table>



<p>If we are to do nothing, the heart shape button will disappear into the chin. Luckily, there’s an easy way to fix this with <a href="https://medium.com/google-developers/why-would-i-want-to-fitssystemwindows-4e26d9ce1eec#.kkx8rd6f8">fitsSystemWindows</a>:</p>
<style type="text/css">
pre.CICodeFormatter{
 font-family:arial;
 font-size:12px;
 border:1px dashed #CCCCCC;
 width:99%;
 height:auto;
 overflow:auto;
 background:#f0f0f0;
 line-height:20px;
 
 padding:0px;
 color:#000000;
 text-align:left;
}
pre.CICodeFormatter code{
 color:#000000;
 word-wrap:normal;
}
</style>
<pre class="CICodeFormatter prettyprint"><code class="CICodeFormatter"><span class="pln">&nbsp;</span><span class="tag">&lt;ImageButton</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="atn">android:id</span><span class="pun">=</span><span class="atv">"@+id/lovebtn"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="atn">android:src</span><span class="pun">=</span><span class="atv">"@drawable/ic_favourite"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="atn">android:paddingTop</span><span class="pun">=</span><span class="atv">"5dp"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="atn">android:paddingBottom</span><span class="pun">=</span><span class="atv">"5dp"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; </span><b><u><span class="atn">android:fitsSystemWindows</span><span class="pun">=</span><span class="atv">"true"</span></u></b><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;...</span><span class="tag">/&gt;</span><span class="pln"> &nbsp;<br></span></code></pre>

<p>For the eagle-eyed (middle image of the screen shown below under “fitsSystemWindows=”true””), you might noticed that the top and bottom padding that we have put in is lost. This is one of the main side effect of using fitsSystemWindows. This is because fitsSystemWindows works by overriding the padding to make it fits the system window. So how do we fix this? We can replace padding with <a href="http://developer.android.com/guide/topics/resources/drawable-resource.html?utm_campaign=android%20wear_discussion_roundscreen_042016&utm_source=anddev&utm_medium=blog#Inset">InsetDrawables</a>:</p>
<b>
<p>inset_favourite.xml</p></b>
<style type="text/css">
pre.CICodeFormatter{
 font-family:arial;
 font-size:12px;
 border:1px dashed #CCCCCC;
 width:99%;
 height:auto;
 overflow:auto;
 background:#f0f0f0;
 line-height:20px;
 
 padding:0px;
 color:#000000;
 text-align:left;
}
pre.CICodeFormatter code{
 color:#000000;
 word-wrap:normal;
}
</style>
<pre class="CICodeFormatter prettyprint"><code class="CICodeFormatter"><span class="pln">&nbsp;</span><span class="tag">&lt;inset</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp;</span><span class="atn">xmlns:android</span><span class="pun">=</span><span class="atv">"http://schemas.android.com/apk/res/android"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp;</span><b><u><span class="atn">android:drawable</span><span class="pun">=</span><span class="atv">"@drawable/ic_favourite"</span></u></b><span class="pln"> <br>&nbsp; &nbsp;</span><b><u><span class="atn">android:insetTop</span><span class="pun">=</span><span class="atv">"5dp"</span></u><span class="pln"> &nbsp;<br>&nbsp; &nbsp;</span><span class="atn">android:insetBottom</span><span class="pun">=</span><span class="atv">"5dp"</span></b><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln"> &nbsp;<br></span></code></pre>

<b><p>activity_main.xml</p></b>
<style type="text/css">
pre.CICodeFormatter{
 font-family:arial;
 font-size:12px;
 border:1px dashed #CCCCCC;
 width:99%;
 height:auto;
 overflow:auto;
 background:#f0f0f0;
 line-height:20px;
 
 padding:0px;
 color:#000000;
 text-align:left;
}
pre.CICodeFormatter code{
 color:#000000;
 word-wrap:normal;
}
</style>
<pre class="CICodeFormatter prettyprint"><code class="CICodeFormatter"><span class="pln">&nbsp;</span><span class="tag">&lt;ImageButton</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="atn">android:id</span><span class="pun">=</span><span class="atv">"@+id/lovebtn"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="atn">android:src</span><span class="pun">=</span><span class="atv">"@drawable/inset_favourite"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><strike><span class="atn">android:paddingTop</span><span class="pun">=</span><span class="atv">"5dp"</span></strike><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><strike><span class="atn">android:paddingBottom</span><span class="pun">=</span><span class="atv">"5dp"</span></strike><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="atn">android:fitsSystemWindows</span><span class="pun">=</span><span class="atv">"true"</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;...</span><span class="tag">/&gt;</span><span class="pln"> &nbsp;<br></span></code></pre>

<p>
Although the padding setting in the layout will be ignored, the code is tidier if we remove this redundant code.</p>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tbody><tr>
  <td style="width:33%;"><center>Do nothing</center></td>
  <td style="width:33%;"><center>fitsSystemWindows=”true”</center></td>
  <td style="width:33%;"><center>fitsSystemWindows=”true”<br>and use InsetDrawable</center></td>
 </tr>
 <tr>
  <td style="width:33%;"><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-z-HpNRZ9Xno/VxVaxlS3NYI/AAAAAAAACwo/IemJxGqJCe4MgIF5KjybMFQcuH07WcPZgCLcB/s1600/image05.png" imageanchor="1"><img border="0" src="https://3.bp.blogspot.com/-z-HpNRZ9Xno/VxVaxlS3NYI/AAAAAAAACwo/IemJxGqJCe4MgIF5KjybMFQcuH07WcPZgCLcB/s320/image05.png"></a></div></td>
  <td style="width:33%;"><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-1NypnluHPoI/VxVaCoXC4gI/AAAAAAAACwc/Gj2mBHD6eckFl__BmV5GgMaxtdMIINW8QCLcB/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-1NypnluHPoI/VxVaCoXC4gI/AAAAAAAACwc/Gj2mBHD6eckFl__BmV5GgMaxtdMIINW8QCLcB/s320/image01.png"></a></div></td>
  <td style="width:33%;"><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-oj1nkie7bLw/VxVl6v-rFlI/AAAAAAAACxM/hrSUaZiyEGEca93X5zr2ZFsYrtINwcioQCLcB/s1600/image03.png" imageanchor="1"><img border="0" src="https://1.bp.blogspot.com/-oj1nkie7bLw/VxVl6v-rFlI/AAAAAAAACxM/hrSUaZiyEGEca93X5zr2ZFsYrtINwcioQCLcB/s320/image03.png"></a></div></td>
 </tr>
</tbody></table>


<p>If you require more control than what is possible declaratively using xml, you can also programmatically adjust your layout. To obtain the size of the chin you should attach a <a href="http://developer.android.com/reference/android/view/View.OnApplyWindowInsetsListener.html">View.OnApplyWindowInsetsListener</a> to the outermost view of your layout. Also don’t forget to call v.onApplyWindowInsets(insets). Otherwise, the new listener will consume the inset and inner elements which react to insets may not react.</p>

<b><p>How to obtain the screen chin size programmatically</p></b>
<b><p>MainActivity.java</p></b>
<style type="text/css">
pre.CICodeFormatter{
 font-family:arial;
 font-size:12px;
 border:1px dashed #CCCCCC;
 width:99%;
 height:auto;
 overflow:auto;
 background:#f0f0f0;
 line-height:20px;
 
 padding:0px;
 color:#000000;
 text-align:left;
}
pre.CICodeFormatter code{
 color:#000000;
 word-wrap:normal;
}
</style>
<pre class="CICodeFormatter prettyprint"><code class="CICodeFormatter"><span class="pln">&nbsp;</span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> mChinSize</span><span class="pun">;</span><span class="pln"> &nbsp;<br>&nbsp;</span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> onCreate</span><span class="pun">(</span><span class="typ">Bundle</span><span class="pln"> savedInstanceState</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="kwd">super</span><span class="pun">.</span><span class="pln">onCreate</span><span class="pun">(</span><span class="pln">savedInstanceState</span><span class="pun">);</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;setContentView</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">layout</span><span class="pun">.</span><span class="pln">activity_main</span><span class="pun">);</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="com">// find the outermost element &nbsp;</span><span class="pln"><br>&nbsp; &nbsp; &nbsp;</span><b><u><span class="kwd">final</span><span class="pln"> </span><span class="typ">View</span><span class="pln"> container </span><span class="pun">=</span><span class="pln"> findViewById</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">id</span><span class="pun">.</span><span class="pln">outer_container</span><span class="pun">);</span></u></b><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="com">// attach a View.OnApplyWindowInsetsListener &nbsp;</span><span class="pln"><br>&nbsp; &nbsp; &nbsp;</span><b><u><span class="pln">container</span><span class="pun">.</span><span class="pln">setOnApplyWindowInsetsListener</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">View</span><span class="pun">.</span><span class="typ">OnApplyWindowInsetsListener</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span></u></b><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="lit">@Override</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="kwd">public</span><span class="pln"> </span><span class="typ">WindowInsets</span><span class="pln"> onApplyWindowInsets</span><span class="pun">(</span><span class="typ">View</span><span class="pln"> v</span><span class="pun">,</span><span class="pln"> </span><span class="typ">WindowInsets</span><span class="pln"> insets</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mChinSize </span><span class="pun">=</span><span class="pln"> insets</span><span class="pun">.</span><span class="pln">getSystemWindowInsetBottom</span><span class="pun">();</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><b>&nbsp;<u><span class="com">// The following line is important for inner elements which react to insets &nbsp;</span><span class="pln"></u><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<u>v</span><span class="pun">.</span><span class="pln">onApplyWindowInsets</span><span class="pun">(</span><span class="pln">insets</span><span class="pun">);</span><span class="pln"> </span></u></b><span class="pln"><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="kwd">return</span><span class="pln"> insets</span><span class="pun">;</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp; &nbsp;</span><span class="pun">}</span><span class="pln"> &nbsp;<br>&nbsp; &nbsp;</span><span class="pun">});</span><span class="pln"> &nbsp;<br>&nbsp;</span><span class="pun">}</span><span class="pln"> &nbsp;<br></span></code></pre>

<p>Last but not least, remember to test your code! Since last year, we have included several device images for Android Wear devices with a chin to make testing easier and faster:</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-NALEyt1rGY8/VxVAjZ-iAWI/AAAAAAAACu0/sfKXhlHjnb0DiRfpr4Q5jxbYeInsTBvwQCLcB/s1600/image04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-NALEyt1rGY8/VxVAjZ-iAWI/AAAAAAAACu0/sfKXhlHjnb0DiRfpr4Q5jxbYeInsTBvwQCLcB/s640/image04.png"></a></div>

<h3>Square peg in a round hole no more!</h3>
<p>Android Wear has always been about empowering users to wear what they want. A major part in enabling this is the round screen. With API 23 and the -round resource identifier, it is easier than ever to build for both round and square watches - delightful experiences backed by beautiful code!</p>

<h3>Additional Resources</h3>
<p><a href="https://medium.com/google-developers/why-would-i-want-to-fitssystemwindows-4e26d9ce1eec#.kkx8rd6f8">Why would I want to fitsSystemWindows?</a> by <a href="https://google.com/+IanLake">Ian Lake</a> - Best practice for using this powerful tool including its limitations.
<a href="https://github.com/google/wear-screeninfo">ScreenInfo Utility</a> by <a href="https://google.com/+WaynePiekarski">Wayne Piekarski</a> - Get useful information for your display including DPI, chin size, etc.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/build-beautifully-for-android-wears-round-screen-using-api-23s-round-identifier/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Deprecation of BIND_LISTENER with Android Wear APIs</title>
		<link>https://googledata.org/google-android/deprecation-of-bind_listener-with-android-wear-apis/</link>
		<comments>https://googledata.org/google-android/deprecation-of-bind_listener-with-android-wear-apis/#comments</comments>
		<pubDate>Wed, 20 Apr 2016 21:26:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=1987e480620da68df910c8fbb30b03e3</guid>
		<description><![CDATA[<i></i><p>Posted by <a href="https://plus.google.com/+WaynePiekarski/posts?e=-RedirectToSandbox">Wayne Piekarski</a>, Developer Advocate, Android Wear</p>

<p>If you&#8217;re an Android Wear developer, we wanted to let you know of a change you might need to make to your app to improve the performance of your user&#8217;s devices. If your app is using BIND_LISTENER intent filters in your manifest, it is important that you are aware that this API has been deprecated on all Android versions. The new replacement API introduced in Google Play Services 8.2 is more efficient for Android devices, so developers are encouraged to migrate to this as soon as possible to ensure the best user experience. It is important that all Android Wear developers are aware of this change and update their apps as soon as possible.</p>

<h3>Limitations of BIND_LISTENER API</h3>
<p>When Android Wear introduced the <a href="http://developer.android.com/training/wearables/data-layer/events.html">WearableListenerService</a>, it allowed you to listen to changes via the BIND_LISTENER intent filter in the AndroidManifest.xml. These changes included data item changes, message arrivals, capability changes, and peer connects/disconnects.</p>

<p>The WearableListenerService starts whenever any of these events occur, even if the app is only interested in one type. When a phone has a large number of apps using WearableListenerService and BIND_LISTENER, a watch appearing or disappearing can cause many services to start up. This applies memory pressure to the device, causing other activities and services to be shut down, and generates unnecessary work.</p>

<h3>Fine-grained intent filter API</h3>
<p>In Google Play Services 8.2, we <a href="http://android-developers.blogspot.com/2015/11/whats-new-in-google-play-services-83.html">introduced</a> a new fine-grained intent filter mechanism that allows developers to specify exactly what events they are interested in. For example, if you have multiple listener services, use a path prefix to filter only those data items and messages meant for the service, with syntax like this:</p>
<br /><pre><code> &#60;service android:name=".FirstExampleService"&#62;  
   &#60;intent-filter&#62;  
       &#60;action android:name="com.google.android.gms.wearable.DATA_CHANGED" /&#62;  
       &#60;action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" /&#62;  
       &#60;data android:scheme="wear" android:host="*" android:pathPrefix="/FirstExample" /&#62;  
   &#60;/intent-filter&#62;  
 &#60;/service&#62;  
</code></pre>
<br /><p>There are intent <a href="http://developer.android.com/training/wearables/data-layer/events.html">filters</a> for DATA_CHANGED, MESSAGE_RECEIVED, CHANNEL_EVENT, and CAPABILITY_CHANGED. You can specify multiple  elements, and if any of them match, it will call your service and filter out anything else. If you do not include a  element, all events will be filtered out and your service will never be called, so make sure to include at least one. You should be aware that registering in an AndroidManifest.xml for CAPABILITY_CHANGED will cause your service to be called any time a device advertising this capability appears or disappears, so you should use this only if there is a compelling reason.</p>

<h3>Live listeners</h3>
<p>If you only need these events when an Activity or Service is running, then there is no need to register a listener in AndroidManifest.xml at all. Instead, you can use <a href="http://developer.android.com/reference/com/google/android/gms/wearable/DataApi.html#addListener(com.google.android.gms.common.api.GoogleApiClient,%20com.google.android.gms.wearable.DataApi.DataListener)">addListener()</a> live listeners, which will only be active when the Activity or Service is running, and will not impact the device otherwise. This is particularly useful if you want to do live status updates for capabilities being available in an Activity, but with no further background impact. In general, you should try to use addListener(), and only use AndroidManifest.xml when you need to receive events all the time.</p>

<h3>Best practices</h3>
<p>In general, you should only use a listener in AndroidManifest.xml for events that must launch your service. For example, if your watch app needs to send an interactive message or data to the phone.</p>

<p>You should try to limit the number of wake-ups of your service by using filters. If most of the events do not need to launch your app, then use a path and a filter that only matches the event you need. This is critical to limit the number of launches of your service.</p>

<p>If you have other cases where you do not need to launch a service, such as listening for status updates in an Activity, then register a live listener only for the duration it is needed.</p><p>

</p><h3>Documentation</h3>
<p>There is more information available about <a href="http://developer.android.com/training/wearables/data-layer/events.html">Data Layer events</a> and the use of <a href="https://developers.google.com/android/reference/com/google/android/gms/wearable/WearableListenerService">WearableListenerService</a>, and <a href="http://developer.android.com/guide/topics/manifest/data-element.html"></a> tags in the manifest. Android Studio has a <a href="http://tools.android.com/tech-docs/bind-listener">guide</a> with a summary of how to convert to the new API. The Android Wear samples also show best practices in the use of WearableListenerService, such as <a href="https://github.com/googlesamples/android-DataLayer">DataLayer</a> and <a href="https://github.com/googlesamples/android-XYZTouristAttractions">XYZTouristAttractions</a>. The changes needed are very small, and can be seen in this <a href="https://github.com/googlesamples/android-XYZTouristAttractions/commit/f8bbd9f73e6b67944d55988c13b604954b2dd7f4">git diff</a> from one of the samples here.</p>

<h3>Removal of BIND_LISTENER</h3>
<p>With the release of Android Studio 2.1, lint rules have been added that flag the use of BIND_LISTENER as a fatal error, and developers will need to make a small change to the AndroidManifest.xml to declare accurate intent filters. If you are still using BIND_LISTENER, you will receive the following error:</p>

<pre><code> AndroidManifest.xml:11: Error: The com.google.android.gms.wearable.BIND_LISTENER action is deprecated. [WearableBindListener]  
          &#60;action android:name="com.google.android.gms.wearable.BIND_LISTENER" /&#62;  
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
</code></pre>

<p>This will only impact developers who are recompiling their apps with Android Studio 2.1 and will not affect existing apps on user&#8217;s devices.</p>

<p>For developers who are using Google Play Services earlier than 8.2, the lint rules will not generate an error, but you should update to a newer version and implement more accurate intent filters as soon as possible.</p>

<p>In order to give users the best experience, we plan to disable BIND_LISTENER in the near future. It is therefore important that developers take action now, to avoid any future disruption experienced by users of their apps.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by <a href="https://plus.google.com/+WaynePiekarski/posts?e=-RedirectToSandbox">Wayne Piekarski</a>, Developer Advocate, Android Wear</p></i>

<p>If you’re an Android Wear developer, we wanted to let you know of a change you might need to make to your app to improve the performance of your user’s devices. If your app is using BIND_LISTENER intent filters in your manifest, it is important that you are aware that this API has been deprecated on all Android versions. The new replacement API introduced in Google Play Services 8.2 is more efficient for Android devices, so developers are encouraged to migrate to this as soon as possible to ensure the best user experience. It is important that all Android Wear developers are aware of this change and update their apps as soon as possible.</p>

<h3>Limitations of BIND_LISTENER API</h3>
<p>When Android Wear introduced the <a href="http://developer.android.com/training/wearables/data-layer/events.html">WearableListenerService</a>, it allowed you to listen to changes via the BIND_LISTENER intent filter in the AndroidManifest.xml. These changes included data item changes, message arrivals, capability changes, and peer connects/disconnects.</p>

<p>The WearableListenerService starts whenever any of these events occur, even if the app is only interested in one type. When a phone has a large number of apps using WearableListenerService and BIND_LISTENER, a watch appearing or disappearing can cause many services to start up. This applies memory pressure to the device, causing other activities and services to be shut down, and generates unnecessary work.</p>

<h3>Fine-grained intent filter API</h3>
<p>In Google Play Services 8.2, we <a href="http://android-developers.blogspot.com/2015/11/whats-new-in-google-play-services-83.html">introduced</a> a new fine-grained intent filter mechanism that allows developers to specify exactly what events they are interested in. For example, if you have multiple listener services, use a path prefix to filter only those data items and messages meant for the service, with syntax like this:</p>
<br>
<pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> &lt;service android:name=".FirstExampleService"&gt;  
   &lt;intent-filter&gt;  
       &lt;action android:name="com.google.android.gms.wearable.DATA_CHANGED" /&gt;  
       &lt;action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" /&gt;  
       &lt;data android:scheme="wear" android:host="*" android:pathPrefix="/FirstExample" /&gt;  
   &lt;/intent-filter&gt;  
 &lt;/service&gt;  
</code></pre>
<br>

<p>There are intent <a href="http://developer.android.com/training/wearables/data-layer/events.html">filters</a> for DATA_CHANGED, MESSAGE_RECEIVED, CHANNEL_EVENT, and CAPABILITY_CHANGED. You can specify multiple <data> elements, and if any of them match, it will call your service and filter out anything else. If you do not include a <data> element, all events will be filtered out and your service will never be called, so make sure to include at least one. You should be aware that registering in an AndroidManifest.xml for CAPABILITY_CHANGED will cause your service to be called any time a device advertising this capability appears or disappears, so you should use this only if there is a compelling reason.</p>

<h3>Live listeners</h3>
<p>If you only need these events when an Activity or Service is running, then there is no need to register a listener in AndroidManifest.xml at all. Instead, you can use <a href="http://developer.android.com/reference/com/google/android/gms/wearable/DataApi.html#addListener(com.google.android.gms.common.api.GoogleApiClient,%20com.google.android.gms.wearable.DataApi.DataListener)">addListener()</a> live listeners, which will only be active when the Activity or Service is running, and will not impact the device otherwise. This is particularly useful if you want to do live status updates for capabilities being available in an Activity, but with no further background impact. In general, you should try to use addListener(), and only use AndroidManifest.xml when you need to receive events all the time.</p>

<h3>Best practices</h3>
<p>In general, you should only use a listener in AndroidManifest.xml for events that must launch your service. For example, if your watch app needs to send an interactive message or data to the phone.</p>

<p>You should try to limit the number of wake-ups of your service by using filters. If most of the events do not need to launch your app, then use a path and a filter that only matches the event you need. This is critical to limit the number of launches of your service.</p>

<p>If you have other cases where you do not need to launch a service, such as listening for status updates in an Activity, then register a live listener only for the duration it is needed.<p>

<h3>Documentation</h3>
<p>There is more information available about <a href="http://developer.android.com/training/wearables/data-layer/events.html">Data Layer events</a> and the use of <a href="https://developers.google.com/android/reference/com/google/android/gms/wearable/WearableListenerService">WearableListenerService</a>, and <a href="http://developer.android.com/guide/topics/manifest/data-element.html"><data></a> tags in the manifest. Android Studio has a <a href="http://tools.android.com/tech-docs/bind-listener">guide</a> with a summary of how to convert to the new API. The Android Wear samples also show best practices in the use of WearableListenerService, such as <a href="https://github.com/googlesamples/android-DataLayer">DataLayer</a> and <a href="https://github.com/googlesamples/android-XYZTouristAttractions">XYZTouristAttractions</a>. The changes needed are very small, and can be seen in this <a href="https://github.com/googlesamples/android-XYZTouristAttractions/commit/f8bbd9f73e6b67944d55988c13b604954b2dd7f4">git diff</a> from one of the samples here.</p>

<h3>Removal of BIND_LISTENER</h3>
<p>With the release of Android Studio 2.1, lint rules have been added that flag the use of BIND_LISTENER as a fatal error, and developers will need to make a small change to the AndroidManifest.xml to declare accurate intent filters. If you are still using BIND_LISTENER, you will receive the following error:</p>

<pre  style="font-family:arial;font-size:10px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> AndroidManifest.xml:11: Error: The com.google.android.gms.wearable.BIND_LISTENER action is deprecated. [WearableBindListener]  
          &lt;action android:name="com.google.android.gms.wearable.BIND_LISTENER" /&gt;  
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
</code></pre>

<p>This will only impact developers who are recompiling their apps with Android Studio 2.1 and will not affect existing apps on user’s devices.</p>

<p>For developers who are using Google Play Services earlier than 8.2, the lint rules will not generate an error, but you should update to a newer version and implement more accurate intent filters as soon as possible.</p>

<p>In order to give users the best experience, we plan to disable BIND_LISTENER in the near future. It is therefore important that developers take action now, to avoid any future disruption experienced by users of their apps.</p>

























]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/deprecation-of-bind_listener-with-android-wear-apis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Optimize, Develop, and Debug with Vulkan Developer Tools</title>
		<link>https://googledata.org/google-android/optimize-develop-and-debug-with-vulkan-developer-tools/</link>
		<comments>https://googledata.org/google-android/optimize-develop-and-debug-with-vulkan-developer-tools/#comments</comments>
		<pubDate>Wed, 13 Apr 2016 20:50:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=f5ff7918b31d385b1e0877a6ec7fee06</guid>
		<description><![CDATA[<i></i><p>Posted by Shannon Woods, Technical Program Manager</p>

<p>Today we're pleased to bring you a preview of Android development tools for <a href="https://www.khronos.org/vulkan/">Vulkan&#8482;</a>. Vulkan is a new 3D rendering API which we&#8217;ve helped to develop as a member of Khronos, geared at providing explicit, low-overhead GPU (Graphics Processor Unit) control to developers. Vulkan&#8217;s reduction of CPU overhead allows some synthetic benchmarks to see as much as 10 times the draw call throughput on a single core as compared to OpenGL ES. Combined with a threading-friendly API design which allows multiple cores to be used in parallel with high efficiency, this offers a significant boost in performance for draw-call heavy applications.</p>

<p>Vulkan support is available now via the Android N Preview on devices which support it, including Nexus 5X and Nexus 6P. (Of course, you will still be able to use OpenGL ES as well!)</p>

<p>
To help developers start coding quickly, we&#8217;ve put together a set of <a href="https://github.com/googlesamples/vulkan-basic-samples">samples</a> and <a href="https://developer.android.com/ndk/guides/graphics/getting-started.html?utm_campaign=android_launch_vulkan_041316&#38;utm_source=anddev&#38;utm_medium=blog">guides</a> that illustrate how to use Vulkan effectively.</p>

<p>You can see Vulkan in action running on an Android device with Robert Hodgin&#8217;s Fish Tornado demo, ported by Google&#8217;s Art, Copy, and Code team:</p>

<!--[Interactive video]  --><br /><h3>Optimization: The Vulkan API</h3>

<p>There are many similarities between OpenGL ES and Vulkan, but Vulkan offers new features for developers who need to make every millisecond count.</p>

<ul><li><b>Application control of memory allocation.</b> Vulkan provides mechanisms for fine-grained control of how and when memory is allocated on the GPU. This allows developers to use their own allocation and recycling policies to fit their application, ultimately reducing execution and memory overhead and allowing applications to control when expensive allocations occur.</li>
  <li><b>Asynchronous command generation.</b> In OpenGL ES, draw calls are issued to the GPU as soon as the application calls them. In Vulkan, the application instead submits draw calls to command buffers, which allows the work of forming and recording the draw call to be separated from the act of issuing it to the GPU. By spreading command generation across several threads, applications can more effectively make use of multiple CPU cores. These command buffers can also be reused, reducing the overhead involved in command creation and issuance.</li>
  <li><b>No hidden work.</b> One OpenGL ES pitfall is that some commands may trigger work at points which are not explicitly spelled out in the API specification or made obvious to the developer. Vulkan makes performance more predictable and consistent by specifying which commands will explicitly trigger work and which will not.</li>
<li><b>Multithreaded design, from the ground up.</b> All OpenGL ES applications must issue commands for a context only from a single thread in order to render predictably and correctly. By contrast, Vulkan doesn&#8217;t have this requirement, allowing applications to do work like command buffer generation in parallel&#8212; but at the same time, it doesn&#8217;t make implicit guarantees about the safety of modifying and reading data from multiple threads at the same time. The power and responsibility of managing thread synchronization is in the hands of the application.</li>
  <li><b>Mobile-friendly features.</b> Vulkan includes features particularly helpful for achieving high performance on tiling GPUs, used by many mobile devices. Applications can provide information about the interaction between separate rendering passes, allowing tiling GPUs to make effective use of limited memory bandwidth, and avoid performing off-chip reads.</li>
  <li><b>Offline shader compilation.</b> Vulkan mandates support for SPIR-V, an intermediate language for shaders. This allows developers to compile shaders ahead of time, and ship SPIR-V binaries with their applications. These binaries are simpler to parse than high-level languages like GLSL, which means less variance in how drivers perform this parsing. SPIR-V also opens the door for third parties to provide compilers for specialized or cross-platform shading languages.
</li>
<li><b>Optional validation.</b> OpenGL ES validates every command you call, checking that arguments are within expected ranges, and objects are in the correct state to be operated upon. Vulkan doesn&#8217;t perform any of this validation itself. Instead, developers can use optional debug tools to ensure their calls are correct, incurring no run-time overhead in the final product.</li>
</ul><br /><h3>Debugging: Validation Layers</h3>
<p>As noted above, Vulkan&#8217;s lack of implicit validation requires developers to make use of tools outside the API in order to validate their code. Vulkan&#8217;s layer mechanism allows validation code and other developer tools to inspect every API call during development, without incurring any overhead in the shipping version. Our <a href="https://developer.android.com/ndk/guides/graphics/validation-layer.html?utm_campaign=android_launch_vulkan_041316&#38;utm_source=anddev&#38;utm_medium=blog">guides</a> show you how to build the validation layers for use with the Android NDK, giving you the tools necessary to build bug-free Vulkan code from start to finish.</p>
<br /><h3>Develop: Shader toolchain</h3>
<br />The <a href="https://github.com/google/shaderc">Shaderc</a> collection of tools provides developers with build-time and run-time tools for compiling GLSL into SPIR-V. Shaders can be compiled at build time using glslc, a command-line compiler, for easy integration into existing build systems. Or, for shaders which are generated or edited during execution, developers can use the Shaderc library to compile GLSL shaders to SPIR-V via a C interface. Both tools are built on top of Khronos&#8217;s reference compiler.
<br /><h3>Additional Resources</h3>
<p>The Vulkan ecosystem is a broad one, and the resources to get you started don&#8217;t end here. There is a wealth of material to explore, including:</p>
<ul><li>Khronos&#8217;s <a href="https://www.khronos.org/vulkan">Vulkan resources</a>, including overviews, reference pages, specification, and community demos </li>
  <li><a href="https://developer.android.com/ndk/guides/graphics/index.html">Android&#8217;s documentation</a> for Vulkan</li>
<li><a href="https://github.com/googlesamples/vulkan-basic-samples">Android Vulkan samples</a></li>
  <li><a href="https://github.com/googlesamples/android-vulkan-tutorials">Android Vulkan tutorials</a></li>
  <li>LunarG&#8217;s <a href="https://vulkan.lunarg.com/signin">LunarXchange</a> has resources for Windows and Linux Vulkan development</li>
</ul><img src="https://i.ytimg.com/vi/FQ4YJbD0zRM/maxresdefault.jpg">]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Shannon Woods, Technical Program Manager</p></i>

<p>Today we're pleased to bring you a preview of Android development tools for <a href="https://www.khronos.org/vulkan/">Vulkan™</a>. Vulkan is a new 3D rendering API which we’ve helped to develop as a member of Khronos, geared at providing explicit, low-overhead GPU (Graphics Processor Unit) control to developers. Vulkan’s reduction of CPU overhead allows some synthetic benchmarks to see as much as 10 times the draw call throughput on a single core as compared to OpenGL ES. Combined with a threading-friendly API design which allows multiple cores to be used in parallel with high efficiency, this offers a significant boost in performance for draw-call heavy applications.</p>

<p>Vulkan support is available now via the Android N Preview on devices which support it, including Nexus 5X and Nexus 6P. (Of course, you will still be able to use OpenGL ES as well!)</p>

<p>
To help developers start coding quickly, we’ve put together a set of <a href="https://github.com/googlesamples/vulkan-basic-samples">samples</a> and <a href="https://developer.android.com/ndk/guides/graphics/getting-started.html?utm_campaign=android_launch_vulkan_041316&utm_source=anddev&utm_medium=blog">guides</a> that illustrate how to use Vulkan effectively.</p>

<p>You can see Vulkan in action running on an Android device with Robert Hodgin’s Fish Tornado demo, ported by Google’s Art, Copy, and Code team:</p>

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

<H3>Optimization: The Vulkan API</H3>

<P>There are many similarities between OpenGL ES and Vulkan, but Vulkan offers new features for developers who need to make every millisecond count.</p>

<ul>
  <li><b>Application control of memory allocation.</b> Vulkan provides mechanisms for fine-grained control of how and when memory is allocated on the GPU. This allows developers to use their own allocation and recycling policies to fit their application, ultimately reducing execution and memory overhead and allowing applications to control when expensive allocations occur.</li>
  <li><b>Asynchronous command generation.</b> In OpenGL ES, draw calls are issued to the GPU as soon as the application calls them. In Vulkan, the application instead submits draw calls to command buffers, which allows the work of forming and recording the draw call to be separated from the act of issuing it to the GPU. By spreading command generation across several threads, applications can more effectively make use of multiple CPU cores. These command buffers can also be reused, reducing the overhead involved in command creation and issuance.</li>
  <li><b>No hidden work.</b> One OpenGL ES pitfall is that some commands may trigger work at points which are not explicitly spelled out in the API specification or made obvious to the developer. Vulkan makes performance more predictable and consistent by specifying which commands will explicitly trigger work and which will not.</li>
<li><b>Multithreaded design, from the ground up.</b> All OpenGL ES applications must issue commands for a context only from a single thread in order to render predictably and correctly. By contrast, Vulkan doesn’t have this requirement, allowing applications to do work like command buffer generation in parallel— but at the same time, it doesn’t make implicit guarantees about the safety of modifying and reading data from multiple threads at the same time. The power and responsibility of managing thread synchronization is in the hands of the application.</li>
  <li><b>Mobile-friendly features.</b> Vulkan includes features particularly helpful for achieving high performance on tiling GPUs, used by many mobile devices. Applications can provide information about the interaction between separate rendering passes, allowing tiling GPUs to make effective use of limited memory bandwidth, and avoid performing off-chip reads.</li>
  <li><b>Offline shader compilation.</b> Vulkan mandates support for SPIR-V, an intermediate language for shaders. This allows developers to compile shaders ahead of time, and ship SPIR-V binaries with their applications. These binaries are simpler to parse than high-level languages like GLSL, which means less variance in how drivers perform this parsing. SPIR-V also opens the door for third parties to provide compilers for specialized or cross-platform shading languages.
</li>
<li><b>Optional validation.</b> OpenGL ES validates every command you call, checking that arguments are within expected ranges, and objects are in the correct state to be operated upon. Vulkan doesn’t perform any of this validation itself. Instead, developers can use optional debug tools to ensure their calls are correct, incurring no run-time overhead in the final product.</li>
</ul> 
<br>
<h3>Debugging: Validation Layers</h3>
<p>As noted above, Vulkan’s lack of implicit validation requires developers to make use of tools outside the API in order to validate their code. Vulkan’s layer mechanism allows validation code and other developer tools to inspect every API call during development, without incurring any overhead in the shipping version. Our <a href="https://developer.android.com/ndk/guides/graphics/validation-layer.html?utm_campaign=android_launch_vulkan_041316&utm_source=anddev&utm_medium=blog">guides</a> show you how to build the validation layers for use with the Android NDK, giving you the tools necessary to build bug-free Vulkan code from start to finish.</p>
<br>
<h3>Develop: Shader toolchain</h3>
<br>The <a href="https://github.com/google/shaderc">Shaderc</a> collection of tools provides developers with build-time and run-time tools for compiling GLSL into SPIR-V. Shaders can be compiled at build time using glslc, a command-line compiler, for easy integration into existing build systems. Or, for shaders which are generated or edited during execution, developers can use the Shaderc library to compile GLSL shaders to SPIR-V via a C interface. Both tools are built on top of Khronos’s reference compiler.</p>
<br>
<h3>Additional Resources</h3>
<p>The Vulkan ecosystem is a broad one, and the resources to get you started don’t end here. There is a wealth of material to explore, including:</p>
<ul>
  <li>Khronos’s <a href="https://www.khronos.org/vulkan">Vulkan resources</a>, including overviews, reference pages, specification, and community demos </li>
  <li><a href="https://developer.android.com/ndk/guides/graphics/index.html">Android’s documentation</a> for Vulkan</li>
<li><a href="https://github.com/googlesamples/vulkan-basic-samples">Android Vulkan samples</a></li>
  <li><a href="https://github.com/googlesamples/android-vulkan-tutorials">Android Vulkan tutorials</a></li>
  <li>LunarG’s <a href="https://vulkan.lunarg.com/signin">LunarXchange</a> has resources for Windows and Linux Vulkan development</li>
</ul> 

<img style="display:none;" itemprop="image" src="https://i.ytimg.com/vi/FQ4YJbD0zRM/maxresdefault.jpg">





















]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/optimize-develop-and-debug-with-vulkan-developer-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android N Developer Preview 2, out today!</title>
		<link>https://googledata.org/google-android/android-n-developer-preview-2-out-today/</link>
		<comments>https://googledata.org/google-android/android-n-developer-preview-2-out-today/#comments</comments>
		<pubDate>Wed, 13 Apr 2016 17:21:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=334eb9b095ad8f11b328686b9701da7d</guid>
		<description><![CDATA[<i></i><p>Posted by Dave Burke, VP of Engineering</p>

<div><a href="https://2.bp.blogspot.com/-JgEVScojprA/Vw56XywMBVI/AAAAAAAACuY/rkN_E8D72BYBWtizW8z7LyOHVWRVdRudQCLcB/s1600/image09.png"><img border="0" src="https://2.bp.blogspot.com/-JgEVScojprA/Vw56XywMBVI/AAAAAAAACuY/rkN_E8D72BYBWtizW8z7LyOHVWRVdRudQCLcB/s320/image09.png"></a></div><p>Last month, we <a href="https://android-developers.blogspot.com/2016/03/first-preview-of-android-n-developer.html">released</a> the first Developer Preview of <a href="https://developer.android.com/preview/index.html?utm_campaign=android_launch_npreview2_041316&#38;utm_source=anddev&#38;utm_medium=blog">Android N</a>, to give you a sneak peek at our next platform. The feedback you&#8217;ve shared to-date has helped us catch bugs and improve features. Today, the second release in our series of Developer Previews is ready for you to continue testing against your apps.</p>

<p>This latest preview of Android N fixes a few bugs you helped us identify, such as not being able to connect to hidden Wi-Fi networks (<a href="https://code.google.com/p/android/issues/detail?id=203116">AOSP 203116</a>), Multiwindow pauses (<a href="https://code.google.com/p/android/issues/detail?id=203424">AOSP 203424</a>), and Direct Reply closing an open activity (<a href="https://code.google.com/p/android/issues/detail?id=%20204411">AOSP 204411</a>), to name just a few. We&#8217;re still on the hunt for more; please continue to share feedback, either in the <a href="https://developer.android.com/preview/bugs">N Developer Preview issue tracker</a> or in the <a href="https://developer.android.com/preview/dev-community?utm_campaign=android_launch_npreview2_041316&#38;utm_source=anddev&#38;utm_medium=blog">N preview community</a>.</p>
<br /><h3>What&#8217;s new:</h3>
<p>Last month&#8217;s Developer Preview introduced a host of <a href="https://developer.android.com/intl/zh-cn/preview/api-overview.html?utm_campaign=android_launch_npreview2_041316&#38;utm_source=anddev&#38;utm_medium=blog">new features</a>, like Multi-window, bundled notifications and more. This preview builds on those and includes a few new ones:</p>
<ul><li><b>Vulkan:</b> Vulkan is a new 3D rendering API which we&#8217;ve helped to develop as a member of Khronos, geared at providing explicit, low-overhead GPU (Graphics Processor Unit) control to developers and offers a significant boost in performance for draw-call heavy applications. Vulkan&#8217;s reduction of CPU overhead allows some synthetic benchmarks to see as much as 10 times the draw-call throughput on a single core as compared to OpenGL ES. Combined with a threading-friendly API design which allows multiple cores to be used in parallel with high efficiency, this offers a significant boost in performance for draw-call heavy applications. With Android N, we&#8217;ve made Vulkan a part of the platform; you can try it out on supported devices running Developer Preview 2. Read more <a href="https://developer.android.com/ndk/guides/graphics/index.html?utm_campaign=android_launch_npreview2_041316&#38;utm_source=anddev&#38;utm_medium=blog">here</a>. Vulkan Developer Tools blog <a href="https://android-developers.blogspot.com/2016/04/optimize-develop-and-debug-with-vulkan.html">here</a>.</li>

  <li><b>Launcher shortcuts:</b> Now, apps can define <a href="https://developer.android.com/preview/api-overview.html?utm_campaign=android_launch_npreview2_041316&#38;utm_source=anddev&#38;utm_medium=blog#launcher_shortcuts">shortcuts</a> which users can expose in the launcher to help them perform actions quicker. These shortcuts contain an Intent into specific points within your app (like sending a message to your best friend, navigating home in a mapping app, or playing the next episode of a TV show in a media app). 
<p>An application can publish shortcuts with ShortcutManager.setDynamicShortcuts(List) and ShortcutManager.addDynamicShortcut(ShortcutInfo), and launchers can be expected to show 3-5 shortcuts for a given app.</p></li>

  <li><b>Emoji Unicode 9 support:</b>  We are introducing a new emoji design for people emoji that moves away from our generic look in favor of a more human-looking design. If you&#8217;re a keyboard or messaging app developer, you should start incorporating these emoji into your apps. 
The update also introduces support for skin tone variations and Unicode 9 glyphs, like the bacon, selfie and face palm. You can dynamically check for the new emoji characters using Paint.hasGlyph().</li><li>
</li></ul><table border="1" cellpadding="1" cellspacing="1"><tr><td><a href="https://4.bp.blogspot.com/-IRiDrO78fLo/Vw5yVguNeqI/AAAAAAAACtU/2QAiJsHUxxETCJ2plSDWZQ8GQkWBeOKrgCLcB/s100/image03.png"><img border="0" src="https://4.bp.blogspot.com/-IRiDrO78fLo/Vw5yVguNeqI/AAAAAAAACtU/2QAiJsHUxxETCJ2plSDWZQ8GQkWBeOKrgCLcB/s100/image03.png"></a></td>
  <td><a href="https://1.bp.blogspot.com/-kA8DJVYd1lQ/Vw5yc5R-4hI/AAAAAAAACtY/IOBeIkH0ViEJ-8ecRyMHVvmqbVQkeDLAwCLcB/s100/image02.png"><img border="0" src="https://1.bp.blogspot.com/-kA8DJVYd1lQ/Vw5yc5R-4hI/AAAAAAAACtY/IOBeIkH0ViEJ-8ecRyMHVvmqbVQkeDLAwCLcB/s100/image02.png"></a></td>
  <td><a href="https://3.bp.blogspot.com/-9S3OIBWZuSU/Vw5yrQlPxfI/AAAAAAAACtc/N4RVYFyHdfk7GTSOia18aUZ1W-iokjzVwCLcB/s1600/image11.png"><img border="0" src="https://3.bp.blogspot.com/-9S3OIBWZuSU/Vw5yrQlPxfI/AAAAAAAACtc/N4RVYFyHdfk7GTSOia18aUZ1W-iokjzVwCLcB/s100/image11.png"></a></td>
  <td><a href="https://2.bp.blogspot.com/-snFNIHbSokc/Vw5yvgTxG8I/AAAAAAAACtg/4LE60e-_hFIU31otxo-MXesKK-8hrFPTwCLcB/s100/image13.png"><img border="0" src="https://2.bp.blogspot.com/-snFNIHbSokc/Vw5yvgTxG8I/AAAAAAAACtg/4LE60e-_hFIU31otxo-MXesKK-8hrFPTwCLcB/s200/image13.png"></a></td>
  <td><a href="https://2.bp.blogspot.com/-9I-wE-aVcEM/Vw5yziCW79I/AAAAAAAACtk/vO_sB-V6sEwBn_rjQYNmzu1RyPEUi0xZgCLcB/s1600/image14.png"><img border="0" src="https://2.bp.blogspot.com/-9I-wE-aVcEM/Vw5yziCW79I/AAAAAAAACtk/vO_sB-V6sEwBn_rjQYNmzu1RyPEUi0xZgCLcB/s100/image14.png"></a></td>
  <td><a href="https://3.bp.blogspot.com/-G_e9pYkud2k/Vw5y3RvUglI/AAAAAAAACto/yBMgJ64f0PUQpHyDNDSeIrRrI6_8AkMKACLcB/s100/image04.png"><img border="0" src="https://3.bp.blogspot.com/-G_e9pYkud2k/Vw5y3RvUglI/AAAAAAAACto/yBMgJ64f0PUQpHyDNDSeIrRrI6_8AkMKACLcB/s100/image04.png"></a></td>
 </tr></table><i></i><p></p>New human emoji

<table border="1" cellpadding="1" cellspacing="1"><tr><td><a href="https://3.bp.blogspot.com/-rnxqOrBGSCI/Vw5zwnnavII/AAAAAAAACt4/Ovtyvb2NGUIhshTkrQ6JCTC-UpXCR4n8QCLcB/s100/image06.png"><img border="0" src="https://3.bp.blogspot.com/-rnxqOrBGSCI/Vw5zwnnavII/AAAAAAAACt4/Ovtyvb2NGUIhshTkrQ6JCTC-UpXCR4n8QCLcB/s100/image06.png"></a></td>
  <td><a href="https://3.bp.blogspot.com/-apiGmWov19I/Vw5z0iHmTeI/AAAAAAAACt8/zHCwLlmVtmEFkvnAi8xNNPTJ1CBgl6VdQCLcB/s100/image07.png"><img border="0" src="https://3.bp.blogspot.com/-apiGmWov19I/Vw5z0iHmTeI/AAAAAAAACt8/zHCwLlmVtmEFkvnAi8xNNPTJ1CBgl6VdQCLcB/s100/image07.png"></a></td>
  <td><a href="https://2.bp.blogspot.com/-E0cTjZH2IRM/Vw5z68NgS-I/AAAAAAAACuA/1Gk4HgtLyjAxv3UEy-ZKWGXhos6sV20xACLcB/s100/image10.png"><img border="0" src="https://2.bp.blogspot.com/-E0cTjZH2IRM/Vw5z68NgS-I/AAAAAAAACuA/1Gk4HgtLyjAxv3UEy-ZKWGXhos6sV20xACLcB/s100/image10.png"></a></td>
               <td><a href="https://3.bp.blogspot.com/-kAK1WWQyjUk/Vw5-Vog2DmI/AAAAAAAACuk/RQueiEVAtyQiA5EzJodRJuKbqyydH1K5gCLcB/s100/image03.png"><img border="0" src="https://3.bp.blogspot.com/-kAK1WWQyjUk/Vw5-Vog2DmI/AAAAAAAACuk/RQueiEVAtyQiA5EzJodRJuKbqyydH1K5gCLcB/s100/image03.png"></a></td>
 </tr></table><i></i><p></p>New activity emoji
<ul><li><b>API changes:</b> This update includes API changes as we continue to refine features such as multi-window support (you can now specify a separate minimum height and minimum width for an activity), notifications, and others. For details, take a look at the diff reports available in the <a href="https://developer.android.com/preview/setup-sdk.html?utm_campaign=android_launch_npreview2_041316&#38;utm_source=anddev&#38;utm_medium=blog#docs-dl">downloadable API reference package</a>.</li>
<br /><li><b>Bug fixes:</b> We&#8217;ve resolved a number of issues throughout the system, including <a href="https://code.google.com/p/android/issues/list?can=1&#38;q=label%3ADevPreview-N+status%3AFutureRelease+OR+status%3AReleased+label%3ADevPreview-N+&#38;sort=-stars&#38;colspec=ID+Status+Priority+Owner+Summary+Stars+Reporter+Opened&#38;cells=tiles">these fixes for issues</a> that you&#8217;ve reported through the public issue tracker. Please continue to let us know what you find and follow along with the known issues <a href="https://code.google.com/p/android/issues/list?can=1&#38;q=label%3ADevPreview-N+status%3AFutureRelease+OR+status%3AReleased+label%3ADevPreview-N+&#38;sort=-stars&#38;colspec=ID+Status+Priority+Owner+Summary+Stars+Reporter+Opened&#38;cells=tiles">here</a>.</li>
</ul><br /><h3>How to get the update:</h3>
<p>The easiest way to get this and later preview updates is by enrolling your devices in the <a href="http://g.co/androidbeta">Android Beta Program</a>. Just visit <a href="http://g.co/androidbeta">g.co/androidbeta</a> and opt-in your eligible Android phone or tablet -- you&#8217;ll soon receive this (and later) preview updates over-the-air. If you&#8217;ve already enrolled your device, you&#8217;ll receive the update shortly, no action is needed on your part. You can also download and <a href="http://developer.android.com/preview/download.html?utm_campaign=android_launch_npreview2_041316&#38;utm_source=anddev&#38;utm_medium=blog#flash">flash this update manually</a>. Developer Preview 2 is intended for developers and not as a daily driver; this build is not yet optimized for performance and battery life.</p>

<p>The N Developer Preview is currently available for Nexus 6, Nexus 5X, Nexus 6P, Nexus 9, and Pixel C devices, as well as General Mobile 4G [Android One] devices. For Nexus Player, the update to Developer Preview 2 will follow the other devices by several days.</p>

<p>To build and test apps with Developer Preview 2, you need to use Android Studio 2.1 -- the same version that was required for Developer Preview 1. You&#8217;ll need to check for SDK components updates (including build tools and emulator system images) for Developer Preview 2 -- see <a href="https://developer.android.com/preview/support.html?utm_campaign=android_launch_npreview2_041316&#38;utm_source=anddev&#38;utm_medium=blog#dp2">here</a> for details.</p>

<p>Thanks so much for all of your feedback so far. Please continue to share feedback, either in the <a href="https://developer.android.com/preview/bugs?utm_campaign=android_launch_npreview2_041316&#38;utm_source=anddev&#38;utm_medium=blog">N Developer Preview issue tracker</a> or in the <a href="http://developer.android.com/preview/dev-community?utm_campaign=android_launch_npreview2_041316&#38;utm_source=anddev&#38;utm_medium=blog">N preview community</a>. The sooner we&#8217;re able to get your feedback, the more of of it we will be able to incorporate in the next release of Android.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Dave Burke, VP of Engineering</p></i>

<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-JgEVScojprA/Vw56XywMBVI/AAAAAAAACuY/rkN_E8D72BYBWtizW8z7LyOHVWRVdRudQCLcB/s1600/image09.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://2.bp.blogspot.com/-JgEVScojprA/Vw56XywMBVI/AAAAAAAACuY/rkN_E8D72BYBWtizW8z7LyOHVWRVdRudQCLcB/s320/image09.png" /></a></div><p>Last month, we <a href="https://android-developers.blogspot.com/2016/03/first-preview-of-android-n-developer.html">released</a> the first Developer Preview of <a href="https://developer.android.com/preview/index.html?utm_campaign=android_launch_npreview2_041316&utm_source=anddev&utm_medium=blog">Android N</a>, to give you a sneak peek at our next platform. The feedback you’ve shared to-date has helped us catch bugs and improve features. Today, the second release in our series of Developer Previews is ready for you to continue testing against your apps.</p>

<p>This latest preview of Android N fixes a few bugs you helped us identify, such as not being able to connect to hidden Wi-Fi networks (<a href="https://code.google.com/p/android/issues/detail?id=203116">AOSP 203116</a>), Multiwindow pauses (<a href="https://code.google.com/p/android/issues/detail?id=203424">AOSP 203424</a>), and Direct Reply closing an open activity (<a href="https://code.google.com/p/android/issues/detail?id=%20204411">AOSP 204411</a>), to name just a few. We’re still on the hunt for more; please continue to share feedback, either in the <a href="https://developer.android.com/preview/bugs">N Developer Preview issue tracker</a> or in the <a href="https://developer.android.com/preview/dev-community?utm_campaign=android_launch_npreview2_041316&utm_source=anddev&utm_medium=blog">N preview community</a>.</p>
<br>
<h3>What’s new:</h3>
<p>Last month’s Developer Preview introduced a host of <a href="https://developer.android.com/intl/zh-cn/preview/api-overview.html?utm_campaign=android_launch_npreview2_041316&utm_source=anddev&utm_medium=blog">new features</a>, like Multi-window, bundled notifications and more. This preview builds on those and includes a few new ones:</p>
<ul>
  <li><b>Vulkan:</b> Vulkan is a new 3D rendering API which we’ve helped to develop as a member of Khronos, geared at providing explicit, low-overhead GPU (Graphics Processor Unit) control to developers and offers a significant boost in performance for draw-call heavy applications. Vulkan’s reduction of CPU overhead allows some synthetic benchmarks to see as much as 10 times the draw-call throughput on a single core as compared to OpenGL ES. Combined with a threading-friendly API design which allows multiple cores to be used in parallel with high efficiency, this offers a significant boost in performance for draw-call heavy applications. With Android N, we’ve made Vulkan a part of the platform; you can try it out on supported devices running Developer Preview 2. Read more <a href="https://developer.android.com/ndk/guides/graphics/index.html?utm_campaign=android_launch_npreview2_041316&utm_source=anddev&utm_medium=blog">here</a>. Vulkan Developer Tools blog <a href="https://android-developers.blogspot.com/2016/04/optimize-develop-and-debug-with-vulkan.html">here</a>.</li>

  <li><b>Launcher shortcuts:</b> Now, apps can define <a href="https://developer.android.com/preview/api-overview.html?utm_campaign=android_launch_npreview2_041316&utm_source=anddev&utm_medium=blog#launcher_shortcuts">shortcuts</a> which users can expose in the launcher to help them perform actions quicker. These shortcuts contain an Intent into specific points within your app (like sending a message to your best friend, navigating home in a mapping app, or playing the next episode of a TV show in a media app). 
<p>An application can publish shortcuts with <FONT FACE="Monospace">ShortcutManager.setDynamicShortcuts(List)</font> and <FONT FACE="Monospace">ShortcutManager.addDynamicShortcut(ShortcutInfo),</font> and launchers can be expected to show 3-5 shortcuts for a given app.</p></li>

  <li><b>Emoji Unicode 9 support:</b>  We are introducing a new emoji design for people emoji that moves away from our generic look in favor of a more human-looking design. If you’re a keyboard or messaging app developer, you should start incorporating these emoji into your apps. 
The update also introduces support for skin tone variations and Unicode 9 glyphs, like the bacon, selfie and face palm. You can dynamically check for the new emoji characters using <FONT FACE="Monospace">Paint.hasGlyph().</font><li>
</ul> 

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tr>
  <td><a href="https://4.bp.blogspot.com/-IRiDrO78fLo/Vw5yVguNeqI/AAAAAAAACtU/2QAiJsHUxxETCJ2plSDWZQ8GQkWBeOKrgCLcB/s100/image03.png" imageanchor="1" ><img border="0" src="https://4.bp.blogspot.com/-IRiDrO78fLo/Vw5yVguNeqI/AAAAAAAACtU/2QAiJsHUxxETCJ2plSDWZQ8GQkWBeOKrgCLcB/s100/image03.png" /></a></td>
  <td><a href="https://1.bp.blogspot.com/-kA8DJVYd1lQ/Vw5yc5R-4hI/AAAAAAAACtY/IOBeIkH0ViEJ-8ecRyMHVvmqbVQkeDLAwCLcB/s100/image02.png" imageanchor="1" ><img border="0" src="https://1.bp.blogspot.com/-kA8DJVYd1lQ/Vw5yc5R-4hI/AAAAAAAACtY/IOBeIkH0ViEJ-8ecRyMHVvmqbVQkeDLAwCLcB/s100/image02.png" /></a></td>
  <td><a href="https://3.bp.blogspot.com/-9S3OIBWZuSU/Vw5yrQlPxfI/AAAAAAAACtc/N4RVYFyHdfk7GTSOia18aUZ1W-iokjzVwCLcB/s1600/image11.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-9S3OIBWZuSU/Vw5yrQlPxfI/AAAAAAAACtc/N4RVYFyHdfk7GTSOia18aUZ1W-iokjzVwCLcB/s100/image11.png" /></a></td>
  <td><a href="https://2.bp.blogspot.com/-snFNIHbSokc/Vw5yvgTxG8I/AAAAAAAACtg/4LE60e-_hFIU31otxo-MXesKK-8hrFPTwCLcB/s100/image13.png" imageanchor="1" ><img border="0" src="https://2.bp.blogspot.com/-snFNIHbSokc/Vw5yvgTxG8I/AAAAAAAACtg/4LE60e-_hFIU31otxo-MXesKK-8hrFPTwCLcB/s200/image13.png" /></a></td>
  <td><a href="https://2.bp.blogspot.com/-9I-wE-aVcEM/Vw5yziCW79I/AAAAAAAACtk/vO_sB-V6sEwBn_rjQYNmzu1RyPEUi0xZgCLcB/s1600/image14.png" imageanchor="1" ><img border="0" src="https://2.bp.blogspot.com/-9I-wE-aVcEM/Vw5yziCW79I/AAAAAAAACtk/vO_sB-V6sEwBn_rjQYNmzu1RyPEUi0xZgCLcB/s100/image14.png" /></a></td>
  <td><a href="https://3.bp.blogspot.com/-G_e9pYkud2k/Vw5y3RvUglI/AAAAAAAACto/yBMgJ64f0PUQpHyDNDSeIrRrI6_8AkMKACLcB/s100/image04.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-G_e9pYkud2k/Vw5y3RvUglI/AAAAAAAACto/yBMgJ64f0PUQpHyDNDSeIrRrI6_8AkMKACLcB/s100/image04.png" /></a></td>
 </tr>
</table>
<i><p><center>New human emoji</p></center></i>

<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#000000;width:100%" cellpadding="1" cellspacing="1">
 <tr>
  <td><a href="https://3.bp.blogspot.com/-rnxqOrBGSCI/Vw5zwnnavII/AAAAAAAACt4/Ovtyvb2NGUIhshTkrQ6JCTC-UpXCR4n8QCLcB/s100/image06.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-rnxqOrBGSCI/Vw5zwnnavII/AAAAAAAACt4/Ovtyvb2NGUIhshTkrQ6JCTC-UpXCR4n8QCLcB/s100/image06.png" /></a></td>
  <td><a href="https://3.bp.blogspot.com/-apiGmWov19I/Vw5z0iHmTeI/AAAAAAAACt8/zHCwLlmVtmEFkvnAi8xNNPTJ1CBgl6VdQCLcB/s100/image07.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-apiGmWov19I/Vw5z0iHmTeI/AAAAAAAACt8/zHCwLlmVtmEFkvnAi8xNNPTJ1CBgl6VdQCLcB/s100/image07.png" /></a></td>
  <td><a href="https://2.bp.blogspot.com/-E0cTjZH2IRM/Vw5z68NgS-I/AAAAAAAACuA/1Gk4HgtLyjAxv3UEy-ZKWGXhos6sV20xACLcB/s100/image10.png" imageanchor="1" ><img border="0" src="https://2.bp.blogspot.com/-E0cTjZH2IRM/Vw5z68NgS-I/AAAAAAAACuA/1Gk4HgtLyjAxv3UEy-ZKWGXhos6sV20xACLcB/s100/image10.png" /></a></td>
               <td><a href="https://3.bp.blogspot.com/-kAK1WWQyjUk/Vw5-Vog2DmI/AAAAAAAACuk/RQueiEVAtyQiA5EzJodRJuKbqyydH1K5gCLcB/s100/image03.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-kAK1WWQyjUk/Vw5-Vog2DmI/AAAAAAAACuk/RQueiEVAtyQiA5EzJodRJuKbqyydH1K5gCLcB/s100/image03.png" /></a></td>
 </tr>
</table>
<i><p><center>New activity emoji</p></center></i>
<ul>
 <li><b>API changes:</b> This update includes API changes as we continue to refine features such as multi-window support (you can now specify a separate minimum height and minimum width for an activity), notifications, and others. For details, take a look at the diff reports available in the <a href="https://developer.android.com/preview/setup-sdk.html?utm_campaign=android_launch_npreview2_041316&utm_source=anddev&utm_medium=blog#docs-dl">downloadable API reference package</a>.</li>
<br> 
 <li><b>Bug fixes:</b> We’ve resolved a number of issues throughout the system, including <a href="https://code.google.com/p/android/issues/list?can=1&q=label%3ADevPreview-N+status%3AFutureRelease+OR+status%3AReleased+label%3ADevPreview-N+&sort=-stars&colspec=ID+Status+Priority+Owner+Summary+Stars+Reporter+Opened&cells=tiles">these fixes for issues</a> that you’ve reported through the public issue tracker. Please continue to let us know what you find and follow along with the known issues <a href="https://code.google.com/p/android/issues/list?can=1&q=label%3ADevPreview-N+status%3AFutureRelease+OR+status%3AReleased+label%3ADevPreview-N+&sort=-stars&colspec=ID+Status+Priority+Owner+Summary+Stars+Reporter+Opened&cells=tiles">here</a>.</li>
</ul>
<br>
<h3>How to get the update:</h3>
<p>The easiest way to get this and later preview updates is by enrolling your devices in the <a href="http://g.co/androidbeta">Android Beta Program</a>. Just visit <a href="http://g.co/androidbeta">g.co/androidbeta</a> and opt-in your eligible Android phone or tablet -- you’ll soon receive this (and later) preview updates over-the-air. If you’ve already enrolled your device, you’ll receive the update shortly, no action is needed on your part. You can also download and <a href="http://developer.android.com/preview/download.html?utm_campaign=android_launch_npreview2_041316&utm_source=anddev&utm_medium=blog#flash">flash this update manually</a>. Developer Preview 2 is intended for developers and not as a daily driver; this build is not yet optimized for performance and battery life.</p>

<p>The N Developer Preview is currently available for Nexus 6, Nexus 5X, Nexus 6P, Nexus 9, and Pixel C devices, as well as General Mobile 4G [Android One] devices. For Nexus Player, the update to Developer Preview 2 will follow the other devices by several days.</p>

<p>To build and test apps with Developer Preview 2, you need to use Android Studio 2.1 -- the same version that was required for Developer Preview 1. You’ll need to check for SDK components updates (including build tools and emulator system images) for Developer Preview 2 -- see <a href="https://developer.android.com/preview/support.html?utm_campaign=android_launch_npreview2_041316&utm_source=anddev&utm_medium=blog#dp2">here</a> for details.</p>

<p>Thanks so much for all of your feedback so far. Please continue to share feedback, either in the <a href="https://developer.android.com/preview/bugs?utm_campaign=android_launch_npreview2_041316&utm_source=anddev&utm_medium=blog">N Developer Preview issue tracker</a> or in the <a href="http://developer.android.com/preview/dev-community?utm_campaign=android_launch_npreview2_041316&utm_source=anddev&utm_medium=blog">N preview community</a>. The sooner we’re able to get your feedback, the more of of it we will be able to incorporate in the next release of Android.</p>















]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-n-developer-preview-2-out-today/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android Studio 2.0</title>
		<link>https://googledata.org/google-android/android-studio-2-0/</link>
		<comments>https://googledata.org/google-android/android-studio-2-0/#comments</comments>
		<pubDate>Thu, 07 Apr 2016 17:08:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=f43f11cccebd2e4cc9c8b6c87b906cce</guid>
		<description><![CDATA[<div><a href="https://1.bp.blogspot.com/-vxXg6Inv_WA/VwaJ0uzSf_I/AAAAAAAACr4/xzszbcRzWRgSaHXpOpYroG7u6bgsFJjqw/s50/image03.png"><img border="0" src="https://1.bp.blogspot.com/-vxXg6Inv_WA/VwaJ0uzSf_I/AAAAAAAACr4/xzszbcRzWRgSaHXpOpYroG7u6bgsFJjqw/s200/image03.png"></a></div><i></i><p>Posted by <a href="https://www.google.com/+JamalEason">Jamal Eason</a>, Product Manager, Android</p>

<p>Android Studio 2.0 is the fastest way to build high quality, performant apps for the Android platform, including phones and tablets, Android Auto, Android Wear, and Android TV. As the official IDE from Google, Android Studio includes everything you need to build an app, including a code editor, code analysis tools, emulators and more. This new and stable version of Android Studio has fast build speeds and a fast emulator with support for the latest Android version and Google Play Services.</p>

<p>Android Studio is built in coordination with the Android platform and supports all of the latest and greatest APIs.  If you are developing for Android, you should be using Android Studio 2.0. It is available today as a easy <a href="http://developer.android.com/sdk/?utm_campaign=android_launch_studio_040716&#38;utm_source=anddev&#38;utm_medium=blog">download</a> or update on the stable release channel.</p>

<p>Android Studio 2.0 includes the following new features that Android developer can use in their workflow :</p>


<ul><li><b>Instant Run</b> - For every developer who loves faster build speeds. Make changes and see them appear live in your running app. With many build/run accelerations ranging from VM hot swapping to <a href="http://developer.android.com/tools/building/building-studio.html?utm_campaign=android_launch_studio_040716&#38;utm_source=anddev&#38;utm_medium=blog#instant-run">warm swapping app resources</a>, Instant Run will save you time every day.    
</li>
  <li><b>Android Emulator</b>  - The new emulator runs ~3x faster than Android&#8217;s previous emulator, and with ADB enhancements you can now push apps and data 10x faster to the emulator than to a  physical device.  Like a physical device, the official Android emulator also includes <a href="https://developers.google.com/android/?utm_campaign=android_launch_studio_040716&#38;utm_source=anddev&#38;utm_medium=blog">Google Play Services</a> built-in, so you can test out more API functionality. Finally, the new emulator has rich new features to manage calls, battery, network, GPS, and more.</li>
  <li> <b>Cloud Test Lab Integration</b> - Write once, run anywhere. Improve the quality of your apps by quickly and easily testing on a wide range of physical Android devices in the <a href="http://developer.android.com/training/testing/start/index.html?utm_campaign=android_launch_studio_040716&#38;utm_source=anddev&#38;utm_medium=blog#run-ctl">Cloud Test Lab</a> right from within Android Studio. </li>
<li><b>App Indexing Code Generation &#38; Test</b> - Help promote the visibility your app in Google Search for your users by adding auto-generated URLS with the App Indexing feature in Android Studio. With a few click you can add indexable URL links that you can test all within the IDE.</li>
  <li><b>GPU Debugger Preview</b> - For those of you developing OpenGL ES based games or apps, you can now see each frame and the GL state with the new GPU debugger.  Uncover and diagnosis GL rendering issues by capturing and analyzing the GPU stream from your Android device.</li>
<li><b>IntelliJ 15 Update</b> - Android Studio is built on the world class Intellij coding platform. Check out the latest Intellij features <a href="https://www.jetbrains.com/idea/whatsnew/">here</a>.</li>
</ul><br /><b><h3>Deeper Dive into the New Features</h3></b>

<b></b><p>Instant Run</p>
<p>Today, mobile platforms are centered around speed and agility. And yet, building for mobile can sometimes feel clunky and slow. Instant Run in Android Studio is our solution to keep you in a fast and fluid development flow. The feature increases your developer productivity by accelerating your edit, build, run cycles. When you click on the Instant Run button (<a href="https://3.bp.blogspot.com/-SSOerYH2TIo/VwaOPnrRbPI/AAAAAAAACtA/P_iMGYqhKXwKqKVGDposllCGMuzapcNrw/s1600/button.png"><img border="0" src="https://3.bp.blogspot.com/-SSOerYH2TIo/VwaOPnrRbPI/AAAAAAAACtA/P_iMGYqhKXwKqKVGDposllCGMuzapcNrw/s1600/button.png"></a>), Instant Run will analyze the changes you have made and determine how it can deploy your new code in the fastest way.</p>

<div><a href="https://3.bp.blogspot.com/-9TlewT_9EuY/VwaKkg0oa9I/AAAAAAAACsA/1ksH0jGen70SuFdtVaWaFIouPUH5FIipQ/s1600/image02.png"><img border="0" src="https://3.bp.blogspot.com/-9TlewT_9EuY/VwaKkg0oa9I/AAAAAAAACsA/1ksH0jGen70SuFdtVaWaFIouPUH5FIipQ/s640/image02.png"></a></div>
<i></i><p></p>New Instant Run Buttons

<p>Whenever possible, it will inject your code changes into your running app process, avoiding re-deployment and re-installation your APK. For some types of changes, an activity or app restart is required, but your edit, build and run cycles should still be generally much faster than before. Instant Run works with any Android Device or emulator running API 14 (Ice Cream Sandwich) or higher.</p>

<p>Since previewing Instant Run at the end of last year, we&#8217;ve spent countless hours incorporating your feedback and refining for the stable release. Look for even more acceleration in future releases because build speeds can never be too fast. To learn how you can make the most out of Instant Run in your app development today, please check out our Instant Run <a href="http://developer.android.com/tools/building/building-studio.html?utm_campaign=android_launch_studio_040716&#38;utm_source=anddev&#38;utm_medium=blog#instant-run">documentation</a>.</p>

<h3>Android Emulator</h3>
<p>The new Android Emulator is up to <b>3x faster</b> in CPU, RAM, &#38; I/O in comparison to the previous Android emulator.  And when you're ready to build, ADB push speeds are a whopping <b>10x faster</b>! In most situations, developing on the official Android Emulator is faster than a real device, and new features like Instant Run will work best with the new Android emulator.</p>

<p>In addition to speed and performance, the Android Emulator has a brand user interface and sensor controls. Enhanced since the <a href="http://android-developers.blogspot.com/2015/12/android-studio-20-preview-android.html">initial release</a>, with the emulator you can drag and drop APKs for quick installation, resize and rescale the window, use multi-touch actions (pinch &#38; zoom, pan, rotate, tilt) and much more.</p>

<div><a href="https://4.bp.blogspot.com/-HuJrbIDAITw/VwaKwGW1CoI/AAAAAAAACsE/W6BekWgvtU88kkuiZY3X5daiZ-HWwGkSw/s1600/image00.png"><img border="0" src="https://4.bp.blogspot.com/-HuJrbIDAITw/VwaKwGW1CoI/AAAAAAAACsE/W6BekWgvtU88kkuiZY3X5daiZ-HWwGkSw/s640/image00.png"></a></div>
<i></i><p></p>Android Emulator User Interface: Toolbar &#38; Extend Controls Panel

<p>Trying out the new emulator is as easy as updating your SDK Tools to 25.1.1 or higher, create a fresh Android Virtual Device using one of the recommended x86 system images and you are ready to go. Learn more about the Android Emulator by checking out the <a href="http://developer.android.com/tools/devices/emulator.html?utm_campaign=android_launch_studio_040716&#38;utm_source=anddev&#38;utm_medium=blog">documentation</a>.</p>

<b><h3>Cloud Test Lab</h3></b>
<p>Cloud Test Lab is a new service that allows you to test your app across a wide range of devices and device configurations at scale in the cloud. Once you complete your initial testing with your Android Emulator or Android device, Cloud Test Lab is a great extension to your testing process that provides you to run through a collection of tests against a portfolio of physical devices hosted in Google&#8217;s data centers. Even if you do not have tests explicitly written, Cloud Test Lab can perform a basic set of tests to ensure that your app does not crash.</p>

<p>The new interface in Android Studio allows you to configure the portfolio of tests you want to run on Cloud Test Lab, and allows you to also see the results of your tests. To learn more about the service go <a href="http://developer.android.com/training/testing/start/index.html?utm_campaign=android_launch_studio_040716&#38;utm_source=anddev&#38;utm_medium=blog#run-ctl">here</a>.</p>

<div><a href="https://1.bp.blogspot.com/-TTbRSyC3Ot0/VwaK-FhpbwI/AAAAAAAACsI/rZQO673WrMI_gS4tcptBJ4aPfshCYmLlA/s1600/image06.png"><img border="0" src="https://1.bp.blogspot.com/-TTbRSyC3Ot0/VwaK-FhpbwI/AAAAAAAACsI/rZQO673WrMI_gS4tcptBJ4aPfshCYmLlA/s640/image06.png"></a></div>
<i></i><p></p>Setup for Cloud Test Lab

<b><h3>App Indexing</h3></b>
<p>It is now easier for your users to find your app in Google Search with the <a href="https://developers.google.com/app-indexing/?utm_campaign=android_launch_studio_040716&#38;utm_source=anddev&#38;utm_medium=blog">App Indexing</a> API. Android Studio 2.0 helps you to create the correct URL structure in your app code and add attributes in your AndroidManifest.xml file that will work the Google App Indexing service. After you add the URLs to your app, can you test and validate your app indexing code as shown here:</p>
<div><a href="https://1.bp.blogspot.com/-I80OnkVEtRg/VwaLGEGbhLI/AAAAAAAACsM/Ed88STCGHrM6G6rxfQJDK_1KEcL1NpMdg/s1600/image05.png"><img border="0" src="https://1.bp.blogspot.com/-I80OnkVEtRg/VwaLGEGbhLI/AAAAAAAACsM/Ed88STCGHrM6G6rxfQJDK_1KEcL1NpMdg/s640/image05.png"></a></div>
<i></i><p></p>Google App Indexing Testing

<p>Check out this <a href="http://developer.android.com/tools/help/app-link-indexing.html?utm_campaign=android_launch_studio_040716&#38;utm_source=anddev&#38;utm_medium=blog">link</a> for more details about app indexing support in Android Studio.</p>

<b><h3>GPU Debugger Preview</h3></b>
<p>If you are developing OpenGL ES games or graphics-intensive apps, you have a new GPU debugger with Android Studio 2.0. Although the GPU debugger is a preview, you can step through your app frame by frame to identify and debug graphics rendering issues with rich information about the GL state.  For more details on how to setup your Android device and app to work with the tool, check out the tech documentations <a href="http://tools.android.com/tech-docs/gpu-profiler">here</a>.</p>
<div><a href="https://1.bp.blogspot.com/-iKehr4E1HAM/VwaL1aVh-yI/AAAAAAAACsY/JE5pqzvVKqUoH2zU3a7vekP1xFEnvmW2A/s1600/image08.png"><img border="0" src="https://1.bp.blogspot.com/-iKehr4E1HAM/VwaL1aVh-yI/AAAAAAAACsY/JE5pqzvVKqUoH2zU3a7vekP1xFEnvmW2A/s640/image08.png"></a></div>
<i></i><p></p>GPU Debugger Preview

<b><h3>What's Next</h3></b>

<b></b><p>Update</p>
<p>If you are using a previous version of Android Studio, you can check for updates on the Beta channel from the navigation menu (Help &#8594; Check for Update [Windows/Linux] , Android Studio &#8594; Check for Updates [OS X]). If you need a new copy of Android Studio, you can download it <a href="http://developer.android.com/sdk/?utm_campaign=android_launch_studio_040716&#38;utm_source=anddev&#38;utm_medium=blog">here</a>. If you developing for the N Developer Preview, check out this additional setup <a href="http://developer.android.com/preview/setup-sdk.html?utm_campaign=android_launch_studio_040716&#38;utm_source=anddev&#38;utm_medium=blog#get-as13">instructions</a>.</p>

<b></b><p>Set Up Instant Run &#38; Android Emulator</p><b></b>
<p>After you update to or <a href="http://developer.android.com/sdk/?utm_campaign=android_launch_studio_040716&#38;utm_source=anddev&#38;utm_medium=blog">download</a>  Android Studio 2.0, you should upgrade your projects to use Instant Run, and create a fresh Android Virtual Device (AVD) for the new Android emulator and you are on your way to a fast Android development experience.</p>

<p>Using Instant Run is easy. For each of your existing projects you will see a quick prompt to update your project to the new gradle plugin version <code>(com.android.tools.build:gradle:2.0.0).</code></p>

<div><a href="https://4.bp.blogspot.com/-9AHWTl2kyT4/VwaL7-TOgTI/AAAAAAAACsc/vLph1__cfRgBCg7CsuQVCyA7GOdTzS4Xg/s1600/image01.png"><img border="0" src="https://4.bp.blogspot.com/-9AHWTl2kyT4/VwaL7-TOgTI/AAAAAAAACsc/vLph1__cfRgBCg7CsuQVCyA7GOdTzS4Xg/s640/image01.png"></a></div>
<i></i><p></p>Prompt to update your gradle version in your project

<p>For all new app projects in Android Studio 2.0, Instant Run is on by default. Check out the <a href="http://developer.android.com/tools/building/building-studio.html?utm_campaign=android_launch_studio_040716&#38;utm_source=anddev&#38;utm_medium=blog#instant-run">documentation</a> for more details.</p>

<p>We are already hard at work developing the next release of Android Studio.  We appreciate any feedback on things you like, issues or features you would like to see. Connect with us -- the Android Studio development team -- on our new <a href="https://plus.google.com/103342515830390186255">Google+</a> page or on <a href="http://www.twitter.com/androidstudio">Twitter</a>.</p>

<!--[Interactive video]  -->]]></description>
				<content:encoded><![CDATA[<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-vxXg6Inv_WA/VwaJ0uzSf_I/AAAAAAAACr4/xzszbcRzWRgSaHXpOpYroG7u6bgsFJjqw/s50/image03.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://1.bp.blogspot.com/-vxXg6Inv_WA/VwaJ0uzSf_I/AAAAAAAACr4/xzszbcRzWRgSaHXpOpYroG7u6bgsFJjqw/s200/image03.png" /></a></div><i><p>Posted by <a href="https://www.google.com/+JamalEason">Jamal Eason</a>, Product Manager, Android</p></i>

<p>Android Studio 2.0 is the fastest way to build high quality, performant apps for the Android platform, including phones and tablets, Android Auto, Android Wear, and Android TV. As the official IDE from Google, Android Studio includes everything you need to build an app, including a code editor, code analysis tools, emulators and more. This new and stable version of Android Studio has fast build speeds and a fast emulator with support for the latest Android version and Google Play Services.</p>

<p>Android Studio is built in coordination with the Android platform and supports all of the latest and greatest APIs.  If you are developing for Android, you should be using Android Studio 2.0. It is available today as a easy <a href="http://developer.android.com/sdk/?utm_campaign=android_launch_studio_040716&utm_source=anddev&utm_medium=blog">download</a> or update on the stable release channel.</p>

<p>Android Studio 2.0 includes the following new features that Android developer can use in their workflow :</p>


<ul>
  <li><b>Instant Run</b> - For every developer who loves faster build speeds. Make changes and see them appear live in your running app. With many build/run accelerations ranging from VM hot swapping to <a href="http://developer.android.com/tools/building/building-studio.html?utm_campaign=android_launch_studio_040716&utm_source=anddev&utm_medium=blog#instant-run">warm swapping app resources</a>, Instant Run will save you time every day.    
</li>
  <li><b>Android Emulator</b>  - The new emulator runs ~3x faster than Android’s previous emulator, and with ADB enhancements you can now push apps and data 10x faster to the emulator than to a  physical device.  Like a physical device, the official Android emulator also includes <a href="https://developers.google.com/android/?utm_campaign=android_launch_studio_040716&utm_source=anddev&utm_medium=blog">Google Play Services</a> built-in, so you can test out more API functionality. Finally, the new emulator has rich new features to manage calls, battery, network, GPS, and more.</li>
  <li> <b>Cloud Test Lab Integration</b> - Write once, run anywhere. Improve the quality of your apps by quickly and easily testing on a wide range of physical Android devices in the <a href="http://developer.android.com/training/testing/start/index.html?utm_campaign=android_launch_studio_040716&utm_source=anddev&utm_medium=blog#run-ctl">Cloud Test Lab</a> right from within Android Studio. </li>
<li><b>App Indexing Code Generation & Test</b> - Help promote the visibility your app in Google Search for your users by adding auto-generated URLS with the App Indexing feature in Android Studio. With a few click you can add indexable URL links that you can test all within the IDE.</li>
  <li><b>GPU Debugger Preview</b> - For those of you developing OpenGL ES based games or apps, you can now see each frame and the GL state with the new GPU debugger.  Uncover and diagnosis GL rendering issues by capturing and analyzing the GPU stream from your Android device.</li>
<li><b>IntelliJ 15 Update</b> - Android Studio is built on the world class Intellij coding platform. Check out the latest Intellij features <a href="https://www.jetbrains.com/idea/whatsnew/">here</a>.</li>
</ul>  
<br>
<b><h3>Deeper Dive into the New Features</h3></b>

<b><p>Instant Run</p></b>
<p>Today, mobile platforms are centered around speed and agility. And yet, building for mobile can sometimes feel clunky and slow. Instant Run in Android Studio is our solution to keep you in a fast and fluid development flow. The feature increases your developer productivity by accelerating your edit, build, run cycles. When you click on the Instant Run button (<a href="https://3.bp.blogspot.com/-SSOerYH2TIo/VwaOPnrRbPI/AAAAAAAACtA/P_iMGYqhKXwKqKVGDposllCGMuzapcNrw/s1600/button.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-SSOerYH2TIo/VwaOPnrRbPI/AAAAAAAACtA/P_iMGYqhKXwKqKVGDposllCGMuzapcNrw/s1600/button.png" /></a>), Instant Run will analyze the changes you have made and determine how it can deploy your new code in the fastest way.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-9TlewT_9EuY/VwaKkg0oa9I/AAAAAAAACsA/1ksH0jGen70SuFdtVaWaFIouPUH5FIipQ/s1600/image02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-9TlewT_9EuY/VwaKkg0oa9I/AAAAAAAACsA/1ksH0jGen70SuFdtVaWaFIouPUH5FIipQ/s640/image02.png" /></a></div>
<i><p><center>New Instant Run Buttons</p></i></center>

<p>Whenever possible, it will inject your code changes into your running app process, avoiding re-deployment and re-installation your APK. For some types of changes, an activity or app restart is required, but your edit, build and run cycles should still be generally much faster than before. Instant Run works with any Android Device or emulator running API 14 (Ice Cream Sandwich) or higher.</p>

<p>Since previewing Instant Run at the end of last year, we’ve spent countless hours incorporating your feedback and refining for the stable release. Look for even more acceleration in future releases because build speeds can never be too fast. To learn how you can make the most out of Instant Run in your app development today, please check out our Instant Run <a href="http://developer.android.com/tools/building/building-studio.html?utm_campaign=android_launch_studio_040716&utm_source=anddev&utm_medium=blog#instant-run">documentation</a>.</p>

<h3>Android Emulator</h3>
<p>The new Android Emulator is up to <b>3x faster</b> in CPU, RAM, & I/O in comparison to the previous Android emulator.  And when you're ready to build, ADB push speeds are a whopping <b>10x faster</b>! In most situations, developing on the official Android Emulator is faster than a real device, and new features like Instant Run will work best with the new Android emulator.</p>

<p>In addition to speed and performance, the Android Emulator has a brand user interface and sensor controls. Enhanced since the <a href="http://android-developers.blogspot.com/2015/12/android-studio-20-preview-android.html">initial release</a>, with the emulator you can drag and drop APKs for quick installation, resize and rescale the window, use multi-touch actions (pinch & zoom, pan, rotate, tilt) and much more.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-HuJrbIDAITw/VwaKwGW1CoI/AAAAAAAACsE/W6BekWgvtU88kkuiZY3X5daiZ-HWwGkSw/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-HuJrbIDAITw/VwaKwGW1CoI/AAAAAAAACsE/W6BekWgvtU88kkuiZY3X5daiZ-HWwGkSw/s640/image00.png" /></a></div>
<i><p><center>Android Emulator User Interface: Toolbar & Extend Controls Panel</p></i></center>

<p>Trying out the new emulator is as easy as updating your SDK Tools to 25.1.1 or higher, create a fresh Android Virtual Device using one of the recommended x86 system images and you are ready to go. Learn more about the Android Emulator by checking out the <a href="http://developer.android.com/tools/devices/emulator.html?utm_campaign=android_launch_studio_040716&utm_source=anddev&utm_medium=blog">documentation</a>.</p>

<b><h3>Cloud Test Lab</h3></b>
<p>Cloud Test Lab is a new service that allows you to test your app across a wide range of devices and device configurations at scale in the cloud. Once you complete your initial testing with your Android Emulator or Android device, Cloud Test Lab is a great extension to your testing process that provides you to run through a collection of tests against a portfolio of physical devices hosted in Google’s data centers. Even if you do not have tests explicitly written, Cloud Test Lab can perform a basic set of tests to ensure that your app does not crash.</p>

<p>The new interface in Android Studio allows you to configure the portfolio of tests you want to run on Cloud Test Lab, and allows you to also see the results of your tests. To learn more about the service go <a href="http://developer.android.com/training/testing/start/index.html?utm_campaign=android_launch_studio_040716&utm_source=anddev&utm_medium=blog#run-ctl">here</a>.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-TTbRSyC3Ot0/VwaK-FhpbwI/AAAAAAAACsI/rZQO673WrMI_gS4tcptBJ4aPfshCYmLlA/s1600/image06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-TTbRSyC3Ot0/VwaK-FhpbwI/AAAAAAAACsI/rZQO673WrMI_gS4tcptBJ4aPfshCYmLlA/s640/image06.png" /></a></div>
<i><p><center>Setup for Cloud Test Lab</p></i></center>

<b><h3>App Indexing</h3></b>
<p>It is now easier for your users to find your app in Google Search with the <a href="https://developers.google.com/app-indexing/?utm_campaign=android_launch_studio_040716&utm_source=anddev&utm_medium=blog">App Indexing</a> API. Android Studio 2.0 helps you to create the correct URL structure in your app code and add attributes in your AndroidManifest.xml file that will work the Google App Indexing service. After you add the URLs to your app, can you test and validate your app indexing code as shown here:</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-I80OnkVEtRg/VwaLGEGbhLI/AAAAAAAACsM/Ed88STCGHrM6G6rxfQJDK_1KEcL1NpMdg/s1600/image05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-I80OnkVEtRg/VwaLGEGbhLI/AAAAAAAACsM/Ed88STCGHrM6G6rxfQJDK_1KEcL1NpMdg/s640/image05.png" /></a></div>
<i><p><center>Google App Indexing Testing</p></i></center>

<p>Check out this <a href="http://developer.android.com/tools/help/app-link-indexing.html?utm_campaign=android_launch_studio_040716&utm_source=anddev&utm_medium=blog">link</a> for more details about app indexing support in Android Studio.</p>

<b><h3>GPU Debugger Preview</h3></b>
<p>If you are developing OpenGL ES games or graphics-intensive apps, you have a new GPU debugger with Android Studio 2.0. Although the GPU debugger is a preview, you can step through your app frame by frame to identify and debug graphics rendering issues with rich information about the GL state.  For more details on how to setup your Android device and app to work with the tool, check out the tech documentations <a href="http://tools.android.com/tech-docs/gpu-profiler">here</a>.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-iKehr4E1HAM/VwaL1aVh-yI/AAAAAAAACsY/JE5pqzvVKqUoH2zU3a7vekP1xFEnvmW2A/s1600/image08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-iKehr4E1HAM/VwaL1aVh-yI/AAAAAAAACsY/JE5pqzvVKqUoH2zU3a7vekP1xFEnvmW2A/s640/image08.png" /></a></div>
<i><p><center>GPU Debugger Preview</p></center></i>

<b><h3>What's Next</h3></b>

<b><p>Update</p></b>
<p>If you are using a previous version of Android Studio, you can check for updates on the Beta channel from the navigation menu (Help → Check for Update [Windows/Linux] , Android Studio → Check for Updates [OS X]). If you need a new copy of Android Studio, you can download it <a href="http://developer.android.com/sdk/?utm_campaign=android_launch_studio_040716&utm_source=anddev&utm_medium=blog">here</a>. If you developing for the N Developer Preview, check out this additional setup <a href="http://developer.android.com/preview/setup-sdk.html?utm_campaign=android_launch_studio_040716&utm_source=anddev&utm_medium=blog#get-as13">instructions</a>.</p>

<b><p>Set Up Instant Run & Android Emulator</p><b></b></b>
<p>After you update to or <a href="http://developer.android.com/sdk/?utm_campaign=android_launch_studio_040716&utm_source=anddev&utm_medium=blog">download</a>  Android Studio 2.0, you should upgrade your projects to use Instant Run, and create a fresh Android Virtual Device (AVD) for the new Android emulator and you are on your way to a fast Android development experience.</p>

<p>Using Instant Run is easy. For each of your existing projects you will see a quick prompt to update your project to the new gradle plugin version <code>(com.android.tools.build:gradle:2.0.0).</code></p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-9AHWTl2kyT4/VwaL7-TOgTI/AAAAAAAACsc/vLph1__cfRgBCg7CsuQVCyA7GOdTzS4Xg/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-9AHWTl2kyT4/VwaL7-TOgTI/AAAAAAAACsc/vLph1__cfRgBCg7CsuQVCyA7GOdTzS4Xg/s640/image01.png"/></a></div>
<i><p><center>Prompt to update your gradle version in your project</p></i></center>

<p>For all new app projects in Android Studio 2.0, Instant Run is on by default. Check out the <a href="http://developer.android.com/tools/building/building-studio.html?utm_campaign=android_launch_studio_040716&utm_source=anddev&utm_medium=blog#instant-run">documentation</a> for more details.</p>

<p>We are already hard at work developing the next release of Android Studio.  We appreciate any feedback on things you like, issues or features you would like to see. Connect with us -- the Android Studio development team -- on our new <a href="https://plus.google.com/103342515830390186255">Google+</a> page or on <a href="http://www.twitter.com/androidstudio">Twitter</a>.</p>

<!--[Interactive video]  --><iframe width="557" height="370" " frameborder="0" src="https://www.youtube.com/embed/xxx3Fn7EowU?list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 80px;" allowfullscreen></iframe>




























]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-studio-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android Developer Story: Video editing app WeVideo increases user engagement with material design</title>
		<link>https://googledata.org/google-android/android-developer-story-video-editing-app-wevideo-increases-user-engagement-with-material-design/</link>
		<comments>https://googledata.org/google-android/android-developer-story-video-editing-app-wevideo-increases-user-engagement-with-material-design/#comments</comments>
		<pubDate>Wed, 06 Apr 2016 16:36:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

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

<p><a href="https://www.wevideo.com/">WeVideo</a> is a video editing platform founded on a vision to make video creation accessible to anyone, anywhere. They first launched the popular WeVideo <a href="https://play.google.com/store/apps/details?id=com.wevideo.mobile.android&#38;hl=en_GB">Video Editor</a> app for Android, and since the latest update to the app, revenue on the platform has doubled every two months. In fact, almost 85% of their mobile users are on Android devices.</p>

<p>Watch Krishna Menon, President &#38; CTO, and Oleg Tsaregorodtsev, Head of Mobile Development at WeVideo, explain how relaunching their app with material design increased user engagement by 100%. They also share how WeVideo improved monetization and installs using ratings &#38; reviews, store listing experiments, and other features on Google Play.</p>

<!--[Interactive video]  -->

<p><a href="https://design.google.com/">Find out more about material design</a> principles, and, learn how to <a href="https://developer.android.com/distribute/googleplay/guide.html">find success on Google Play</a>.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Lily Sheringham, Google Play team</p></i>

<p><a href="https://www.wevideo.com/">WeVideo</a> is a video editing platform founded on a vision to make video creation accessible to anyone, anywhere. They first launched the popular WeVideo <a href="https://play.google.com/store/apps/details?id=com.wevideo.mobile.android&hl=en_GB">Video Editor</a> app for Android, and since the latest update to the app, revenue on the platform has doubled every two months. In fact, almost 85% of their mobile users are on Android devices.</p>

<p>Watch Krishna Menon, President & CTO, and Oleg Tsaregorodtsev, Head of Mobile Development at WeVideo, explain how relaunching their app with material design increased user engagement by 100%. They also share how WeVideo improved monetization and installs using ratings & reviews, store listing experiments, and other features on Google Play.</p>

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

<p><a href="https://design.google.com/">Find out more about material design</a> principles, and, learn how to <a href="https://developer.android.com/distribute/googleplay/guide.html">find success on Google Play</a>.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-developer-story-video-editing-app-wevideo-increases-user-engagement-with-material-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>A new method to measure touch and audio latency</title>
		<link>https://googledata.org/google-android/a-new-method-to-measure-touch-and-audio-latency/</link>
		<comments>https://googledata.org/google-android/a-new-method-to-measure-touch-and-audio-latency/#comments</comments>
		<pubDate>Mon, 04 Apr 2016 20:01:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=73cca237dec8b9233cc638fd5bfca5c2</guid>
		<description><![CDATA[<i></i><p>Posted by <a href="https://github.com/kamrik">Mark Koudritsky</a>, software engineer</p>

<p>There is a new addition in the arsenal of instruments used by Android and ChromeOS teams in the battle to measure and minimize touch and audio latency: the <a href="https://github.com/google/walt">WALT Latency Timer</a>.</p>

<div><a href="https://4.bp.blogspot.com/-gdl2m92Fqmk/Vv7TNnm7YuI/AAAAAAAACrk/mTsx3uQaf9YUpDt1kd1JJsAUQtz6ldm8Q/s1600/image00.png"><img border="0" src="https://4.bp.blogspot.com/-gdl2m92Fqmk/Vv7TNnm7YuI/AAAAAAAACrk/mTsx3uQaf9YUpDt1kd1JJsAUQtz6ldm8Q/s640/image00.png"></a></div>
<p>When you use a mobile device, you expect it to respond instantly to your touch or voice: the more immediate the response, the more you feel directly connected to the device. Over the past few years, we have been trying to measure, understand, and reduce latency in our Chromebook and Android products.</p>

<p>Before we can reduce latency, we must first understand where it comes from. In the case of tapping a touchscreen, the time for a response includes the touch-sensing hardware and driver, the application, and the display and graphics output. For a voice command, there is time spent in sampling input audio, the application, and in audio output. Sometimes we have a mixture of these (for example, a piano app would include touch input and audio output).</p>

<p>
Most previous work to study latency has focused on measuring a single round-trip latency number. For example, to measure audio latency, an app would measure time from app to speaker/mic and back to the app using the <a href="https://source.android.com/devices/audio/loopback.html">Dr. Rick O'Rang loopback audio dongle</a> together with an appropriate app such as the <a href="https://github.com/gkasten/drrickorang/">Dr Rick O&#8217;Rang Loopback app</a> or <a href="http://superpowered.com/latency">Superpowered Mobile Audio Latency Test App</a>. Similarly, the <a href="https://plus.google.com/+FrancoisBeaufort/posts/EpRgWK4XCz6">TouchBot</a> uses a fast camera to measure the round-trip delay from physical touch until a change on the screen is visible. While valuable, the problem with such a setup is that it&#8217;s very difficult to break down the latency into input vs output components.</p>

<p>An important innovation in WALT (a descendant of <a href="https://plus.google.com/+FrancoisBeaufort/posts/XctAif2nv4U">QuickStep</a>) is that it synchronizes an external hardware clock with the Android device or Chromebook to within a millisecond. This allows it to measure input and output latencies separately as opposed to measuring a round-trip latency.</p>

<p>WALT is simple. The parts cost less than $50 and with some basic hobby electronics skills, you can <a href="http://github.com/google/walt/blob/master/hardware/README.md">build it yourself.</a> </p>

<p>We&#8217;ve been using WALT within Google for Nexus and Chromebook development. We&#8217;re now opening this tool to app developers and anyone who wants to precisely measure real-world latencies. We hope that having readily accessible tools will help the industry as a whole improve and make all our devices more responsive to touch and voice.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by <a href="https://github.com/kamrik">Mark Koudritsky</a>, software engineer</p></i>

<p>There is a new addition in the arsenal of instruments used by Android and ChromeOS teams in the battle to measure and minimize touch and audio latency: the <a href="https://github.com/google/walt">WALT Latency Timer</a>.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-gdl2m92Fqmk/Vv7TNnm7YuI/AAAAAAAACrk/mTsx3uQaf9YUpDt1kd1JJsAUQtz6ldm8Q/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-gdl2m92Fqmk/Vv7TNnm7YuI/AAAAAAAACrk/mTsx3uQaf9YUpDt1kd1JJsAUQtz6ldm8Q/s640/image00.png" /></a></div>
<p>When you use a mobile device, you expect it to respond instantly to your touch or voice: the more immediate the response, the more you feel directly connected to the device. Over the past few years, we have been trying to measure, understand, and reduce latency in our Chromebook and Android products.</p>

<p>Before we can reduce latency, we must first understand where it comes from. In the case of tapping a touchscreen, the time for a response includes the touch-sensing hardware and driver, the application, and the display and graphics output. For a voice command, there is time spent in sampling input audio, the application, and in audio output. Sometimes we have a mixture of these (for example, a piano app would include touch input and audio output).</p>

<p>
Most previous work to study latency has focused on measuring a single round-trip latency number. For example, to measure audio latency, an app would measure time from app to speaker/mic and back to the app using the <a href="https://source.android.com/devices/audio/loopback.html">Dr. Rick O'Rang loopback audio dongle</a> together with an appropriate app such as the <a href="https://github.com/gkasten/drrickorang/">Dr Rick O’Rang Loopback app</a> or <a href="http://superpowered.com/latency">Superpowered Mobile Audio Latency Test App</a>. Similarly, the <a href="https://plus.google.com/+FrancoisBeaufort/posts/EpRgWK4XCz6">TouchBot</a> uses a fast camera to measure the round-trip delay from physical touch until a change on the screen is visible. While valuable, the problem with such a setup is that it’s very difficult to break down the latency into input vs output components.</p>

<p>An important innovation in WALT (a descendant of <a href="https://plus.google.com/+FrancoisBeaufort/posts/XctAif2nv4U">QuickStep</a>) is that it synchronizes an external hardware clock with the Android device or Chromebook to within a millisecond. This allows it to measure input and output latencies separately as opposed to measuring a round-trip latency.</p>

<p>WALT is simple. The parts cost less than $50 and with some basic hobby electronics skills, you can <a href="http://github.com/google/walt/blob/master/hardware/README.md">build it yourself.</a> </p>

<p>We’ve been using WALT within Google for Nexus and Chromebook development. We’re now opening this tool to app developers and anyone who wants to precisely measure real-world latencies. We hope that having readily accessible tools will help the industry as a whole improve and make all our devices more responsive to touch and voice.</p>













]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/a-new-method-to-measure-touch-and-audio-latency/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Get your apps and games ready for space with Google Play (April Fools&#8217;)</title>
		<link>https://googledata.org/google-android/get-your-apps-and-games-ready-for-space-with-google-play/</link>
		<comments>https://googledata.org/google-android/get-your-apps-and-games-ready-for-space-with-google-play/#comments</comments>
		<pubDate>Fri, 01 Apr 2016 06:08:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=5d6176ea8a6d88be39bb14aeffe84d4f</guid>
		<description><![CDATA[<p>Posted by Lily Sheringham, Google Play team</p>

<p>Google Play lets you distribute your apps and games to over 1 billion active Android users around the world. With advances in space exploration and the advent of galactic tourism, there will be a high number of users beyond this world that developers need to start thinking about, too. Google Play can now help you reach them. We&#8217;ve added <a href="https://play.google.com/apps/publish/">new features to the Google Play Developer Console</a> and <a href="http://www.google.com/design/space">updated the material design guidelines</a>, to help you design, test, and distribute your apps and games in space.</p>

<p>Here&#8217;s a look at how The Guardian, one of the largest English-news organizations in the world, enhanced its Android <a href="https://play.google.com/store/apps/details?id=com.guardian">app</a> to enable astronauts and space travellers to stay informed and up-to-date, while in orbit or on the surface of the moon.</p>

<!--[Interactive video]  -->
<br /><i></i><p>"I am pleased to have The Guardian's application to test the growing Interplanetary Internet" says Vint Cerf, distinguished visiting scientist at the Jet Propulsion Laboratory and Google's Chief Internet Evangelist. <i>"The interstellar version is in development and I'm looking forward to having more Google Play apps and games tested in space flight."</i></p>

<p>Get your apps and games ready for take off <a href="https://www.google.com/search?q=april+fools">today</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Posted by Lily Sheringham, Google Play team</p>

<p>Google Play lets you distribute your apps and games to over 1 billion active Android users around the world. With advances in space exploration and the advent of galactic tourism, there will be a high number of users beyond this world that developers need to start thinking about, too. Google Play can now help you reach them. We’ve added <a href="https://play.google.com/apps/publish/">new features to the Google Play Developer Console</a> and <a href="http://www.google.com/design/space">updated the material design guidelines</a>, to help you design, test, and distribute your apps and games in space.</p>

<p>Here’s a look at how The Guardian, one of the largest English-news organizations in the world, enhanced its Android <a href="https://play.google.com/store/apps/details?id=com.guardian">app</a> to enable astronauts and space travellers to stay informed and up-to-date, while in orbit or on the surface of the moon.</p>

<!--[Interactive video]  --><iframe width="457" height="270" " frameborder="0" src="https://www.youtube.com/embed/dFrgNiweQDk?list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 80px;" allowfullscreen></iframe>
<br>
<i><p>"I am pleased to have The Guardian's application to test the growing Interplanetary Internet"</i> says Vint Cerf, distinguished visiting scientist at the Jet Propulsion Laboratory and Google's Chief Internet Evangelist. <i>"The interstellar version is in development and I'm looking forward to having more Google Play apps and games tested in space flight."</p></i>

<p>Get your apps and games ready for take off <a href="https://www.google.com/search?q=april+fools">today</a>.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/get-your-apps-and-games-ready-for-space-with-google-play/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Registering OAuth clients for Google Sign-In</title>
		<link>https://googledata.org/google-android/registering-oauth-clients-for-google-sign-in/</link>
		<comments>https://googledata.org/google-android/registering-oauth-clients-for-google-sign-in/#comments</comments>
		<pubDate>Fri, 25 Mar 2016 17:48:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=e0286474aeae968a82aa76f374662425</guid>
		<description><![CDATA[<p><i>Posted by <a href="http://stackoverflow.com/users/5827947/isabella-chen">Isabella Chen</a>, Software Engineer, and <a href="https://plus.google.com/+LaurenceMoroney">Laurence Moroney</a>, Developer Advocate</i></p>

<p>Starting with Google Play services 8.3, we did a <a href="http://android-developers.blogspot.com/2015/11/improvements-to-sign-in-with-google.html">major revamp</a> of the <a href="http://android-developers.blogspot.com/2015/12/api-updates-for-sign-in-with-google.html">Google Sign-In APIs</a>, supporting both client and server auth. Behind the scenes, these APIs use <a href="https://developers.google.com/identity/protocols/OAuth2?utm_campaign=identity_discussion_reg_oauth_signin_032516&#38;utm_source=anddev&#38;utm_medium=blog">OAuth 2.0 </a>tokens to ensure secure <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">authentication</a> and <a href="http://android-developers.blogspot.com/2016/02/using-credentials-between-your-server.html">authorization</a>. To maintain security, we provide tools in the Google Developers Console to register the clients using these tokens.</p>

<p>In this post, we&#8217;ll discuss the important task of registering OAuth clients for Google Sign-In, and the tools that we offer to make this as easy as possible.</p>

<p>Here are some scenarios that might apply to you:</p>
<ol><li>Start by creating a project in the Google Developers Console, which registers the client app on your behalf.</li>
<li>If you have a backend server in your project, you&#8217;ll need an OAuth client ID for it, too.</li>
<li>And don't forget to register OAuth clients for other test and release versions of your app, too!</li></ol><p>In this post, we&#8217;ll cover some details on this process and address common pitfalls.</p>

<h3>Getting Started - Create a Project in the Google Developers Console.</h3>

<p>If you have not used Google Sign-In before, you can start integrating the API into your app by following the &#8216;<b>Get a configuration file</b>&#8217; steps on <a href="https://developers.google.com/identity/sign-in/android/start-integrating?utm_campaign=identity_discussion_reg_oauth_signin_032516&#38;utm_source=anddev&#38;utm_medium=blog#get-config">this site</a>.  You&#8217;ll be taken to a setup wizard that will create an OAuth 2.0 client ID as shown in Figure 1.</p>

<div><a href="https://3.bp.blogspot.com/-0AI_aSW4WQU/VvV0mtr82PI/AAAAAAAACq4/XhNpwmR7bQQBUG1m_mOZ9NjZCt8296TzA/s1600/image02.png"><img border="0" src="https://3.bp.blogspot.com/-0AI_aSW4WQU/VvV0mtr82PI/AAAAAAAACq4/XhNpwmR7bQQBUG1m_mOZ9NjZCt8296TzA/s640/image02.png"></a></div>

<p></p><b>Figure 1. Configuring your app</b>

<p>Once you&#8217;ve specified your app, you&#8217;ll be taken to a screen to choose and configure services such as Google Sign-In, Cloud Messaging or Google Analytics that you want your app to be able to use. </p>

<p>Choose <b>Google Sign-In</b>. In order to use it, you&#8217;ll need to get the SHA-1 of the signing certificate <a href="http://developer.android.com/tools/publishing/app-signing.html?utm_campaign=identity_discussion_reg_oauth_signin_032516&#38;utm_source=anddev&#38;utm_medium=blog">for your Android app</a>. This can either be a debug or a release certificate, and for the purposes of this blog you&#8217;ll look at a debug one, but keep in mind that you&#8217;ll need to repeat this process for each package / certificate pair you end up using (described in the last section below).</p>

<p>You can get the debug SHA-1 using the keytool command like this:</p>

<p><code>keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android</code></p>

<p>Once you have your SHA-1, enter it as seen in Figure 2.</p>

<div><a href="https://3.bp.blogspot.com/-skqXOyA0hYM/VvV1HRIXCTI/AAAAAAAACq8/ym97Pmcr-VMM8sfm0wDZsm6VWEVIPWsAg/s1600/image04.png"><img border="0" src="https://3.bp.blogspot.com/-skqXOyA0hYM/VvV1HRIXCTI/AAAAAAAACq8/ym97Pmcr-VMM8sfm0wDZsm6VWEVIPWsAg/s640/image04.png"></a></div>

<p></p><b>Figure 2. Enabling Google Sign-in</b>

<p>Now that your project is set up, you can get started with integrating the Sign-In API. But if you need to configure your project to work with a <a href="http://android-developers.blogspot.com/2016/02/using-credentials-between-your-server.html">backend server</a> or additional package name / keystores, keep reading the sections below.</p>

<h3>Server Config - Ensure your server is registered within the same project.</h3>

<p>If you have your own web or cloud server with data for your application, you&#8217;ll need OAuth credentials for your backend. Details on doing this can be found in the <a href="https://developers.google.com/identity/sign-in/android/backend-auth?utm_campaign=identity_discussion_reg_oauth_signin_032516&#38;utm_source=anddev&#38;utm_medium=blog">ID token</a> and server <a href="https://developers.google.com/identity/sign-in/android/offline-access?utm_campaign=identity_discussion_reg_oauth_signin_032516&#38;utm_source=anddev&#38;utm_medium=blog">auth code</a> documentation. </p>

<p>Before using these flows, you&#8217;ll need to make sure you register your web server correctly in the <a href="https://console.developers.google.com/projectselector/apis/credentials">Google Developers Console</a>. Once there, you&#8217;ll be asked to select your project. See Figure 3. </p>

<div><a href="https://1.bp.blogspot.com/-mOJQoTnBlVA/VvV1h4XZIWI/AAAAAAAACrE/uyJcrnNxMl8BjyJktvnSgwpE982inCU6A/s1600/image03.png"><img border="0" src="https://1.bp.blogspot.com/-mOJQoTnBlVA/VvV1h4XZIWI/AAAAAAAACrE/uyJcrnNxMl8BjyJktvnSgwpE982inCU6A/s640/image03.png"></a></div>
<p></p><b>Figure 3. Going directly to a project in the Google Developers Console.</b>

<p>Once you&#8217;ve selected your project, press the &#8216;Continue&#8217; button, and you&#8217;ll go directly to the Credentials tab where all credential types are managed. Check the &#8220;OAuth 2.0 client IDs&#8221; section, and you will see the &#8220;Web client&#8221; and &#8220;Android client for com.my.package.name&#8221; that were created for you by the setup wizard. See Figure 4. </p>

<div><a href="https://4.bp.blogspot.com/-AU7dyOI79J0/VvV1qCpyneI/AAAAAAAACrI/1uWc2aJ4sLcXBEhSSSpxOngi0YzI8wdmA/s1600/image01.png"><img border="0" src="https://4.bp.blogspot.com/-AU7dyOI79J0/VvV1qCpyneI/AAAAAAAACrI/1uWc2aJ4sLcXBEhSSSpxOngi0YzI8wdmA/s640/image01.png"></a></div>
<p></p><b>Figure 4. The Credentials Tab on the Developers Console - Web server OAuth client info</b>

<p>Take note of the Client ID for for your <b>Web client</b>, you&#8217;ll need it for both your app and server as illustrated below. (If you&#8217;ve created your project in the past and there&#8217;s no OAuth 2.0 client ID with Type &#8220;Web application&#8221;, then you will need to create one by selecting &#8216;New Credentials&#8217; -&#62; &#8216;OAuth client ID&#8217;.)</p>

<p>If you <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">use an ID token flow for backend authentication</a>, when you start developing your Android app, request an ID token in your GoogleSignInOptions, supplying the web client ID for your server:</p>

<pre>GoogleSignInOptions gso =
    new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        <b>.requestIdToken(serverClientId)</b>
        .requestEmail()
        .build();</pre>

<p>And then on your server, set the same OAuth client ID for your <b>web application</b> to be the audience:</p>

<pre>GoogleIdTokenVerifier verifier =
    new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
        <b>.setAudience(Arrays.asList(serverClientId))</b>
        .setIssuer("https://accounts.google.com")
        .build();</pre>

<p>Successful verification will allow you to authenticate and issue a session for this newly signed-in user.</p>

<p>Alternatively, if you are <a href="http://android-developers.blogspot.com/2016/02/using-credentials-between-your-server.html">using the server auth code flow for backend access to Google APIs</a>, request a server auth code in your GoogleSignInOptions on Android, again supplying the web client ID for your server:</p>

<pre>GoogleSignInOptions gso =
    new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestScopes(new Scope(Scopes.DRIVE_APPFOLDER))
        <b>.requestServerAuthCode(serverClientId)</b>
        .requestEmail()
        .build();</pre>

<p>And then on the server, both the OAuth client ID and the &#8220;Client secret&#8221; will be useful. The server SDK from Google can directly consume a downloaded JSON configuration file. You can click the download icon to download the JSON file (as shown in Figure 4) and use below code to construct GoogleClientSecrets:</p>

<pre>GoogleClientSecrets clientSecrets =
    GoogleClientSecrets.load(
        JacksonFactory.getDefaultInstance(),
        new FileReader(PATH_TO_CLIENT_SECRET_FILE));</pre>

<p>At which point you can access authenticated Google APIs on behalf of the signed-in user. Note that the &#8220;client secret&#8221; is really a <b><i>secret</i></b> that you should never reveal in your Android client.</p>

<h3>Handling multiple environments - Registering other client IDs for your project.</h3>

<p>Note that it can be common for apps to have different package names as well as different certificates (and thus SHA-1 keys) for various types of environment (such for different developers or test and release environments). Google uses your package name together with SHA-1 signing-certificate fingerprint to uniquely identify your Android application. It&#8217;s important to register every package name + SHA1 fingerprint pair in Google Developers Console. </p>

<p>For example, to register the release version of this package, you can do so by selecting &#8216;New Credentials&#8217; -&#62; &#8216;OAuth client ID&#8217;, shown in Figure 5 below, and then following the steps to add the package name and production keystore SHA-1.</p>

<div><a href="https://3.bp.blogspot.com/-Uq2KZOzOJMo/VvV2NMAtrFI/AAAAAAAACrQ/FShx55ECE34S5zazind4La7M4QwoRHjeA/s1600/image00.png"><img border="0" src="https://3.bp.blogspot.com/-Uq2KZOzOJMo/VvV2NMAtrFI/AAAAAAAACrQ/FShx55ECE34S5zazind4La7M4QwoRHjeA/s640/image00.png"></a></div>
<p></p><b>Figure 5. The Credentials Tab on the Developers Console - create additional OAuth client ID</b>

<p>Now you are ready to handle the different environments where your app might be running and release to your users!</p>

<p>Hopefully, this has been helpful to you in understanding how to register for OAuth keys to keep your apps and servers secure. For more information, check out the Google Developers homepage for <a href="https://developers.google.com/identity/?utm_campaign=identity_discussion_reg_oauth_signin_032516&#38;utm_source=anddev&#38;utm_medium=blog">Identity</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by <a href="http://stackoverflow.com/users/5827947/isabella-chen">Isabella Chen</a>, Software Engineer, and <a href="https://plus.google.com/+LaurenceMoroney">Laurence Moroney</a>, Developer Advocate</i></p>

<p>Starting with Google Play services 8.3, we did a <a href="http://android-developers.blogspot.com/2015/11/improvements-to-sign-in-with-google.html">major revamp</a> of the <a href="http://android-developers.blogspot.com/2015/12/api-updates-for-sign-in-with-google.html">Google Sign-In APIs</a>, supporting both client and server auth. Behind the scenes, these APIs use <a href="https://developers.google.com/identity/protocols/OAuth2?utm_campaign=identity_discussion_reg_oauth_signin_032516&utm_source=anddev&utm_medium=blog">OAuth 2.0 </a>tokens to ensure secure <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">authentication</a> and <a href="http://android-developers.blogspot.com/2016/02/using-credentials-between-your-server.html">authorization</a>. To maintain security, we provide tools in the Google Developers Console to register the clients using these tokens.</p>

<p>In this post, we’ll discuss the important task of registering OAuth clients for Google Sign-In, and the tools that we offer to make this as easy as possible.</p>

<p>Here are some scenarios that might apply to you:</p>
<ol><li>Start by creating a project in the Google Developers Console, which registers the client app on your behalf.</li>
<li>If you have a backend server in your project, you’ll need an OAuth client ID for it, too.</li>
<li>And don't forget to register OAuth clients for other test and release versions of your app, too!</li></ol>

<p>In this post, we’ll cover some details on this process and address common pitfalls.</p>

<h3>Getting Started - Create a Project in the Google Developers Console.</h3>

<p>If you have not used Google Sign-In before, you can start integrating the API into your app by following the ‘<b>Get a configuration file</b>’ steps on <a href="https://developers.google.com/identity/sign-in/android/start-integrating?utm_campaign=identity_discussion_reg_oauth_signin_032516&utm_source=anddev&utm_medium=blog#get-config">this site</a>.  You’ll be taken to a setup wizard that will create an OAuth 2.0 client ID as shown in Figure 1.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-0AI_aSW4WQU/VvV0mtr82PI/AAAAAAAACq4/XhNpwmR7bQQBUG1m_mOZ9NjZCt8296TzA/s1600/image02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-0AI_aSW4WQU/VvV0mtr82PI/AAAAAAAACq4/XhNpwmR7bQQBUG1m_mOZ9NjZCt8296TzA/s640/image02.png" /></a></div>

<p><center><b>Figure 1. Configuring your app</b></center></p>

<p>Once you’ve specified your app, you’ll be taken to a screen to choose and configure services such as Google Sign-In, Cloud Messaging or Google Analytics that you want your app to be able to use. </p>

<p>Choose <b>Google Sign-In</b>. In order to use it, you’ll need to get the SHA-1 of the signing certificate <a href="http://developer.android.com/tools/publishing/app-signing.html?utm_campaign=identity_discussion_reg_oauth_signin_032516&utm_source=anddev&utm_medium=blog">for your Android app</a>. This can either be a debug or a release certificate, and for the purposes of this blog you’ll look at a debug one, but keep in mind that you’ll need to repeat this process for each package / certificate pair you end up using (described in the last section below).</p>

<p>You can get the debug SHA-1 using the keytool command like this:</p>

<p><code>keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android</code></p>

<p>Once you have your SHA-1, enter it as seen in Figure 2.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-skqXOyA0hYM/VvV1HRIXCTI/AAAAAAAACq8/ym97Pmcr-VMM8sfm0wDZsm6VWEVIPWsAg/s1600/image04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-skqXOyA0hYM/VvV1HRIXCTI/AAAAAAAACq8/ym97Pmcr-VMM8sfm0wDZsm6VWEVIPWsAg/s640/image04.png" /></a></div>

<p><center><b>Figure 2. Enabling Google Sign-in</b></center></p>

<p>Now that your project is set up, you can get started with integrating the Sign-In API. But if you need to configure your project to work with a <a href="http://android-developers.blogspot.com/2016/02/using-credentials-between-your-server.html">backend server</a> or additional package name / keystores, keep reading the sections below.</p>

<h3>Server Config - Ensure your server is registered within the same project.</h3>

<p>If you have your own web or cloud server with data for your application, you’ll need OAuth credentials for your backend. Details on doing this can be found in the <a href="https://developers.google.com/identity/sign-in/android/backend-auth?utm_campaign=identity_discussion_reg_oauth_signin_032516&utm_source=anddev&utm_medium=blog">ID token</a> and server <a href="https://developers.google.com/identity/sign-in/android/offline-access?utm_campaign=identity_discussion_reg_oauth_signin_032516&utm_source=anddev&utm_medium=blog">auth code</a> documentation. </p>

<p>Before using these flows, you’ll need to make sure you register your web server correctly in the <a href="https://console.developers.google.com/projectselector/apis/credentials">Google Developers Console</a>. Once there, you’ll be asked to select your project. See Figure 3. </p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-mOJQoTnBlVA/VvV1h4XZIWI/AAAAAAAACrE/uyJcrnNxMl8BjyJktvnSgwpE982inCU6A/s1600/image03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-mOJQoTnBlVA/VvV1h4XZIWI/AAAAAAAACrE/uyJcrnNxMl8BjyJktvnSgwpE982inCU6A/s640/image03.png" /></a></div>
<p><center><b>Figure 3. Going directly to a project in the Google Developers Console.</b></center></p>

<p>Once you’ve selected your project, press the ‘Continue’ button, and you’ll go directly to the Credentials tab where all credential types are managed. Check the “OAuth 2.0 client IDs” section, and you will see the “Web client” and “Android client for com.my.package.name” that were created for you by the setup wizard. See Figure 4. </p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-AU7dyOI79J0/VvV1qCpyneI/AAAAAAAACrI/1uWc2aJ4sLcXBEhSSSpxOngi0YzI8wdmA/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-AU7dyOI79J0/VvV1qCpyneI/AAAAAAAACrI/1uWc2aJ4sLcXBEhSSSpxOngi0YzI8wdmA/s640/image01.png" /></a></div>
<p><center><b>Figure 4. The Credentials Tab on the Developers Console - Web server OAuth client info</b></center></p>

<p>Take note of the Client ID for for your <b>Web client</b>, you’ll need it for both your app and server as illustrated below. (If you’ve created your project in the past and there’s no OAuth 2.0 client ID with Type “Web application”, then you will need to create one by selecting ‘New Credentials’ -> ‘OAuth client ID’.)</p>

<p>If you <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">use an ID token flow for backend authentication</a>, when you start developing your Android app, request an ID token in your GoogleSignInOptions, supplying the web client ID for your server:</p>

<pre class="pretty print">GoogleSignInOptions gso =
    new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        <b>.requestIdToken(serverClientId)</b>
        .requestEmail()
        .build();</pre>

<p>And then on your server, set the same OAuth client ID for your <b>web application</b> to be the audience:</p>

<pre class="pretty print">GoogleIdTokenVerifier verifier =
    new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
        <b>.setAudience(Arrays.asList(serverClientId))</b>
        .setIssuer("https://accounts.google.com")
        .build();</pre>

<p>Successful verification will allow you to authenticate and issue a session for this newly signed-in user.</p>

<p>Alternatively, if you are <a href="http://android-developers.blogspot.com/2016/02/using-credentials-between-your-server.html">using the server auth code flow for backend access to Google APIs</a>, request a server auth code in your GoogleSignInOptions on Android, again supplying the web client ID for your server:</p>

<pre class="pretty print">GoogleSignInOptions gso =
    new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestScopes(new Scope(Scopes.DRIVE_APPFOLDER))
        <b>.requestServerAuthCode(serverClientId)</b>
        .requestEmail()
        .build();</pre>

<p>And then on the server, both the OAuth client ID and the “Client secret” will be useful. The server SDK from Google can directly consume a downloaded JSON configuration file. You can click the download icon to download the JSON file (as shown in Figure 4) and use below code to construct GoogleClientSecrets:</p>

<pre class="pretty print">GoogleClientSecrets clientSecrets =
    GoogleClientSecrets.load(
        JacksonFactory.getDefaultInstance(),
        new FileReader(PATH_TO_CLIENT_SECRET_FILE));</pre>

<p>At which point you can access authenticated Google APIs on behalf of the signed-in user. Note that the “client secret” is really a <b><i>secret</i></b> that you should never reveal in your Android client.</p>

<h3>Handling multiple environments - Registering other client IDs for your project.</h3>

<p>Note that it can be common for apps to have different package names as well as different certificates (and thus SHA-1 keys) for various types of environment (such for different developers or test and release environments). Google uses your package name together with SHA-1 signing-certificate fingerprint to uniquely identify your Android application. It’s important to register every package name + SHA1 fingerprint pair in Google Developers Console. </p>

<p>For example, to register the release version of this package, you can do so by selecting ‘New Credentials’ -> ‘OAuth client ID’, shown in Figure 5 below, and then following the steps to add the package name and production keystore SHA-1.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-Uq2KZOzOJMo/VvV2NMAtrFI/AAAAAAAACrQ/FShx55ECE34S5zazind4La7M4QwoRHjeA/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-Uq2KZOzOJMo/VvV2NMAtrFI/AAAAAAAACrQ/FShx55ECE34S5zazind4La7M4QwoRHjeA/s640/image00.png" /></a></div>
<p><center><b>Figure 5. The Credentials Tab on the Developers Console - create additional OAuth client ID</p></center></b>

<p>Now you are ready to handle the different environments where your app might be running and release to your users!</p>

<p>Hopefully, this has been helpful to you in understanding how to register for OAuth keys to keep your apps and servers secure. For more information, check out the Google Developers homepage for <a href="https://developers.google.com/identity/?utm_campaign=identity_discussion_reg_oauth_signin_032516&utm_source=anddev&utm_medium=blog">Identity</a>.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/registering-oauth-clients-for-google-sign-in/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Announcing the 2016 Android Experiments I/O Challenge!</title>
		<link>https://googledata.org/google-android/announcing-the-2016-android-experiments-io-challenge/</link>
		<comments>https://googledata.org/google-android/announcing-the-2016-android-experiments-io-challenge/#comments</comments>
		<pubDate>Fri, 25 Mar 2016 17:05:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=55448a831fee77793d6c486282940a27</guid>
		<description><![CDATA[<p><i>Posted by Roman Nurik, Senior Interactive Designer, and Richard The, Google Creative Lab</i></p>

<p>Last <a href="http://android-developers.blogspot.com/2015/08/android-experiments-celebration-of.html">summer</a> we launched <a href="https://www.androidexperiments.com/">Android Experiments</a>: a showcase of creative Android projects, and an open invitation for all developers to submit their own experiments to the gallery. So far we&#8217;ve seen some amazing work from the developer community - from live wallpaper, to watch faces, to interesting hacks of the IOIO board - and we want to see more.</p>

<p>Today we announce the Android Experiments I/O Challenge: a chance for your experiment (and you) to go to I/O 2016!</p>

<div><a href="https://2.bp.blogspot.com/-_Qj20fpLVB4/VvS4Q1ELIhI/AAAAAAAACqo/3TlcJLQDMQUg4d4x43UjYSAIOXAtZprxw/s1600/AEX-Contest-PR.jpg"><img border="0" src="https://2.bp.blogspot.com/-_Qj20fpLVB4/VvS4Q1ELIhI/AAAAAAAACqo/3TlcJLQDMQUg4d4x43UjYSAIOXAtZprxw/s640/AEX-Contest-PR.jpg"></a></div>

<p>From now through April 13, you can enter by submitting your experiments to the gallery. The top three winners of the contest will receive a trip to this year&#8217;s Google I/O, and the five runner-ups will get the new Nexus 6P.</p>

<p>So what makes a good Android Experiment? It&#8217;s a project that utilizes the unique capabilities of the Android platform in an innovative way. Here are a few suggestions:</p>
<ul><li>Creative uses of Android&#8217;s new or distinctive features</li>
<li>Projects that explore how we interact with our devices, in small and big ways</li>
<li>Unique visual aesthetics</li>
<li>Open source projects that inspire other developers</li>
<li>Surprise us - we want to see the amazing things you&#8217;re cooking up</li></ul><p>All projects on Android Experiments are open source. If you&#8217;re not sure where to start take a look on the site gallery, dig in and get inspired.</p>

<p>We can&#8217;t wait to see how you&#8217;re combining code and creativity! Enter on <a href="https://www.androidexperiments.com/challenge">androidexperiments.com/challenge</a> today.</p>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Roman Nurik, Senior Interactive Designer, and Richard The, Google Creative Lab</i></p>

<p>Last <a href="http://android-developers.blogspot.com/2015/08/android-experiments-celebration-of.html">summer</a> we launched <a href="https://www.androidexperiments.com/">Android Experiments</a>: a showcase of creative Android projects, and an open invitation for all developers to submit their own experiments to the gallery. So far we’ve seen some amazing work from the developer community - from live wallpaper, to watch faces, to interesting hacks of the IOIO board - and we want to see more.</p>

<p>Today we announce the Android Experiments I/O Challenge: a chance for your experiment (and you) to go to I/O 2016!</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-_Qj20fpLVB4/VvS4Q1ELIhI/AAAAAAAACqo/3TlcJLQDMQUg4d4x43UjYSAIOXAtZprxw/s1600/AEX-Contest-PR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-_Qj20fpLVB4/VvS4Q1ELIhI/AAAAAAAACqo/3TlcJLQDMQUg4d4x43UjYSAIOXAtZprxw/s640/AEX-Contest-PR.jpg" /></a></div>

<p>From now through April 13, you can enter by submitting your experiments to the gallery. The top three winners of the contest will receive a trip to this year’s Google I/O, and the five runner-ups will get the new Nexus 6P.</p>

<p>So what makes a good Android Experiment? It’s a project that utilizes the unique capabilities of the Android platform in an innovative way. Here are a few suggestions:</p>
<ul><li>Creative uses of Android’s new or distinctive features</li>
<li>Projects that explore how we interact with our devices, in small and big ways</li>
<li>Unique visual aesthetics</li>
<li>Open source projects that inspire other developers</li>
<li>Surprise us - we want to see the amazing things you’re cooking up</li></ul>

<p>All projects on Android Experiments are open source. If you’re not sure where to start take a look on the site gallery, dig in and get inspired.</p>

<p>We can’t wait to see how you’re combining code and creativity! Enter on <a href="https://www.androidexperiments.com/challenge">androidexperiments.com/challenge</a> today.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/announcing-the-2016-android-experiments-io-challenge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Grow your games business on Google Play: Game parameters management, video recording, streaming ads, and more</title>
		<link>https://googledata.org/google-android/grow-your-games-business-on-google-play-game-parameters-management-video-recording-streaming-ads-and-more/</link>
		<comments>https://googledata.org/google-android/grow-your-games-business-on-google-play-game-parameters-management-video-recording-streaming-ads-and-more/#comments</comments>
		<pubDate>Mon, 14 Mar 2016 17:07:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

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

<div><a href="https://4.bp.blogspot.com/-9wibpF5Phs0/VubnbJfiprI/AAAAAAAABYg/TVSE7O7-yGYr_gCoBlObBc6DRve90LoIw/s1600/image06.png"><img border="0" src="https://4.bp.blogspot.com/-9wibpF5Phs0/VubnbJfiprI/AAAAAAAABYg/TVSE7O7-yGYr_gCoBlObBc6DRve90LoIw/s100/image06.png"></a></div><p>With mobile gamers across 190 countries, Google Play Games is made up of a vibrant and diverse gaming community. And these players are more engaged than ever. Over the past year, the number of games reaching over 1 million installs grew by 50 percent.</p>

<p>Today, at our annual <a href="https://events.withgoogle.com/gdc-developer-day-2016/">Developer Day</a> at the Game Developers Conference,  we announced new platform and ads tools for developers, of all sizes reach, to reach this global audience and accelerate the growth of their games business. Check out below the full range of features that will help game developers build their apps, grow their user base, and earn more revenue.</p>

<h3>Making Google Play Games better for players</h3>

<p>In February, we <a href="http://officialandroid.blogspot.co.uk/2016/02/embrace-your-inner-gaming-hero-with.html">introduced Gamer IDs</a> so that anyone could create a gaming persona. We also simplified the sign-in process for Google Play Games so players could pick up playing their game more quickly. We&#8217;re also working on product enhancements to make Play Games a little more social and fun, which will mean more engaged players who&#8217;re playing your game for longer. One example is the launch of <b>Gamer friends</b> (coming soon!), where your players can add and interact with  their friends from within the Google Play Games app (without needing a Google+ account).</p>

<p>We&#8217;re also launching the <a href="https://play.google.com/store/apps/collection/promotion_3001ed4_indie_corner">Indie Corner</a>, a new collection on Google Play, that will highlight amazing games built by indie developers. You can nominate your awesome indie game for inclusion at <a href="http://g.co/indiecornersubmission">g.co/indiecornersubmission</a>. We&#8217;ll pick the best games to showcase based on the quality of the experience and exemplary use of Google Play game services.</p>

<h3>Grow your game with powerful new features from Google Play game services </h3>

<p>In January, we <a href="http://android-developers.blogspot.co.uk/2016/01/new-features-to-better-understand.html">added features to Player Analytics</a>, the free reporting tool of Google Play game services, which helps you understand how players are progressing, spending and churning. Today, we previewed some upcoming new tools that would be available in the coming months, including:</p>

<ul><li><b>Game parameters management:</b> With game parameters management, you will be able to update gameplay and game economy parameters without the need for APK changes or resubmitting your app. You&#8217;ll be able to optimize virtual goods and currencies from the Developer Console or the Google Play Developer API.</li>
</ul><div><a href="https://2.bp.blogspot.com/-VlcDeqR3X_s/Vuhnkz2pYdI/AAAAAAAACqI/FLXVWGokPLQ2FH4WSoVYH1zuL-BSj-N2g/s1600/02c-weapons-table-override-editcomplete%2B-%2Bcropped.png"><img border="0" src="https://2.bp.blogspot.com/-VlcDeqR3X_s/Vuhnkz2pYdI/AAAAAAAACqI/FLXVWGokPLQ2FH4WSoVYH1zuL-BSj-N2g/s640/02c-weapons-table-override-editcomplete%2B-%2Bcropped.png"></a></div>
<i></i><p></p>Game parameters management in the Google Play Developer Console

<ul><li><b>Video Recording API:</b> You will be able to easily add video recording to your app and let users share their videos with their friends and on YouTube in a few simple steps. We are also adding live streaming functionality to allow your fans to broadcast their gameplay experiences in real time on YouTube. 
</li>
</ul><div><a href="https://4.bp.blogspot.com/-GYSq2o75how/Vubn2X1hUKI/AAAAAAAABYo/Zzw7Wh24-to9Z91tLKC2biku7KDQ5EVFg/s1600/image04.gif"><img border="0" src="https://4.bp.blogspot.com/-GYSq2o75how/Vubn2X1hUKI/AAAAAAAABYo/Zzw7Wh24-to9Z91tLKC2biku7KDQ5EVFg/s640/image04.gif"></a></div>

<ul><li><b>Predictive Analytics:</b> The Player Stats API now has Predictive Analytics to help you identify which groups of players are likely to spend or churn, and we are adding new predictions for how much a player is likely to spend within 30 days and the probability that a player is a high spender. This allows you to tailor experiences for these players to try to increase their spend or engagement.<a href="https://developers.google.com/games/services/android/stats?utm_campaign=play%20games_discussion_betterbusiness_031416&#38;utm_source=anddev&#38;utm_medium=blog"> Learn more about the <div><a href="https://2.bp.blogspot.com/-kyXKTRWDMeo/Vubn9kbs-II/AAAAAAAABYs/ZmBw-cyXIrc9_93HOMEdggO61CSLQIYAg/s1600/image03.png"><img border="0" src="https://2.bp.blogspot.com/-kyXKTRWDMeo/Vubn9kbs-II/AAAAAAAABYs/ZmBw-cyXIrc9_93HOMEdggO61CSLQIYAg/s100/image03.png"></a></div>Player Stats API.</a>
</li>
</ul><i></i><p></p>&#8220;Not showing ads to users that were probable to spend increased number of IAP transactions by 15%.&#8221; 
&#8211; Avetis Zakharyan, CEO Underwater Apps

<h3>New ad formats and targeting to find, keep and monetize high-quality gamers</h3>

<p>Promoting your game and growing your audience is important, but it&#8217;s just as important to reach the right audience for your game, the players who want to open the game again and again. That&#8217;s why today we&#8217;ve unveiled <a href="http://adwords.blogspot.com/2016/03/new-ad-formats-and-targeting-to-find.html">new features</a> that make it simpler to reach the right audience at scale.</p>


<ul><li><b>Search Trial Run Ads:</b> In the next few weeks, we&#8217;ll launch a new way for users to try your game out when they do a search for games on Google through a new ad format, Search Trial Run Ads. After tapping &#8220;Try now&#8221;, an individual can play your game for up to 10 minutes, and then download the game in full if they choose. These ads will appear to smartphone users on WiFi. Using this format, you can drive qualified users who are likely to stay engaged with your game after install.
</li>
</ul><div><a href="https://3.bp.blogspot.com/-3byH07UTTBc/VubpCGVGUsI/AAAAAAAABY4/F3RmwbuC6O4y482QV4kp2BUCWCKhVW5lg/s1600/image02.gif"><img border="0" src="https://3.bp.blogspot.com/-3byH07UTTBc/VubpCGVGUsI/AAAAAAAABY4/F3RmwbuC6O4y482QV4kp2BUCWCKhVW5lg/s640/image02.gif"></a></div>
<i></i><p></p>SGN&#8217;s Search Trial Run Ad for Panda Pop

<ul><li><b>Portrait Video Ads:</b> More than 80% of video ad views in mobile apps on the Google Display Network are from devices held vertically, but often these videos are created for landscape viewing. Over the next few weeks, we&#8217;re launching Portrait Video Ads for a full-screen, immersive portrait video experience. Developers have seen significant improvement in both click-through and conversion rates, resulting in lower cost per install and more installs.</li>
  <li><b>Active User Targeting for Games:</b> In the coming weeks, we&#8217;re rolling out a new type of targeting for Android apps that allows you to show ads to users who have spent more than 30 minutes playing games, or who have played a Google Play Games integrated game, in the last 30 days.</li>
</ul><h3>Earn more revenue in your game with AdMob</h3>

<p>AdMob helps game developers around the world maximize revenue through in-app advertising. At GDC, we also announced a new way to help you earn more through AdMob Mediation. Rewarded advertising is a popular form of game monetization -- users are given the choice to engage with ads in exchange for an in-app reward. <a href="https://support.google.com/admob/answer/3063564?hl=en">AdMob Mediation</a> will enable you to easily monetize your apps with rewarded video ads from a number of ad providers. Supported networks and platforms include AdColony, AppLovin, Chartboost, Fyber, Upsight and Vungle, with more being added all the time.</p>

<p>You can learn more about this, and all our ads announcements on the <a href="http://adwords.blogspot.com/2016/03/new-ad-formats-and-targeting-to-find.html">Inside AdWords</a> blog.</p>

<p>This is just the start of what we&#8217;ve got planned for 2016. We hope you can make use of these tools to improve your game, engage your audience, and grow your business and revenue.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Morgan Dollard, Product Manager of Google Play Games</p></i>

<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-9wibpF5Phs0/VubnbJfiprI/AAAAAAAABYg/TVSE7O7-yGYr_gCoBlObBc6DRve90LoIw/s1600/image06.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://4.bp.blogspot.com/-9wibpF5Phs0/VubnbJfiprI/AAAAAAAABYg/TVSE7O7-yGYr_gCoBlObBc6DRve90LoIw/s100/image06.png" /></a></div><p>With mobile gamers across 190 countries, Google Play Games is made up of a vibrant and diverse gaming community. And these players are more engaged than ever. Over the past year, the number of games reaching over 1 million installs grew by 50 percent.</p>

<p>Today, at our annual <a href="https://events.withgoogle.com/gdc-developer-day-2016/">Developer Day</a> at the Game Developers Conference,  we announced new platform and ads tools for developers, of all sizes reach, to reach this global audience and accelerate the growth of their games business. Check out below the full range of features that will help game developers build their apps, grow their user base, and earn more revenue.</p>

<h3>Making Google Play Games better for players</h3>

<p>In February, we <a href="http://officialandroid.blogspot.co.uk/2016/02/embrace-your-inner-gaming-hero-with.html">introduced Gamer IDs</a> so that anyone could create a gaming persona. We also simplified the sign-in process for Google Play Games so players could pick up playing their game more quickly. We’re also working on product enhancements to make Play Games a little more social and fun, which will mean more engaged players who’re playing your game for longer. One example is the launch of <b>Gamer friends</b> (coming soon!), where your players can add and interact with  their friends from within the Google Play Games app (without needing a Google+ account).</p>

<p>We’re also launching the <a href="https://play.google.com/store/apps/collection/promotion_3001ed4_indie_corner">Indie Corner</a>, a new collection on Google Play, that will highlight amazing games built by indie developers. You can nominate your awesome indie game for inclusion at <a href="http://g.co/indiecornersubmission">g.co/indiecornersubmission</a>. We’ll pick the best games to showcase based on the quality of the experience and exemplary use of Google Play game services.</p>

<h3>Grow your game with powerful new features from Google Play game services </h3>

<p>In January, we <a href="http://android-developers.blogspot.co.uk/2016/01/new-features-to-better-understand.html">added features to Player Analytics</a>, the free reporting tool of Google Play game services, which helps you understand how players are progressing, spending and churning. Today, we previewed some upcoming new tools that would be available in the coming months, including:</p>

<ul>
  <li><b>Game parameters management:</b> With game parameters management, you will be able to update gameplay and game economy parameters without the need for APK changes or resubmitting your app. You’ll be able to optimize virtual goods and currencies from the Developer Console or the Google Play Developer API.</li>
</ul>

<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-VlcDeqR3X_s/Vuhnkz2pYdI/AAAAAAAACqI/FLXVWGokPLQ2FH4WSoVYH1zuL-BSj-N2g/s1600/02c-weapons-table-override-editcomplete%2B-%2Bcropped.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-VlcDeqR3X_s/Vuhnkz2pYdI/AAAAAAAACqI/FLXVWGokPLQ2FH4WSoVYH1zuL-BSj-N2g/s640/02c-weapons-table-override-editcomplete%2B-%2Bcropped.png" /></a></div>
<i><P><center>Game parameters management in the Google Play Developer Console</center></P></i>

<ul>
  <li><b>Video Recording API:</b> You will be able to easily add video recording to your app and let users share their videos with their friends and on YouTube in a few simple steps. We are also adding live streaming functionality to allow your fans to broadcast their gameplay experiences in real time on YouTube. 
</li>
</ul>

<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-GYSq2o75how/Vubn2X1hUKI/AAAAAAAABYo/Zzw7Wh24-to9Z91tLKC2biku7KDQ5EVFg/s1600/image04.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-GYSq2o75how/Vubn2X1hUKI/AAAAAAAABYo/Zzw7Wh24-to9Z91tLKC2biku7KDQ5EVFg/s640/image04.gif" /></a></div>

<ul>
  <li><b>Predictive Analytics:</b> The Player Stats API now has Predictive Analytics to help you identify which groups of players are likely to spend or churn, and we are adding new predictions for how much a player is likely to spend within 30 days and the probability that a player is a high spender. This allows you to tailor experiences for these players to try to increase their spend or engagement.<a href="https://developers.google.com/games/services/android/stats?utm_campaign=play%20games_discussion_betterbusiness_031416&utm_source=anddev&utm_medium=blog"> Learn more about the <div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-kyXKTRWDMeo/Vubn9kbs-II/AAAAAAAABYs/ZmBw-cyXIrc9_93HOMEdggO61CSLQIYAg/s1600/image03.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://2.bp.blogspot.com/-kyXKTRWDMeo/Vubn9kbs-II/AAAAAAAABYs/ZmBw-cyXIrc9_93HOMEdggO61CSLQIYAg/s100/image03.png" /></a></div>Player Stats API.</a>
</li>
</ul>

<i><p><center>“Not showing ads to users that were probable to spend increased number of IAP transactions by 15%.” 
– Avetis Zakharyan, CEO Underwater Apps</p></center></i>

<h3>New ad formats and targeting to find, keep and monetize high-quality gamers</h3>

<p>Promoting your game and growing your audience is important, but it’s just as important to reach the right audience for your game, the players who want to open the game again and again. That’s why today we’ve unveiled <a href="http://adwords.blogspot.com/2016/03/new-ad-formats-and-targeting-to-find.html">new features</a> that make it simpler to reach the right audience at scale.</p>


<ul>
  <li><b>Search Trial Run Ads:</b> In the next few weeks, we’ll launch a new way for users to try your game out when they do a search for games on Google through a new ad format, Search Trial Run Ads. After tapping “Try now”, an individual can play your game for up to 10 minutes, and then download the game in full if they choose. These ads will appear to smartphone users on WiFi. Using this format, you can drive qualified users who are likely to stay engaged with your game after install.
</li>
</ul>

<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-3byH07UTTBc/VubpCGVGUsI/AAAAAAAABY4/F3RmwbuC6O4y482QV4kp2BUCWCKhVW5lg/s1600/image02.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-3byH07UTTBc/VubpCGVGUsI/AAAAAAAABY4/F3RmwbuC6O4y482QV4kp2BUCWCKhVW5lg/s640/image02.gif" /></a></div>
<i><p><center>SGN’s Search Trial Run Ad for Panda Pop</p></center></i>

<ul>
  <li><b>Portrait Video Ads:</b> More than 80% of video ad views in mobile apps on the Google Display Network are from devices held vertically, but often these videos are created for landscape viewing. Over the next few weeks, we’re launching Portrait Video Ads for a full-screen, immersive portrait video experience. Developers have seen significant improvement in both click-through and conversion rates, resulting in lower cost per install and more installs.</li>
  <li><b>Active User Targeting for Games:</b> In the coming weeks, we’re rolling out a new type of targeting for Android apps that allows you to show ads to users who have spent more than 30 minutes playing games, or who have played a Google Play Games integrated game, in the last 30 days.</li>
</ul>

<h3>Earn more revenue in your game with AdMob</h3>

<p>AdMob helps game developers around the world maximize revenue through in-app advertising. At GDC, we also announced a new way to help you earn more through AdMob Mediation. Rewarded advertising is a popular form of game monetization -- users are given the choice to engage with ads in exchange for an in-app reward. <a href="https://support.google.com/admob/answer/3063564?hl=en">AdMob Mediation</a> will enable you to easily monetize your apps with rewarded video ads from a number of ad providers. Supported networks and platforms include AdColony, AppLovin, Chartboost, Fyber, Upsight and Vungle, with more being added all the time.</p>

<p>You can learn more about this, and all our ads announcements on the <a href="http://adwords.blogspot.com/2016/03/new-ad-formats-and-targeting-to-find.html">Inside AdWords</a> blog.</p>

<p>This is just the start of what we’ve got planned for 2016. We hope you can make use of these tools to improve your game, engage your audience, and grow your business and revenue.</p>




















]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/grow-your-games-business-on-google-play-game-parameters-management-video-recording-streaming-ads-and-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Game developers, get ready for our Developer Day at GDC 2016</title>
		<link>https://googledata.org/google-android/game-developers-get-ready-for-our-developer-day-at-gdc-2016/</link>
		<comments>https://googledata.org/google-android/game-developers-get-ready-for-our-developer-day-at-gdc-2016/#comments</comments>
		<pubDate>Thu, 10 Mar 2016 17:02:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=4ed595b050a29b80b1bdd44ef0b10896</guid>
		<description><![CDATA[<i></i><p>Posted by Morgan Dollard, Product Manager of Google Play Games</p>

<p>
Next week, we&#8217;ll be in San Francisco to host our annual <a href="https://events.withgoogle.com/gdc-developer-day-2016/">Developer Day</a> at the Game Developers Conference (GDC). Join us to get a first look at our latest efforts to help developers of all sizes build successful mobile games businesses with powerful tools to develop high quality apps, grow a valuable user base, and earn more revenue.</p>

<div><a href="https://events.withgoogle.com/gdc-developer-day-2016/live-stream/"><img border="0" src="https://3.bp.blogspot.com/-Waw_YlJ61RM/VuGojN2QW5I/AAAAAAAACp4/d8Cks-g6xTM/s640/image00.png"></a></div>

<p>Our Developer Day will take place in room 2020 of the West Hall of Moscone Center on Monday, March 14. Based on your feedback from last year, we're going to keep presentations short and informative with lightning talks around virtual reality, the cloud, ads, and so much more, while dedicating more time to interactive discussions with Google engineers and your peers in the industry.</p>

<p>Here&#8217;s a glimpse of the <a href="https://events.withgoogle.com/gdc-developer-day-2016/agenda/">agenda</a> on <b>Monday, March 14:</b></p>

<p><b>Opening keynote &#124;&#124; 10AM:</b> Be the first to see what&#8217;s new and hear about the investments Google is making to help mobile developers grow their game business.</p>

<p><b>Best practices for success on Google Play &#124;&#124; 10:30AM:</b> In this talk, you&#8217;ll learn how successful mobile game developers acquire users and bring them back to keep them playing longer.</p>

<p>
<b>Lightning talks &#124;&#124; 11:15AM:</b> A series of 5-minute talks on innovative technologies to tantalize players, like Project Tango, software to speed and simplify game development, and new ways to predict and prevent user churn.</p>

<p><b>Interactive roundtables &#124;&#124; 2:00PM:</b> After lunch, we&#8217;ll break up into interactive roundtables to interact with Google experts and peers on how to build better and more successful games. Ask questions, tell Google product teams what you need, and learn from fellow game developers.</p>

<p>Visit the <a href="https://events.withgoogle.com/gdc-developer-day-2016/agenda/">agenda page</a> to get a full list of our talks and speaker details. Please note that these events are part of the official Game Developer's Conference, so you will need a pass to attend.</p>

<p>For everyone who can&#8217;t make it in person, we&#8217;ll be live streaming our event on YouTube. <a href="https://events.withgoogle.com/gdc-developer-day-2016/live-stream/">Tune in from 10am on Monday, March 18</a>.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Morgan Dollard, Product Manager of Google Play Games</p></i>

<p>
Next week, we’ll be in San Francisco to host our annual <a href="https://events.withgoogle.com/gdc-developer-day-2016/">Developer Day</a> at the Game Developers Conference (GDC). Join us to get a first look at our latest efforts to help developers of all sizes build successful mobile games businesses with powerful tools to develop high quality apps, grow a valuable user base, and earn more revenue.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://events.withgoogle.com/gdc-developer-day-2016/live-stream/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-Waw_YlJ61RM/VuGojN2QW5I/AAAAAAAACp4/d8Cks-g6xTM/s640/image00.png" /></a></div>

<p>Our Developer Day will take place in room 2020 of the West Hall of Moscone Center on Monday, March 14. Based on your feedback from last year, we're going to keep presentations short and informative with lightning talks around virtual reality, the cloud, ads, and so much more, while dedicating more time to interactive discussions with Google engineers and your peers in the industry.</p>

<p>Here’s a glimpse of the <a href="https://events.withgoogle.com/gdc-developer-day-2016/agenda/">agenda</a> on <b>Monday, March 14:</b></p>

<p><b>Opening keynote || 10AM:</b> Be the first to see what’s new and hear about the investments Google is making to help mobile developers grow their game business.</p>

<p><b>Best practices for success on Google Play || 10:30AM:</b> In this talk, you’ll learn how successful mobile game developers acquire users and bring them back to keep them playing longer.</p>

<p>
<b>Lightning talks || 11:15AM:</b> A series of 5-minute talks on innovative technologies to tantalize players, like Project Tango, software to speed and simplify game development, and new ways to predict and prevent user churn.</p>

<p><b>Interactive roundtables || 2:00PM:</b> After lunch, we’ll break up into interactive roundtables to interact with Google experts and peers on how to build better and more successful games. Ask questions, tell Google product teams what you need, and learn from fellow game developers.</p>

<p>Visit the <a href="https://events.withgoogle.com/gdc-developer-day-2016/agenda/">agenda page</a> to get a full list of our talks and speaker details. Please note that these events are part of the official Game Developer's Conference, so you will need a pass to attend.</p>

<p>For everyone who can’t make it in person, we’ll be live streaming our event on YouTube. <a href="https://events.withgoogle.com/gdc-developer-day-2016/live-stream/">Tune in from 10am on Monday, March 18</a>.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/game-developers-get-ready-for-our-developer-day-at-gdc-2016/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>First Preview of Android N: Developer APIs &amp; Tools</title>
		<link>https://googledata.org/google-android/first-preview-of-android-n-developer-apis-tools/</link>
		<comments>https://googledata.org/google-android/first-preview-of-android-n-developer-apis-tools/#comments</comments>
		<pubDate>Wed, 09 Mar 2016 18:00:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=9600079254a2530f110edc2dc73fb297</guid>
		<description><![CDATA[<i></i><p>Posted by Dave Burke, VP of Engineering</p>

<p>Today we&#8217;re happy to announce a <a href="http://developer.android.com/preview/index.html?utm_campaign=android_launch_n_030916&#38;utm_source=anddev&#38;utm_medium=blog">Developer Preview</a> of the N release of Android! We&#8217;re doing something a little different this year by releasing the preview early&#8230; really early. By releasing a &#8220;work in progress&#8221; build earlier in development, we have more time to incorporate developer feedback. Also, the earlier preview allows us to hand off the final N release to device makers this summer, so they can get their hands on the latest version of Android earlier than ever. We&#8217;re looking forward to getting your feedback as you get your apps ready for N.</p>

<div><a href="https://2.bp.blogspot.com/-NHQKug4w2CY/VuBFHd6upgI/AAAAAAAACpg/RpB9uTGWllQ/s1600/image00.png"><img border="0" src="https://2.bp.blogspot.com/-NHQKug4w2CY/VuBFHd6upgI/AAAAAAAACpg/RpB9uTGWllQ/s640/image00.png"></a></div>

<p>Here are a few APIs and features we want to highlight which are available as a part of the Android N Developer Preview today, with more to come as we continue developing the release:</p>

<p><b>Multi-window</b> - A new manifest attribute called android:resizableActivity is available for apps targeting N and beyond. If this attribute is set to true, your <a href="http://developer.android.com/preview/features/multi-window.html?utm_campaign=android_launch_n_030916&#38;utm_source=anddev&#38;utm_medium=blog">activity can be launched in split-screen modes</a> on phones and tablets. You can also specify your activity's minimum allowable dimensions, preventing users from making the activity window smaller than that size. Lifecycle changes for multi-window are similar to switching from landscape to portrait mode: your activity can handle the configuration change itself, or it can allow the system to stop the activity and recreate it with the new dimensions. In addition, activities can also go into picture-in-picture mode on devices like TVs, and is a great feature for apps that play video; be sure to set android:supportsPictureInPicture to true to take advantage of this.</p>

<div><a href="https://3.bp.blogspot.com/-LoHVFr55etE/VuBFOxthQYI/AAAAAAAACpk/a6Xwjshz2vE/s1600/image01.jpg"><img border="0" src="https://3.bp.blogspot.com/-LoHVFr55etE/VuBFOxthQYI/AAAAAAAACpk/a6Xwjshz2vE/s640/image01.jpg"></a></div>

<p><b>Direct reply notifications:</b> The RemoteInput notification API, which was originally added for Android Wear, now works in N for phones and tablets. Using the RemoteInput API enables users to reply to incoming message notifications quickly and conveniently, without leaving the notification shade. Learn more <a href="http://developer.android.com/preview/features/notification-updates.html?utm_campaign=android_launch_n_030916&#38;utm_source=anddev&#38;utm_medium=blog#direct">here</a>.</p>

<p><b>Bundled notifications</b> - With N, you can use the Notification.Builder.setGroup() method to group notifications from the same app together - for example individual messages from a messaging app. Grouped notifications can be expanded into individual notifications by using a two-finger gesture or tapping the new expansion button. Learn more <a href="http://developer.android.com/preview/features/notification-updates.html?utm_campaign=android_launch_n_030916&#38;utm_source=anddev&#38;utm_medium=blog#bundle">here</a>.</p>

<p><b>Efficiency</b> - We launched Doze in Marshmallow to save battery when your device is stationary. In N, Doze additionally saves battery whenever the screen turns off. If you&#8217;ve already adapted your app for Doze, e.g. by using the GCM high priority message for urgent notifications, then you&#8217;re set; if not, <a href="http://developer.android.com/training/monitoring-device-state/doze-standby.html?utm_campaign=android_launch_n_030916&#38;utm_source=anddev&#38;utm_medium=blog">here&#8217;s how to get started</a>.  Also, we&#8217;re continuing to invest in Project Svelte, an effort to reduce the memory needs of Android so that it can run on a much broader range of devices, in N by <a href="http://developer.android.com/preview/behavior-changes.html?utm_campaign=android_launch_n_030916&#38;utm_source=anddev&#38;utm_medium=blog#bg-opt">making background work more efficient</a>. If you use JobScheduler for background work, you&#8217;re already on the right track. If not, N is a good time to make that switch. And to help you out, we&#8217;re making JobScheduler even more capable, so now you can use <a href="http://developer.android.com/reference/android/app/job/JobScheduler.html?utm_campaign=android_launch_n_030916&#38;utm_source=anddev&#38;utm_medium=blog"><code>JobScheduler</code></a> to react to things like changes to content providers.</p>

<p><b>Improved Java 8 language support</b> - We&#8217;re excited to bring Java 8 language features to Android. With Android's <a href="https://source.android.com/source/jack.html">Jack compiler</a>, you can now use many popular Java 8 language features, including lambdas and more, on Android versions as far back as Gingerbread. The new features help reduce boilerplate code. For example, lambdas can replace anonymous inner classes when providing event listeners. Some Java 8 language features --like default and static methods, streams, and functional interfaces -- are also now available on N and above. With Jack, we&#8217;re looking forward to tracking the Java language more closely while maintaining backward compatibility.</p>

<h3>Get started</h3>
<p>The N Developer Preview includes an updated SDK with system images for testing on the official Android emulator and on Nexus 6, Nexus 5X, Nexus 6P, Nexus Player, Nexus 9, and Pixel C devices (and to help test out these features on a tablet, developers can get a <a href="https://pixel.google.com/developer-discount/">$150 discount on Pixel C</a>), as well as on General Mobile 4G (Android One) devices.</p>

<p>
This initial preview release is for developers only and not intended for daily use or consumer use. We plan to update the N Developer Preview system images often during the Developer Preview program. As we get closer to a final product, we&#8217;ll be inviting consumers to try it out as well.</p>

<p>We are also making it easier for you to try out N on your development devices with the new Android Beta Program. Starting today, you can update your Android devices to the developer preview of N and receive ongoing updates via OTA by visiting <a href="http://g.co/androidbeta">g.co/androidbeta</a>.</p>

<p>Click <a href="https://developer.android.com/preview/setup-sdk.html?utm_campaign=android_launch_n_030916&#38;utm_source=anddev&#38;utm_medium=blog">here</a> for more details on getting started with the N Developer Preview and <a href="http://developer.android.com/preview/bug?utm_campaign=android_launch_n_030916&#38;utm_source=anddev&#38;utm_medium=blog">let us know what you think</a> -- the sooner we hear from you, the more of your feedback we can integrate.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Dave Burke, VP of Engineering</p></i>

<p>Today we’re happy to announce a <a href="http://developer.android.com/preview/index.html?utm_campaign=android_launch_n_030916&utm_source=anddev&utm_medium=blog">Developer Preview</a> of the N release of Android! We’re doing something a little different this year by releasing the preview early… really early. By releasing a “work in progress” build earlier in development, we have more time to incorporate developer feedback. Also, the earlier preview allows us to hand off the final N release to device makers this summer, so they can get their hands on the latest version of Android earlier than ever. We’re looking forward to getting your feedback as you get your apps ready for N.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-NHQKug4w2CY/VuBFHd6upgI/AAAAAAAACpg/RpB9uTGWllQ/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-NHQKug4w2CY/VuBFHd6upgI/AAAAAAAACpg/RpB9uTGWllQ/s640/image00.png" /></a></div>

<p>Here are a few APIs and features we want to highlight which are available as a part of the Android N Developer Preview today, with more to come as we continue developing the release:</p>

<p><b>Multi-window</b> - A new manifest attribute called <FONT FACE="Monaco">android:resizableActivity</font> is available for apps targeting N and beyond. If this attribute is set to true, your <a href="http://developer.android.com/preview/features/multi-window.html?utm_campaign=android_launch_n_030916&utm_source=anddev&utm_medium=blog">activity can be launched in split-screen modes</a> on phones and tablets. You can also specify your activity's minimum allowable dimensions, preventing users from making the activity window smaller than that size. Lifecycle changes for multi-window are similar to switching from landscape to portrait mode: your activity can handle the configuration change itself, or it can allow the system to stop the activity and recreate it with the new dimensions. In addition, activities can also go into picture-in-picture mode on devices like TVs, and is a great feature for apps that play video; be sure to set <FONT FACE="Monaco">android:supportsPictureInPicture</font> to true to take advantage of this.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-LoHVFr55etE/VuBFOxthQYI/AAAAAAAACpk/a6Xwjshz2vE/s1600/image01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-LoHVFr55etE/VuBFOxthQYI/AAAAAAAACpk/a6Xwjshz2vE/s640/image01.jpg" /></a></div>

<p><b>Direct reply notifications:</b> The <FONT FACE="Monaco">RemoteInput</font> notification API, which was originally added for Android Wear, now works in N for phones and tablets. Using the <FONT FACE="Monaco">RemoteInput</font> API enables users to reply to incoming message notifications quickly and conveniently, without leaving the notification shade. Learn more <a href="http://developer.android.com/preview/features/notification-updates.html?utm_campaign=android_launch_n_030916&utm_source=anddev&utm_medium=blog#direct">here</a>.</p>

<p><b>Bundled notifications</b> - With N, you can use the <FONT FACE="Monaco">Notification.Builder.setGroup()</font> method to group notifications from the same app together - for example individual messages from a messaging app. Grouped notifications can be expanded into individual notifications by using a two-finger gesture or tapping the new expansion button. Learn more <a href="http://developer.android.com/preview/features/notification-updates.html?utm_campaign=android_launch_n_030916&utm_source=anddev&utm_medium=blog#bundle">here</a>.</p>

<p><b>Efficiency</b> - We launched Doze in Marshmallow to save battery when your device is stationary. In N, Doze additionally saves battery whenever the screen turns off. If you’ve already adapted your app for Doze, e.g. by using the GCM high priority message for urgent notifications, then you’re set; if not, <a href="http://developer.android.com/training/monitoring-device-state/doze-standby.html?utm_campaign=android_launch_n_030916&utm_source=anddev&utm_medium=blog">here’s how to get started</a>.  Also, we’re continuing to invest in Project Svelte, an effort to reduce the memory needs of Android so that it can run on a much broader range of devices, in N by <a href=http://android-developers.blogspot.com/2016/03/%22
http://developer.android.com/preview/behavior-changes.html?utm_campaign=android_launch_n_030916&utm_source=anddev&utm_medium=blog#bg-opt">making background work more efficient</a>. If you use JobScheduler for background work, you’re already on the right track. If not, N is a good time to make that switch. And to help you out, we’re making JobScheduler even more capable, so now you can use <a href="http://developer.android.com/reference/android/app/job/JobScheduler.html?utm_campaign=android_launch_n_030916&utm_source=anddev&utm_medium=blog"><code>JobScheduler</code></a> to react to things like changes to content providers.</p>

<p><b>Improved Java 8 language support</b> - We’re excited to bring Java 8 language features to Android. With Android's <a href="https://source.android.com/source/jack.html">Jack compiler</a>, you can now use many popular Java 8 language features, including lambdas and more, on Android versions as far back as Gingerbread. The new features help reduce boilerplate code. For example, lambdas can replace anonymous inner classes when providing event listeners. Some Java 8 language features --like default and static methods, streams, and functional interfaces -- are also now available on N and above. With Jack, we’re looking forward to tracking the Java language more closely while maintaining backward compatibility.</p>

<h3>Get started</h3>
<p>The N Developer Preview includes an updated SDK with system images for testing on the official Android emulator and on Nexus 6, Nexus 5X, Nexus 6P, Nexus Player, Nexus 9, and Pixel C devices (and to help test out these features on a tablet, developers can get a <a href="https://pixel.google.com/developer-discount/">$150 discount on Pixel C</a>), as well as on General Mobile 4G (Android One) devices.</p>

<p>
This initial preview release is for developers only and not intended for daily use or consumer use. We plan to update the N Developer Preview system images often during the Developer Preview program. As we get closer to a final product, we’ll be inviting consumers to try it out as well.</p>

<p>We are also making it easier for you to try out N on your development devices with the new Android Beta Program. Starting today, you can update your Android devices to the developer preview of N and receive ongoing updates via OTA by visiting <a href="http://g.co/androidbeta">g.co/androidbeta</a>.</p>

<p>Click <a href="https://developer.android.com/preview/setup-sdk.html?utm_campaign=android_launch_n_030916&utm_source=anddev&utm_medium=blog">here</a> for more details on getting started with the N Developer Preview and <a href="http://developer.android.com/preview/bug?utm_campaign=android_launch_n_030916&utm_source=anddev&utm_medium=blog">let us know what you think</a> -- the sooner we hear from you, the more of your feedback we can integrate.</p>












]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/first-preview-of-android-n-developer-apis-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Find success on Google Play: What app developers can learn from games</title>
		<link>https://googledata.org/google-android/find-success-on-google-play-what-app-developers-can-learn-from-games/</link>
		<comments>https://googledata.org/google-android/find-success-on-google-play-what-app-developers-can-learn-from-games/#comments</comments>
		<pubDate>Wed, 02 Mar 2016 18:31:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=f7304b2d724dc81c179cb7bc18b3362a</guid>
		<description><![CDATA[<p><i>Posted by Matteo Vallone, Business Development Manager at Google Play</i></p>

<i></i><p>(As a way to reach more app developers and help them grow successful businesses on Google Play, this post was first <a href="http://thenextweb.com/apps/2016/02/17/what-app-developers-can-learn-from-games/">published on The Next Web </a>&#8211; Ed.)</p>

<p>There is much common ground between freemium apps and games businesses when it comes to achieving success. Users are, however, more used to paying for games than apps, stemming from the history of traditional gaming consoles. Moreover, mobile games are also able to easily offer &#8216;virtual goods&#8217; across a range of price points to suit every pocket. This means that game developers have had plenty of opportunity to learn about how to improve onboarding, conversion, and ultimately the user Lifetime Value (LTV). So what can app developers learn from game developers? Here are some best practice tips and insights from successful game developers that can be applied to many apps, today.</p>

<p>Drive app success the game developer way:</p>

<b></b><p>1. Optimize retention before investing in acquisition</p>
<p>Retention is king, and retention drives conversion. For games developers, retention is the key measure of game quality and whether it appeals to players. 
</p>

<p>Most game developers will &#8220;soft launch&#8221; to beta testing communities or test markets. During this phase, the game is tweaked to optimize retention by looking into specific areas, such as tutorial completion, level difficulty and conversion. Developers can then track retention using the <a href="https://support.google.com/analytics/answer/6074676">Cohorts reports in Google Analytics</a>. Once retention is satisfactory, the developer can go to full launch and start investing in user acquisition.</p>

<b></b><p>2. Retain users with step-by-step engagement</p>

<p>The first seven days after install are the most critical for retention: users install several apps to try them, and decide in the first few days which ones they want to keep using. If you can retain for that time span, your app is more likely to become part of the user&#8217;s daily routine.</p>

<p>There are some simple ways to progressively build user engagement. It&#8217;s important to present a strong story that explains why that app is relevant to the user, while introducing them to key features. Then place features that offer the user value early, so they can be found without much effort.</p>

<p>This is a not a one-size-fit-all. To find the right solution, a developer needs to first make assumptions on what user flows can improve retention and then run A/B tests to validate or correct them. For example, a developer could think that introducing sign-in later in the user flow might improve retention. Also, the developer needs to keep in mind what the key long term engagement metrics are for the  individual app (such as photos uploaded or the number of articles read) and measure the impact of the different onboarding flows on those metrics as well.</p>

<p>In general, these principles are good places to start optimizing your onboarding:</p>
<ul><li>Look for ways to let the users experience the app straight away, rather than taking them through a long, complex setup.</li>
  <li>Present &#8220;activation moments&#8221; &#8212; such as registering an account, uploading a video, or finding friend &#8212; gradually</li>
  <li>Start by requiring minimal investment by the user, then ask them for more details as they are needed to use the apps features.</li>
 <li>Treat permissions as a service for the user. For example, if you want users to register, show them in advance that, by making their experience more personal, they&#8217;ll get more value from the app.</li>
</ul><div><a href="https://2.bp.blogspot.com/-Y027Mra3YEA/VtcvNGf8W7I/AAAAAAAACok/XXa6qlxPVsE/s1600/image00.png"><img border="0" src="https://2.bp.blogspot.com/-Y027Mra3YEA/VtcvNGf8W7I/AAAAAAAACok/XXa6qlxPVsE/s640/image00.png"></a></div>
<p></p>In this example, OkCupid tried different onboarding flows and found the most engaging version increased seven-day retention by over 20 percent.

<p>Finally, ensure the user can understand the value of your app before you start asking them to pay. Game developers are particularly good at letting their users try most or all product features for free in in a set number of days or sessions.</p>

<p>A great tool to help analyze how users are engaging (or not) with the app is through the <a href="https://support.google.com/analytics/answer/1709395">Flow Report in Google Analytics</a>. Using this report, a  developer can see how users navigate through the app and where they leave to identify potential roadblocks.</p>

<b></b><p>3. Target the right offers at the right users</p>
<p>Understanding different groups of users in-app purchase behavior is the key to devising strategies to encourage them to spend.</p>

<p>Start by identifying groups of users by how they spend and much they are likely to spend. It may be by age group, the channel that brought the install, or in-app behaviour. Use the <a href="https://support.google.com/analytics/answer/3124493">Segment builder in Google Analytics</a> to identify and define these groups of users. Then, tailor in-app purchase offers to match the segments spending behavior. For example, for segments where multiple users tend to spend more in one go, but spend infrequently, offer them in-app features bundled together.</p>
<b>
</b><p>4. Offer in-app purchases when users are most likely to spend</p>
<p>Users are also more likely to spend, if the purchasing experience is frictionless, and even more so when they can see how the expenditure will add value. So:</p>
<ul><li>Present purchase opportunities to users when they&#8217;re most likely to need or want it &#8212; and explain to the user why it&#8217;s relevant.</li>
  <li>Make purchasing accessible easily from within the app with a minimum number of taps. For example, offer an upgrade button on the footer of relevant screens. </li>
</ul><div><a href="https://3.bp.blogspot.com/-BmvG-8CBEFY/VtcvUqq7KwI/AAAAAAAACoo/ptmW4Kiz55Q/s1600/image01.png"><img border="0" src="https://3.bp.blogspot.com/-BmvG-8CBEFY/VtcvUqq7KwI/AAAAAAAACoo/ptmW4Kiz55Q/s640/image01.png"></a></div>
<i></i><p></p>TomTom added a countdown to indicate when the free service runs out (counted in kilometers travelled). The counter includes a button to upgrade offering a one tap in-app purchase.

<p>Like all good game developers, they focus on building good experiences that retain and engage users through constant testing and analytics. First impressions are important, so users need to be able to quickly understand the importance of the app and easily navigate through the onboarding experience. And to start generating revenue, it is important to be thoughtful about how to make in-app purchases actionable.</p>

<p><a href="https://www.youtube.com/watch?v=irMPUoyHUqs&#38;index=7&#38;list=PLWz5rJ2EKKc_QRBk7Zkl5uGjR1He7vG-w">Watch Matteo&#8217;s Playtime 2015 session &#8216;The rules of games, for apps&#8217;</a> to hear more in-depth insights which app developers can learn from games with best practices and developer examples:</p>

<!--[Interactive video]  -->

<p>You can also <a href="https://www.youtube.com/playlist?list=PLWz5rJ2EKKc_QRBk7Zkl5uGjR1He7vG-w">watch the other sessions from Google Playtime 2015</a> to learn more about tools and best practices which can help you find success with business on Google Play.</p>]]></description>
				<content:encoded><![CDATA[<p><i>Posted by Matteo Vallone, Business Development Manager at Google Play</p></i>

<i><p>(As a way to reach more app developers and help them grow successful businesses on Google Play, this post was first <a href="http://thenextweb.com/apps/2016/02/17/what-app-developers-can-learn-from-games/">published on The Next Web </a>– Ed.)</p></i>

<p>There is much common ground between freemium apps and games businesses when it comes to achieving success. Users are, however, more used to paying for games than apps, stemming from the history of traditional gaming consoles. Moreover, mobile games are also able to easily offer ‘virtual goods’ across a range of price points to suit every pocket. This means that game developers have had plenty of opportunity to learn about how to improve onboarding, conversion, and ultimately the user Lifetime Value (LTV). So what can app developers learn from game developers? Here are some best practice tips and insights from successful game developers that can be applied to many apps, today.</p>

<p>Drive app success the game developer way:</p>

<b><p>1. Optimize retention before investing in acquisition</p></b>
<p>Retention is king, and retention drives conversion. For games developers, retention is the key measure of game quality and whether it appeals to players. 
</p>

<p>Most game developers will “soft launch” to beta testing communities or test markets. During this phase, the game is tweaked to optimize retention by looking into specific areas, such as tutorial completion, level difficulty and conversion. Developers can then track retention using the <a href="https://support.google.com/analytics/answer/6074676">Cohorts reports in Google Analytics</a>. Once retention is satisfactory, the developer can go to full launch and start investing in user acquisition.</p>

<b><p>2. Retain users with step-by-step engagement</p>
</b>
<p>The first seven days after install are the most critical for retention: users install several apps to try them, and decide in the first few days which ones they want to keep using. If you can retain for that time span, your app is more likely to become part of the user’s daily routine.</p>

<p>There are some simple ways to progressively build user engagement. It’s important to present a strong story that explains why that app is relevant to the user, while introducing them to key features. Then place features that offer the user value early, so they can be found without much effort.</p>

<p>This is a not a one-size-fit-all. To find the right solution, a developer needs to first make assumptions on what user flows can improve retention and then run A/B tests to validate or correct them. For example, a developer could think that introducing sign-in later in the user flow might improve retention. Also, the developer needs to keep in mind what the key long term engagement metrics are for the  individual app (such as photos uploaded or the number of articles read) and measure the impact of the different onboarding flows on those metrics as well.</p>

<p>In general, these principles are good places to start optimizing your onboarding:</p>
<ul>
  <li>Look for ways to let the users experience the app straight away, rather than taking them through a long, complex setup.</li>
  <li>Present “activation moments” — such as registering an account, uploading a video, or finding friend — gradually</li>
  <li>Start by requiring minimal investment by the user, then ask them for more details as they are needed to use the apps features.</li>
 <li>Treat permissions as a service for the user. For example, if you want users to register, show them in advance that, by making their experience more personal, they’ll get more value from the app.</li>
</ul>  

<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-Y027Mra3YEA/VtcvNGf8W7I/AAAAAAAACok/XXa6qlxPVsE/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-Y027Mra3YEA/VtcvNGf8W7I/AAAAAAAACok/XXa6qlxPVsE/s640/image00.png" /></a></div>
<p><center>In this example, OkCupid tried different onboarding flows and found the most engaging version increased seven-day retention by over 20 percent.</p></center>

<p>Finally, ensure the user can understand the value of your app before you start asking them to pay. Game developers are particularly good at letting their users try most or all product features for free in in a set number of days or sessions.</p>

<p>A great tool to help analyze how users are engaging (or not) with the app is through the <a href="https://support.google.com/analytics/answer/1709395">Flow Report in Google Analytics</a>. Using this report, a  developer can see how users navigate through the app and where they leave to identify potential roadblocks.</p>

<b><p>3. Target the right offers at the right users</p></b>
<p>Understanding different groups of users in-app purchase behavior is the key to devising strategies to encourage them to spend.</p>

<p>Start by identifying groups of users by how they spend and much they are likely to spend. It may be by age group, the channel that brought the install, or in-app behaviour. Use the <a href="https://support.google.com/analytics/answer/3124493">Segment builder in Google Analytics</a> to identify and define these groups of users. Then, tailor in-app purchase offers to match the segments spending behavior. For example, for segments where multiple users tend to spend more in one go, but spend infrequently, offer them in-app features bundled together.</p>
<b>
<p>4. Offer in-app purchases when users are most likely to spend</p></b>
<p>Users are also more likely to spend, if the purchasing experience is frictionless, and even more so when they can see how the expenditure will add value. So:</p>
<ul>
  <li>Present purchase opportunities to users when they’re most likely to need or want it — and explain to the user why it’s relevant.</li>
  <li>Make purchasing accessible easily from within the app with a minimum number of taps. For example, offer an upgrade button on the footer of relevant screens. </li>
</ul> 

<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-BmvG-8CBEFY/VtcvUqq7KwI/AAAAAAAACoo/ptmW4Kiz55Q/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-BmvG-8CBEFY/VtcvUqq7KwI/AAAAAAAACoo/ptmW4Kiz55Q/s640/image01.png" /></a></div>
<i><p><CENTER>TomTom added a countdown to indicate when the free service runs out (counted in kilometers travelled). The counter includes a button to upgrade offering a one tap in-app purchase.</p></center></i>

<p>Like all good game developers, they focus on building good experiences that retain and engage users through constant testing and analytics. First impressions are important, so users need to be able to quickly understand the importance of the app and easily navigate through the onboarding experience. And to start generating revenue, it is important to be thoughtful about how to make in-app purchases actionable.</p>

<p><a href="https://www.youtube.com/watch?v=irMPUoyHUqs&index=7&list=PLWz5rJ2EKKc_QRBk7Zkl5uGjR1He7vG-w">Watch Matteo’s Playtime 2015 session ‘The rules of games, for apps’</a> to hear more in-depth insights which app developers can learn from games with best practices and developer examples:</p>

<!--[Interactive video]  --><iframe width="557" height="370" " frameborder="0" src="https://www.youtube.com/embed/irMPUoyHUqs?list=PLWz5rJ2EKKc_QRBk7Zkl5uGjR1He7vG-w" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 80px;" allowfullscreen></iframe>

<p>You can also <a href="https://www.youtube.com/playlist?list=PLWz5rJ2EKKc_QRBk7Zkl5uGjR1He7vG-w">watch the other sessions from Google Playtime 2015</a> to learn more about tools and best practices which can help you find success with business on Google Play.</p>



























]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/find-success-on-google-play-what-app-developers-can-learn-from-games/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Explore the new Google Play Developer Policy Center</title>
		<link>https://googledata.org/google-android/explore-the-new-google-play-developer-policy-center/</link>
		<comments>https://googledata.org/google-android/explore-the-new-google-play-developer-policy-center/#comments</comments>
		<pubDate>Tue, 01 Mar 2016 16:50:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=79448ce62802436e3b0a030f57c7d5eb</guid>
		<description><![CDATA[<i></i><p>Posted by Atul Kumar, Google Play Policy</p>

<p>More than 1 billion Android users come to Google Play every month to discover their favorite apps and games, enabling developers to reach a vast global audience and build successful businesses on the platform. To maintain a positive experience for both users and developers, the <a href="https://play.google.com/about/developer-content-policy.html">Google Play Developer Program</a> Policies play a central role in helping make Google Play an open, safe and enjoyable ecosystem by educating the community and defining appropriate content and activities in the store.</p>

<p>
We constantly listen to our developers and users to maintain fair and defined policies and look for ways to improve how we communicate those policies to help developers avoid accidental pitfalls. As part of that effort, we&#8217;ve redesigned our <a href="https://play.google.com/about/developer-content-policy.html">Developer Program Policy Center</a> to communicate our policies with greater transparency and clarity. This redesign includes:</p>
<ul><li>Thematic organization of policies, so it is easier for developers to find relevant policies and understand the broad principles behind them</li>
  <li>Visual examples and detailed guidelines for the most common violations based on developer feedback
</li>
  <li>
Expanded information on our policy enforcement to help resolve violations
</li>
 <li>A visual refresh embracing Material Design to help developers more intuitively find the information they are looking for on mobile or desktop
 </li>
</ul><div><a href="https://2.bp.blogspot.com/-JhwA4i1subU/VtXIIimX6iI/AAAAAAAACoQ/9NzHQ1uz-EU/s1600/image00.gif"><img border="0" src="https://2.bp.blogspot.com/-JhwA4i1subU/VtXIIimX6iI/AAAAAAAACoQ/9NzHQ1uz-EU/s640/image00.gif"></a></div>

<p>From making it easier to self-correct minor violations in minutes using the <a href="http://android-developers.blogspot.com/2015/03/creating-better-user-experiences-on.html">app publishing status</a> feature to improving our policy communication, the new policy center is part of our ongoing effort to improve the developer experience. We invite you to explore the <a href="https://play.google.com/about/developer-content-policy.html">new policy center</a> and and <a href="https://docs.google.com/a/google.com/forms/d/1KS0XSsN3RmPdYvvlR18E_j37J-HAQt_zqA1OaSHljDc/viewform">share your feedback</a>.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Atul Kumar, Google Play Policy</p></i>

<p>More than 1 billion Android users come to Google Play every month to discover their favorite apps and games, enabling developers to reach a vast global audience and build successful businesses on the platform. To maintain a positive experience for both users and developers, the <a href="https://play.google.com/about/developer-content-policy.html">Google Play Developer Program</a> Policies play a central role in helping make Google Play an open, safe and enjoyable ecosystem by educating the community and defining appropriate content and activities in the store.</p>

<p>
We constantly listen to our developers and users to maintain fair and defined policies and look for ways to improve how we communicate those policies to help developers avoid accidental pitfalls. As part of that effort, we’ve redesigned our <a href="https://play.google.com/about/developer-content-policy.html">Developer Program Policy Center</a> to communicate our policies with greater transparency and clarity. This redesign includes:</p>
<ul>
  <li>Thematic organization of policies, so it is easier for developers to find relevant policies and understand the broad principles behind them</li>
  <li>Visual examples and detailed guidelines for the most common violations based on developer feedback
</li>
  <li>
Expanded information on our policy enforcement to help resolve violations
</li>
 <li>A visual refresh embracing Material Design to help developers more intuitively find the information they are looking for on mobile or desktop
 </li>
</ul>

<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-JhwA4i1subU/VtXIIimX6iI/AAAAAAAACoQ/9NzHQ1uz-EU/s1600/image00.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-JhwA4i1subU/VtXIIimX6iI/AAAAAAAACoQ/9NzHQ1uz-EU/s640/image00.gif" /></a></div>

<p>From making it easier to self-correct minor violations in minutes using the <a href="http://android-developers.blogspot.com/2015/03/creating-better-user-experiences-on.html">app publishing status</a> feature to improving our policy communication, the new policy center is part of our ongoing effort to improve the developer experience. We invite you to explore the <a href="https://play.google.com/about/developer-content-policy.html">new policy center</a> and and <a href="https://docs.google.com/a/google.com/forms/d/1KS0XSsN3RmPdYvvlR18E_j37J-HAQt_zqA1OaSHljDc/viewform">share your feedback</a>.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/explore-the-new-google-play-developer-policy-center/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>New tools for ratings &amp; reviews on Google Play to engage and understand your users</title>
		<link>https://googledata.org/google-android/new-tools-for-ratings-reviews-on-google-play-to-engage-and-understand-your-users/</link>
		<comments>https://googledata.org/google-android/new-tools-for-ratings-reviews-on-google-play-to-engage-and-understand-your-users/#comments</comments>
		<pubDate>Thu, 25 Feb 2016 18:49:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=91e41d6a467856b52eb37c95838beb19</guid>
		<description><![CDATA[<i></i><p>Posted by Fergus Hurley, Product Manager, Google Play</p>

<p>
Millions of users rate and review your apps every day on Google Play. From feature requests to technical issues, ratings and reviews offer a wealth of information about what people like and dislike. Since 2013, you&#8217;ve been able to reply to reviews on Google Play, giving you a direct communication channel with your most engaged users. You've told us you value having this channel because it helps you iterate on user feedback faster on Android than other platforms. In the last few months, we&#8217;ve made a number of improvements in the Google Play Developer Console to help you better analyze and manage ratings and reviews so that you can improve your app experience and boost its rating.</p>
<b>
</b><p>Improvements to ratings and reviews</p>

<p>We recently revamped ratings and reviews with features you can now find on dedicated pages in the Developer Console:</p>
<br /><a href="https://3.bp.blogspot.com/-GHYrcf5yKHM/Vs9MZY5iGBI/AAAAAAAACn4/TtazilRcy8g/s1600/image02.png"><img border="0" src="https://3.bp.blogspot.com/-GHYrcf5yKHM/Vs9MZY5iGBI/AAAAAAAACn4/TtazilRcy8g/s640/image02.png"></a>
<i></i><p></p>The new ratings page in the Google Play Developer Console

<ul><li><b>See ratings over time:</b> See how your rating changes daily, weekly, and monthly and easily spot any changes when you release a new version of your app.</li>
  <li><b>Ratings breakdown:</b> Break down your rating by country, language, device, app version, or Android version.</li>
</ul><br /><a href="https://3.bp.blogspot.com/-fTUSBn-Dwf4/Vs9MfQGTLEI/AAAAAAAACn8/HMZV4xCHlIg/s1600/image01.png"><img border="0" src="https://3.bp.blogspot.com/-fTUSBn-Dwf4/Vs9MfQGTLEI/AAAAAAAACn8/HMZV4xCHlIg/s640/image01.png"></a>
<i></i><p></p>The new reviews page in the Google Play Developer Console

<ul><li><b>Review highlights:</b> See common themes from what users say in reviews of your app &#8211; these are the same highlights that users see on the Play Store. Review highlights are shown  when you have a high enough volume of reviews and are updated regularly to reflect the latest user experiences with your app.</li>
  <li><b>Device metadata:</b> See certain device data such as RAM, CPU, and screen size so you can more easily identify problems users are mentioning in user reviews and debug such issues.</li>
  <li><b>Search review text:</b> Search inside reviews to see what people are saying about a particular topic or keyword.</li>
<li>Replies &#38; updates to reviews: When you reply to reviews, the user receives an email. Now, you can also opt-in to be emailed if the user updates their review or rating.</li>
</ul><b>
</b><p>Learn from other developers on how to make the most of ratings and reviews</p>

<p><a href="https://play.google.com/store/apps/dev?id=5644820617218674509">Photo Editor by Aviary</a> is a photo editing app with a strong focus on simplicity and intuitive use. Ratings and reviews and other Android features allow Aviary to iterate on builds two to three times faster compared to other platforms while being in a regular dialogue with their users.</p>

<!--[Interactive video]  -->
<br /><p><a href="https://play.google.com/store/apps/dev?id=8633921029894576093">Glu Mobile</a> is a mobile gaming company known for Racing Rivals, Cooking Dash 2016 and its upcoming Taylor Swift game. Ratings and reviews features help Glu engage their audience, gather feedback, and manage user satisfaction. &#8220;Google&#8217;s review highlights allow us to see a snapshot of game features users like or dislike at a glance. We monitor review trends, watch out for notifications, and respond to reviews for our games,&#8221; says Niccolo de Masi, Glu Mobile CEO. Here are some tips Glu is using to master ratings and reviews in the Developer Console:</p>

<ol type="1"><li><b>Reply to reviews:</b> Reply to user reviews of your game in the Google Play Developer Console. Help them with their issues or let them know that you're considering their feature suggestions. A positive experience could result in the user increasing their rating.
</li><li><b>Use search:</b> You can now search within all reviews and apply search filters for rating, language, app version, device and more. Use this feature to find specific user feedback, for example, on new content you&#8217;ve added. 
</li><li><b>Take action:</b> Now, you can be notified when a user answers you or updates their review. You can immediately start working on improvements if you learned about an issue. If the feedback is positive, engage with your community and turn satisfied users into fans. 
</li><li><b>Analyze over time:</b> Analyze ratings over time to learn more about how user satisfaction improves as you update your game. This allows you to understand if your latest feature update or bug fix results in higher user satisfaction.
</li><li><b>Identify key themes:</b> Google Play automatically surfaces review highlights that users are mentioning about your game. This makes it quick for you to analyze reviews and understand user feedback. 
</li></ol><p>We hope these tools help you better engage with your audience and improve your app. Visit the Developer Console Help Center to find out more about <a href="https://support.google.com/googleplay/android-developer/answer/138230">seeing and managing ratings and reviews</a>. For more tools and best practices to help you grow a successful business, download <a href="https://play.google.com/store/books/details/Google_Inc_The_Secrets_to_App_Success_on_Google_Pl?id=O2a5CgAAQBAJ">The Secrets to App Success on Google Play</a>.</p>

<div><a href="https://3.bp.blogspot.com/-HaEicu0p7Y4/Vs8xKWprZ_I/AAAAAAAACnQ/3lablWIS8L8/s1600/image00.png"><img border="0" src="https://3.bp.blogspot.com/-HaEicu0p7Y4/Vs8xKWprZ_I/AAAAAAAACnQ/3lablWIS8L8/s200/image00.png"></a></div>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Fergus Hurley, Product Manager, Google Play</p></i>

<p>
Millions of users rate and review your apps every day on Google Play. From feature requests to technical issues, ratings and reviews offer a wealth of information about what people like and dislike. Since 2013, you’ve been able to reply to reviews on Google Play, giving you a direct communication channel with your most engaged users. You've told us you value having this channel because it helps you iterate on user feedback faster on Android than other platforms. In the last few months, we’ve made a number of improvements in the Google Play Developer Console to help you better analyze and manage ratings and reviews so that you can improve your app experience and boost its rating.</p>
<b>
<p>Improvements to ratings and reviews</p></b>

<p>We recently revamped ratings and reviews with features you can now find on dedicated pages in the Developer Console:</p>
<br>
<a href="https://3.bp.blogspot.com/-GHYrcf5yKHM/Vs9MZY5iGBI/AAAAAAAACn4/TtazilRcy8g/s1600/image02.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-GHYrcf5yKHM/Vs9MZY5iGBI/AAAAAAAACn4/TtazilRcy8g/s640/image02.png" /></a>
<i><P><CENTER>The new ratings page in the Google Play Developer Console</P></CENTER></i>

<ul>
  <li><b>See ratings over time:</b> See how your rating changes daily, weekly, and monthly and easily spot any changes when you release a new version of your app.</li>
  <li><b>Ratings breakdown:</b> Break down your rating by country, language, device, app version, or Android version.</li>
</ul>  
<BR>
<a href="https://3.bp.blogspot.com/-fTUSBn-Dwf4/Vs9MfQGTLEI/AAAAAAAACn8/HMZV4xCHlIg/s1600/image01.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-fTUSBn-Dwf4/Vs9MfQGTLEI/AAAAAAAACn8/HMZV4xCHlIg/s640/image01.png" /></a>
<i><p><center>The new reviews page in the Google Play Developer Console</p></center></i>

<ul>
  <li><b>Review highlights:</b> See common themes from what users say in reviews of your app – these are the same highlights that users see on the Play Store. Review highlights are shown  when you have a high enough volume of reviews and are updated regularly to reflect the latest user experiences with your app.</li>
  <li><b>Device metadata:</b> See certain device data such as RAM, CPU, and screen size so you can more easily identify problems users are mentioning in user reviews and debug such issues.</li>
  <li><b>Search review text:</b> Search inside reviews to see what people are saying about a particular topic or keyword.</li>
<li>Replies & updates to reviews: When you reply to reviews, the user receives an email. Now, you can also opt-in to be emailed if the user updates their review or rating.</li>
</ul>  
<b>
<p>Learn from other developers on how to make the most of ratings and reviews</p></b>

<p><a href="https://play.google.com/store/apps/dev?id=5644820617218674509">Photo Editor by Aviary</a> is a photo editing app with a strong focus on simplicity and intuitive use. Ratings and reviews and other Android features allow Aviary to iterate on builds two to three times faster compared to other platforms while being in a regular dialogue with their users.</p>

<!--[Interactive video]  --><iframe width="557" height="370" " frameborder="0" src="https://www.youtube.com/embed/SYx5Sb9Qxa0?list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 80px;" allowfullscreen></iframe>
<br>
<p><a href="https://play.google.com/store/apps/dev?id=8633921029894576093">Glu Mobile</a> is a mobile gaming company known for Racing Rivals, Cooking Dash 2016 and its upcoming Taylor Swift game. Ratings and reviews features help Glu engage their audience, gather feedback, and manage user satisfaction. “Google’s review highlights allow us to see a snapshot of game features users like or dislike at a glance. We monitor review trends, watch out for notifications, and respond to reviews for our games,” says Niccolo de Masi, Glu Mobile CEO. Here are some tips Glu is using to master ratings and reviews in the Developer Console:</p>

<OL TYPE=1>
<LI><b>Reply to reviews:</b> Reply to user reviews of your game in the Google Play Developer Console. Help them with their issues or let them know that you're considering their feature suggestions. A positive experience could result in the user increasing their rating.
<LI><b>Use search:</b> You can now search within all reviews and apply search filters for rating, language, app version, device and more. Use this feature to find specific user feedback, for example, on new content you’ve added. 
<LI><b>Take action:</b> Now, you can be notified when a user answers you or updates their review. You can immediately start working on improvements if you learned about an issue. If the feedback is positive, engage with your community and turn satisfied users into fans. 
<LI><b>Analyze over time:</b> Analyze ratings over time to learn more about how user satisfaction improves as you update your game. This allows you to understand if your latest feature update or bug fix results in higher user satisfaction.
<LI><b>Identify key themes:</b> Google Play automatically surfaces review highlights that users are mentioning about your game. This makes it quick for you to analyze reviews and understand user feedback. 
</OL>

<p>We hope these tools help you better engage with your audience and improve your app. Visit the Developer Console Help Center to find out more about <a href="https://support.google.com/googleplay/android-developer/answer/138230">seeing and managing ratings and reviews</a>. For more tools and best practices to help you grow a successful business, download <a href="https://play.google.com/store/books/details/Google_Inc_The_Secrets_to_App_Success_on_Google_Pl?id=O2a5CgAAQBAJ">The Secrets to App Success on Google Play</a>.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-HaEicu0p7Y4/Vs8xKWprZ_I/AAAAAAAACnQ/3lablWIS8L8/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-HaEicu0p7Y4/Vs8xKWprZ_I/AAAAAAAACnQ/3lablWIS8L8/s200/image00.png" /></a></div>



]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/new-tools-for-ratings-reviews-on-google-play-to-engage-and-understand-your-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Google’s Launchpad Accelerator successfully takes off. Apply to join the June class.</title>
		<link>https://googledata.org/google-android/googles-launchpad-accelerator-successfully-takes-off-apply-to-join-the-june-class/</link>
		<comments>https://googledata.org/google-android/googles-launchpad-accelerator-successfully-takes-off-apply-to-join-the-june-class/#comments</comments>
		<pubDate>Thu, 25 Feb 2016 18:31:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=72f146f3641d2de8ba1bc249f4bd3a76</guid>
		<description><![CDATA[<i></i><p>Posted by Roy Glasberg Global Lead, Launchpad Program &#38; Accelerator</p>

<p>Last month, 24 promising startups from India, Indonesia, and Brazil came to Silicon Valley to participate in Google&#8217;s <a href="https://developers.google.com/startups/accelerator/?utm_campaign=android_discussion_launchpad_accelerator_022516&#38;utm_source=anddev&#38;utm_medium=blog">Launchpad Accelerator</a>, a <a href="http://googledevelopers.blogspot.com/2015/12/google-announces-new-accelerator-for.html">new program</a> that provides late-stage startups (mobile apps) with mentoring and resources to successfully scale in their local economies.</p>

<div><a href="https://2.bp.blogspot.com/-MwZsySbf8g0/Vs9H_-425JI/AAAAAAAACns/3nVaays569g/s1600/image02.png"><img border="0" src="https://2.bp.blogspot.com/-MwZsySbf8g0/Vs9H_-425JI/AAAAAAAACns/3nVaays569g/s640/image02.png"></a></div>

<p>
During the intensive two-week Accelerator kickoff in our Mountain View headquarters, Google engineers from 11 product areas, as well as experts from other companies, were on hand to provide startups with mentorship on how to scale and monetize their apps, and ultimately, build successful businesses. Now back in their home countries, the teams will continue developing their products with the support of up to $50,000 in equity-free funding, six more months of ongoing mentorship, and a breadth of developer tools from the Launchpad Accelerator program.</p>

<p>So far, many startup participants have already seen an immediate impact. Two weeks after attending the kickoff event, Brazilian mobile game developer <a href="http://upbeatgames.com/">UpBeat Games</a> was featured on Google Play and saw a 1,000% increase in app installations in Asia, as well as a 200% overall increase in active users, by leveraging analytics to better understand their users.</p>

<div><a href="https://4.bp.blogspot.com/-Ord2-yxG01o/Vs9IL7LtCqI/AAAAAAAACnw/i-y2cqsLgME/s1600/image00.png"><img border="0" src="https://4.bp.blogspot.com/-Ord2-yxG01o/Vs9IL7LtCqI/AAAAAAAACnw/i-y2cqsLgME/s640/image00.png"></a></div>

<p>According to UpBeat Games founder Vinicius Heimbeck, &#8220;By working one-on-one with the mentors, we learned that we needed to be a data-driven company. We now have the right analytics tools to measure the results of our efforts and to learn from them to optimize the user experience. This all directly impacted our huge success once we were featured on Google Play.&#8221;</p>

<p><a href="http://www.efishery.com/">eFishery</a>, an Indonesian startup that produces smart automated fish feeders, turned its focus on scaling since attending Launchpad Accelerator. &#8220;The mentors gave us great insight about how to build a scalable product and how to engage billions of users,&#8221; said co-founder and CEO Gibran Chuzaefah Amsi El Farizy. &#8220;We received both technical and practical advice on our business, from building back-end technology to embracing failure with the right mindset.&#8221;</p>

<p><b>Apply now for Launchpad Accelerator</b>
We are also excited to announce the second class for Launchpad Accelerator which will begin in June 2016.</p>

<p>If you are a startup from India, Indonesia, Brazil, or Mexico (a new addition!) and are interested in participating in the next wave, we encourage you to apply <a href="https://g.co/launchpadaccelerator">here</a> by March 31. We expect to continue adding more countries to the program in the future, so be on the lookout!</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Roy Glasberg Global Lead, Launchpad Program & Accelerator</p></i>

<p>Last month, 24 promising startups from India, Indonesia, and Brazil came to Silicon Valley to participate in Google’s <a href="https://developers.google.com/startups/accelerator/?utm_campaign=android_discussion_launchpad_accelerator_022516&utm_source=anddev&utm_medium=blog">Launchpad Accelerator</a>, a <a href="http://googledevelopers.blogspot.com/2015/12/google-announces-new-accelerator-for.html">new program</a> that provides late-stage startups (mobile apps) with mentoring and resources to successfully scale in their local economies.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-MwZsySbf8g0/Vs9H_-425JI/AAAAAAAACns/3nVaays569g/s1600/image02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-MwZsySbf8g0/Vs9H_-425JI/AAAAAAAACns/3nVaays569g/s640/image02.png" /></a></div>

<P>
During the intensive two-week Accelerator kickoff in our Mountain View headquarters, Google engineers from 11 product areas, as well as experts from other companies, were on hand to provide startups with mentorship on how to scale and monetize their apps, and ultimately, build successful businesses. Now back in their home countries, the teams will continue developing their products with the support of up to $50,000 in equity-free funding, six more months of ongoing mentorship, and a breadth of developer tools from the Launchpad Accelerator program.</P>

<P>So far, many startup participants have already seen an immediate impact. Two weeks after attending the kickoff event, Brazilian mobile game developer <a href="http://upbeatgames.com/">UpBeat Games</a> was featured on Google Play and saw a 1,000% increase in app installations in Asia, as well as a 200% overall increase in active users, by leveraging analytics to better understand their users.</P>

<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-Ord2-yxG01o/Vs9IL7LtCqI/AAAAAAAACnw/i-y2cqsLgME/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-Ord2-yxG01o/Vs9IL7LtCqI/AAAAAAAACnw/i-y2cqsLgME/s640/image00.png" /></a></div>

<p>According to UpBeat Games founder Vinicius Heimbeck, “By working one-on-one with the mentors, we learned that we needed to be a data-driven company. We now have the right analytics tools to measure the results of our efforts and to learn from them to optimize the user experience. This all directly impacted our huge success once we were featured on Google Play.”</p>

<p><a href="http://www.efishery.com/">eFishery</a>, an Indonesian startup that produces smart automated fish feeders, turned its focus on scaling since attending Launchpad Accelerator. “The mentors gave us great insight about how to build a scalable product and how to engage billions of users,” said co-founder and CEO Gibran Chuzaefah Amsi El Farizy. “We received both technical and practical advice on our business, from building back-end technology to embracing failure with the right mindset.”</p>

<p><b>Apply now for Launchpad Accelerator</b>
We are also excited to announce the second class for Launchpad Accelerator which will begin in June 2016.</p>

<p>If you are a startup from India, Indonesia, Brazil, or Mexico (a new addition!) and are interested in participating in the next wave, we encourage you to apply <a href="https://g.co/launchpadaccelerator">here</a> by March 31. We expect to continue adding more countries to the program in the future, so be on the lookout!</p>







]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/googles-launchpad-accelerator-successfully-takes-off-apply-to-join-the-june-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android Support Library 23.2</title>
		<link>https://googledata.org/google-android/android-support-library-23-2/</link>
		<comments>https://googledata.org/google-android/android-support-library-23-2/#comments</comments>
		<pubDate>Wed, 24 Feb 2016 22:19:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

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

<h3>Android Support Library 23.2</h3>
<p>When talking about the Android Support Library, it is important to realize this isn&#8217;t one monolithic library, but a <a href="http://developer.android.com/tools/support-library/features.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">whole collection of libraries</a> that seek to provide backward-compatible versions of APIs, as well as offer unique features without requiring the latest platform version. Version 23.2 adds a few new support libraries as well as new features to many of the existing libraries.</p>
<br /><!--[Interactive video]  -->

<h3>Support Vector Drawables and Animated Vector Drawables</h3>
<p><a href="https://www.youtube.com/watch?v=wlFVIIstKmA&#38;utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">Vector drawables</a> allow you to replace multiple png assets with a single vector graphic, defined in XML. While previously limited to Lollipop and higher devices, both VectorDrawable and AnimatedVectorDrawable are now available through two new Support Libraries <b>support-vector-drawable</b> and <b>animated-vector-drawable</b>, respectively.</p>

<p><a href="http://android-developers.blogspot.com/2015/09/android-studio-14.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">Android Studio 1.4</a> introduced limited support for vector drawables by <a href="https://www.youtube.com/watch?v=8e3I-PYJNHg&#38;t=221&#38;utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">generating pngs at build time</a>. To disable this functionality (and gain the true advantage and space savings of this Support Library), <b>you need to add vectorDrawables.useSupportLibrary = true to your build.gradle file:</b></p>
<br /><pre><code> // Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }  
</code></pre>

<p>You&#8217;ll note this new attribute only exists in the version 2.0 of the Gradle Plugin. If you are using Gradle 1.5 you&#8217;ll instead use</p>
<br /><pre><code> // Gradle Plugin 1.5  
 android {  
   defaultConfig {  
     generatedDensities = []  
  }  

  // This is handled for you by the 2.0+ Gradle Plugin  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
 }  
</code></pre>

<p>You&#8217;ll be able to use VectorDrawableCompat back to API 7 and AnimatedVectorDrawableCompat on all API 11 and higher devices. Due to how drawables are loaded by Android, not every place that accepts a drawable id (such as in an XML file) will support loading vector drawables. Thankfully, <a href="http://developer.android.com/tools/support-library/features.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#v7-appcompat">AppCompat</a> has added a number of features to make it easy to use your new vector drawables.</p>

<p>Firstly, when using AppCompat with <a href="http://developer.android.com/reference/android/widget/ImageView.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">ImageView</a> (or subclasses such as <a href="http://developer.android.com/reference/android/widget/ImageButton.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">ImageButton</a> and <a href="http://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">FloatingActionButton</a>), you&#8217;ll be able to use the new <b>app:srcCompat</b> attribute to reference vector drawables (as well as any other drawable available to <a href="http://developer.android.com/reference/android/widget/ImageView.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#attr_android:src">android:src</a>):</p>
<br /><pre><code> &#60;ImageView  
  android:layout_width="wrap_content"  
  android:layout_height="wrap_content"  
  app:srcCompat="@drawable/ic_add" /&#62;  
</code></pre>

<p>
And if you&#8217;re changing drawables at runtime, you&#8217;ll be able to use the same <a href="http://developer.android.com/reference/android/widget/ImageView.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#setImageResource(int)">setImageResource()</a> method as before - no changes there. <b>Using AppCompat and app:srcCompat is the most foolproof method of integrating vector drawables into your app.</b></p>

<p>You&#8217;ll find directly referencing vector drawables outside of app:srcCompat will fail prior to Lollipop. However, AppCompat does support loading vector drawables when they are referenced in another drawable container such as a <a href="http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">StateListDrawable</a>, <a href="http://developer.android.com/reference/android/graphics/drawable/InsetDrawable.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">InsetDrawable</a>, <a href="http://developer.android.com/reference/android/graphics/drawable/LayerDrawable.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">LayerDrawable</a>, <a href="http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">LevelListDrawable</a>, and <a href="http://developer.android.com/reference/android/graphics/drawable/RotateDrawable.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">RotateDrawable</a>. By using this indirection, you can use vector drawables in cases such as <a href="http://developer.android.com/reference/android/widget/TextView.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">TextView&#8217;s</a> <a href="http://developer.android.com/reference/android/widget/TextView.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#attr_android:drawableLeft">android:drawableLeft</a> attribute, which wouldn&#8217;t normally be able to support vector drawables.</p>

<h3>
AppCompat DayNight theme
</h3>
<p>While enabling the use of vector graphics throughout your app is already a large change to AppCompat, there&#8217;s a new theme added to AppCompat in this release: <b>Theme.AppCompat.DayNight.</b></p>
<br /><table border="1" cellpadding="3" cellspacing="3"><tr><td><a href="https://3.bp.blogspot.com/-PCq6in0WXBs/Vsyp7EVfSsI/AAAAAAAACmQ/fMHWVrVibf0/s1600/image05.png"><img border="0" src="https://3.bp.blogspot.com/-PCq6in0WXBs/Vsyp7EVfSsI/AAAAAAAACmQ/fMHWVrVibf0/s640/image05.png"></a></td>
  <td><a href="https://1.bp.blogspot.com/-Ru64P9N2S_M/VsyqB1Fw5gI/AAAAAAAACmU/dYegY5HFn58/s1600/image01.png"><img border="0" src="https://1.bp.blogspot.com/-Ru64P9N2S_M/VsyqB1Fw5gI/AAAAAAAACmU/dYegY5HFn58/s640/image01.png"></a></td>
 </tr></table><p>Prior to API 14, The DayNight theme and its descendents DayNight.NoActionBar, DayNight.DarkActionBar, DayNight.Dialog, etc. become their Light equivalents. But on API 14 and higher devices, <b>this theme allows apps to easily support both a Light and Dark theme</b>, effectively switching from a Light theme to a Dark theme based on whether it is &#8216;night&#8217;.</p>

<p>
By default, whether it is &#8216;night&#8217; will match the system value (from <a href="http://developer.android.com/reference/android/app/UiModeManager.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#getNightMode()">UiModeManager.getNightMode()</a>), but you can override that value with methods in <a href="http://developer.android.com/reference/android/support/v7/app/AppCompatDelegate.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">AppCompatDelegate</a>. You&#8217;ll be able to set the default across your entire app (until process restart) with the static AppCompatDelegate.setDefaultNightMode() method or retrieve an AppCompatDelegate via <a href="http://developer.android.com/reference/android/support/v7/app/AppCompatActivity.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#getDelegate()">getDelegate()</a> and use setLocalNightMode() to change only the current Activity or Dialog.
</p>

<p>
When using AppCompatDelegate.MODE_NIGHT_AUTO, the time of day and your last known location (if your app has the location permissions) are used to automatically switch between day and night, while MODE_NIGHT_NO and MODE_NIGHT_YES forces the theme to never or always use a dark theme, respectively.</p>

<p>
It is critical that you test your app thoroughly when using the DayNight themes as hardcoded colors can easily make for unreadable text or icons. If you are using the standard <a href="http://developer.android.com/reference/android/support/v7/appcompat/R.style.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#TextAppearance_AppCompat">TextAppearance.AppCompat</a> styles for your text or colors pulled from your theme such as <a href="http://developer.android.com/reference/android/R.attr.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#textColorPrimary">android:textColorPrimary</a>, you&#8217;ll find these automatically update for you.
</p>

<p>However, if you&#8217;d like to customize any resources specifically for night mode, AppCompat reuses the <a href="http://developer.android.com/guide/topics/resources/providing-resources.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#NightQualifier">night resource qualifier folder</a>, making it possible customize every resource you may need. Please consider using the standard colors or taking advantage of the tinting support in AppCompat to make supporting this mode much easier.</p>

<h3>Design Support Library: Bottom Sheets</h3>
<p>The <a href="http://android-developers.blogspot.com/2015/05/android-design-support-library.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">Design Support Library</a> provides implementations of many patterns of <a href="https://www.google.com/design/spec/material-design?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">material design</a>. This release allows developers to easily add <a href="https://www.google.com/design/spec/components/bottom-sheets.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">bottom sheets</a> to their app.</p>
<div><a href="https://4.bp.blogspot.com/-tHhmGm8q1Qs/VsyqSo_IBDI/AAAAAAAACmY/EWy2HbMmGYg/s1600/image06.png"><img border="0" src="https://4.bp.blogspot.com/-tHhmGm8q1Qs/VsyqSo_IBDI/AAAAAAAACmY/EWy2HbMmGYg/s640/image06.png"></a></div>

<p>By attaching a BottomSheetBehavior to a child View of a <a href="http://developer.android.com/reference/android/support/design/widget/CoordinatorLayout.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">CoordinatorLayout</a> (i.e., adding app:layout_behavior="android.support.design.widget.BottomSheetBehavior"), you&#8217;ll automatically get the appropriate touch detection to transition between five state:</p>

<ul><li>STATE_COLLAPSED: this collapsed state is the default and shows just a portion of the layout along the bottom. The height can be controlled with the app:behavior_peekHeight attribute (defaults to 0)</li>
  <li>STATE_DRAGGING: the intermediate state while the user is directly dragging the bottom sheet up or down</li>
  <li>STATE_SETTLING: that brief time between when the View is released and settling into its final position</li>
<li>STATE_EXPANDED: the fully expanded state of the bottom sheet, where either the whole bottom sheet is visible (if its height is less than the containing CoordinatorLayout) or the entire CoordinatorLayout is filled</li>
  <li>STATE_HIDDEN: disabled by default (and enabled with the app:behavior_hideable attribute), enabling this allows users to swipe down on the bottom sheet to completely hide the bottom sheet</li>
</ul><p>Keep in mind that scrolling containers in your bottom sheet must support nested scrolling (for example, <a href="http://developer.android.com/reference/android/support/v4/widget/NestedScrollView.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">NestedScrollView</a>, <a href="http://developer.android.com/reference/android/support/v7/widget/RecyclerView.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">RecyclerView</a>, or ListView/ScrollView on API 21+).</p>

<p>If you&#8217;d like to receive callbacks of state changes, you can add a BottomSheetCallback:</p>
<br /><pre><code> // The View with the BottomSheetBehavior  
 View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);  
 BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);  
 behavior.setBottomSheetCallback(new BottomSheetCallback() {  
    @Override  
    public void onStateChanged(@NonNull View bottomSheet, int newState) {  
      // React to state change  
    }  
      @Override  
      public void onSlide(@NonNull View bottomSheet, float slideOffset) {  
       // React to dragging events  
   }  
 });  
</code></pre>

<p>While BottomSheetBehavior captures the <a href="https://www.google.com/design/spec/components/bottom-sheets.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#bottom-sheets-persistent-bottom-sheets">persistent bottom sheet</a> case, this release also provides a BottomSheetDialog and BottomSheetDialogFragment to fill the <a href="https://www.google.com/design/spec/components/bottom-sheets.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#bottom-sheets-modal-bottom-sheets">modal bottom sheets</a> use case. Simply replace <a href="http://developer.android.com/reference/android/support/v7/app/AppCompatDialog.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">AppCompatDialog</a> or <a href="http://developer.android.com/reference/android/support/v7/app/AppCompatDialogFragment.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">AppCompatDialogFragment</a> with their bottom sheet equivalents to have your dialog styled as a bottom sheet.</p>

<h3>Support v4: MediaBrowserServiceCompat</h3>
<p>The <a href="http://developer.android.com/tools/support-library/features.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#v4">Support v4 library</a> serves as the foundation for much of the support libraries and includes backports of many framework features introduced in newer versions of the platform (as well a <a href="http://stackoverflow.com/a/22740525/1676363?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">number of unique features</a>).</p>

<p>
Adding onto the previously released <a href="https://www.youtube.com/watch?v=FBC1FgWe5X4&#38;utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">MediaSessionCompat</a> class to provide a solid foundation for media playback, this release adds MediaBrowserServiceCompat and MediaBrowserCompat providing a compatible solution that brings the latest APIs (even those added in Marshmallow) back to all API 4 and higher devices. This makes it much easier to support <a href="http://developer.android.com/training/auto/audio/index.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">audio playback on Android Auto</a> and browsing through media on Android Wear along with providing a standard interface you can use to connect your media playback service and your UI.</p>

<h3>RecyclerView</h3>
<p>The <a href="http://developer.android.com/reference/android/support/v7/widget/RecyclerView.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">RecyclerView</a> widget provides an advanced and flexible base for <a href="http://developer.android.com/training/material/lists-cards.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#RecyclerView">creating lists and grids</a> as well as supporting <a href="https://www.youtube.com/watch?v=imsr8NrIAMs&#38;utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">animations</a>. This release brings an exciting new feature to the LayoutManager API: auto-measurement! This allows a RecyclerView to size itself based on the size of its contents. This means that previously unavailable scenarios, such as using WRAP_CONTENT for a dimension of the RecyclerView, are now possible. You&#8217;ll find all built in LayoutManagers now support auto-measurement.</p>

<p>Due to this change, make sure to double check the layout parameters of your item views: previously ignored layout parameters (such as MATCH_PARENT in the scroll direction) will now be fully respected.</p>

<p>If you have a custom LayoutManager that does <i>not</i> extend one of the built in LayoutManagers, this is an <b>opt-in</b> API - you&#8217;ll be required to call setAutoMeasureEnabled(true) as well as make some minor changes as detailed in the Javadoc of the method.</p>

<p>Note that although RecyclerView animates its children, it <b>does not</b> animate its own bounds changes. If you would like to animate the RecyclerView bounds as they change, you can use the <a href="http://developer.android.com/training/transitions/overview.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">Transition APIs</a>.</p>

<h3>Custom Tabs</h3>
<p><a href="http://android-developers.blogspot.com/2015/09/chrome-custom-tabs-smooth-transition.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">Custom Tabs</a> makes it possible to seamlessly transition to web content while keeping the look and feel of your app. With this release, you&#8217;ll now be able to add actions to a bottom bar for display alongside the web content.</p>
<div><a href="https://1.bp.blogspot.com/-z_TM7Ch8fE0/VsyqZz2okNI/AAAAAAAACmc/3HT9_R_IhYU/s1600/image04.png"><img border="0" src="https://1.bp.blogspot.com/-z_TM7Ch8fE0/VsyqZz2okNI/AAAAAAAACmc/3HT9_R_IhYU/s640/image04.png"></a></div>

<p>With the new addToolbarItem() method, you&#8217;ll be able to add up to currently 5 (MAX_TOOLBAR_ITEMS) actions to the bottom bar and update them with setToolbarItem() once the session has begun. Similar to the previous <a href="https://developer.android.com/reference/android/support/customtabs/CustomTabsIntent.Builder.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#setToolbarColor(int)">setToolbarColor()</a> method, you&#8217;ll also find a setSecondaryToolbarColor() method for customizing the background color of the bottom bar.</p>

<h3>Leanback for Android TV</h3>
<p>The <a href="http://developer.android.com/tools/support-library/features.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog#v17-leanback">Leanback Library</a> gives you the tools you need to easily <a href="https://www.youtube.com/watch?v=yT4ADuZGEVY&#38;utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">bring your app to Android TV</a> with many standard components optimized for the TV experience. The <a href="http://developer.android.com/reference/android/support/v17/leanback/app/GuidedStepFragment.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">GuidedStepFragment</a> received a significant set of improvements with this release.</p>
<div><a href="https://4.bp.blogspot.com/-YmvEulQtB5o/VsyqlGkmHXI/AAAAAAAACmg/DZxERRItP0Q/s1600/image02.png"><img border="0" src="https://4.bp.blogspot.com/-YmvEulQtB5o/VsyqlGkmHXI/AAAAAAAACmg/DZxERRItP0Q/s640/image02.png"></a></div>
<p>The most visible change may be the introduce of a second column used for action buttons (added by overriding onCreateButtonActions() or calling setButtonActions()). This makes it much easier to reach completion actions without having to scroll through the list of available <a href="http://developer.android.com/reference/android/support/v17/leanback/widget/GuidedAction.html?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">GuidedActions</a>.</p>

<p>Speaking of GuidedActions, there&#8217;s a number of new features to allow richer input including editable descriptions (via descriptionEditable()), sub actions in the form of a dropdown (with subActions()), and a GuidedDatePickerAction.</p>
<br /><div><a href="https://4.bp.blogspot.com/-FahHAG7DavY/VszPhjBLnzI/AAAAAAAACm0/i7OXfxFI3-Q/s1600/tv_combined_image.png"><img border="0" src="https://4.bp.blogspot.com/-FahHAG7DavY/VszPhjBLnzI/AAAAAAAACm0/i7OXfxFI3-Q/s640/tv_combined_image.png"></a></div>

<p>These components should make it much easier for you to get information from the user when absolutely required.</p>

<h3>Available Now</h3>
<p>Version 23.2 of the Android Support Library is available via your SDK Manager and Android Studio. Take advantage of all of the new features as well as additional bug fixes starting now! As always, file bug reports at <a href="https://code.google.com/p/android/issues/entry?template=Support%20Library%20bug&#38;utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">b.android.com</a> and connect with other developers on the <a href="https://plus.google.com/communities/105153134372062985968?utm_campaign=android_launch_supportlibrary23.2_022216&#38;utm_source=anddev&#38;utm_medium=blog">Android Development Google+ community</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Posted by <a href="https://plus.google.com/+IanLake">Ian Lake</a>, Developer Advocate</p>

<h3>Android Support Library 23.2</h3>
<p>When talking about the Android Support Library, it is important to realize this isn’t one monolithic library, but a <a href="http://developer.android.com/tools/support-library/features.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">whole collection of libraries</a> that seek to provide backward-compatible versions of APIs, as well as offer unique features without requiring the latest platform version. Version 23.2 adds a few new support libraries as well as new features to many of the existing libraries.</p>
<br>
<!--[Interactive video]  --><iframe width="557" height="370" " frameborder="0" src="https://www.youtube.com/embed/7E2lNBM38IE?list=PLWz5rJ2EKKc9e0d55YHgJFHXNZbGHEXJX" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 80px;" allowfullscreen></iframe>

<H3>Support Vector Drawables and Animated Vector Drawables</H3>
<p><a href="https://www.youtube.com/watch?v=wlFVIIstKmA&utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">Vector drawables</a> allow you to replace multiple png assets with a single vector graphic, defined in XML. While previously limited to Lollipop and higher devices, both <FONT FACE="Monaco">VectorDrawable</font> and <FONT FACE="Monaco">AnimatedVectorDrawable</font> are now available through two new Support Libraries <FONT FACE="Monaco"><b>support-vector-drawable</b></font> and <FONT FACE="Monaco"><b>animated-vector-drawable</b></font>, respectively.</p>

<p><a href="http://android-developers.blogspot.com/2015/09/android-studio-14.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">Android Studio 1.4</a> introduced limited support for vector drawables by <a href="https://www.youtube.com/watch?v=8e3I-PYJNHg&t=221&utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">generating pngs at build time</a>. To disable this functionality (and gain the true advantage and space savings of this Support Library), <b>you need to add <FONT FACE="Monaco">vectorDrawables.useSupportLibrary = true</font> to your <FONT FACE="Monaco">build.gradle</font> file:</p></b>
<br>
<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> // Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }  
</code></pre>

<P>You’ll note this new attribute only exists in the version 2.0 of the Gradle Plugin. If you are using Gradle 1.5 you’ll instead use</P>
<BR>
<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> // Gradle Plugin 1.5  
 android {  
   defaultConfig {  
     generatedDensities = []  
  }  

  // This is handled for you by the 2.0+ Gradle Plugin  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
 }  
</code></pre>

<P>You’ll be able to use VectorDrawableCompat back to API 7 and AnimatedVectorDrawableCompat on all API 11 and higher devices. Due to how drawables are loaded by Android, not every place that accepts a drawable id (such as in an XML file) will support loading vector drawables. Thankfully, <a href="http://developer.android.com/tools/support-library/features.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#v7-appcompat">AppCompat</a> has added a number of features to make it easy to use your new vector drawables.</P>

<P>Firstly, when using AppCompat with <a href="http://developer.android.com/reference/android/widget/ImageView.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">ImageView</font></a> (or subclasses such as <a href="http://developer.android.com/reference/android/widget/ImageButton.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">ImageButton</font></a> and <a href="http://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">FloatingActionButton</font></a>), you’ll be able to use the new <FONT FACE="Monaco"><b>app:srcCompat</b></font> attribute to reference vector drawables (as well as any other drawable available to <a href="http://developer.android.com/reference/android/widget/ImageView.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#attr_android:src"><FONT FACE="Monaco">android:src</font></a>):</P>
<BR>
<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> &lt;ImageView  
  android:layout_width="wrap_content"  
  android:layout_height="wrap_content"  
  app:srcCompat="@drawable/ic_add" /&gt;  
</code></pre>

<P>
And if you’re changing drawables at runtime, you’ll be able to use the same <a href="http://developer.android.com/reference/android/widget/ImageView.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#setImageResource(int)"><FONT FACE="Monaco">setImageResource()</font></a> method as before - no changes there. <b>Using AppCompat and <FONT FACE="Monaco">app:srcCompat</font> is the most foolproof method of integrating vector drawables into your app.</P></b>

<P>You’ll find directly referencing vector drawables outside of <FONT FACE="Monaco">app:srcCompat</font> will fail prior to Lollipop. However, AppCompat does support loading vector drawables when they are referenced in another drawable container such as a <a href="http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">StateListDrawable</font></a>, <a href="http://developer.android.com/reference/android/graphics/drawable/InsetDrawable.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">InsetDrawable</font></a>, <a href="http://developer.android.com/reference/android/graphics/drawable/LayerDrawable.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">LayerDrawable</font></a>, <a href="http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">LevelListDrawable</font></a>, and <a href="http://developer.android.com/reference/android/graphics/drawable/RotateDrawable.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">RotateDrawable</font></a>. By using this indirection, you can use vector drawables in cases such as <a href="http://developer.android.com/reference/android/widget/TextView.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">TextView’s</font></a> <a href="http://developer.android.com/reference/android/widget/TextView.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#attr_android:drawableLeft"><FONT FACE="Monaco">android:drawableLeft</font></a> attribute, which wouldn’t normally be able to support vector drawables.</P>

<H3>
AppCompat DayNight theme
</H3>
<P>While enabling the use of vector graphics throughout your app is already a large change to AppCompat, there’s a new theme added to AppCompat in this release: <FONT FACE="Monaco"><b>Theme.AppCompat.DayNight.</b></font></P>
<BR>
<table border="1" style="background-color:#FFFFFF;border-collapse:collapse;border:1px solid #FFFFFF;color:#FFFFFF;width:100%" cellpadding="3" cellspacing="3">
 <tr>
  <td><a href="https://3.bp.blogspot.com/-PCq6in0WXBs/Vsyp7EVfSsI/AAAAAAAACmQ/fMHWVrVibf0/s1600/image05.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-PCq6in0WXBs/Vsyp7EVfSsI/AAAAAAAACmQ/fMHWVrVibf0/s640/image05.png" /></a></td>
  <td><a href="https://1.bp.blogspot.com/-Ru64P9N2S_M/VsyqB1Fw5gI/AAAAAAAACmU/dYegY5HFn58/s1600/image01.png" imageanchor="1" ><img border="0" src="https://1.bp.blogspot.com/-Ru64P9N2S_M/VsyqB1Fw5gI/AAAAAAAACmU/dYegY5HFn58/s640/image01.png" /></a></td>
 </tr>
</table>


<P>Prior to API 14, The <FONT FACE="Monaco">DayNight</font> theme and its descendents <FONT FACE="Monaco">DayNight.NoActionBar,</font> <FONT FACE="Monaco">DayNight.DarkActionBar, DayNight.Dialog,</font> etc. become their Light equivalents. But on API 14 and higher devices, <b>this theme allows apps to easily support both a <FONT FACE="Monaco">Light</font> and <FONT FACE="Monaco">Dark</font> theme</b>, effectively switching from a Light theme to a Dark theme based on whether it is ‘night’.</P>

<P>
By default, whether it is ‘night’ will match the system value (from <a href="http://developer.android.com/reference/android/app/UiModeManager.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#getNightMode()"><FONT FACE="Monaco">UiModeManager.getNightMode()</font></a>), but you can override that value with methods in <a href="http://developer.android.com/reference/android/support/v7/app/AppCompatDelegate.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">AppCompatDelegate</font></a>. You’ll be able to set the default across your entire app (until process restart) with the static <FONT FACE="Monaco">AppCompatDelegate.setDefaultNightMode()</font> method or retrieve an AppCompatDelegate via <a href="http://developer.android.com/reference/android/support/v7/app/AppCompatActivity.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#getDelegate()"><FONT FACE="Monaco">getDelegate()</font></a> and use <FONT FACE="Monaco">setLocalNightMode()</font> to change only the current <FONT FACE="Monaco">Activity</font> or <FONT FACE="Monaco">Dialog.</font>
</P>

<P>
When using <FONT FACE="Monaco">AppCompatDelegate.MODE_NIGHT_AUTO,</font> the time of day and your last known location (if your app has the location permissions) are used to automatically switch between day and night, while <FONT FACE="Monaco">MODE_NIGHT_NO</font> and <FONT FACE="Monaco">MODE_NIGHT_YES</font> forces the theme to never or always use a dark theme, respectively.</P>

<P>
It is critical that you test your app thoroughly when using the <FONT FACE="Monaco">DayNight</font> themes as hardcoded colors can easily make for unreadable text or icons. If you are using the standard <a href="http://developer.android.com/reference/android/support/v7/appcompat/R.style.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#TextAppearance_AppCompat"><FONT FACE="Monaco">TextAppearance.AppCompat</font></a> styles for your text or colors pulled from your theme such as <a href="http://developer.android.com/reference/android/R.attr.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#textColorPrimary"><FONT FACE="Monaco">android:textColorPrimary</font></a>, you’ll find these automatically update for you.
</P>

<P>However, if you’d like to customize any resources specifically for night mode, AppCompat reuses the <a href="http://developer.android.com/guide/topics/resources/providing-resources.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#NightQualifier"><FONT FACE="Monaco">night</font> resource qualifier folder</a>, making it possible customize every resource you may need. Please consider using the standard colors or taking advantage of the tinting support in AppCompat to make supporting this mode much easier.</P>

<H3>Design Support Library: Bottom Sheets</H3>
<P>The <a href="http://android-developers.blogspot.com/2015/05/android-design-support-library.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">Design Support Library</a> provides implementations of many patterns of <a href="https://www.google.com/design/spec/material-design?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">material design</a>. This release allows developers to easily add <a href="https://www.google.com/design/spec/components/bottom-sheets.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">bottom sheets</a> to their app.</P>
<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-tHhmGm8q1Qs/VsyqSo_IBDI/AAAAAAAACmY/EWy2HbMmGYg/s1600/image06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-tHhmGm8q1Qs/VsyqSo_IBDI/AAAAAAAACmY/EWy2HbMmGYg/s640/image06.png" /></a></div>

<P>By attaching a <FONT FACE="Monaco">BottomSheetBehavior</font> to a child <FONT FACE="Monaco">View</font> of a <a href="http://developer.android.com/reference/android/support/design/widget/CoordinatorLayout.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">CoordinatorLayout</font></a> (i.e., adding <FONT FACE="Monaco">app:layout_behavior="android.support.design.widget.BottomSheetBehavior"</font>), you’ll automatically get the appropriate touch detection to transition between five state:</P>

<ul>
  <li><FONT FACE="Monaco">STATE_COLLAPSED:</font> this collapsed state is the default and shows just a portion of the layout along the bottom. The height can be controlled with the <FONT FACE="Monaco">app:behavior_peekHeight</font> attribute (defaults to 0)</li>
  <li><FONT FACE="Monaco">STATE_DRAGGING:</font> the intermediate state while the user is directly dragging the bottom sheet up or down</li>
  <li><FONT FACE="Monaco">STATE_SETTLING:</font> that brief time between when the View is released and settling into its final position</li>
<li><FONT FACE="Monaco">STATE_EXPANDED:</font> the fully expanded state of the bottom sheet, where either the whole bottom sheet is visible (if its height is less than the containing <FONT FACE="Monaco">CoordinatorLayout</font>) or the entire <FONT FACE="Monaco">CoordinatorLayout</font> is filled</li>
  <li><FONT FACE="Monaco">STATE_HIDDEN:</font> disabled by default (and enabled with the <FONT FACE="Monaco">app:behavior_hideable</font> attribute), enabling this allows users to swipe down on the bottom sheet to completely hide the bottom sheet</li>
</ul> 
<P>Keep in mind that scrolling containers in your bottom sheet must support nested scrolling (for example, <a href="http://developer.android.com/reference/android/support/v4/widget/NestedScrollView.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">NestedScrollView</font></a>, <a href="http://developer.android.com/reference/android/support/v7/widget/RecyclerView.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">RecyclerView</font></a>, or <FONT FACE="Monaco">ListView/ScrollView</font> on API 21+).</P>

<P>If you’d like to receive callbacks of state changes, you can add a BottomSheetCallback:</P>
<br>
<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> // The View with the BottomSheetBehavior  
 View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);  
 BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);  
 behavior.setBottomSheetCallback(new BottomSheetCallback() {  
    @Override  
    public void onStateChanged(@NonNull View bottomSheet, int newState) {  
      // React to state change  
    }  
      @Override  
      public void onSlide(@NonNull View bottomSheet, float slideOffset) {  
       // React to dragging events  
   }  
 });  
</code></pre>

<P>While <FONT FACE="Monaco">BottomSheetBehavior</font> captures the <a href="https://www.google.com/design/spec/components/bottom-sheets.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#bottom-sheets-persistent-bottom-sheets">persistent bottom sheet</a> case, this release also provides a <FONT FACE="Monaco">BottomSheetDialog</font> and <FONT FACE="Monaco">BottomSheetDialogFragment</font> to fill the <a href="https://www.google.com/design/spec/components/bottom-sheets.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#bottom-sheets-modal-bottom-sheets">modal bottom sheets</a> use case. Simply replace <a href="http://developer.android.com/reference/android/support/v7/app/AppCompatDialog.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">AppCompatDialog</font></a> or <a href="http://developer.android.com/reference/android/support/v7/app/AppCompatDialogFragment.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">AppCompatDialogFragment</font></a> with their bottom sheet equivalents to have your dialog styled as a bottom sheet.</P>

<H3>Support v4: MediaBrowserServiceCompat</H3>
<P>The <a href="http://developer.android.com/tools/support-library/features.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#v4">Support v4 library</a> serves as the foundation for much of the support libraries and includes backports of many framework features introduced in newer versions of the platform (as well a <a href="http://stackoverflow.com/a/22740525/1676363?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">number of unique features</a>).</P>

<P>
Adding onto the previously released <a href="https://www.youtube.com/watch?v=FBC1FgWe5X4&utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">MediaSessionCompat</font></a> class to provide a solid foundation for media playback, this release adds <FONT FACE="Monaco">MediaBrowserServiceCompat</font> and <FONT FACE="Monaco">MediaBrowserCompat</font> providing a compatible solution that brings the latest APIs (even those added in Marshmallow) back to all API 4 and higher devices. This makes it much easier to support <a href="http://developer.android.com/training/auto/audio/index.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">audio playback on Android Auto</a> and browsing through media on Android Wear along with providing a standard interface you can use to connect your media playback service and your UI.</P>

<H3>RecyclerView</H3>
<P>The <a href="http://developer.android.com/reference/android/support/v7/widget/RecyclerView.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">RecyclerView</font></a> widget provides an advanced and flexible base for <a href="http://developer.android.com/training/material/lists-cards.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#RecyclerView">creating lists and grids</a> as well as supporting <a href="https://www.youtube.com/watch?v=imsr8NrIAMs&utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">animations</a>. This release brings an exciting new feature to the <FONT FACE="Monaco">LayoutManager</font> API: auto-measurement! This allows a <FONT FACE="Monaco">RecyclerView</font> to size itself based on the size of its contents. This means that previously unavailable scenarios, such as using <FONT FACE="Monaco">WRAP_CONTENT</font> for a dimension of the <FONT FACE="Monaco">RecyclerView</font>, are now possible. You’ll find all built in LayoutManagers now support auto-measurement.</P>

<P>Due to this change, make sure to double check the layout parameters of your item views: previously ignored layout parameters (such as MATCH_PARENT in the scroll direction) will now be fully respected.</P>

<P>If you have a custom <FONT FACE="Monaco">LayoutManager</font> that does <i>not</i> extend one of the built in <FONT FACE="Monaco">LayoutManagers</font>, this is an <b>opt-in</b> API - you’ll be required to call <FONT FACE="Monaco">setAutoMeasureEnabled(true)</font> as well as make some minor changes as detailed in the Javadoc of the method.</P>

<P>Note that although <FONT FACE="Monaco">RecyclerView</font> animates its children, it <b>does not</b> animate its own bounds changes. If you would like to animate the <FONT FACE="Monaco">RecyclerView</font> bounds as they change, you can use the <a href="http://developer.android.com/training/transitions/overview.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">Transition APIs</a>.</P>

<h3>Custom Tabs</h3>
<p><a href="http://android-developers.blogspot.com/2015/09/chrome-custom-tabs-smooth-transition.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">Custom Tabs</a> makes it possible to seamlessly transition to web content while keeping the look and feel of your app. With this release, you’ll now be able to add actions to a bottom bar for display alongside the web content.</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-z_TM7Ch8fE0/VsyqZz2okNI/AAAAAAAACmc/3HT9_R_IhYU/s1600/image04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-z_TM7Ch8fE0/VsyqZz2okNI/AAAAAAAACmc/3HT9_R_IhYU/s640/image04.png" /></a></div>

<P>With the new <FONT FACE="Monaco">addToolbarItem()</font> method, you’ll be able to add up to currently 5 <FONT FACE="Monaco">(MAX_TOOLBAR_ITEMS)</font> actions to the bottom bar and update them with <FONT FACE="Monaco">setToolbarItem()</font> once the session has begun. Similar to the previous <a href="https://developer.android.com/reference/android/support/customtabs/CustomTabsIntent.Builder.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#setToolbarColor(int)">setToolbarColor()</a> method, you’ll also find a <FONT FACE="Monaco">setSecondaryToolbarColor()</font> method for customizing the background color of the bottom bar.</P>

<H3>Leanback for Android TV</H3>
<P>The <a href="http://developer.android.com/tools/support-library/features.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog#v17-leanback">Leanback Library</a> gives you the tools you need to easily <a href="https://www.youtube.com/watch?v=yT4ADuZGEVY&utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">bring your app to Android TV</a> with many standard components optimized for the TV experience. The <a href="http://developer.android.com/reference/android/support/v17/leanback/app/GuidedStepFragment.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">GuidedStepFragment</font></a> received a significant set of improvements with this release.</P>
<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-YmvEulQtB5o/VsyqlGkmHXI/AAAAAAAACmg/DZxERRItP0Q/s1600/image02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-YmvEulQtB5o/VsyqlGkmHXI/AAAAAAAACmg/DZxERRItP0Q/s640/image02.png" /></a></div>
<P>The most visible change may be the introduce of a second column used for action buttons (added by overriding <FONT FACE="Monaco">onCreateButtonActions()</font> or calling <FONT FACE="Monaco">setButtonActions()</font>). This makes it much easier to reach completion actions without having to scroll through the list of available <a href="http://developer.android.com/reference/android/support/v17/leanback/widget/GuidedAction.html?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog"><FONT FACE="Monaco">GuidedActions</font></a>.</P>

<P>Speaking of <FONT FACE="Monaco">GuidedActions</font>, there’s a number of new features to allow richer input including editable descriptions (via <FONT FACE="Monaco">descriptionEditable()</font>), sub actions in the form of a dropdown (with <FONT FACE="Monaco">subActions()</font>), and a <FONT FACE="Monaco">GuidedDatePickerAction.</font></P>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-FahHAG7DavY/VszPhjBLnzI/AAAAAAAACm0/i7OXfxFI3-Q/s1600/tv_combined_image.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-FahHAG7DavY/VszPhjBLnzI/AAAAAAAACm0/i7OXfxFI3-Q/s640/tv_combined_image.png" /></a></div>

<P>These components should make it much easier for you to get information from the user when absolutely required.</P>

<H3>Available Now</H3>
<P>Version 23.2 of the Android Support Library is available via your SDK Manager and Android Studio. Take advantage of all of the new features as well as additional bug fixes starting now! As always, file bug reports at <a href="https://code.google.com/p/android/issues/entry?template=Support%20Library%20bug&utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">b.android.com</a> and connect with other developers on the <a href="https://plus.google.com/communities/105153134372062985968?utm_campaign=android_launch_supportlibrary23.2_022216&utm_source=anddev&utm_medium=blog">Android Development Google+ community</a>.</P>













]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-support-library-23-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Using Credentials between your Server and Google Services</title>
		<link>https://googledata.org/google-android/using-credentials-between-your-server-and-google-services/</link>
		<comments>https://googledata.org/google-android/using-credentials-between-your-server-and-google-services/#comments</comments>
		<pubDate>Sat, 20 Feb 2016 01:05:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

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

<p>This is part 4 of a series on Google Sign-In that began with a blog post on the <a href="http://android-developers.blogspot.com/2015/11/improvements-to-sign-in-with-google.html">user experience improvements</a> that launched with Google Play services 8.3. We then discussed the <a href="http://android-developers.blogspot.com/2015/12/api-updates-for-sign-in-with-google.html">API updates</a> that make the programming model much easier. Most recently, we went into how you can use Google Sign-In to <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">authenticate a user with your backend server.</a></p>

<p>In this post, we&#8217;ll discuss how you can have your users sign in via your app to authorize your service for access to Google APIs, such as Google Drive, on their behalf.</p>

<p>When using Google Sign-In, it is easy to extend your integration with Google by requesting additional scopes for API access after sign-in, like storing the user&#8217;s pictures of food in Google Drive. Typically, you should request this access incrementally (not at initial sign-in) -- i.e. in the context of a user&#8217;s actions (for example, after an app user&#8217;s order has been delivered and they&#8217;d like to save a copy of their food photos), following <a href="https://developers.google.com/identity/sign-in/android/additional-scopes?utm_campaign=android_discussion_server_021116&#38;utm_source=anddev&#38;utm_medium=blog">best practices</a> in user experience to make it most likely that the user will grant access, and aligning with the runtime <a href="https://www.google.com/design/spec/patterns/permissions.html#permissions-request-patterns">permissions model</a> in Android Marshmallow 6.0.</p>

<p>When you do this kind of integration, you probably want to access data from your server, so that you can continue to have access when the user is offline, or to store user-generated data in your own database. This flow would look like Figure 1. This also has the advantage of working across all platforms.</p>
<br /><a href="https://3.bp.blogspot.com/-dKvi7d9Rm2E/VsdbSnRAh2I/AAAAAAAACls/AiMNBKh8n4w/s1600/image00.png"><img border="0" src="https://3.bp.blogspot.com/-dKvi7d9Rm2E/VsdbSnRAh2I/AAAAAAAACls/AiMNBKh8n4w/s640/image00.png"></a>
<b></b><p>Figure 1. Accessing Google Services with Credentials.</p>

<p>To do this, follow these steps:</p>

<p><u>Step 1:</u> As with the scenario in server authentication covered in the <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">previous post</a>, this <a href="https://github.com/lmoroney/google-services/tree/master/android/signin">sample</a> provides canonical code for your Android app. In particular see the <a href="https://github.com/lmoroney/google-services/blob/master/android/signin/app/src/main/java/com/google/samples/quickstart/signin/ServerAuthCodeActivity.java">ServerAuthCodeActivity</a>. </p>
<br /><pre><code> GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)  
     <b> .requestScopes(new Scope(Scopes.DRIVE_APPFOLDER))  
      // The serverClientId is an OAuth 2.0 web client ID  
     // Details at: <a href="https://developers.google.com/identity/sign-in/android/start?utm_campaign=android_discussion_server_021116&#38;utm_source=anddev&#38;utm_medium=blog">https://developers.google.com/identity/sign-in/android/?utm_campaign=android_discussion_server_021116&#38;utm_source=anddev&#38;utm_medium=blog</a>start step 4  
     .requestServerAuthCode(serverClientId)</b>  
     .requestEmail()  
     .build();  
</code></pre>

<p>This requires you to get a <b>web</b> client ID for your server. Details on how to obtain this are available <a href="https://developers.google.com/identity/sign-in/android/start?utm_campaign=android_discussion_server_021116&#38;utm_source=anddev&#38;utm_medium=blog">here</a> (see Step 4).</p>

<p>In this case, the scope DRIVE_APPFOLDER is requested, meaning that the user will be asked to give the app permission to access their Google Drive. In addition to this, a server auth code will be requested.</p>

<p>If the sign-in is successful, the auth code can be extracted from the account object like this:</p>
<br /><pre><code> if (result.isSuccess()) {  
     GoogleSignInAccount acct = result.getSignInAccount();  
     String authCode = acct.getServerAuthCode();  
 }  
</code></pre>

<p>(Taken from onActivityResult in the sample <a href="https://github.com/lmoroney/google-services/blob/master/android/signin/app/src/main/java/com/google/samples/quickstart/signin/ServerAuthCodeActivity.java">here</a>)</p>

<p>This auth code should then be sent to your server using HTTPS POST, and, after it is exchanged, will give your server access to the user&#8217;s Google Drive. [Important: you should send the code in an authenticated call to your backend to ensure that it is a legitimate request from the active user]. </p>

<p><u>Step 2:</u> On your server, you will then exchange the auth code for tokens using the <a href="https://developers.google.com/api-client-library/java/google-api-java-client/reference/1.20.0/com/google/api/client/googleapis/auth/oauth2/GoogleAuthorizationCodeTokenRequest?utm_campaign=android_discussion_server_021116&#38;utm_source=anddev&#38;utm_medium=blog">GoogleAuthorizationCodeTokenRequest</a> class:</p>
<br /><pre><code> // Set path to the Web application client_secret_*.json file you downloaded from the  
 // Google Developers Console: https://console.developers.google.com/project/_/apiui/credential  
 // You can also find your Web application client ID and client secret from the  
 // console and specify them directly when you create the GoogleAuthorizationCodeTokenRequest  
 // object.  
 String CLIENT_SECRET_FILE = "/path/to/client_secret.json"; // Be careful not to share this!  
 String REDIRECT_URI = "/path/to/web_app_redirect" // Can be empty if you don&#8217;t use web redirects  
 // Exchange auth code for access token  
 GoogleClientSecrets clientSecrets =  
     GoogleClientSecrets.load(  
         JacksonFactory.getDefaultInstance(), new FileReader(CLIENT_SECRET_FILE));  
 GoogleTokenResponse tokenResponse =  
            new GoogleAuthorizationCodeTokenRequest(  
                new NetHttpTransport(),  
                JacksonFactory.getDefaultInstance(),  
               "https://www.googleapis.com/oauth2/v4/token",  
                clientSecrets.getDetails().getClientId(),  
                clientSecrets.getDetails().getClientSecret(),  
                authCode,  
                REDIRECT_URI)  
               .execute();  
 String accessToken = tokenResponse.getAccessToken();  
 String refreshToken = tokenResponse.getRefreshToken();  
 Long expiresInSeconds = tokenResponse.getExpiresInSeconds();  
 // You can also get an ID token from the exchange result if basic profile scopes are requested  
 // e.g. starting GoogleSignInOptions.Builder from GoogleSignInOptions.DEFAULT_SIGN_IN like the  
 // sample code as used here: http://goo.gl/0Unpq8   
 //  
 // GoogleIdToken googleIdToken = tokenResponse.parseIdToken();  
</code></pre>

<p>Then, create a <a href="https://developers.google.com/api-client-library/java/google-api-java-client/reference/1.20.0/com/google/api/client/googleapis/auth/oauth2/GoogleCredential?utm_campaign=android_discussion_server_021116&#38;utm_source=anddev&#38;utm_medium=blog">GoogleCredential</a> object using the tokens from GoogleTokenResponse:</p>
<br /><pre><code> GoogleCredential credential = new GoogleCredential.Builder()  
          .setTransport(new NetHttpTransport())  
          .setJsonFactory(JacksonFactory.getDefaultInstance())  
          .setClientSecrets(clientSecrets)  
          .build();  
 credential.setAccessToken(accessToken);  
 credential.setExpiresInSeconds(expiresInSeconds);  
 credential.setRefreshToken(refreshToken);  
</code></pre>

<p>If a refresh token is available, you can persist the credentials using <a href="https://developers.google.com/api-client-library/java/google-oauth-java-client/reference/1.20.0/com/google/api/client/auth/oauth2/StoredCredential?utm_campaign=android_discussion_server_021116&#38;utm_source=anddev&#38;utm_medium=blog">StoredCredential</a> for later use if you need ongoing access to the API on behalf of the user.</p>

<p><u>Step 3:</u> The credential can then be used to access Google services. Now, in our food delivery scenario, you might want to store or retrieve photos or receipts of finished deliveries in Google Drive. For example, it would look something like this:</p>
<br /><pre><code> Drive drive = new Drive.Builder(new NetHttpTransport(),   
                                 JacksonFactory.getDefaultInstance(),   
                                 credential)  
       .setApplicationName("Auth Code Exchange Demo")  
       .build();  
 File file = drive.files().get("appfolder").execute();  
</code></pre>

<p>This demonstrates the use of Google Sign-In credentials where your server can make Google API calls on behalf of your users. To learn more about this, and all Google Sign In technologies, visit the <a href="https://developers.google.com/identity/?utm_campaign=android_discussion_server_021116&#38;utm_source=anddev&#38;utm_medium=blog">Google Identity Platform</a> website.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by <a href="https://plus.google.com/b/108967384991768947849/+LaurenceMoroney/posts">Laurence Moroney</a>, Developer Advocate</p></i>

<p>This is part 4 of a series on Google Sign-In that began with a blog post on the <a href="http://android-developers.blogspot.com/2015/11/improvements-to-sign-in-with-google.html">user experience improvements</a> that launched with Google Play services 8.3. We then discussed the <a href="http://android-developers.blogspot.com/2015/12/api-updates-for-sign-in-with-google.html">API updates</a> that make the programming model much easier. Most recently, we went into how you can use Google Sign-In to <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">authenticate a user with your backend server.</a></p>

<p>In this post, we’ll discuss how you can have your users sign in via your app to authorize your service for access to Google APIs, such as Google Drive, on their behalf.</p>

<p>When using Google Sign-In, it is easy to extend your integration with Google by requesting additional scopes for API access after sign-in, like storing the user’s pictures of food in Google Drive. Typically, you should request this access incrementally (not at initial sign-in) -- i.e. in the context of a user’s actions (for example, after an app user’s order has been delivered and they’d like to save a copy of their food photos), following <a href="https://developers.google.com/identity/sign-in/android/additional-scopes?utm_campaign=android_discussion_server_021116&utm_source=anddev&utm_medium=blog">best practices</a> in user experience to make it most likely that the user will grant access, and aligning with the runtime <a href="https://www.google.com/design/spec/patterns/permissions.html#permissions-request-patterns">permissions model</a> in Android Marshmallow 6.0.</p>

<p>When you do this kind of integration, you probably want to access data from your server, so that you can continue to have access when the user is offline, or to store user-generated data in your own database. This flow would look like Figure 1. This also has the advantage of working across all platforms.</p>
<br>
<a href="https://3.bp.blogspot.com/-dKvi7d9Rm2E/VsdbSnRAh2I/AAAAAAAACls/AiMNBKh8n4w/s1600/image00.png" imageanchor="1" ><img border="0" src="https://3.bp.blogspot.com/-dKvi7d9Rm2E/VsdbSnRAh2I/AAAAAAAACls/AiMNBKh8n4w/s640/image00.png" /></a>
<b><p>Figure 1. Accessing Google Services with Credentials.</p></b>

<p>To do this, follow these steps:</p>

<p><u>Step 1:</u> As with the scenario in server authentication covered in the <a href="http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html">previous post</a>, this <a href="https://github.com/lmoroney/google-services/tree/master/android/signin">sample</a> provides canonical code for your Android app. In particular see the <a href="https://github.com/lmoroney/google-services/blob/master/android/signin/app/src/main/java/com/google/samples/quickstart/signin/ServerAuthCodeActivity.java">ServerAuthCodeActivity</a>. </p>
<br>
<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)  
     <b> .requestScopes(new Scope(Scopes.DRIVE_APPFOLDER))  
      // The serverClientId is an OAuth 2.0 web client ID  
     // Details at: <a href="https://developers.google.com/identity/sign-in/android/start?utm_campaign=android_discussion_server_021116&utm_source=anddev&utm_medium=blog">https://developers.google.com/identity/sign-in/android/?utm_campaign=android_discussion_server_021116&utm_source=anddev&utm_medium=blog</a>start step 4  
     .requestServerAuthCode(serverClientId)</b>  
     .requestEmail()  
     .build();  
</code></pre>

<p>This requires you to get a <b>web</b> client ID for your server. Details on how to obtain this are available <a href="https://developers.google.com/identity/sign-in/android/start?utm_campaign=android_discussion_server_021116&utm_source=anddev&utm_medium=blog">here</a> (see Step 4).</p>

<p>In this case, the scope DRIVE_APPFOLDER is requested, meaning that the user will be asked to give the app permission to access their Google Drive. In addition to this, a server auth code will be requested.</p>

<p>If the sign-in is successful, the auth code can be extracted from the account object like this:</p>
<br>
<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> if (result.isSuccess()) {  
     GoogleSignInAccount acct = result.getSignInAccount();  
     String authCode = acct.getServerAuthCode();  
 }  
</code></pre>

<p>(Taken from onActivityResult in the sample <a href="https://github.com/lmoroney/google-services/blob/master/android/signin/app/src/main/java/com/google/samples/quickstart/signin/ServerAuthCodeActivity.java">here</a>)</p>

<p>This auth code should then be sent to your server using HTTPS POST, and, after it is exchanged, will give your server access to the user’s Google Drive. [Important: you should send the code in an authenticated call to your backend to ensure that it is a legitimate request from the active user]. </p>

<p><u>Step 2:</u> On your server, you will then exchange the auth code for tokens using the <a href="https://developers.google.com/api-client-library/java/google-api-java-client/reference/1.20.0/com/google/api/client/googleapis/auth/oauth2/GoogleAuthorizationCodeTokenRequest?utm_campaign=android_discussion_server_021116&utm_source=anddev&utm_medium=blog">GoogleAuthorizationCodeTokenRequest</a> class:</p>
<br>
<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> // Set path to the Web application client_secret_*.json file you downloaded from the  
 // Google Developers Console: https://console.developers.google.com/project/_/apiui/credential  
 // You can also find your Web application client ID and client secret from the  
 // console and specify them directly when you create the GoogleAuthorizationCodeTokenRequest  
 // object.  
 String CLIENT_SECRET_FILE = "/path/to/client_secret.json"; // Be careful not to share this!  
 String REDIRECT_URI = "/path/to/web_app_redirect" // Can be empty if you don’t use web redirects  
 // Exchange auth code for access token  
 GoogleClientSecrets clientSecrets =  
     GoogleClientSecrets.load(  
         JacksonFactory.getDefaultInstance(), new FileReader(CLIENT_SECRET_FILE));  
 GoogleTokenResponse tokenResponse =  
            new GoogleAuthorizationCodeTokenRequest(  
                new NetHttpTransport(),  
                JacksonFactory.getDefaultInstance(),  
               "https://www.googleapis.com/oauth2/v4/token",  
                clientSecrets.getDetails().getClientId(),  
                clientSecrets.getDetails().getClientSecret(),  
                authCode,  
                REDIRECT_URI)  
               .execute();  
 String accessToken = tokenResponse.getAccessToken();  
 String refreshToken = tokenResponse.getRefreshToken();  
 Long expiresInSeconds = tokenResponse.getExpiresInSeconds();  
 // You can also get an ID token from the exchange result if basic profile scopes are requested  
 // e.g. starting GoogleSignInOptions.Builder from GoogleSignInOptions.DEFAULT_SIGN_IN like the  
 // sample code as used here: http://goo.gl/0Unpq8   
 //  
 // GoogleIdToken googleIdToken = tokenResponse.parseIdToken();  
</code></pre>

<p>Then, create a <a href="https://developers.google.com/api-client-library/java/google-api-java-client/reference/1.20.0/com/google/api/client/googleapis/auth/oauth2/GoogleCredential?utm_campaign=android_discussion_server_021116&utm_source=anddev&utm_medium=blog">GoogleCredential</a> object using the tokens from GoogleTokenResponse:</p>
<br>
<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> GoogleCredential credential = new GoogleCredential.Builder()  
          .setTransport(new NetHttpTransport())  
          .setJsonFactory(JacksonFactory.getDefaultInstance())  
          .setClientSecrets(clientSecrets)  
          .build();  
 credential.setAccessToken(accessToken);  
 credential.setExpiresInSeconds(expiresInSeconds);  
 credential.setRefreshToken(refreshToken);  
</code></pre>

<p>If a refresh token is available, you can persist the credentials using <a href="https://developers.google.com/api-client-library/java/google-oauth-java-client/reference/1.20.0/com/google/api/client/auth/oauth2/StoredCredential?utm_campaign=android_discussion_server_021116&utm_source=anddev&utm_medium=blog">StoredCredential</a> for later use if you need ongoing access to the API on behalf of the user.</p>

<p><u>Step 3:</u> The credential can then be used to access Google services. Now, in our food delivery scenario, you might want to store or retrieve photos or receipts of finished deliveries in Google Drive. For example, it would look something like this:</p>
<br>
<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> Drive drive = new Drive.Builder(new NetHttpTransport(),   
                                 JacksonFactory.getDefaultInstance(),   
                                 credential)  
       .setApplicationName("Auth Code Exchange Demo")  
       .build();  
 File file = drive.files().get("appfolder").execute();  
</code></pre>

<p>This demonstrates the use of Google Sign-In credentials where your server can make Google API calls on behalf of your users. To learn more about this, and all Google Sign In technologies, visit the <a href="https://developers.google.com/identity/?utm_campaign=android_discussion_server_021116&utm_source=anddev&utm_medium=blog">Google Identity Platform</a> website.</p>

]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/using-credentials-between-your-server-and-google-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Get the guide to family app success on Google Play and see how BabyFirst increased installs by 50%</title>
		<link>https://googledata.org/google-android/get-the-guide-to-family-app-success-on-google-play-and-see-how-babyfirst-increased-installs-by-50/</link>
		<comments>https://googledata.org/google-android/get-the-guide-to-family-app-success-on-google-play-and-see-how-babyfirst-increased-installs-by-50/#comments</comments>
		<pubDate>Thu, 18 Feb 2016 18:00:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=ef28f281bf3cd35cba3cfad4dd87cfbb</guid>
		<description><![CDATA[<i></i><p>Posted by Lily Sheringham, The Google Play Apps &#38; Games team</p>

<div><a href="https://play.google.com/store/books/details/Google_Inc_The_Family_Playbook_for_Developers?id=-mi5CgAAQBAJ"><img border="0" src="https://4.bp.blogspot.com/-HQJgRgSTsJE/VsX4Obh__BI/AAAAAAAAClQ/ABsiOFeD2kU/s320/image00.png"></a></div><p>We recently released the second edition of <a href="http://g.co/play/developerguide">The Secrets to App Success on Google Play</a> with more best practices for finding success growing an app or game business on Google Play. Today we&#8217;re sharing our first companion guide for developers, <a href="https://play.google.com/store/books/details/Google_Inc_The_Family_Playbook_for_Developers?id=-mi5CgAAQBAJ">The Family Playbook</a>, which includes information on developing high-quality apps and games for kids and families, along with advice from other developers.</p>

<p>The guide includes advice to help you optimize your user interface design for children, build interactive features that both educate and entertain, develop a business model, understand legal considerations, and plan age-appropriate marketing.</p>

<p>If you create family apps, opt-in to the <a href="http://developer.android.com/distribute/googleplay/families/about.html?utm_campaign=android_series_babyfirst_021816&#38;utm_source=anddev&#38;utm_medium=blog">Designed for Families developer</a> program to designate your apps and games as family-friendly. Apps that meet the program requirements will be featured through Google Play&#8217;s family-friendly search and browse experiences and help parents discover great, age-appropriate content and make more informed choices.</p>

<p>Once you&#8217;ve checked out the guide, we&#8217;d love to hear your feedback so we can continue to improve our developer resources, <a href="http://goo.gl/xZL1No">please let us know what you think</a>.</p>
<b>
</b><p>Android Developer Story: BabyFirst increases installs by 50% with Google Play</p>

<p><a href="https://play.google.com/store/apps/dev?id=4773270709540091084&#38;hl=en">BabyFirst</a> was founded to create good educational content for babies, toddlers and their parents. Their apps now have over 30 million downloads, with 40% more downloads on Google Play than other platforms.</p>

<p><a href="https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c">Watch this Android Developer Story</a> to learn how opting-in to Designed for Families on Google Play, implementing <a href="http://developer.android.com/distribute/users/experiments.html?utm_campaign=android_series_babyfirst_021816&#38;utm_source=anddev&#38;utm_medium=blog">Store Listing Experiments</a>, and <a href="http://developer.android.com/distribute/tools/localization-checklist.html?utm_campaign=android_series_babyfirst_021816&#38;utm_source=anddev&#38;utm_medium=blog">localizing the store listing</a> into 10 languages helped them increase installs by 50% across their portfolio of apps.</p>
<br /><!--[Interactive video]  -->
<br /><p><a href="http://developer.android.com/distribute/googleplay/families/about.html?utm_campaign=android_series_babyfirst_021816&#38;utm_source=anddev&#38;utm_medium=blog">Find out more about the Designed for Families program</a> and <a href="https://play.google.com/store/books/details/Google_Inc_The_Family_Playbook_for_Developers?id=-mi5CgAAQBAJ">download our new Family Playbook</a> to help you find success on Google Play.</p>
<br /><div><a href="https://1.bp.blogspot.com/-wYWBz53yagw/VsX4esqwxSI/AAAAAAAAClY/ElTHOOZ4ja4/s1600/image01.png"><img border="0" src="https://1.bp.blogspot.com/-wYWBz53yagw/VsX4esqwxSI/AAAAAAAAClY/ElTHOOZ4ja4/s200/image01.png"></a></div>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Lily Sheringham, The Google Play Apps & Games team</p></i>

<div class="separator" style="clear: both; text-align: center;"><a href="https://play.google.com/store/books/details/Google_Inc_The_Family_Playbook_for_Developers?id=-mi5CgAAQBAJ" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://4.bp.blogspot.com/-HQJgRgSTsJE/VsX4Obh__BI/AAAAAAAAClQ/ABsiOFeD2kU/s320/image00.png" /></a></div><p>We recently released the second edition of <a href="http://g.co/play/developerguide">The Secrets to App Success on Google Play</a> with more best practices for finding success growing an app or game business on Google Play. Today we’re sharing our first companion guide for developers, <a href="https://play.google.com/store/books/details/Google_Inc_The_Family_Playbook_for_Developers?id=-mi5CgAAQBAJ">The Family Playbook</a>, which includes information on developing high-quality apps and games for kids and families, along with advice from other developers.</p>

<p>The guide includes advice to help you optimize your user interface design for children, build interactive features that both educate and entertain, develop a business model, understand legal considerations, and plan age-appropriate marketing.</p>

<p>If you create family apps, opt-in to the <a href="http://developer.android.com/distribute/googleplay/families/about.html?utm_campaign=android_series_babyfirst_021816&utm_source=anddev&utm_medium=blog">Designed for Families developer</a> program to designate your apps and games as family-friendly. Apps that meet the program requirements will be featured through Google Play’s family-friendly search and browse experiences and help parents discover great, age-appropriate content and make more informed choices.</p>

<p>Once you’ve checked out the guide, we’d love to hear your feedback so we can continue to improve our developer resources, <a href="http://goo.gl/xZL1No">please let us know what you think</a>.</p>
<b>
<p>Android Developer Story: BabyFirst increases installs by 50% with Google Play</p></b>

<p><a href="https://play.google.com/store/apps/dev?id=4773270709540091084&hl=en">BabyFirst</a> was founded to create good educational content for babies, toddlers and their parents. Their apps now have over 30 million downloads, with 40% more downloads on Google Play than other platforms.</p>

<p><a href="https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c">Watch this Android Developer Story</a> to learn how opting-in to Designed for Families on Google Play, implementing <a href="http://developer.android.com/distribute/users/experiments.html?utm_campaign=android_series_babyfirst_021816&utm_source=anddev&utm_medium=blog">Store Listing Experiments</a>, and <a href="http://developer.android.com/distribute/tools/localization-checklist.html?utm_campaign=android_series_babyfirst_021816&utm_source=anddev&utm_medium=blog">localizing the store listing</a> into 10 languages helped them increase installs by 50% across their portfolio of apps.</p>
<BR>
<!--[Interactive video]  --><iframe width="557" height="370" " frameborder="0" src="https://www.youtube.com/embed/mdcTzyGM5vA?list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 80px;" allowfullscreen></iframe>
<br>
<p><a href="http://developer.android.com/distribute/googleplay/families/about.html?utm_campaign=android_series_babyfirst_021816&utm_source=anddev&utm_medium=blog">Find out more about the Designed for Families program</a> and <a href="https://play.google.com/store/books/details/Google_Inc_The_Family_Playbook_for_Developers?id=-mi5CgAAQBAJ">download our new Family Playbook</a> to help you find success on Google Play.</p>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-wYWBz53yagw/VsX4esqwxSI/AAAAAAAAClY/ElTHOOZ4ja4/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-wYWBz53yagw/VsX4esqwxSI/AAAAAAAAClY/ElTHOOZ4ja4/s200/image01.png" /></a></div>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/get-the-guide-to-family-app-success-on-google-play-and-see-how-babyfirst-increased-installs-by-50/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Announcing the People API</title>
		<link>https://googledata.org/google-android/announcing-the-people-api/</link>
		<comments>https://googledata.org/google-android/announcing-the-people-api/#comments</comments>
		<pubDate>Wed, 10 Feb 2016 19:13:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=49e6e58decd8caae369aa768e7f22ad5</guid>
		<description><![CDATA[Posted by Laurence Moroney, Developer Advocate

<div><a href="https://1.bp.blogspot.com/-kevvnRmzMzw/VruKkpumSxI/AAAAAAAACkk/eFQEPNOkxBs/s1600/image00.png"><img border="0" src="https://1.bp.blogspot.com/-kevvnRmzMzw/VruKkpumSxI/AAAAAAAACkk/eFQEPNOkxBs/s400/image00.png"></a></div><p>We&#8217;re delighted to announce the availability of the People API. With it, you can retrieve data about an authenticated user&#8217;s connections from their <a href="https://google.com/contacts">Contacts</a>. Previously, developers had to make multiple calls to the Google+ API for user profiles and the Contacts API for contacts. The new People API uses the newest protocols and technologies and will eventually replace the Contacts API which uses the <a href="https://developers.google.com/gdata/docs/directory?utm_campaign=android_discussion_peopleapi_021016&#38;utm_source=anddev&#38;utm_medium=blog">GData protocol.</a></p>

<p>For example, if your user has contacts in her private contact list, a call to the API (if she provides consent to do so) will retrieve a list containing the contacts merged with any linked profiles. If the user grants the relevant <a href="https://developers.google.com/people/v1/how-tos/authorizing?utm_campaign=android_discussion_peopleapi_021016&#38;utm_source=anddev&#38;utm_medium=blog#connection-scopes">scopes</a>, the results are returned as a <code>people.connections.list</code> object. Each person object in this list will have a <code>resourceName</code> property, which can be used to get additional data about that person with a call to <code>people.get.</code></p>

<p>The API is built on HTTP and JSON, so any standard HTTP client can send requests to it and parse the response. However, applications need to be authorized to access the APIs so you will need to create a project on the Google <a href="https://console.developers.google.com/">Developers Console</a> in order to get the credentials you need to access the service. All the steps to do so are <a href="https://developers.google.com/people/v1/getting-started?utm_campaign=android_discussion_peopleapi_021016&#38;utm_source=anddev&#38;utm_medium=blog">here</a>. If you&#8217;re new to the Google APIs and/or the Developers Console, check out <a href="http://goo.gl/RbyTFD">this first</a> in a series of videos to help you get up-to-speed.</p>

<p>Once you&#8217;re connected and authorized, you can then get the user&#8217;s connections like this (using the <a href="https://developers.google.com/api-client-library/java/?utm_campaign=android_discussion_peopleapi_021016&#38;utm_source=anddev&#38;utm_medium=blog">Google APIs Client Library for Java</a>):</p>
<br /><pre><code> ListConnectionsResponse response =   
     peopleService.people().connections().list("people/me").execute();  
 List&#60;Person&#62; connections = response.getConnections();  
</code></pre>
<br /><p>Full documentation on the people.connections.list method is available <a href="https://developers.google.com/people/api/rest/v1/people.connections/list?utm_campaign=android_discussion_peopleapi_021016&#38;utm_source=anddev&#38;utm_medium=blog">here</a>.</p>

<p>The list of connections will have details on all the user&#8217;s social connections if the required scopes have been granted. Contacts will only be returned if the user granted a contacts <a href="https://developers.google.com/people/v1/how-tos/authorizing?utm_campaign=android_discussion_peopleapi_021016&#38;utm_source=anddev&#38;utm_medium=blog#connection-scopes">scope</a>.</p>

<p>Each Person item will have a resource_name associated with it, so additional data for that person will be accessible via a simple call:</p><p>

<code>Person person = peopleService.people().get("resourceName").execute();</code>

</p><p>Details on this API call can be found <a href="https://developers.google.com/people/api/rest/v1/people/get?utm_campaign=android_discussion_peopleapi_021016&#38;utm_source=anddev&#38;utm_medium=blog">here</a>.</p>

<p>In addition to merging data from multiple sources and APIs into a single cohesive data source, the new People API also exposes additional data that was not possible to get before, such as private addresses, phone numbers, e-mails, and birthdays for a user who has given permission.</p>

<p>We hope that these new features and data along with simplified access to existing data inspires you to create the next generation of cool web and mobile apps that delight your users and those in their circles of influence. To learn more about the People API, check out the official documentation <a href="http://developers.google.com/people?utm_campaign=android_discussion_peopleapi_021016&#38;utm_source=anddev&#38;utm_medium=blog">here</a>.</p>]]></description>
				<content:encoded><![CDATA[Posted by Laurence Moroney, Developer Advocate

<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-kevvnRmzMzw/VruKkpumSxI/AAAAAAAACkk/eFQEPNOkxBs/s1600/image00.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://1.bp.blogspot.com/-kevvnRmzMzw/VruKkpumSxI/AAAAAAAACkk/eFQEPNOkxBs/s400/image00.png" /></a></div><p>We’re delighted to announce the availability of the People API. With it, you can retrieve data about an authenticated user’s connections from their <a href="https://google.com/contacts">Contacts</a>. Previously, developers had to make multiple calls to the Google+ API for user profiles and the Contacts API for contacts. The new People API uses the newest protocols and technologies and will eventually replace the Contacts API which uses the <a href="https://developers.google.com/gdata/docs/directory?utm_campaign=android_discussion_peopleapi_021016&utm_source=anddev&utm_medium=blog">GData protocol.</a></p>

<p>For example, if your user has contacts in her private contact list, a call to the API (if she provides consent to do so) will retrieve a list containing the contacts merged with any linked profiles. If the user grants the relevant <a href="https://developers.google.com/people/v1/how-tos/authorizing?utm_campaign=android_discussion_peopleapi_021016&utm_source=anddev&utm_medium=blog#connection-scopes">scopes</a>, the results are returned as a <code>people.connections.list</code> object. Each person object in this list will have a <code>resourceName</code> property, which can be used to get additional data about that person with a call to <code>people.get.</code></p>

<p>The API is built on HTTP and JSON, so any standard HTTP client can send requests to it and parse the response. However, applications need to be authorized to access the APIs so you will need to create a project on the Google <a href="https://console.developers.google.com/">Developers Console</a> in order to get the credentials you need to access the service. All the steps to do so are <a href="https://developers.google.com/people/v1/getting-started?utm_campaign=android_discussion_peopleapi_021016&utm_source=anddev&utm_medium=blog">here</a>. If you’re new to the Google APIs and/or the Developers Console, check out <a href="http://goo.gl/RbyTFD">this first</a> in a series of videos to help you get up-to-speed.</p>

<p>Once you’re connected and authorized, you can then get the user’s connections like this (using the <a href="https://developers.google.com/api-client-library/java/?utm_campaign=android_discussion_peopleapi_021016&utm_source=anddev&utm_medium=blog">Google APIs Client Library for Java</a>):</p>
<br>
<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> ListConnectionsResponse response =   
     peopleService.people().connections().list("people/me").execute();  
 List&lt;Person&gt; connections = response.getConnections();  
</code></pre>
<br>
<p>Full documentation on the people.connections.list method is available <a href="https://developers.google.com/people/api/rest/v1/people.connections/list?utm_campaign=android_discussion_peopleapi_021016&utm_source=anddev&utm_medium=blog">here</a>.</p>

<p>The list of connections will have details on all the user’s social connections if the required scopes have been granted. Contacts will only be returned if the user granted a contacts <a href="https://developers.google.com/people/v1/how-tos/authorizing?utm_campaign=android_discussion_peopleapi_021016&utm_source=anddev&utm_medium=blog#connection-scopes">scope</a>.</p>

<p>Each Person item will have a resource_name associated with it, so additional data for that person will be accessible via a simple call:<p>

<code>Person person = peopleService.people().get("resourceName").execute();</code>

<p>Details on this API call can be found <a href="https://developers.google.com/people/api/rest/v1/people/get?utm_campaign=android_discussion_peopleapi_021016&utm_source=anddev&utm_medium=blog">here</a>.</p>

<p>In addition to merging data from multiple sources and APIs into a single cohesive data source, the new People API also exposes additional data that was not possible to get before, such as private addresses, phone numbers, e-mails, and birthdays for a user who has given permission.</p>

<p>We hope that these new features and data along with simplified access to existing data inspires you to create the next generation of cool web and mobile apps that delight your users and those in their circles of influence. To learn more about the People API, check out the official documentation <a href="http://developers.google.com/people?utm_campaign=android_discussion_peopleapi_021016&utm_source=anddev&utm_medium=blog">here</a>.</p>













]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/announcing-the-people-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android Studio 2.0 &#8211; Beta</title>
		<link>https://googledata.org/google-android/android-studio-2-0-beta/</link>
		<comments>https://googledata.org/google-android/android-studio-2-0-beta/#comments</comments>
		<pubDate>Fri, 05 Feb 2016 21:03:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=8c00b331ddbb6f676c5178779e35e83d</guid>
		<description><![CDATA[<div><a href="https://4.bp.blogspot.com/-cE71mKJc94w/VrT2tLTxXTI/AAAAAAAACjU/KdygZ1AN0Nc/s1600/image04.png"><img border="0" src="https://4.bp.blogspot.com/-cE71mKJc94w/VrT2tLTxXTI/AAAAAAAACjU/KdygZ1AN0Nc/s200/image04.png"></a></div><i></i><p>Posted by <a href="https://www.google.com/+JamalEason">Jamal Eason</a>, Product Manager, Android</p><p>

</p><p>Android Studio 2.0 is latest release of the official Android IDE focused on build performance and emulator speed to improve the app development experience. With brand new features like Instant Run which enables you to quickly edit and view code changes, or the new &#38; faster Android emulator, Android Studio 2.0 is the upgrade you do not want to miss. In preparation for the final release, you can download Android Studio 2.0 Beta in the <a href="http://tools.android.com/download/studio/beta">Beta release channel</a>. Overall, the Android Studio 2.0 release has a host of new features which include:</p>

<ul><li><b>*Updated for Beta* Instant Run</b> - Enables a faster code edit &#38; app deployment cycle.</li>
  <li><b>*Updated for Beta* Android Emulator </b> - <a href="http://android-developers.blogspot.com/2015/12/android-studio-20-preview-android.html">Brand new emulator</a> that is faster than most real devices, and includes a brand new user interface.</li>
  <li><b>*Updated for Beta* Google App Indexing Integration &#38; Testing </b> - Adding <a href="http://g.co/AppIndexing/AndroidStudio">App Indexing</a> into your app helps you re-engage your users. In the first preview of Android Studio 2.0 you could add indexing code stubs into your code. With the beta release you can now test and validate your URL links in your app all within the IDE.</li>
 <li><b>Fast ADB</b> - Installing and pushing files is now up to 5x faster using Android Studio 2.0 with an updated Android Debug Bridge (ADB) offered in platform-tools 23.1.0.</li>
  <li><b>GPU Profiler Preview</b> - For graphics intensive applications, you can now visually step through your OpenGL ES code to optimize your app or game</li>
  <li><b>Integration of IntelliJ 15</b> - Android Studio is based on the efficient coding platform of Intellij. Check out the new features from IntelliJ <a href="https://www.jetbrains.com/idea/whatsnew/">here</a>.</li>
</ul><p>Check out the latest installment of Android Studio Tool Time video below to watch the highlights of the features.</p>
<br /><!--[Interactive video]  -->
<br /><h3>New Features in Android Studio 2.0 Beta</h3>
<br /><b>
Instant Run</b>

<p>We first <a href="http://android-developers.blogspot.com/2015/11/android-studio-20-preview.html">previewed Instant Run</a> in November; this latest beta release introduces a new capability called Cold Swap</p>

<p>Instant Run in Android Studio 2.0 allows you to quickly make changes to your app code while your app is running on an Android device or Android Emulator. Instead of waiting for your entire app to rebuild and redeploy after each code change, Android Studio 2.0 will try to incrementally build and push only the incremental code or resource change. Depending on the code changes you make, you can see the results of your change in under a second.   By simply updating your app to use the latest Gradle plugin (  '<code>com.android.tools.build:gradle:2.0.0-beta2</code>&#8217;  ), you can take advantage of this time saving features with no other modifications to your code. If your project is setup correctly with Instant Run, you will see a lightning bolt next to your Run button on the toolbar:</p><p>
<br /></p><div><a href="https://4.bp.blogspot.com/-DBI2jT5129Y/VrT23xFifmI/AAAAAAAACjY/KsyAKxaos10/s1600/image06.png"><img border="0" src="https://4.bp.blogspot.com/-DBI2jT5129Y/VrT23xFifmI/AAAAAAAACjY/KsyAKxaos10/s400/image06.png"></a></div>
<p></p>Instant Run Button

<p>Behind the scenes, Android Studio 2.0 instruments your code during the first compilation and deployment of your app to your device in order to determine where to swap out code and resources. The Instant Run features updates your app on a best-effort basis and automatically uses one of the following swap methods to update your app:</p>

<ul><li><b>Hot Swap</b> - When only method implementations (including constructors) are changed, the changes are hot swapped. Your application keeps running and the new implementation is used the next time the method is called.  </li>
  <li><b>Warm Swap</b> - When app resources are changed, the changes are warm swapped. This is similar to a hot swap, except that the current Activity is restarted. You will notice a slight flicker on the screen as the Activity restarts.</li>
  <li><b>*New for Beta* Cold Swap</b> - This will quickly restart the whole application. Typically for structural code change, including changes to the class hierarchy, method signatures, static initializers, or fields. Cold Swap is available when you deploy to targets with API level 21 or above.</li>
</ul><p>We made major changes to Instant Run since the first preview of Android Studio 2.0, and now the feature works with more code and resources cases. We will continue to add more code change cases to Instant Run in future releases of Android Studio. If you have any suggestions, please feel free to send us a feature request and learn more about Instant Run <a href="http://tools.android.com/tech-docs/instant-run">here</a>.</p>

<b></b><p>
App Indexing</p>

<p>
Supporting app indexing is now even easier with Android Studio 2.0. App Indexing puts your app in front of users who use Google Search. It works by indexing the URL patterns you provide in your app manifest and using API calls from your app to make content within your app available to both existing and new users. Specifically, when you support URLs for your app content, your users can go directly to those links from Google Search results on their device.</p>

<ul><li><b>Code Generation</b>
Introduced in Android Studio 2.0 Preview, you can right click on AndroidManifest.xml or Activity method (or go to <b>Code &#8594; Generate&#8230;&#8594; App Indexing API Code</b>) to insert HTTP URL stub codes into your manifest and app code.
</li>
</ul><br /><div><a href="https://4.bp.blogspot.com/-O_SXnqoLMI8/VrT_1TwFAEI/AAAAAAAACj8/WFRMQtxcjTE/s1600/image01.png"><img border="0" src="https://4.bp.blogspot.com/-O_SXnqoLMI8/VrT_1TwFAEI/AAAAAAAACj8/WFRMQtxcjTE/s640/image01.png"></a></div>

<ul><li><b>*New for Beta* URL Testing &#38; Validation</b>
What is new in Android Studio 2.0 Beta is that you can now validate and check the results of your URLs with the built-in validation tool <b>(Tools &#8594; Android &#8594; Google App Indexing Test)</b>. To learn more about app indexing, click <a href="http://g.co/AppIndexing/AndroidStudio">here</a>.</li>
</ul><i></i><p></p>Insert App Indexing API Code into your app
<div><a href="https://1.bp.blogspot.com/-EG5o4HbkjI8/VrUBAGnYLoI/AAAAAAAACkI/V13CcOVHtzw/s1600/image00.png"><img border="0" src="https://1.bp.blogspot.com/-EG5o4HbkjI8/VrUBAGnYLoI/AAAAAAAACkI/V13CcOVHtzw/s640/image00.png"></a></div>
<i></i><p></p>App Indexing Testing
<br /><div><a href="https://1.bp.blogspot.com/--56gUtBaOdk/VrUBQBIdaXI/AAAAAAAACkM/lF_0u0SliPY/s1600/image05.png"><img border="0" src="https://1.bp.blogspot.com/--56gUtBaOdk/VrUBQBIdaXI/AAAAAAAACkM/lF_0u0SliPY/s640/image05.png"></a></div>
<i></i><p></p>App Indexing Test Results

<b></b><p>Android Emulator</p>

<p><b>*Updated for Beta*</b> The <a href="http://android-developers.blogspot.com/2015/12/android-studio-20-preview-android.html">new and faster Android emulator</a> also includes fixes and small enhancements for this beta release.  Notably, we updated the rotation controls on the emulator toolbar and added multi-touch support to help test apps that use pinch &#38; zoom gestures. To use the multi-touch feature, hold down the Alt key on your keyboard and right-click your mouse to center the point of reference or click &#38; drag the left mouse button to zoom.</p>
<br /><div><a href="https://4.bp.blogspot.com/-w0KlXxaj-Bg/VrT3cvcuNzI/AAAAAAAACjs/RCwQO4nbb_w/s1600/image07.gif"><img border="0" src="https://4.bp.blogspot.com/-w0KlXxaj-Bg/VrT3cvcuNzI/AAAAAAAACjs/RCwQO4nbb_w/s400/image07.gif"></a></div>
<i></i><p></p>Pinch &#38; Zoom Gesture with Multi-Touch

<b></b><p>What's Next</p>

<p>Android Studio 2.0 is a big release, and now is good time to check out the beta release to incorporate the new features into your workflow. The beta release is near stable release quality, and should be relatively bug free. But as with any beta release, bugs may still exist, so, if you do find an issue, let us know so we can work to fix it.  If you&#8217;re already using Android Studio, you can check for updates on the Beta channel from the navigation menu (Help &#8594; Check for Update [Windows/Linux] , Android Studio &#8594; Check for Updates [OS X]). When you update to beta, you will get access to the new version of Android Studio and Android Emulator. </p>

<p>Connect with us, the Android Studio development team, on <a href="https://plus.google.com/communities/114791428968349268860">Google+</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-cE71mKJc94w/VrT2tLTxXTI/AAAAAAAACjU/KdygZ1AN0Nc/s1600/image04.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://4.bp.blogspot.com/-cE71mKJc94w/VrT2tLTxXTI/AAAAAAAACjU/KdygZ1AN0Nc/s200/image04.png" /></a></div><i><p>Posted by <a href="https://www.google.com/+JamalEason">Jamal Eason</a>, Product Manager, Android<p></i>

<p>Android Studio 2.0 is latest release of the official Android IDE focused on build performance and emulator speed to improve the app development experience. With brand new features like Instant Run which enables you to quickly edit and view code changes, or the new & faster Android emulator, Android Studio 2.0 is the upgrade you do not want to miss. In preparation for the final release, you can download Android Studio 2.0 Beta in the <a href="http://tools.android.com/download/studio/beta">Beta release channel</a>. Overall, the Android Studio 2.0 release has a host of new features which include:</p>

<ul>
  <li><b>*<font color="#0000FF">Updated for Beta</font>* Instant Run</b> - Enables a faster code edit & app deployment cycle.</li>
  <li><b>*<font color="#0000FF">Updated for Beta</font>* Android Emulator </b> - <a href="http://android-developers.blogspot.com/2015/12/android-studio-20-preview-android.html">Brand new emulator</a> that is faster than most real devices, and includes a brand new user interface.</li>
  <li><b>*<font color="#0000FF">Updated for Beta</font>* Google App Indexing Integration & Testing </b> - Adding <a href="http://g.co/AppIndexing/AndroidStudio">App Indexing</a> into your app helps you re-engage your users. In the first preview of Android Studio 2.0 you could add indexing code stubs into your code. With the beta release you can now test and validate your URL links in your app all within the IDE.</li>
 <li><b>Fast ADB</b> - Installing and pushing files is now up to 5x faster using Android Studio 2.0 with an updated Android Debug Bridge (ADB) offered in platform-tools 23.1.0.</li>
  <li><b>GPU Profiler Preview</b> - For graphics intensive applications, you can now visually step through your OpenGL ES code to optimize your app or game</li>
  <li><b>Integration of IntelliJ 15</b> - Android Studio is based on the efficient coding platform of Intellij. Check out the new features from IntelliJ <a href="https://www.jetbrains.com/idea/whatsnew/">here</a>.</li>
</ul>

<p>Check out the latest installment of Android Studio Tool Time video below to watch the highlights of the features.</p>
<BR>
<!--[Interactive video]  --><iframe width="557" height="370" " frameborder="0" src="https://www.youtube.com/embed/xxx3Fn7EowU?list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 80px;" allowfullscreen></iframe>
<br>
<h3>New Features in Android Studio 2.0 Beta</h3>
<br>
<b>
Instant Run</b>

<p>We first <a href="http://android-developers.blogspot.com/2015/11/android-studio-20-preview.html">previewed Instant Run</a> in November; this latest beta release introduces a new capability called Cold Swap</p>

<p>Instant Run in Android Studio 2.0 allows you to quickly make changes to your app code while your app is running on an Android device or Android Emulator. Instead of waiting for your entire app to rebuild and redeploy after each code change, Android Studio 2.0 will try to incrementally build and push only the incremental code or resource change. Depending on the code changes you make, you can see the results of your change in under a second.   By simply updating your app to use the latest Gradle plugin (  '<code>com.android.tools.build:gradle:2.0.0-beta2</code>’  ), you can take advantage of this time saving features with no other modifications to your code. If your project is setup correctly with Instant Run, you will see a lightning bolt next to your Run button on the toolbar:<p>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-DBI2jT5129Y/VrT23xFifmI/AAAAAAAACjY/KsyAKxaos10/s1600/image06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-DBI2jT5129Y/VrT23xFifmI/AAAAAAAACjY/KsyAKxaos10/s400/image06.png" /></a></div>
<p><center>Instant Run Button</p></center>

<p>Behind the scenes, Android Studio 2.0 instruments your code during the first compilation and deployment of your app to your device in order to determine where to swap out code and resources. The Instant Run features updates your app on a best-effort basis and automatically uses one of the following swap methods to update your app:</p>

<ul>
  <li><b>Hot Swap</b> - When only method implementations (including constructors) are changed, the changes are hot swapped. Your application keeps running and the new implementation is used the next time the method is called.  </li>
  <li><b>Warm Swap</b> - When app resources are changed, the changes are warm swapped. This is similar to a hot swap, except that the current Activity is restarted. You will notice a slight flicker on the screen as the Activity restarts.</li>
  <li><b>*<font color="#0000FF">New for Beta</font>* Cold Swap</b> - This will quickly restart the whole application. Typically for structural code change, including changes to the class hierarchy, method signatures, static initializers, or fields. Cold Swap is available when you deploy to targets with API level 21 or above.</li>
</ul>

<p>We made major changes to Instant Run since the first preview of Android Studio 2.0, and now the feature works with more code and resources cases. We will continue to add more code change cases to Instant Run in future releases of Android Studio. If you have any suggestions, please feel free to send us a feature request and learn more about Instant Run <a href="http://tools.android.com/tech-docs/instant-run">here</a>.</p>

<b><p>
App Indexing</p></b>

<p>
Supporting app indexing is now even easier with Android Studio 2.0. App Indexing puts your app in front of users who use Google Search. It works by indexing the URL patterns you provide in your app manifest and using API calls from your app to make content within your app available to both existing and new users. Specifically, when you support URLs for your app content, your users can go directly to those links from Google Search results on their device.</p>

<ul>
  <li><b>Code Generation</b>
Introduced in Android Studio 2.0 Preview, you can right click on AndroidManifest.xml or Activity method (or go to <b>Code → Generate…→ App Indexing API Code</b>) to insert HTTP URL stub codes into your manifest and app code.
</li>
</ul>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-O_SXnqoLMI8/VrT_1TwFAEI/AAAAAAAACj8/WFRMQtxcjTE/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-O_SXnqoLMI8/VrT_1TwFAEI/AAAAAAAACj8/WFRMQtxcjTE/s640/image01.png" /></a></div>

<ul>
  <li><b>*<font color="#0000FF">New for Beta</font>* URL Testing & Validation</b>
What is new in Android Studio 2.0 Beta is that you can now validate and check the results of your URLs with the built-in validation tool <b>(Tools → Android → Google App Indexing Test)</b>. To learn more about app indexing, click <a href="http://g.co/AppIndexing/AndroidStudio">here</a>.</li>
</ul>
<i><p><center>Insert App Indexing API Code into your app</p></center></i>
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-EG5o4HbkjI8/VrUBAGnYLoI/AAAAAAAACkI/V13CcOVHtzw/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-EG5o4HbkjI8/VrUBAGnYLoI/AAAAAAAACkI/V13CcOVHtzw/s640/image00.png" /></a></div>
<i><p><center>App Indexing Testing</p></center></i>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/--56gUtBaOdk/VrUBQBIdaXI/AAAAAAAACkM/lF_0u0SliPY/s1600/image05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/--56gUtBaOdk/VrUBQBIdaXI/AAAAAAAACkM/lF_0u0SliPY/s640/image05.png" /></a></div>
<i><p><center>App Indexing Test Results</p></center></i>

<b><p>Android Emulator</p></b>

<p><b>*<font color="#0000FF">Updated for Beta</font>*</b> The <a href="http://android-developers.blogspot.com/2015/12/android-studio-20-preview-android.html">new and faster Android emulator</a> also includes fixes and small enhancements for this beta release.  Notably, we updated the rotation controls on the emulator toolbar and added multi-touch support to help test apps that use pinch & zoom gestures. To use the multi-touch feature, hold down the Alt key on your keyboard and right-click your mouse to center the point of reference or click & drag the left mouse button to zoom.</p>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-w0KlXxaj-Bg/VrT3cvcuNzI/AAAAAAAACjs/RCwQO4nbb_w/s1600/image07.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-w0KlXxaj-Bg/VrT3cvcuNzI/AAAAAAAACjs/RCwQO4nbb_w/s400/image07.gif" /></a></div>
<i><p><center>Pinch & Zoom Gesture with Multi-Touch</p></center></i>

<b><p>What's Next</p></b>

<p>Android Studio 2.0 is a big release, and now is good time to check out the beta release to incorporate the new features into your workflow. The beta release is near stable release quality, and should be relatively bug free. But as with any beta release, bugs may still exist, so, if you do find an issue, let us know so we can work to fix it.  If you’re already using Android Studio, you can check for updates on the Beta channel from the navigation menu (Help → Check for Update [Windows/Linux] , Android Studio → Check for Updates [OS X]). When you update to beta, you will get access to the new version of Android Studio and Android Emulator. </p>

<p>Connect with us, the Android Studio development team, on <a href="https://plus.google.com/communities/114791428968349268860">Google+</a>.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-studio-2-0-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Project Tango workshops help bring indoor location apps to life</title>
		<link>https://googledata.org/google-android/project-tango-workshops-help-bring-indoor-location-apps-to-life/</link>
		<comments>https://googledata.org/google-android/project-tango-workshops-help-bring-indoor-location-apps-to-life/#comments</comments>
		<pubDate>Thu, 04 Feb 2016 17:21:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=0a719e4c473ea363b5e8a6b07894afdd</guid>
		<description><![CDATA[<i></i><p>Posted by Eitan Marder-Eppstein, Developer Engineering Lead, Project Tango</p>

<p>GPS helps us find our way outside whether it is turn by turn navigation to the nearest grocery or just getting us oriented in a new city. But once we get indoors, it is not quite as easy - GPS doesn't work, with accuracy dropping and navigation becoming all but impossible. This is one of the reasons why we started Project Tango, which has centimeter-scale accuracy of a device&#8217;s location, allowing better navigation and experiences in indoor spaces.</p>

<p>
Over the past few weeks, we&#8217;ve been collecting amazing ideas from around the world for great apps for <a href="http://android-developers.blogspot.com/2016/01/get-your-app-featured-on-first.html">Lenovo&#8217;s Project Tango-powered phone</a>. (Have an idea? If you can dream it, you can <a href="https://www.google.com/atap/project-tango/app-incubator/">submit it</a>!) As part of this program we're hosting workshops, focused on specific Tango features. And we just wrapped up a session that we hosted with <a href="http://www.westfieldlabs.com/">Westfield Lab</a>s devoted to indoor location. Here are some of the highlights:</p>
<br /><!--[Interactive video]  --><br /><p>As you can see, everyone from retail brands to robot startups joined in on the fun&#8212;using Project Tango's motion tracking, depth perception, and area learning capabilities to build some amazing location-based apps. Some of our favorites included:</p>

<ul><li>Wayfair made it possible to look through your phone and visualize how a piece of furniture would look in your home.</li>
  <li>Lowe&#8217;s Innovation Labs improved in-store navigation by overlaying directions to individual items
</li>
  <li>And Aisle411 created a shop-along experience with some of your favorite celebrities</li>
</ul><br /><a href="http://4.bp.blogspot.com/-n55nUGX_jz0/VrOIcCOkgeI/AAAAAAAACis/chKBUbHcH2E/s1600/image00.jpg"><img border="0" src="http://4.bp.blogspot.com/-n55nUGX_jz0/VrOIcCOkgeI/AAAAAAAACis/chKBUbHcH2E/s400/image00.jpg"></a>

<p>The next stop in our series is a utilities workshop, where we'll be going deep on getting things done with Project Tango&#8212;like taking 3D measurements, or mapping your home or building. In the meantime, keep <a href="https://www.google.com/atap/project-tango/app-incubator/">submitting your ideas</a> to the App Incubator (the deadline is February 15!), and we'll see you soon!</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Eitan Marder-Eppstein, Developer Engineering Lead, Project Tango</p></i>

<p>GPS helps us find our way outside whether it is turn by turn navigation to the nearest grocery or just getting us oriented in a new city. But once we get indoors, it is not quite as easy - GPS doesn't work, with accuracy dropping and navigation becoming all but impossible. This is one of the reasons why we started Project Tango, which has centimeter-scale accuracy of a device’s location, allowing better navigation and experiences in indoor spaces.</p>

<p>
Over the past few weeks, we’ve been collecting amazing ideas from around the world for great apps for <a href="http://android-developers.blogspot.com/2016/01/get-your-app-featured-on-first.html">Lenovo’s Project Tango-powered phone</a>. (Have an idea? If you can dream it, you can <a href="https://www.google.com/atap/project-tango/app-incubator/">submit it</a>!) As part of this program we're hosting workshops, focused on specific Tango features. And we just wrapped up a session that we hosted with <a href="http://www.westfieldlabs.com/">Westfield Lab</a>s devoted to indoor location. Here are some of the highlights:</p>
<br>
<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/MZgHoRhffJg" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 50px;" width="560"></iframe><br/>

<p>As you can see, everyone from retail brands to robot startups joined in on the fun—using Project Tango's motion tracking, depth perception, and area learning capabilities to build some amazing location-based apps. Some of our favorites included:</p>

<ul>
  <li>Wayfair made it possible to look through your phone and visualize how a piece of furniture would look in your home.</li>
  <li>Lowe’s Innovation Labs improved in-store navigation by overlaying directions to individual items
</li>
  <li>And Aisle411 created a shop-along experience with some of your favorite celebrities</li>
</ul>  
<br>
<a href="http://4.bp.blogspot.com/-n55nUGX_jz0/VrOIcCOkgeI/AAAAAAAACis/chKBUbHcH2E/s1600/image00.jpg" imageanchor="1" ><img border="0" src="http://4.bp.blogspot.com/-n55nUGX_jz0/VrOIcCOkgeI/AAAAAAAACis/chKBUbHcH2E/s400/image00.jpg" /></a>

<p>The next stop in our series is a utilities workshop, where we'll be going deep on getting things done with Project Tango—like taking 3D measurements, or mapping your home or building. In the meantime, keep <a href="https://www.google.com/atap/project-tango/app-incubator/">submitting your ideas</a> to the App Incubator (the deadline is February 15!), and we'll see you soon!</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/project-tango-workshops-help-bring-indoor-location-apps-to-life/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Marshmallow and User Data</title>
		<link>https://googledata.org/google-android/marshmallow-and-user-data/</link>
		<comments>https://googledata.org/google-android/marshmallow-and-user-data/#comments</comments>
		<pubDate>Mon, 01 Feb 2016 18:09:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=0da5384ebc2723aece82fc75554acb8b</guid>
		<description><![CDATA[<div><img border="0" src="http://3.bp.blogspot.com/-toAmsvnegAM/Vqq8q5s_D9I/AAAAAAAACiY/fjVCn2eYWgE/s520/image00.png"></div>

<p><em>Posted by Joanna Smith, Developer Advocate and Giles Hogben, Google Privacy Team</em></p>

<p>Marshmallow introduced several changes that were designed to help your app look after user data. The goal was to make it easier for developers to do the right thing. So as Android 6.0, Marshmallow, gains traction, we challenge you to do just that.</p>

<p>This post highlights the <strong>key considerations for user trust</strong> when it comes to runtime permissions and hardware identifiers, and points you to <strong><a href="http://developer.android.com/training/best-permissions-ids.html?utm_campaign=android_discussion_marshmallow_020116&#38;utm_source=anddev&#38;utm_medium=blog">new best practices</a></strong> documentation to clarify what to aim for in your own app.</p>

<h3>Permission Changes</h3>
<p>With Marshmallow, <b>permissions have moved from install-time to runtime.</b> This is a mandatory change for SDK 23+, meaning it will affect all developers and all applications targeting Android 6.0. Your app will need to be updated anyway, so your challenge is to do so thoughtfully.</p>

<p>Runtime permissions mean that your app can now request access to sensitive information in the context that it will be used. This gives you a chance to explain the need for the permission, without scaring users with a long list of requests.</p>

<p>Permissions are also now organized into groups, so that users can make an informed decision without needing to understand technical jargon. By allowing your users to make a decision, they may decide not to grant a permission or to revoke a previously-granted permission. So, your app needs to be thoughtful when handling API calls requiring permissions that may have been denied, and about building in graceful failure-handling so that your users can still interact with the rest of your app.</p>

<h3>Identifier Changes</h3>

<p>The other aspect of user trust is doing the right thing with user data. With Marshmallow, we are turning off access to some kinds of data in order to direct developers down this path.</p>

<p>Most notably, <b>Local WiFi and Bluetooth MAC addresses are no longer available.</b> The <code>getMacAddress()</code> method of a <code>WifiInfo object and the BluetoothAdapter.getDefaultAdapter().getAddress()</code> method will both return <code>02:00:00:00:00:00</code> from now on.</p>

<p>
However, <b>Google Play Services now provides Instance IDs</b>, which identify an application instance running on a device. Instance IDs provide a reliable alternative to non-resettable, device-scoped hardware IDs, as they will not persist across a factory reset and are scoped to an app instance. See the Google Developer's <a href="https://developers.google.com/instance-id/?utm_campaign=android_discussion_marshmallow_020116&#38;utm_source=anddev&#38;utm_medium=blog">What is Instance ID?</a> help article for more information.</p>

<h3>What&#8217;s Next</h3>
<p>User trust depends largely on what users see and how they feel. Mishandling permissions and identifiers increases the risk of unwanted/unintended tracking, and can result in users feeling that your app doesn&#8217;t actually care about the user. So to help you get it right, we&#8217;ve created new documentation that should enable developers to be certain that their app is doing the right thing for their users.</p>


<ul><li>Understand how <a href="http://developer.android.com/training/articles/user-data-overview.html?utm_campaign=android_discussion_marshmallow_020116&#38;utm_source=anddev&#38;utm_medium=blog">permissions and user data are linked</a></li>
  <li>Learn more about the <a href="http://developer.android.com/training/articles/user-data-permissions.html?utm_campaign=android_discussion_marshmallow_020116&#38;utm_source=anddev&#38;utm_medium=blog">best practices for permissions</a></li>
  <li>Discover the <a href="http://developer.android.com/training/articles/user-data-ids.html?utm_campaign=android_discussion_marshmallow_020116&#38;utm_source=anddev&#38;utm_medium=blog">best practices for unique identifiers</a>, with clarity based on changes in Marshmallow.</li>
</ul><p>
So happy developing! May your apps make users happy, and may your reviews reflect that. :)
</p>]]></description>
				<content:encoded><![CDATA[<div class="separator" style="clear: both; float: right;"><img border="0" src="http://3.bp.blogspot.com/-toAmsvnegAM/Vqq8q5s_D9I/AAAAAAAACiY/fjVCn2eYWgE/s520/image00.png" /></div>

<p><em>Posted by Joanna Smith, Developer Advocate and Giles Hogben, Google Privacy Team</em></p>

<p>Marshmallow introduced several changes that were designed to help your app look after user data. The goal was to make it easier for developers to do the right thing. So as Android 6.0, Marshmallow, gains traction, we challenge you to do just that.</p>

<p>This post highlights the <strong>key considerations for user trust</strong> when it comes to runtime permissions and hardware identifiers, and points you to <strong><a href="http://developer.android.com/training/best-permissions-ids.html?utm_campaign=android_discussion_marshmallow_020116&utm_source=anddev&utm_medium=blog">new best practices</a></strong> documentation to clarify what to aim for in your own app.</p>

<h3>Permission Changes</h3>
<p>With Marshmallow, <b>permissions have moved from install-time to runtime.</b> This is a mandatory change for SDK 23+, meaning it will affect all developers and all applications targeting Android 6.0. Your app will need to be updated anyway, so your challenge is to do so thoughtfully.</p>

<p>Runtime permissions mean that your app can now request access to sensitive information in the context that it will be used. This gives you a chance to explain the need for the permission, without scaring users with a long list of requests.</p>

<p>Permissions are also now organized into groups, so that users can make an informed decision without needing to understand technical jargon. By allowing your users to make a decision, they may decide not to grant a permission or to revoke a previously-granted permission. So, your app needs to be thoughtful when handling API calls requiring permissions that may have been denied, and about building in graceful failure-handling so that your users can still interact with the rest of your app.</p>

<h3>Identifier Changes</h3>

<p>The other aspect of user trust is doing the right thing with user data. With Marshmallow, we are turning off access to some kinds of data in order to direct developers down this path.</p>

<p>Most notably, <b>Local WiFi and Bluetooth MAC addresses are no longer available.</b> The <code>getMacAddress()</code> method of a <code>WifiInfo object and the BluetoothAdapter.getDefaultAdapter().getAddress()</code> method will both return <code>02:00:00:00:00:00</code> from now on.</p>

<p>
However, <b>Google Play Services now provides Instance IDs</b>, which identify an application instance running on a device. Instance IDs provide a reliable alternative to non-resettable, device-scoped hardware IDs, as they will not persist across a factory reset and are scoped to an app instance. See the Google Developer's <a href="https://developers.google.com/instance-id/?utm_campaign=android_discussion_marshmallow_020116&utm_source=anddev&utm_medium=blog">What is Instance ID?</a> help article for more information.</p>

<h3>What’s Next</h3>
<p>User trust depends largely on what users see and how they feel. Mishandling permissions and identifiers increases the risk of unwanted/unintended tracking, and can result in users feeling that your app doesn’t actually care about the user. So to help you get it right, we’ve created new documentation that should enable developers to be certain that their app is doing the right thing for their users.</p>


<ul>
  <li>Understand how <a href="http://developer.android.com/training/articles/user-data-overview.html?utm_campaign=android_discussion_marshmallow_020116&utm_source=anddev&utm_medium=blog">permissions and user data are linked</a></li>
  <li>Learn more about the <a href="http://developer.android.com/training/articles/user-data-permissions.html?utm_campaign=android_discussion_marshmallow_020116&utm_source=anddev&utm_medium=blog">best practices for permissions</a></li>
  <li>Discover the <a href="http://developer.android.com/training/articles/user-data-ids.html?utm_campaign=android_discussion_marshmallow_020116&utm_source=anddev&utm_medium=blog">best practices for unique identifiers</a>, with clarity based on changes in Marshmallow.</li>
</ul>  

<p>
So happy developing! May your apps make users happy, and may your reviews reflect that. :)
</p>
]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/marshmallow-and-user-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android Developer Story: Travel app Wego, increases monthly user retention by 300% with material design</title>
		<link>https://googledata.org/google-android/android-developer-story-travel-app-wego-increases-monthly-user-retention-by-300-with-material-design/</link>
		<comments>https://googledata.org/google-android/android-developer-story-travel-app-wego-increases-monthly-user-retention-by-300-with-material-design/#comments</comments>
		<pubDate>Wed, 27 Jan 2016 17:12:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

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

<p>Headquartered in Singapore, <a href="https://play.google.com/store/apps/details?id=com.wego.android&#38;hl=en">Wego</a> is a popular online travel marketplace for flights and hotels for users in South East Asia and the Middle East. They launched their Android app in early 2014, and today, more than 62 percent of Wego app users are on Android. Wego recently redesigned their app using material design principles to provide their users a more native Android experience for consistency and easier navigation.</p>

<p>Watch Ross Veitch, co-founder and CEO, and the Wego team talk about how they increased monthly user retention by 300 percent and reduced uninstall rates by up to 25 percent with material design.</p>
<br /><!--[Interactive video]  -->

<p>Learn more about <a href="https://www.google.com/design/spec/material-design/introduction.html">material design</a>, how to use <a href="http://developer.android.com/tools/studio/index.html?utm_campaign=android_update_wego_012716&#38;utm_source=anddev&#38;utm_medium=blog">Android Studio</a>, and how to find success on Google Play with the new guide &#8216;<a href="https://developer.android.com/distribute/googleplay/guide.html?utm_campaign=android_update_wego_012716&#38;utm_source=anddev&#38;utm_medium=blog">Secrets to App Success on Google Play</a>.&#8217;</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Lily Sheringham, Google Play team</p></i>

<p>Headquartered in Singapore, <a href="https://play.google.com/store/apps/details?id=com.wego.android&hl=en">Wego</a> is a popular online travel marketplace for flights and hotels for users in South East Asia and the Middle East. They launched their Android app in early 2014, and today, more than 62 percent of Wego app users are on Android. Wego recently redesigned their app using material design principles to provide their users a more native Android experience for consistency and easier navigation.</p>

<p>Watch Ross Veitch, co-founder and CEO, and the Wego team talk about how they increased monthly user retention by 300 percent and reduced uninstall rates by up to 25 percent with material design.</p>
<BR>
<!--[Interactive video]  --><iframe width="557" height="370" " frameborder="0" src="https://www.youtube.com/embed/J3IvOfvH1ys?list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 80px;" allowfullscreen></iframe>

<p>Learn more about <a href="https://www.google.com/design/spec/material-design/introduction.html">material design</a>, how to use <a href="http://developer.android.com/tools/studio/index.html?utm_campaign=android_update_wego_012716&utm_source=anddev&utm_medium=blog">Android Studio</a>, and how to find success on Google Play with the new guide ‘<a href="https://developer.android.com/distribute/googleplay/guide.html?utm_campaign=android_update_wego_012716&utm_source=anddev&utm_medium=blog">Secrets to App Success on Google Play</a>.’</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-developer-story-travel-app-wego-increases-monthly-user-retention-by-300-with-material-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>How Fabulous and Yummly grew with App Invites</title>
		<link>https://googledata.org/google-android/how-fabulous-and-yummly-grew-with-app-invites/</link>
		<comments>https://googledata.org/google-android/how-fabulous-and-yummly-grew-with-app-invites/#comments</comments>
		<pubDate>Wed, 27 Jan 2016 00:09:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=26943bd58ec9dde8a8f9a6c4837848c3</guid>
		<description><![CDATA[<i></i><p>Posted by Laurence Moroney, Developer Advocate</p>

<p>Introduced in May 2015, App Invites is an out-of-the-box solution for conducting app referrals and encouraging sharing. So far, we&#8217;ve seen very positive results on how the feature improves app discovery. While 52 percent of users discover apps by word of mouth, we have seen 92 percent of users trust recommendations from family and friends with App Invites. In this post, we&#8217;ll share some success stories from companies that have already used App Invites to grow their user base.</p>

<div><a href="http://3.bp.blogspot.com/-ReRbSmTeOG4/VqgKek5HDbI/AAAAAAAACho/UJs2XMyoock/s1600/image00.png"><img border="0" src="http://3.bp.blogspot.com/-ReRbSmTeOG4/VqgKek5HDbI/AAAAAAAACho/UJs2XMyoock/s320/image00.png"></a></div><p><a href="http://www.thefabulous.co/">Fabulous</a> is a research-based app incubated in Duke University's Center for Advanced Hindsight. The app helps users to embark on a journey to resetting poor habits, replacing them with healthy rituals, with the ultimate goal of improving health and well-being.</p>

<p>Users started taking advantage of App Invites within the app to share their experience with their friends and family. <b>App Invites installs now account for 60 percent of all Fabulous installs via referrals. Sharing clicks also increased by 10 percent once App Invites were used. Fabulous</b> also noticed increased user retention, with 2x the Life Time Value of the app for users that came in to it via App Invites. Fabulous simplified their user experience, combining SMS and email into a single interface, allowing users to focus on sharing.</p>

<b></b><p>Additionally, users that were acquired via App Invites versus other channels were found to be twice as likely to stay with the app.</p>

<p>CTO of Fabulous, Amine Laddhari, commented, &#8220;It took me only a few hours to implement App Invites versus several days of work when we built our own solution. It was straightforward!&#8221;</p>

<p>You can view the full case study from Fabulous <a href="https://developers.google.com/app-invites/case-studies/Fabulous.pdf?utm_campaign=app%20invites_discussion_fabulous_012616&#38;utm_source=anddev&#38;utm_medium=blog">here</a>.</p>

<div><a href="http://3.bp.blogspot.com/-QQduQP7CzIg/VqgKkJ8qP9I/AAAAAAAAChw/cQg6_yCEfAw/s1600/image01.png"><img border="0" src="http://3.bp.blogspot.com/-QQduQP7CzIg/VqgKkJ8qP9I/AAAAAAAAChw/cQg6_yCEfAw/s320/image01.png"></a></div><p><b><a href="http://www.yummly.com/">Yummly</a></b>, a food discovery platform that views cooking a meal as a personalized, shareable experience wanted to expand its user base and generate awareness on the Android platform. It added App Invites so that users could recommend the app to their family and friends, giving functionality to share specific recipes, dinner ideas or shipping lists.</p>

<p><b>With App invites, they found that installation rates were about 60 percent higher compared to other sharing channels.</b> Additionally, Yummly was able to take advantage of the seamless integration of Google Analytics. It&#8217;s the only share channel that has this integration, allowing data such as the number of invites sent, accepted and resulting installs to be accurately tracked.</p>

<p>Melissa Guyre, Product Manager at Yummly, commented, &#8220;The App Invites Integration process was seamless. A bonus feature is the excellent tracking tie-in with Google Analytics.&#8221;</p>

<p>You can view the full case study from Yummly <a href="https://developers.google.com/app-invites/case-studies/Yummly.pdf?utm_campaign=app%20invites_discussion_fabulous_012616&#38;utm_source=anddev&#38;utm_medium=blog">here</a>.</p>

<p>App Invites is available for Android or iOS, and you can learn how you can build it into your own apps at g.co/appinvites.</p>]]></description>
				<content:encoded><![CDATA[<i><P>Posted by Laurence Moroney, Developer Advocate</p></i>

<p>Introduced in May 2015, App Invites is an out-of-the-box solution for conducting app referrals and encouraging sharing. So far, we’ve seen very positive results on how the feature improves app discovery. While 52 percent of users discover apps by word of mouth, we have seen 92 percent of users trust recommendations from family and friends with App Invites. In this post, we’ll share some success stories from companies that have already used App Invites to grow their user base.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-ReRbSmTeOG4/VqgKek5HDbI/AAAAAAAACho/UJs2XMyoock/s1600/image00.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://3.bp.blogspot.com/-ReRbSmTeOG4/VqgKek5HDbI/AAAAAAAACho/UJs2XMyoock/s320/image00.png" /></a></div><p><a href="http://www.thefabulous.co/">Fabulous</a> is a research-based app incubated in Duke University's Center for Advanced Hindsight. The app helps users to embark on a journey to resetting poor habits, replacing them with healthy rituals, with the ultimate goal of improving health and well-being.</p>

<p>Users started taking advantage of App Invites within the app to share their experience with their friends and family. <b>App Invites installs now account for 60 percent of all Fabulous installs via referrals. Sharing clicks also increased by 10 percent once App Invites were used. Fabulous</b> also noticed increased user retention, with 2x the Life Time Value of the app for users that came in to it via App Invites. Fabulous simplified their user experience, combining SMS and email into a single interface, allowing users to focus on sharing.</p>

<b><p>Additionally, users that were acquired via App Invites versus other channels were found to be twice as likely to stay with the app.</p></b>

<p>CTO of Fabulous, Amine Laddhari, commented, “It took me only a few hours to implement App Invites versus several days of work when we built our own solution. It was straightforward!”</p>

<p>You can view the full case study from Fabulous <a href="https://developers.google.com/app-invites/case-studies/Fabulous.pdf?utm_campaign=app%20invites_discussion_fabulous_012616&utm_source=anddev&utm_medium=blog">here</a>.</p>

<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-QQduQP7CzIg/VqgKkJ8qP9I/AAAAAAAAChw/cQg6_yCEfAw/s1600/image01.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-QQduQP7CzIg/VqgKkJ8qP9I/AAAAAAAAChw/cQg6_yCEfAw/s320/image01.png" /></a></div><p><b><a href="http://www.yummly.com/">Yummly</a></b>, a food discovery platform that views cooking a meal as a personalized, shareable experience wanted to expand its user base and generate awareness on the Android platform. It added App Invites so that users could recommend the app to their family and friends, giving functionality to share specific recipes, dinner ideas or shipping lists.</p>

<p><b>With App invites, they found that installation rates were about 60 percent higher compared to other sharing channels.</b> Additionally, Yummly was able to take advantage of the seamless integration of Google Analytics. It’s the only share channel that has this integration, allowing data such as the number of invites sent, accepted and resulting installs to be accurately tracked.</p>

<p>Melissa Guyre, Product Manager at Yummly, commented, “The App Invites Integration process was seamless. A bonus feature is the excellent tracking tie-in with Google Analytics.”</p>

<p>You can view the full case study from Yummly <a href="https://developers.google.com/app-invites/case-studies/Yummly.pdf?utm_campaign=app%20invites_discussion_fabulous_012616&utm_source=anddev&utm_medium=blog">here</a>.</p>

<p>App Invites is available for Android or iOS, and you can learn how you can build it into your own apps at g.co/appinvites.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/how-fabulous-and-yummly-grew-with-app-invites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>New features to better understand player behavior with Player Analytics</title>
		<link>https://googledata.org/google-android/new-features-to-better-understand-player-behavior-with-player-analytics/</link>
		<comments>https://googledata.org/google-android/new-features-to-better-understand-player-behavior-with-player-analytics/#comments</comments>
		<pubDate>Mon, 25 Jan 2016 17:24:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=cb4f57c7ce407038c033ba86de558e31</guid>
		<description><![CDATA[<i></i><p>Posted by Lily Sheringham, Developer Marketing at Google Play</p>

<p>Google Play games services includes Player Analytics, a free reporting tool available in the Google Play Developer Console, to help you understand how players are progressing, spending, and churning. Now, you can see what Player Analytics looks like with an exemplary implementation of Play games services: try out the new <a href="https://play.google.com/apps/publish/?#BusinessDriversPlace:gt=1059826392430">sample game</a> in the Google Play Developer Console, which we produced with help from <a href="https://play.google.com/store/apps/developer?id=Auxbrain+Inc&#38;hl=en_GB">Auxbrain</a>, developer of <a href="https://play.google.com/store/apps/details?id=com.auxbrain.zh2&#38;hl=en_GB">Zombie Highway 2</a>. The <a href="https://play.google.com/apps/publish/?#BusinessDriversPlace:gt=1059826392430">sample game</a> uses randomized and anonymized data from a real game and will also let you try the new features we&#8217;re announcing today. Note: You need a <a href="https://support.google.com/googleplay/android-developer/answer/6112435"><i>Google Play Developer account</i></a> in order to access the <i>sample game.<a href="https://play.google.com/apps/publish/?#BusinessDriversPlace:gt=1059826392430"></a></i></p>
<b>
<h3>Use predictive analytics to engage players before they might churn</h3></b>

<p>To help you better understand your players&#8217; behavior, we&#8217;ve extended the Player Stats API in Player Analytics with predictive functionality. The churn prediction method will return data on the probability that the player will churn, i.e., stop playing the game, so you can create content in response to this to entice them to stay in your game. Additionally, the spend prediction method will return the probability that the player will spend, and you could, for example, provide discounted in-app purchases or show ads based on these insights.</p>
<b>
<h3>Create charts in the new funnels report to quickly visualize sequences of events</h3></b>

<p>The funnels report enables you to create a funnel chart from any sequence events, such as achievements, spend, and custom events. For example, you could log custom events for each step in a tutorial flow (e.g., tutorial step 1, step 2, step 3), and then use the funnel report to visualize the exit points in your tutorial.</p>
<br /><div><a href="http://2.bp.blogspot.com/-ROsTzjmFOE8/VqZZbDalxuI/AAAAAAAAChI/8h3ARxIlwpk/s1600/image00.png"><img border="0" src="http://2.bp.blogspot.com/-ROsTzjmFOE8/VqZZbDalxuI/AAAAAAAAChI/8h3ARxIlwpk/s640/image00.png"></a></div>
<b>
<h3>Measure and compare the effect of changes and cumulative values by new users with cohort&#8217;s report</h3></b>

<p>The cohorts report allows you to take any event such as sessions, cumulative spend, and custom events, and compare the cumulative event values by new user cohorts - providing valuable insight into the impact of your decisions on your gaming model. For example, you can view users that started the day before you made a change and the day after. This allows you to measure and compare the effect of changes made, so if you doubled the price of all your items in your in-game store, you can see if the cumulative sessions started after the change was lower or higher than the users that started before the change.</p>
<br /><div><a href="http://3.bp.blogspot.com/-z1IumLkBm3A/VqZZgnJmEaI/AAAAAAAAChQ/QX9kkrGOcZs/s1600/image01.png"><img border="0" src="http://3.bp.blogspot.com/-z1IumLkBm3A/VqZZgnJmEaI/AAAAAAAAChQ/QX9kkrGOcZs/s640/image01.png"></a></div>
<b><h3>Updated C++, iOS SDKs and Unity plug-in to support Player Stats API</h3></b>

<p>
We have updated the C++ and iOS SDKs, and the Unity plug-in, all of which now support the Player Stats API, which includes the basic player stats as well as spend and churn predictions. 

Be sure to check out the <a href="https://play.google.com/apps/publish/?#BusinessDriversPlace:gt=1059826392430">sample game</a> and <a href="https://developers.google.com/games/services/?utm_campaign=play%20services_discussion_analytics_012516&#38;utm_source=anddev&#38;utm_medium=blog">learn more about Play Games Services.</a> You can also get <a href="http://android-developers.blogspot.co.uk/2015/11/developer-tips-for-success-with-player.html">top tips from game developer Auxbrain to help you find success with Google Play game services.</a></p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Lily Sheringham, Developer Marketing at Google Play</p></i>

<p>Google Play games services includes Player Analytics, a free reporting tool available in the Google Play Developer Console, to help you understand how players are progressing, spending, and churning. Now, you can see what Player Analytics looks like with an exemplary implementation of Play games services: try out the new <a href="https://play.google.com/apps/publish/?#BusinessDriversPlace:gt=1059826392430">sample game</a> in the Google Play Developer Console, which we produced with help from <a href="https://play.google.com/store/apps/developer?id=Auxbrain+Inc&hl=en_GB">Auxbrain</a>, developer of <a href="https://play.google.com/store/apps/details?id=com.auxbrain.zh2&hl=en_GB">Zombie Highway 2</a>. The <a href="https://play.google.com/apps/publish/?#BusinessDriversPlace:gt=1059826392430">sample game</a> uses randomized and anonymized data from a real game and will also let you try the new features we’re announcing today. Note: You need a <a href="https://support.google.com/googleplay/android-developer/answer/6112435"><i>Google Play Developer account</i></a> in order to access the <i>sample game.<a href="https://play.google.com/apps/publish/?#BusinessDriversPlace:gt=1059826392430"></a></i></p>
<b>
<h3>Use predictive analytics to engage players before they might churn</h3></b>

<p>To help you better understand your players’ behavior, we’ve extended the Player Stats API in Player Analytics with predictive functionality. The churn prediction method will return data on the probability that the player will churn, i.e., stop playing the game, so you can create content in response to this to entice them to stay in your game. Additionally, the spend prediction method will return the probability that the player will spend, and you could, for example, provide discounted in-app purchases or show ads based on these insights.</p>
<b>
<h3>Create charts in the new funnels report to quickly visualize sequences of events</h3></b>

<p>The funnels report enables you to create a funnel chart from any sequence events, such as achievements, spend, and custom events. For example, you could log custom events for each step in a tutorial flow (e.g., tutorial step 1, step 2, step 3), and then use the funnel report to visualize the exit points in your tutorial.</p>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-ROsTzjmFOE8/VqZZbDalxuI/AAAAAAAAChI/8h3ARxIlwpk/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-ROsTzjmFOE8/VqZZbDalxuI/AAAAAAAAChI/8h3ARxIlwpk/s640/image00.png" /></a></div>
<b>
<h3>Measure and compare the effect of changes and cumulative values by new users with cohort’s report</h3></b>

<p>The cohorts report allows you to take any event such as sessions, cumulative spend, and custom events, and compare the cumulative event values by new user cohorts - providing valuable insight into the impact of your decisions on your gaming model. For example, you can view users that started the day before you made a change and the day after. This allows you to measure and compare the effect of changes made, so if you doubled the price of all your items in your in-game store, you can see if the cumulative sessions started after the change was lower or higher than the users that started before the change.</p>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-z1IumLkBm3A/VqZZgnJmEaI/AAAAAAAAChQ/QX9kkrGOcZs/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-z1IumLkBm3A/VqZZgnJmEaI/AAAAAAAAChQ/QX9kkrGOcZs/s640/image01.png" /></a></div>
<b><h3>Updated C++, iOS SDKs and Unity plug-in to support Player Stats API</h3></b>

<p>
We have updated the C++ and iOS SDKs, and the Unity plug-in, all of which now support the Player Stats API, which includes the basic player stats as well as spend and churn predictions. 

Be sure to check out the <a href="https://play.google.com/apps/publish/?#BusinessDriversPlace:gt=1059826392430">sample game</a> and <a href="https://developers.google.com/games/services/?utm_campaign=play%20services_discussion_analytics_012516&utm_source=anddev&utm_medium=blog">learn more about Play Games Services.</a> You can also get <a href="http://android-developers.blogspot.co.uk/2015/11/developer-tips-for-success-with-player.html">top tips from game developer Auxbrain to help you find success with Google Play game services.</a></p>

]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/new-features-to-better-understand-player-behavior-with-player-analytics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Play Games Permissions are changing in 2016</title>
		<link>https://googledata.org/google-android/play-games-permissions-are-changing-in-2016/</link>
		<comments>https://googledata.org/google-android/play-games-permissions-are-changing-in-2016/#comments</comments>
		<pubDate>Sat, 23 Jan 2016 19:27:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=3670f505f50d5bb1c31d952ec3da9c34</guid>
		<description><![CDATA[<i></i><p>Posted by Wolff Dobson, Developer Advocate</p>

<p>We&#8217;re taking steps to reduce sign-in friction and unnecessary permission requests for players by moving the Games APIs to a new model. The new interaction is:</p>

<ul><li>Players are prompted to sign-in once per account, rather than once per game</li>
  <li>Players no longer need their account upgraded to Google+ to use Play Games services</li>
  <li>Once players have signed-in for the first time, they will no longer need to sign in to any future games; they will be automatically signed in</li>
  <i><li>Note: Players can turn off auto-sign-in through the Play Games App&#8217;s settings</li></i>
</ul>  

Advantages:

<ul><li>Once a user signs in for first time, new games will generally be able to sign in without any user interaction</li>
  <i><li>There is no consent screen required for signing in on any particular game. Sign-in will be automatic to each new game.</li></i>
</ul><p>In order to respect user&#8217;s privacy and avoid revealing their real name, we also have to change the way player IDs work.</p>

<ul><li><i>For existing players: </i> Games will continue to get their Google+ ID (also called &#8220;player ID&#8221; in previous documentation) when they sign in.</li>
  <i><li><i>For new players:</i> Games will get a new player ID which is not the same as the previous IDs we&#8217;ve used.</li></i>
</ul><h3>Potential issues</h3>

<p>Most games should see no interruption or change in service.  There are a handful of cases, however, where some change is required.</p>

<p>Below are some issues, along with potential solutions.</p>

<p>These are:</p>
<ol><b><li>Asking for the Google+ scope unnecessarily</li></b>
</ol><ul><li>Issue: Your users will get unnecessary, potentially disturbing pop-up consent windows
</li><li>Solution: Don&#8217;t request any additional scopes unless you absolutely need them
</li></ul><b><li>Using the Play Games player ID for other Google APIs that are not games</li></b>
<ul><li>Issue: You will not get valid data back from these other endpoints.
</li><li>Solution: Don&#8217;t use player ID for other Google APIs.
</li></ul><b><li>Using mobile/client access tokens on the server</li></b> 
<ul><li>Issue: Your access token may not contain the information you&#8217;re looking for
<ul><li>...and this is not recommended in the first place.
</li></ul></li><li>Solution: Use the new GetServerAuthCode API instead.
</li></ul><p>Let&#8217;s cover each of these issues in detail.</p>

<h3>Issue: Asking for unnecessary scopes</h3>
<p>Early versions of our samples and documentation created a GoogleApiClient as follows:</p>

<pre><code> // Don&#8217;t do it this way!  
 GoogleApiClient gac = new GoogleApiClient.Builder(this, this, this)  
           .addApi(Games.API)  
           .addScope(Plus.SCOPE_PLUS_LOGIN) // The bad part  
           .build();  
 // Don&#8217;t do it this way!  
</code></pre>

<p>In this case, the developer is specifically requesting the plus.login scope.  <b>If you ask for plus.login, your users will get a consent dialog.</b></p>

<h3>Solution: Ask only for the scopes you need</h3>
<p>Remove any unneeded scopes from your GoogleApiClient construction along with any APIs you no longer use.</p>
<pre><code> // This way you won&#8217;t get a consent screen  
 GoogleApiClient gac = new GoogleApiClient.Builder(this, this, this)  
           .addApi(Games.API)  
           .build();  
 // This way you won&#8217;t get a consent screen  
</code></pre>

<h3>For Google+ users</h3>
<p>If your app uses specific Google+ features, such as requiring access to the player&#8217;s real-world Google+ social graph, be aware that new users will still be required to have a G+ profile to use your game. (Existing users who have already signed in won&#8217;t be asked to re-consent).</p>

<p>To require Google+ accounts to use your game, change your Games.API declaration to the following:</p>
<pre><code> .addApi(Games.API, new GamesOptions.Builder()  
                       .setRequireGooglePlus(true).build())  
</code></pre>

<p>This will ensure that your game continues to ask for the necessary permissions/scopes to continue using the player&#8217;s real-world social graph and real name profile.</p>

<h3>Issue: Using the Player ID as another ID</h3>
<p>If you call the Games.getCurrentPlayerId() API, the value returned here is the identifier that Games uses for this player.</p>

<p>Traditionally, this value could be passed into other APIs such as Plus.PeopleApi.load. In the new model, this is no longer the case. <b>Player IDs are ONLY valid for use with Games APIs.</b></p>

<h3>Solution - Don&#8217;t mix IDs</h3>
<p>The Games APIs (those accessed from com.google.android.gms.games) all use the Player ID, and as long as you use only those, they are guaranteed to work with the new IDs.</p>

<h3>Issue: Using mobile/client access tokens on the server</h3>
<p>A common pattern we&#8217;ve seen is:</p>
<ul><li>Use GoogleAuthUtil to obtain an access token</li>
  <li>Send this token to a server</li>
  <li>On the server, call Google to verify the authenticity. This is most commonly done by calling <a href="https://www.googleapis.com/oauth2/v1/tokeninfo">https://www.googleapis.com/oauth2/v1/tokeninfo</a> and looking at the response</li>
</ul><p>This is not recommended in the first place, and is even more not-recommended after the shift in scopes.</p>

<p>Reasons not to do this:</p>
<ul><li>It requires your app to know the current account the user is using, which requires holding the GET_ACCOUNTS permission. On Android M, this will result in the user being asked to share their contacts with your app at runtime, which can be intimidating.</li>
  <li>The tokeninfo endpoint isn&#8217;t really designed for this use case - it&#8217;s primarily designed as a debugging tool, not as a production API. This means that you may be rate limited in the future if you call this API.</li>
  <li>The user_id returned by token info may no longer be present with the new model. And even if it <b>is</b> present, the value won&#8217;t be the same as the new player ID. (See problem 2 above) </li>
  <li>The token could expire at any time (access token expiration times are not a guarantee).</li>
  <li>Using client tokens on the server require extra validation checks to make sure the token is not granted to a different application.</li>
</ul><h3>Solution: Use the new GetServerAuthCode flow</h3>

<p>Fortunately, the solution is known, and is basically the same as our server-<a href="https://developers.google.com/identity/sign-in/web/server-side-flow?utm_campaign=play%20games_discussion_permissions_012316&#38;utm_source=anddev&#38;utm_medium=blog">side auth recommendations for web.</a></p>

<span><ol><li><p dir="ltr">

<span>Upgrade to the latest version of Google Play Services SDK - at least 8.4.87.</span></p></li><li><p dir="ltr"><span>Create a server client ID if you don&#8217;t already have one</span></p></li><ol><li><p dir="ltr"><span>Go to the Google Developer Console, and select your project</span></p></li><li><p dir="ltr"><span>From the left nav, select API Manager, then select Credentials</span></p></li><li><p dir="ltr"><span>Select &#8220;New Credentials&#8221; and choose &#8220;OAuth Client ID&#8221;</span></p></li><li><p dir="ltr"><span>Select &#8220;Web Application&#8221; and name it something useful for your application</span></p></li><li><p dir="ltr"><span>The client id for this web application is now your server client id.</span></p></li></ol><li><p dir="ltr"><span>In your game, connect your GoogleApiClient as normal.</span></p></li><li><p dir="ltr"><span>Once connected, call the following API:</span></p></li><ol><li><p dir="ltr"><span>Games.getGamesServerAuthCode(googleApiClient, &#8220;your_server_client_id&#8221;)</span></p></li><li><p dir="ltr"><span>If you were using GoogleAuthUtil before, you were probably calling this on a background thread - in which case the code looks like this:</span></p></li></ol></ol></span>
<br /><pre><code> // Good way  
 {  
      GetServerAuthCodeResult result =   
           Games.getGamesServerAuthCode(gac, clientId).await();  
      if (result.isSuccess()) {  
           String authCode = result.getCode();  
            // Send code to server.  
   }  
 }  
 // Good way  
</code></pre>
<br /><br /><ol start="5"><li><p dir="ltr"><span>Send the auth code to your server, exactly the same as before.</span></p></li><li><p dir="ltr"><span>On your server, make an RPC to </span><a href="https://www.googleapis.com/oauth2/v4/token"><span>https://www.googleapis.com/oauth2/v4/token</span></a><span> to exchange the auth code for an access token, probably using a </span><a href="https://developers.google.com/discovery/libraries?hl=en?utm_campaign=play%20games_discussion_permissions_012316&#38;utm_source=anddev&#38;utm_medium=blog"><span>Google Apis Client Library</span></a><span>. </span></p></li><ol><li><p dir="ltr"><span>You&#8217;ll have to provide the server client ID, server client secret (listed in the Developer Console when you created the server client ID), and the auth code.</span></p></li><li><p dir="ltr"><span>See more details here: </span><a href="https://developers.google.com/identity/protocols/OAuth2WebServer?utm_campaign=play%20games_discussion_permissions_012316&#38;utm_source=anddev&#38;utm_medium=blog#handlingresponse"><span>https://developers.google.com/identity/protocols/OAuth2WebServer?utm_campaign=play games_discussion_permissions_012316&#38;utm_source=anddev&#38;utm_medium=blog#handlingresponse</span></a></p></li><li><p dir="ltr"><span>No, really: &#160;You should use a </span><a href="https://developers.google.com/discovery/libraries?hl=en?utm_campaign=play%20games_discussion_permissions_012316&#38;utm_source=anddev&#38;utm_medium=blog"><span>Google Apis Client Library</span></a><span> to make this process easier.</span></p></li></ol><li><p dir="ltr"><span>Once you have the access token, you can now call </span><span>www.googleapis.com/games/v1/applications/&#60;app_id&#62;/verify/</span><span> using that access token.</span></p></li><ol><li><p dir="ltr"><span>Pass the auth token in a header as follows:</span></p></li><ol><li><p dir="ltr"><span>&#8220;Authorization: OAuth &#60;access_token&#62;&#8221;</span></p></li></ol><li><p dir="ltr"><span>The response value will contain the player ID for the user. This is the correct player ID to use for this user.</span></p></li><li><p dir="ltr"><span>This access token can be used to make additional server-to-server calls as needed.</span></p></li></ol></ol><span>Note:</span><span> This API will only return a 200 if the access token was actually issued to your web app.</span>
<br /><br /><h3>In summary</h3>
<p>Let&#8217;s be very clear: If you do nothing, unless you are depending explicitly on Google+ features, you will see no change in functionality, and a smoother sign-in experience.</p>

<p>If you are:</p>

<ul><li>Requesting Google+ scopes without using them, it&#8217;s a good idea to stop using them from here out.</li>
  <li>Sending client access tokens to your server, we strongly suggest you use getGamesServerAuthCode() instead.</li>
</ul><p>Thanks, and keep making awesome games!</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Wolff Dobson, Developer Advocate</p></i>

<p>We’re taking steps to reduce sign-in friction and unnecessary permission requests for players by moving the Games APIs to a new model. The new interaction is:</p>

<ul>
  <li>Players are prompted to sign-in once per account, rather than once per game</li>
  <li>Players no longer need their account upgraded to Google+ to use Play Games services</li>
  <li>Once players have signed-in for the first time, they will no longer need to sign in to any future games; they will be automatically signed in</li>
  <i><li>Note: Players can turn off auto-sign-in through the Play Games App’s settings</li></i>
</ul>  

Advantages:

<ul>
  <li>Once a user signs in for first time, new games will generally be able to sign in without any user interaction</li>
  <i><li>There is no consent screen required for signing in on any particular game. Sign-in will be automatic to each new game.</li></i>
</ul>

<p>In order to respect user’s privacy and avoid revealing their real name, we also have to change the way player IDs work.</p>

<ul>
  <li><i>For existing players: </i> Games will continue to get their Google+ ID (also called “player ID” in previous documentation) when they sign in.</li>
  <i><li><i>For new players:</i> Games will get a new player ID which is not the same as the previous IDs we’ve used.</li></i>
</ul>

<h3>Potential issues</h3>

<p>Most games should see no interruption or change in service.  There are a handful of cases, however, where some change is required.</p>

<p>Below are some issues, along with potential solutions.</p>

<p>These are:</p>
<OL>
<b><LI>Asking for the Google+ scope unnecessarily</b>
<UL>
<LI>Issue: Your users will get unnecessary, potentially disturbing pop-up consent windows
<LI>Solution: Don’t request any additional scopes unless you absolutely need them
</UL>
<b><LI>Using the Play Games player ID for other Google APIs that are not games</b>
<UL>
<LI>Issue: You will not get valid data back from these other endpoints.
<LI>Solution: Don’t use player ID for other Google APIs.
</UL> 
<b><LI>Using mobile/client access tokens on the server</b> 
<UL>
<LI>Issue: Your access token may not contain the information you’re looking for
<UL>
<LI>...and this is not recommended in the first place.
</UL>
<LI>Solution: Use the new GetServerAuthCode API instead.
</UL>
</OL>

<p>Let’s cover each of these issues in detail.</p>

<h3>Issue: Asking for unnecessary scopes</h3>
<p>Early versions of our samples and documentation created a <font face=Monaco >GoogleApiClient</font> as follows:</p>

<pre  style="font-family:roboto;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> // Don’t do it this way!  
 GoogleApiClient gac = new GoogleApiClient.Builder(this, this, this)  
           .addApi(Games.API)  
           .addScope(Plus.SCOPE_PLUS_LOGIN) // The bad part  
           .build();  
 // Don’t do it this way!  
</code></pre>

<p>In this case, the developer is specifically requesting the <font face=Monaco>plus.login</font> scope.  <b>If you ask for <font face=Monaco >plus.login</font>, your users will get a consent dialog.</b></p>

<h3>Solution: Ask only for the scopes you need</h3>
<p>Remove any unneeded scopes from your <font face=Monaco>GoogleApiClient</font> construction along with any APIs you no longer use.</p>
<pre  style="font-family:roboto;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> // This way you won’t get a consent screen  
 GoogleApiClient gac = new GoogleApiClient.Builder(this, this, this)  
           .addApi(Games.API)  
           .build();  
 // This way you won’t get a consent screen  
</code></pre>

<h3>For Google+ users</h3>
<p>If your app uses specific Google+ features, such as requiring access to the player’s real-world Google+ social graph, be aware that new users will still be required to have a G+ profile to use your game. (Existing users who have already signed in won’t be asked to re-consent).</p>

<p>To require Google+ accounts to use your game, change your Games.API declaration to the following:</p>
<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> .addApi(Games.API, new GamesOptions.Builder()  
                       .setRequireGooglePlus(true).build())  
</code></pre>

<p>This will ensure that your game continues to ask for the necessary permissions/scopes to continue using the player’s real-world social graph and real name profile.</p>

<h3>Issue: Using the Player ID as another ID</h3>
<p>If you call the Games.getCurrentPlayerId() API, the value returned here is the identifier that Games uses for this player.</p>

<p>Traditionally, this value could be passed into other APIs such as <font face=Monaco>Plus.PeopleApi.load.</font> In the new model, this is no longer the case. <b>Player IDs are ONLY valid for use with Games APIs.</b></p>

<h3>Solution - Don’t mix IDs</h3>
<p>The Games APIs (those accessed from <font face=Monaco>com.google.android.gms.games)</font> all use the Player ID, and as long as you use only those, they are guaranteed to work with the new IDs.</p>

<h3>Issue: Using mobile/client access tokens on the server</h3>
<p>A common pattern we’ve seen is:</p>
<ul>
  <li>Use GoogleAuthUtil to obtain an access token</li>
  <li>Send this token to a server</li>
  <li>On the server, call Google to verify the authenticity. This is most commonly done by calling <a href="https://www.googleapis.com/oauth2/v1/tokeninfo">https://www.googleapis.com/oauth2/v1/tokeninfo</a> and looking at the response</li>
</ul>  

<p>This is not recommended in the first place, and is even more not-recommended after the shift in scopes.</p>

<p>Reasons not to do this:</p>
<ul>
  <li>It requires your app to know the current account the user is using, which requires holding the GET_ACCOUNTS permission. On Android M, this will result in the user being asked to share their contacts with your app at runtime, which can be intimidating.</li>
  <li>The <font face=Monaco>tokeninfo</font> endpoint isn’t really designed for this use case - it’s primarily designed as a debugging tool, not as a production API. This means that you may be rate limited in the future if you call this API.</li>
  <li>The user_id returned by token info may no longer be present with the new model. And even if it <b>is</b> present, the value won’t be the same as the new player ID. (See problem 2 above) </li>
  <li>The token could expire at any time (access token expiration times are not a guarantee).</li>
  <li>Using client tokens on the server require extra validation checks to make sure the token is not granted to a different application.</li>
</ul>  

<h3>Solution: Use the new <font face=Monaco>GetServerAuthCode</font> flow</h3>

<p>Fortunately, the solution is known, and is basically the same as our server-<a href="https://developers.google.com/identity/sign-in/web/server-side-flow?utm_campaign=play%20games_discussion_permissions_012316&utm_source=anddev&utm_medium=blog">side auth recommendations for web.</a></p>

<span id="docs-internal-guid-71dc0b7f-6502-f808-d778-48094ca525ae"><ol style="margin-top:0pt;margin-bottom:0pt;"><li dir="ltr" style="list-style-type: decimal; font-size: 13; font-family: Roboto; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"</span>

<span style="font-size: 13; vertical-align: baseline; white-space: pre-wrap;">Upgrade to the latest version of Google Play Services SDK - at least 8.4.87.</span></p></li><li dir="ltr" style="list-style-type: decimal; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">Create a server client ID if you don’t already have one</span></p></li><ol style="margin-top:0pt;margin-bottom:0pt;"><li dir="ltr" style="list-style-type: lower-alpha; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">Go to the Google Developer Console, and select your project</span></p></li><li dir="ltr" style="list-style-type: lower-alpha; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">From the left nav, select API Manager, then select Credentials</span></p></li><li dir="ltr" style="list-style-type: lower-alpha; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">Select “New Credentials” and choose “OAuth Client ID”</span></p></li><li dir="ltr" style="list-style-type: lower-alpha; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">Select “Web Application” and name it something useful for your application</span></p></li><li dir="ltr" style="list-style-type: lower-alpha; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">The client id for this web application is now your server client id.</span></p></li></ol><li dir="ltr" style="list-style-type: decimal; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">In your game, connect your GoogleApiClient as normal.</span></p></li><li dir="ltr" style="list-style-type: decimal; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">Once connected, call the following API:</span></p></li><ol style="margin-top:0pt;margin-bottom:0pt;"><li dir="ltr" style="list-style-type: lower-alpha; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; font-family: 'Courier New'; vertical-align: baseline; white-space: pre-wrap;">Games.getGamesServerAuthCode(googleApiClient, “your_server_client_id”)</span></p></li><li dir="ltr" style="list-style-type: lower-alpha; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">If you were using GoogleAuthUtil before, you were probably calling this on a background thread - in which case the code looks like this:</span></p></li></ol></ol></span>
<br>
<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> // Good way  
 {  
      GetServerAuthCodeResult result =   
           Games.getGamesServerAuthCode(gac, clientId).await();  
      if (result.isSuccess()) {  
           String authCode = result.getCode();  
            // Send code to server.  
   }  
 }  
 // Good way  
</code></pre>
<br><br><ol style="margin-top:0pt;margin-bottom:0pt;" start="5"><li dir="ltr" style="list-style-type: decimal; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">Send the auth code to your server, exactly the same as before.</span></p></li><li dir="ltr" style="list-style-type: decimal; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">On your server, make an RPC to </span><a href="https://www.googleapis.com/oauth2/v4/token" style="text-decoration:none;"><span style="font-size: 13px; color: rgb(17, 85, 204); text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://www.googleapis.com/oauth2/v4/token</span></a><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;"> to exchange the auth code for an access token, probably using a </span><a href="https://developers.google.com/discovery/libraries?hl=en?utm_campaign=play%20games_discussion_permissions_012316&utm_source=anddev&utm_medium=blog" style="text-decoration:none;"><span style="font-size: 13px; color: rgb(17, 85, 204); text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Google Apis Client Library</span></a><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">. </span></p></li><ol style="margin-top:0pt;margin-bottom:0pt;"><li dir="ltr" style="list-style-type: lower-alpha; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">You’ll have to provide the server client ID, server client secret (listed in the Developer Console when you created the server client ID), and the auth code.</span></p></li><li dir="ltr" style="list-style-type: lower-alpha; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">See more details here: </span><a href="https://developers.google.com/identity/protocols/OAuth2WebServer?utm_campaign=play%20games_discussion_permissions_012316&utm_source=anddev&utm_medium=blog#handlingresponse" style="text-decoration:none;"><span style="font-size: 13px; color: rgb(17, 85, 204); text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://developers.google.com/identity/protocols/OAuth2WebServer?utm_campaign=play games_discussion_permissions_012316&utm_source=anddev&utm_medium=blog#handlingresponse</span></a></p></li><li dir="ltr" style="list-style-type: lower-alpha; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">No, really: &nbsp;You should use a </span><a href="https://developers.google.com/discovery/libraries?hl=en?utm_campaign=play%20games_discussion_permissions_012316&utm_source=anddev&utm_medium=blog" style="text-decoration:none;"><span style="font-size: 13px; color: rgb(17, 85, 204); text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Google Apis Client Library</span></a><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;"> to make this process easier.</span></p></li></ol><li dir="ltr" style="list-style-type: decimal; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">Once you have the access token, you can now call </span><span style="font-size: 13px; font-family: 'Courier New'; vertical-align: baseline; white-space: pre-wrap;">www.googleapis.com/games/v1/applications/&lt;app_id&gt;/verify/</span><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;"> using that access token.</span></p></li><ol style="margin-top:0pt;margin-bottom:0pt;"><li dir="ltr" style="list-style-type: lower-alpha; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">Pass the auth token in a header as follows:</span></p></li><ol style="margin-top:0pt;margin-bottom:0pt;"><li dir="ltr" style="list-style-type: lower-roman; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">“Authorization: OAuth &lt;access_token&gt;”</span></p></li></ol><li dir="ltr" style="list-style-type: lower-alpha; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">The response value will contain the player ID for the user. This is the correct player ID to use for this user.</span></p></li><li dir="ltr" style="list-style-type: lower-alpha; font-size: 13px; font-family: Arial; vertical-align: baseline;"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size: 13px; vertical-align: baseline; white-space: pre-wrap;">This access token can be used to make additional server-to-server calls as needed.</span></p></li></ol></ol><span style="font-size: 13px; font-family: Arial; font-style: italic; vertical-align: baseline; white-space: pre-wrap;">Note:</span><span style="font-size: 13px; font-family: Arial; vertical-align: baseline; white-space: pre-wrap;"> This API will only return a 200 if the access token was actually issued to your web app.</span></span></span>
<br>
<br>
<h3>In summary</h3>
<p>Let’s be very clear: If you do nothing, unless you are depending explicitly on Google+ features, you will see no change in functionality, and a smoother sign-in experience.</p>

<p>If you are:</p>

<ul>
  <li>Requesting Google+ scopes without using them, it’s a good idea to stop using them from here out.</li>
  <li>Sending client access tokens to your server, we strongly suggest you use <font face=Monaco>getGamesServerAuthCode()</font> instead.</li>
</ul>  

<p>Thanks, and keep making awesome games!</p>











]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/play-games-permissions-are-changing-in-2016/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Android Developer Story: Music app developer DJIT builds higher quality experiences and successful businesses on Android</title>
		<link>https://googledata.org/google-android/android-developer-story-music-app-developer-djit-builds-higher-quality-experiences-and-a-successful-businesses-on-android/</link>
		<comments>https://googledata.org/google-android/android-developer-story-music-app-developer-djit-builds-higher-quality-experiences-and-a-successful-businesses-on-android/#comments</comments>
		<pubDate>Wed, 20 Jan 2016 18:19:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=28cd08c8d13a2a6495e35b0d52b2fcc3</guid>
		<description><![CDATA[<i></i><p>Posted by Lily Sheringham, Google Play team</p>

<p>Paris-based <a href="https://play.google.com/store/apps/dev?id=6775629480928024144">DJiT</a> is the creator of <a href="https://play.google.com/store/apps/details?id=com.edjing.edjingdjturntable">edjing</a>, one of the most downloaded DJ apps in the world, it now has more than 60 million downloads and a presence in 182 countries. Following their launch on Android, the platform became the largest contributor of business growth, with 50 percent of total revenue and more than 70 percent of new downloads coming from their Android users.</p>

<p>Hear from Jean-Baptiste Hironde, CEO &#38; Co-founder, S&#233;verine Payet, Marketing Manager, and Damien Del&#233;pine, Android Software Engineer, to learn how DJit improved latency on new Android Marshmallow, as well as leveraged other Android and Google Play features to create higher quality apps.</p>
<br /><!--[Interactive video]  --><br /><p>Find out more about <a href="http://googlesamples.github.io/android-audio-high-performance/">building great audio apps</a> and how to <a href="https://developer.android.com/distribute/googleplay/guide.html?utm_campaign=android_series_djit_012016&#38;utm_source=anddev&#38;utm_medium=blog">find success on Google Play</a>.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Lily Sheringham, Google Play team</p></i>

<p>Paris-based <a href="https://play.google.com/store/apps/dev?id=6775629480928024144">DJiT</a> is the creator of <a href="https://play.google.com/store/apps/details?id=com.edjing.edjingdjturntable">edjing</a>, one of the most downloaded DJ apps in the world, it now has more than 60 million downloads and a presence in 182 countries. Following their launch on Android, the platform became the largest contributor of business growth, with 50 percent of total revenue and more than 70 percent of new downloads coming from their Android users.</p>

<p>Hear from Jean-Baptiste Hironde, CEO & Co-founder, Séverine Payet, Marketing Manager, and Damien Delépine, Android Software Engineer, to learn how DJit improved latency on new Android Marshmallow, as well as leveraged other Android and Google Play features to create higher quality apps.</p>
<br>
<!--[Interactive video]  --><iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/e7t3svG9PTk" style="box-shadow: 3px 10px 18px 1px #999; display: block; margin-bottom:1em; margin-left: 50px;" width="560"></iframe><br/>

<p>Find out more about <a href="http://googlesamples.github.io/android-audio-high-performance/">building great audio apps</a> and how to <a href="https://developer.android.com/distribute/googleplay/guide.html?utm_campaign=android_series_djit_012016&utm_source=anddev&utm_medium=blog">find success on Google Play</a>.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/android-developer-story-music-app-developer-djit-builds-higher-quality-experiences-and-a-successful-businesses-on-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Create promo codes for your apps and in-app products in the Google Play Developer Console</title>
		<link>https://googledata.org/google-android/create-promo-codes-for-your-apps-and-in-app-products-in-the-google-play-developer-console/</link>
		<comments>https://googledata.org/google-android/create-promo-codes-for-your-apps-and-in-app-products-in-the-google-play-developer-console/#comments</comments>
		<pubDate>Sat, 16 Jan 2016 01:46:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=0140422bb9d2df3b375f1ef21a08a84c</guid>
		<description><![CDATA[<i></i><p>Posted by Yoshi Tamura, Product Manager, Google Play</p>

<p>
Over the past six months, a number of new tools in the Google Play Developer Console have been added to help you grow your app or game business on Google Play. Our <a href="http://android-developers.blogspot.com/2015/07/iterate-faster-on-google-play-with.html">improved beta testing</a> features help you gather more feedback and fix issues. <a href="http://android-developers.blogspot.com/2015/10/learn-top-tips-from-kongregate-to.html">Store Listing Experiments</a> let you run A/B tests on your app&#8217;s Play Store listing. <a href="http://android-developers.blogspot.com/2015/10/google-play-developer-console.html">Universal App Campaigns</a> and the <a href="https://support.google.com/googleplay/android-developer/answer/6263332">User Acquisition</a> performance report help you grow your audience and better understand your marketing.</p>

<p>Starting today, you can now generate and distribute <a href="https://support.google.com/googleplay/android-developer/answer/6321495"><b>promo codes</b></a> to current and new users on Google Play to drive engagement. Under the Promotions tab in the Developer Console, you can set up promo codes for your apps, games, and in-app products to distribute in your own marketing campaigns (up to 500 codes per app, per quarter). Consider using promo codes to reward loyal users and attract new customers.
</p>

<h3>How to use promo codes</h3>
<ol type="1"><li>Choose your app in the Developer Console.
</li><li>Under the Promotions tab choose <b>Add new promotion</b>.
<div><a href="http://3.bp.blogspot.com/-FUh5VUlK1ds/VpqNPD5bMSI/AAAAAAAACgE/fFRiCXCALms/s1600/Dev%2BCosnole%2BBlog.png"><img border="0" src="http://3.bp.blogspot.com/-FUh5VUlK1ds/VpqNPD5bMSI/AAAAAAAACgE/fFRiCXCALms/s640/Dev%2BCosnole%2BBlog.png"></a></div>
</li><li>Review and accept the additional terms of service if you haven&#8217;t run a promotion before.
</li><li>Choose from the <a href="https://support.google.com/googleplay/android-developer/answer/6321495">options available</a>, then generate and download your promo codes.
</li><li>Distribute your promo codes via your marketing channels such as social networks, in email, on the web, to your app&#8217;s beta testers, or in your app or game itself.
</li><li>Users can redeem your promo codes in a number of ways, including:
</li></ol><ol type="a"><li>From Google Play, using the Redeem menu option.
</li><li>From your app. They&#8217;ll be directed to the Play checkout flow before being redirected back to your app.
</li><li>By following a link that embeds the promo code (see tips below).
</li></ol><p>For more details about running a promotion for your app or game, <a href="https://support.google.com/googleplay/android-developer/answer/6321495">read this article on the Google Play Developer Help Center</a>.</p>

<h3>Tips for making the most of promo codes</h3>

<p>Some things to keep in mind when running a successful promotion:</p>

<ul><li>There&#8217;s a limit of 500 promo codes per app every quarter.</li>
  <li>You can embed your code in a URL so that users don&#8217;t have to enter it themselves (for example, if you&#8217;re sending your codes in an email). You can use the URL: https://play.google.com/redeem?code={CODE} (where {CODE} is a generated promo code).</li>
  <li>To use promo codes for in-app products, you should <a href="http://developer.android.com/google/play/billing/billing_promotions.html?utm_campaign=play%20games_discussion_promocodes_011516&#38;utm_source=anddev&#38;utm_medium=blog">implement In-app Promotions</a> in your app. Note that promo codes can&#8217;t be used for subscriptions.</li>
  <li>Review and adhere to the <a href="https://play.google.com/about/promo-code-developer-terms.html">Promotional Code Terms Of Service.</a></li>
</ul><p>We hope you find interesting ways to use promo codes to find new users and engage existing fans. To learn more about the many tools and best practices you can use to grow your business on Google Play, download our new developer playbook, <a href="https://play.google.com/store/books/details?id=O2a5CgAAQBAJ">&#8220;The Secrets to App Success on Google Play&#8221;.</a></p>
<div><a href="http://1.bp.blogspot.com/-bWWY8K5o1W4/VpmfSAcnxdI/AAAAAAAABVw/tRKEDAuuHtk/s1600/image01.png"><img border="0" src="http://1.bp.blogspot.com/-bWWY8K5o1W4/VpmfSAcnxdI/AAAAAAAABVw/tRKEDAuuHtk/s200/image01.png"></a></div>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by Yoshi Tamura, Product Manager, Google Play</p></i>

<p>
Over the past six months, a number of new tools in the Google Play Developer Console have been added to help you grow your app or game business on Google Play. Our <a href="http://android-developers.blogspot.com/2015/07/iterate-faster-on-google-play-with.html">improved beta testing</a> features help you gather more feedback and fix issues. <a href="http://android-developers.blogspot.com/2015/10/learn-top-tips-from-kongregate-to.html">Store Listing Experiments</a> let you run A/B tests on your app’s Play Store listing. <a href="http://android-developers.blogspot.com/2015/10/google-play-developer-console.html">Universal App Campaigns</a> and the <a href="https://support.google.com/googleplay/android-developer/answer/6263332">User Acquisition</a> performance report help you grow your audience and better understand your marketing.</p>

<p>Starting today, you can now generate and distribute <a href="https://support.google.com/googleplay/android-developer/answer/6321495"><b>promo codes</b></a> to current and new users on Google Play to drive engagement. Under the Promotions tab in the Developer Console, you can set up promo codes for your apps, games, and in-app products to distribute in your own marketing campaigns (up to 500 codes per app, per quarter). Consider using promo codes to reward loyal users and attract new customers.
</p>

<h3>How to use promo codes</h3>
<OL TYPE=1>
<LI>Choose your app in the Developer Console.
<LI>Under the Promotions tab choose <b>Add new promotion</b>.
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-FUh5VUlK1ds/VpqNPD5bMSI/AAAAAAAACgE/fFRiCXCALms/s1600/Dev%2BCosnole%2BBlog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-FUh5VUlK1ds/VpqNPD5bMSI/AAAAAAAACgE/fFRiCXCALms/s640/Dev%2BCosnole%2BBlog.png" /></a></div>
<LI>Review and accept the additional terms of service if you haven’t run a promotion before.
<LI>Choose from the <a href="https://support.google.com/googleplay/android-developer/answer/6321495">options available</a>, then generate and download your promo codes.
<LI>Distribute your promo codes via your marketing channels such as social networks, in email, on the web, to your app’s beta testers, or in your app or game itself.
<LI>Users can redeem your promo codes in a number of ways, including:
</OL>
<OL TYPE=a>
<LI>From Google Play, using the Redeem menu option.
<LI>From your app. They’ll be directed to the Play checkout flow before being redirected back to your app.
<LI>By following a link that embeds the promo code (see tips below).
</OL>

<p>For more details about running a promotion for your app or game, <a href="https://support.google.com/googleplay/android-developer/answer/6321495">read this article on the Google Play Developer Help Center</a>.</p>

<h3>Tips for making the most of promo codes</h3>

<p>Some things to keep in mind when running a successful promotion:</p>

<ul>
  <li>There’s a limit of 500 promo codes per app every quarter.</li>
  <li>You can embed your code in a URL so that users don’t have to enter it themselves (for example, if you’re sending your codes in an email). You can use the URL: https://play.google.com/redeem?code={CODE} (where {CODE} is a generated promo code).</li>
  <li>To use promo codes for in-app products, you should <a href="http://developer.android.com/google/play/billing/billing_promotions.html?utm_campaign=play%20games_discussion_promocodes_011516&utm_source=anddev&utm_medium=blog">implement In-app Promotions</a> in your app. Note that promo codes can’t be used for subscriptions.</li>
  <li>Review and adhere to the <a href="https://play.google.com/about/promo-code-developer-terms.html">Promotional Code Terms Of Service.</a></li>
</ul> 

<p>We hope you find interesting ways to use promo codes to find new users and engage existing fans. To learn more about the many tools and best practices you can use to grow your business on Google Play, download our new developer playbook, <a href="https://play.google.com/store/books/details?id=O2a5CgAAQBAJ">“The Secrets to App Success on Google Play”.</a></p>
<center><div class="separator" style="clear: center; text-align: center;"><a href="http://1.bp.blogspot.com/-bWWY8K5o1W4/VpmfSAcnxdI/AAAAAAAABVw/tRKEDAuuHtk/s1600/image01.png" imageanchor="1" style="margin-center: 1em; margin-center: 1em;"><img border="0" src="http://1.bp.blogspot.com/-bWWY8K5o1W4/VpmfSAcnxdI/AAAAAAAABVw/tRKEDAuuHtk/s200/image01.png" /></a></div></center>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/create-promo-codes-for-your-apps-and-in-app-products-in-the-google-play-developer-console/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Using Google Sign-In with your server</title>
		<link>https://googledata.org/google-android/using-google-sign-in-with-your-server/</link>
		<comments>https://googledata.org/google-android/using-google-sign-in-with-your-server/#comments</comments>
		<pubDate>Thu, 14 Jan 2016 18:00:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

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

<p>This is the third part in a blog series on using Google Sign-In on Android, and how you can take advantage of world-class security in your Android apps. In <a href="http://android-developers.blogspot.com/2015/11/improvements-to-sign-in-with-google.html">part 1</a>, we spoke about the user experience improvements that are available to you. In <a href="http://android-developers.blogspot.com/2015/12/api-updates-for-sign-in-with-google.html">part 2</a>, we then took a deeper dive into the client-side changes to the Google Sign-In APIs that make coding a lot simpler.</p>

<p>
In this post, we will demonstrate how you can use Google Sign-In with your backend. By doing so, users signing in on their device can be securely authenticated to access their data on your backend servers.</p>

<b><h3>Using Credentials on your server</h3></b>

<p>First, let&#8217;s take a look at what happens if a user signs in on your app, but they also need to authenticate for access to your back-end server. Consider this scenario: You&#8217;ve built an app that delivers food to users at their location. They sign into your app, and your app gets their identity. You store their address and order preferences in a database on your server. </p>

<p>Unless your server endpoints are protected with some authentication mechanism, attackers could read and write to your user database by simply guessing the email addresses of your users.</p>
<br /><a href="https://2.bp.blogspot.com/-I7L1fuPmRyM/VstXkzQ4AHI/AAAAAAAACl8/ZNdeASfiLBQ/s1600/image00.png"><img border="0" src="https://2.bp.blogspot.com/-I7L1fuPmRyM/VstXkzQ4AHI/AAAAAAAACl8/ZNdeASfiLBQ/s640/image00.png"></a>
<b></b><p>Figure 1. An attacker could submit a fake request to your server with an email address</p>

<p>This isn&#8217;t just a bad user experience, it&#8217;s a risk that customer data can be stolen and misused. You can prevent this by getting a token from Google when the user signs in to the app, and then passing this token to your server. Your server would then validate that this token really was issued by Google, to the desired user, and intended for your app (based on your audience setting, see below). At this point your server can know that it really is your user making the call, and not a nefarious attacker. It can then respond with the required details.</p>
<br /><a href="https://1.bp.blogspot.com/-mmy811VlvPA/VstXvd4RFbI/AAAAAAAACmA/EX5O-_X6IzY/s1600/image01.png"><img border="0" src="https://1.bp.blogspot.com/-mmy811VlvPA/VstXvd4RFbI/AAAAAAAACmA/EX5O-_X6IzY/s640/image01.png"></a>
<b></b><p>Figure 2. Attacker&#8217;s Forged Tokens will be rejected</p>

<p>
Let&#8217;s take a look at the steps for doing this:
</p>

<p><u>Step 1:</u> Your Android app gets an ID token (*) after signing in with Google. There&#8217;s a great sample that demonstrates this <a href="https://github.com/lmoroney/google-services/tree/master/android/signin">here</a>. To do this, the requestIdToken method is called when creating the GoogleSignInOptions object.</p>
<br /><pre><code> GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)  
        <b> .requestIdToken(getString(R.string.server_client_id)) </b> 
         .requestEmail()  
         .build();  
</code></pre>

<p>This requires you to get a client ID for your server. Details on how to obtain this are available <a href="https://developers.google.com/identity/sign-in/android/start?utm_campaign=android_discussion_signin_022216&#38;utm_source=anddev&#38;utm_medium=blog">here</a> (see Step 4).</p>

<p>Once your Android app has the token, it can POST it <b>over HTTPS</b> to your server, which will then try to validate it.</p>

<p>(*) An ID token is represented using JSON Web Token, as defined by <a href="https://tools.ietf.org/html/rfc7519">RFC7519</a> and the <a href="http://openid.net/specs/openid-connect-core-1_0.html#IDToken">OpenID Connect spec</a>. These are an open, industry standard method for representing claims securely between two parties. </p>

<p><u>Step 2:</u> Your Server receives the token from your Android client. It should then validate the token with methods that are provided in the <a href="https://developers.google.com/identity/sign-in/android/backend-auth#using-a-google-api-client-library">Google API Client libraries</a>, in particular, verifying that it was issued by Google and that the intended audience is your server.  </p>

<p>Your server can use the <a href="https://developers.google.com/api-client-library/java/google-api-java-client/reference/1.19.1/com/google/api/client/googleapis/auth/oauth2/GoogleIdTokenVerifier?utm_campaign=android_discussion_signin_022216&#38;utm_source=anddev&#38;utm_medium=blog">GoogleIdTokenVerifier</a> class to verify the token and then extract the required identity data. The &#8216;sub&#8217; field (available from the getSubject() method) provides a stable string identifier that should be used to identify your users even if their email address changes, and key them in your database. Other ID token fields are available, including the name, email address and photo URL. Here&#8217;s an <a href="https://raw.githubusercontent.com/lmoroney/serverauth/master/LmauthtestServlet.java">example</a> of a servlet that was tested on Google App Engine that can verify tokens using a provided library. These libraries allow you to verify the token locally without a network call for every verification. </p>
<br /><pre><code> GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)  
       // Here is where the audience is set -- checking that it really is your server  
       // based on your Server&#8217;s Client ID  
       .setAudience(Arrays.asList(ENTER_YOUR_SERVER_CLIENT_ID_HERE))  
       // Here is where we verify that Google issued the token  
      .setIssuer("https://accounts.google.com").build();  
 GoogleIdToken idToken = verifier.verify(idTokenString);  
 if (idToken != null) {  
       Payload payload = idToken.getPayload();  
       String userId = payload.getSubject();   
       // You can also access the following properties of the payload in order  
       // for other attributes of the user. Note that these fields are only  
       // available if the user has granted the 'profile' and 'email' OAuth  
       // scopes when requested. (e.g. you configure GoogleSignInOptions like   
       // the sample code above and got a successful GoogleSignInResult)   
       // Note that some fields may still be null.  
       String email = payload.getEmail();  
       boolean emailVerified = Boolean.valueOf(payload.getEmailVerified());  
       String name = (String) payload.get("name");  
       String pictureUrl = (String) payload.get("picture");  
       String locale = (String) payload.get("locale");  
       String familyName = (String) payload.get("family_name");  
       String givenName = (String) payload.get("given_name");  
</code></pre>

<p>Note that if you have an existing app using GoogleAuthUtil to get a token to pass to your backend, you should switch to the latest ID token validation libraries and mechanisms described above. We&#8217;ll describe recommendations for server-side best practices in a future post.</p>

<p>This post demonstrates how to use authentication technologies to ensure your user is who they claim they are. In the next post, we&#8217;ll cover using the Google Sign-In API for authorization, so that users can, for example, access Google services such as Google Drive from within your app and backend service.</p>

<p>You can learn more about authentication technologies from Google at the <a href="https://developers.google.com/identity/?utm_campaign=android_discussion_signin_022216&#38;utm_source=anddev&#38;utm_medium=blog">Google Identity Platform</a> developers site.</p>]]></description>
				<content:encoded><![CDATA[<i><p>Posted by <a href="https://plus.google.com/b/108967384991768947849/+LaurenceMoroney/posts">Laurence Moroney</a>, Developer Advocate</p></i>

<p>This is the third part in a blog series on using Google Sign-In on Android, and how you can take advantage of world-class security in your Android apps. In <a href="http://android-developers.blogspot.com/2015/11/improvements-to-sign-in-with-google.html">part 1</a>, we spoke about the user experience improvements that are available to you. In <a href="http://android-developers.blogspot.com/2015/12/api-updates-for-sign-in-with-google.html">part 2</a>, we then took a deeper dive into the client-side changes to the Google Sign-In APIs that make coding a lot simpler.</p>

<p>
In this post, we will demonstrate how you can use Google Sign-In with your backend. By doing so, users signing in on their device can be securely authenticated to access their data on your backend servers.</p>

<b><h3>Using Credentials on your server</h3></b>

<p>First, let’s take a look at what happens if a user signs in on your app, but they also need to authenticate for access to your back-end server. Consider this scenario: You’ve built an app that delivers food to users at their location. They sign into your app, and your app gets their identity. You store their address and order preferences in a database on your server. </p>

<p>Unless your server endpoints are protected with some authentication mechanism, attackers could read and write to your user database by simply guessing the email addresses of your users.</p>
<br>
<a href="https://2.bp.blogspot.com/-I7L1fuPmRyM/VstXkzQ4AHI/AAAAAAAACl8/ZNdeASfiLBQ/s1600/image00.png" imageanchor="1" ><img border="0" src="https://2.bp.blogspot.com/-I7L1fuPmRyM/VstXkzQ4AHI/AAAAAAAACl8/ZNdeASfiLBQ/s640/image00.png" /></a>
<b><p>Figure 1. An attacker could submit a fake request to your server with an email address</p></b>

<p>This isn’t just a bad user experience, it’s a risk that customer data can be stolen and misused. You can prevent this by getting a token from Google when the user signs in to the app, and then passing this token to your server. Your server would then validate that this token really was issued by Google, to the desired user, and intended for your app (based on your audience setting, see below). At this point your server can know that it really is your user making the call, and not a nefarious attacker. It can then respond with the required details.</p>
<br>
<a href="https://1.bp.blogspot.com/-mmy811VlvPA/VstXvd4RFbI/AAAAAAAACmA/EX5O-_X6IzY/s1600/image01.png" imageanchor="1" ><img border="0" src="https://1.bp.blogspot.com/-mmy811VlvPA/VstXvd4RFbI/AAAAAAAACmA/EX5O-_X6IzY/s640/image01.png" /></a>
<b><p>Figure 2. Attacker’s Forged Tokens will be rejected</p></b>

<p>
Let’s take a look at the steps for doing this:
</p>

<p><u>Step 1:</u> Your Android app gets an ID token (*) after signing in with Google. There’s a great sample that demonstrates this <a href="https://github.com/lmoroney/google-services/tree/master/android/signin">here</a>. To do this, the requestIdToken method is called when creating the GoogleSignInOptions object.</p>
<br>
<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)  
        <b> .requestIdToken(getString(R.string.server_client_id)) </b> 
         .requestEmail()  
         .build();  
</code></pre>

<P>This requires you to get a client ID for your server. Details on how to obtain this are available <a href="https://developers.google.com/identity/sign-in/android/start?utm_campaign=android_discussion_signin_022216&utm_source=anddev&utm_medium=blog">here</a> (see Step 4).</P>

<P>Once your Android app has the token, it can POST it <b>over HTTPS</b> to your server, which will then try to validate it.</P>

<p>(*) An ID token is represented using JSON Web Token, as defined by <a href="https://tools.ietf.org/html/rfc7519">RFC7519</a> and the <a href="http://openid.net/specs/openid-connect-core-1_0.html#IDToken">OpenID Connect spec</a>. These are an open, industry standard method for representing claims securely between two parties. </p>

<p><u>Step 2:</u> Your Server receives the token from your Android client. It should then validate the token with methods that are provided in the <a href="https://developers.google.com/identity/sign-in/android/backend-auth#using-a-google-api-client-library">Google API Client libraries</a>, in particular, verifying that it was issued by Google and that the intended audience is your server.  </p>

<p>Your server can use the <a href="https://developers.google.com/api-client-library/java/google-api-java-client/reference/1.19.1/com/google/api/client/googleapis/auth/oauth2/GoogleIdTokenVerifier?utm_campaign=android_discussion_signin_022216&utm_source=anddev&utm_medium=blog">GoogleIdTokenVerifier</a> class to verify the token and then extract the required identity data. The ‘sub’ field (available from the getSubject() method) provides a stable string identifier that should be used to identify your users even if their email address changes, and key them in your database. Other ID token fields are available, including the name, email address and photo URL. Here’s an <a href="https://raw.githubusercontent.com/lmoroney/serverauth/master/LmauthtestServlet.java">example</a> of a servlet that was tested on Google App Engine that can verify tokens using a provided library. These libraries allow you to verify the token locally without a network call for every verification. </p>
<br>
<pre  style="font-family:arial;font-size:12px;border:0px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"><code style="color:#000000;word-wrap:normal;"> GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)  
       // Here is where the audience is set -- checking that it really is your server  
       // based on your Server’s Client ID  
       .setAudience(Arrays.asList(ENTER_YOUR_SERVER_CLIENT_ID_HERE))  
       // Here is where we verify that Google issued the token  
      .setIssuer("https://accounts.google.com").build();  
 GoogleIdToken idToken = verifier.verify(idTokenString);  
 if (idToken != null) {  
       Payload payload = idToken.getPayload();  
       String userId = payload.getSubject();   
       // You can also access the following properties of the payload in order  
       // for other attributes of the user. Note that these fields are only  
       // available if the user has granted the 'profile' and 'email' OAuth  
       // scopes when requested. (e.g. you configure GoogleSignInOptions like   
       // the sample code above and got a successful GoogleSignInResult)   
       // Note that some fields may still be null.  
       String email = payload.getEmail();  
       boolean emailVerified = Boolean.valueOf(payload.getEmailVerified());  
       String name = (String) payload.get("name");  
       String pictureUrl = (String) payload.get("picture");  
       String locale = (String) payload.get("locale");  
       String familyName = (String) payload.get("family_name");  
       String givenName = (String) payload.get("given_name");  
</code></pre>

<p>Note that if you have an existing app using GoogleAuthUtil to get a token to pass to your backend, you should switch to the latest ID token validation libraries and mechanisms described above. We’ll describe recommendations for server-side best practices in a future post.</p>

<p>This post demonstrates how to use authentication technologies to ensure your user is who they claim they are. In the next post, we’ll cover using the Google Sign-In API for authorization, so that users can, for example, access Google services such as Google Drive from within your app and backend service.</p>

<p>You can learn more about authentication technologies from Google at the <a href="https://developers.google.com/identity/?utm_campaign=android_discussion_signin_022216&utm_source=anddev&utm_medium=blog">Google Identity Platform</a> developers site.</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/using-google-sign-in-with-your-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Spatial audio comes to the Cardboard SDK</title>
		<link>https://googledata.org/google-android/spatial-audio-comes-to-the-cardboard-sdk/</link>
		<comments>https://googledata.org/google-android/spatial-audio-comes-to-the-cardboard-sdk/#comments</comments>
		<pubDate>Wed, 13 Jan 2016 17:23:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android sdk]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=bbe6a9e1ad726cc9dab4f7e17cec7ecf</guid>
		<description><![CDATA[<i></i><p>Originally posted on <a href="http://googledevelopers.blogspot.com/2016/01/spatial-audio-comes-to-cardboard-sdk.html">Google Developers Blog</a></p><p>

</p><p><i>Posted by Nathan Martz, Product Manager, Google Cardboard</i></p>

<p>Human beings experience sound in all directions&#8212;like when a fire truck zooms by, or when an airplane is overhead. Starting today, the Cardboard SDKs for Unity and Android support spatial audio, so you can create equally immersive audio experiences in your virtual reality (VR) apps. All your users need is their smartphone, a regular pair of headphones, and a Google Cardboard viewer.</p>

<h3>Sound the way you hear it</h3>

<p>Many apps create simple versions of spatial audio&#8212;by playing sounds from the left and right in separate speakers. But with today&#8217;s SDK updates, your app can produce sound the same way humans actually hear it. For example:</p>

<ul><li>The SDK combines the physiology of a listener&#8217;s head with the positions of virtual sound sources to determine what users hear. For example: sounds that come from the right will reach a user&#8217;s left ear with a slight delay, and with fewer high frequency elements (which are normally dampened by the skull).</li>
  <li>The SDK lets you specify the size and material of your virtual environment, both of which contribute to the quality of a given sound. So you can make a conversation in a tight spaceship sound very different than one in a large, underground (and still virtual) cave.</li>
</ul><h3>Optimized for today&#8217;s smartphones</h3>

<p>We built today&#8217;s updates with performance in mind, so adding spatial audio to your app has minimal impact on the primary CPU (where your app does most of its work). We achieve these results in a couple of ways:</p>

<ul><li>The SDK is optimized for mobile CPUs (e.g. SIMD instructions) and actually computes the audio in real-time on a separate thread, so most of the processing takes place outside of the primary CPU.</li>
  <li>The SDK allows you to control the fidelity of each sound. As a result, you can allocate more processing power to critical sounds, while de-emphasizing others.</li>
</ul><h3>Simple, native integrations</h3>

<p>It&#8217;s really easy to get started with the SDK&#8217;s new audio features. Unity developers will find a comprehensive set of components for creating soundscapes on Android, iOS, Windows and OS X. And native Android developers will now have a simple Java API for simulating virtual sounds and environments.</p>
<br /><div><a href="http://2.bp.blogspot.com/-yH-RHvnjbNg/VpaEAv2xsPI/AAAAAAAABU8/E2bRFQmk5ug/s1600/image00.png"><img border="0" src="http://2.bp.blogspot.com/-yH-RHvnjbNg/VpaEAv2xsPI/AAAAAAAABU8/E2bRFQmk5ug/s640/image00.png"></a></div>
<i></i><p></p>Experience spatial audio in our sample app for developers

<p>Check out our <a href="https://github.com/googlesamples/cardboard-unity/blob/master/Samples/SpatialAudio/AudioSpaces.apk?raw=true">Android sample app</a> (for developer reference only), browse the <a href="https://developers.google.com/cardboard/unity/guide?utm_campaign=cardboard_discussion_spatialaudio_011316&#38;utm_source=anddev&#38;utm_medium=blog#spatial_audio_for_vr">documentation</a> on the Cardboard developers site, and start experimenting with spatial audio today. We&#8217;re excited to see (and hear) the new experiences you&#8217;ll create!</p>]]></description>
				<content:encoded><![CDATA[<i><p>Originally posted on <a href="http://googledevelopers.blogspot.com/2016/01/spatial-audio-comes-to-cardboard-sdk.html">Google Developers Blog</a><p></i>

<p><i>Posted by Nathan Martz, Product Manager, Google Cardboard</p></i>

<p>Human beings experience sound in all directions—like when a fire truck zooms by, or when an airplane is overhead. Starting today, the Cardboard SDKs for Unity and Android support spatial audio, so you can create equally immersive audio experiences in your virtual reality (VR) apps. All your users need is their smartphone, a regular pair of headphones, and a Google Cardboard viewer.</p>

<h3>Sound the way you hear it</h3>

<p>Many apps create simple versions of spatial audio—by playing sounds from the left and right in separate speakers. But with today’s SDK updates, your app can produce sound the same way humans actually hear it. For example:</p>

<ul>
  <li>The SDK combines the physiology of a listener’s head with the positions of virtual sound sources to determine what users hear. For example: sounds that come from the right will reach a user’s left ear with a slight delay, and with fewer high frequency elements (which are normally dampened by the skull).</li>
  <li>The SDK lets you specify the size and material of your virtual environment, both of which contribute to the quality of a given sound. So you can make a conversation in a tight spaceship sound very different than one in a large, underground (and still virtual) cave.</li>
</ul>  

<h3>Optimized for today’s smartphones</h3>

<p>We built today’s updates with performance in mind, so adding spatial audio to your app has minimal impact on the primary CPU (where your app does most of its work). We achieve these results in a couple of ways:</p>

<ul>
  <li>The SDK is optimized for mobile CPUs (e.g. SIMD instructions) and actually computes the audio in real-time on a separate thread, so most of the processing takes place outside of the primary CPU.</li>
  <li>The SDK allows you to control the fidelity of each sound. As a result, you can allocate more processing power to critical sounds, while de-emphasizing others.</li>
</ul>

<h3>Simple, native integrations</h3>

<p>It’s really easy to get started with the SDK’s new audio features. Unity developers will find a comprehensive set of components for creating soundscapes on Android, iOS, Windows and OS X. And native Android developers will now have a simple Java API for simulating virtual sounds and environments.</p>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-yH-RHvnjbNg/VpaEAv2xsPI/AAAAAAAABU8/E2bRFQmk5ug/s1600/image00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-yH-RHvnjbNg/VpaEAv2xsPI/AAAAAAAABU8/E2bRFQmk5ug/s640/image00.png" /></a></div>
<i><p><center>Experience spatial audio in our sample app for developers</p></center></i>

<p>Check out our <a href="https://github.com/googlesamples/cardboard-unity/blob/master/Samples/SpatialAudio/AudioSpaces.apk?raw=true">Android sample app</a> (for developer reference only), browse the <a href="https://developers.google.com/cardboard/unity/guide?utm_campaign=cardboard_discussion_spatialaudio_011316&utm_source=anddev&utm_medium=blog#spatial_audio_for_vr">documentation</a> on the Cardboard developers site, and start experimenting with spatial audio today. We’re excited to see (and hear) the new experiences you’ll create!</p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/spatial-audio-comes-to-the-cardboard-sdk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Get your app featured on the first smartphone with Project Tango from Lenovo</title>
		<link>https://googledata.org/google-android/get-your-app-featured-on-the-first-smartphone-with-project-tango-from-lenovo/</link>
		<comments>https://googledata.org/google-android/get-your-app-featured-on-the-first-smartphone-with-project-tango-from-lenovo/#comments</comments>
		<pubDate>Fri, 08 Jan 2016 02:32:00 +0000</pubDate>
		<dc:creator><![CDATA[Reto Meier]]></dc:creator>
				<category><![CDATA[Google Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Mobile]]></category>
		<category><![CDATA[google os]]></category>

		<guid isPermaLink="false">https://googledata.org/?guid=dc1732adbb6bad70acc142b5cccb9da3</guid>
		<description><![CDATA[<p><i>Originally posted on <a href="http://googledevelopers.blogspot.com/2016/01/get-your-app-featured-on-first.html">Google Developers Blog</a></i></p>

<p><i>Posted by Johnny Lee, Technical Project Lead, Project Tango</i></p>

<p>Today, at CES, Lenovo announced the development of the first consumer-ready smartphone with <a href="https://www.google.com/atap/project-tango/">Project Tango</a>. By adding a few extra sensors and some computer vision software, Project Tango transforms your smartphone into a magic lens that lets you place digital information on your physical world. </p>
<br /><div><a href="http://3.bp.blogspot.com/-jOtObf-RBcw/Vo8RZwMc1fI/AAAAAAAABUY/I-huxBYdsZs/s1600/image00.jpg"><img border="0" src="http://3.bp.blogspot.com/-jOtObf-RBcw/Vo8RZwMc1fI/AAAAAAAABUY/I-huxBYdsZs/s640/image00.jpg"></a></div>
<p>*Renderings only. Not the official Lenovo device.</p>

<p>To support the continued growth of the ecosystem, we&#8217;re also <a href="http://g.co/ProjectTango/AppIncubator">inviting</a> developers from around the world to submit their ideas for gaming and utility apps created using Project Tango. We&#8217;ll pick the best ideas and provide funding and engineering support to help bring them to life, as part of the app incubator. Even better, the finished apps will be featured on Lenovo&#8217;s upcoming device. The submission period closes on <b>February 15, 2016.</b></p>

<p>All you need to do is tell us about your idea and explain how Project Tango technologies will enable new experiences. Additionally, we&#8217;ll ask you to include the following materials:</p>
<ul><li>Project schedule including milestones for development &#8211;&#8211; we&#8217;ll reach out to the selected developers by March 15, 2016</li>
  <li>Visual mockups of your idea including concept art</li>
  <li>Smartphone app screenshots and videos, such as captured app footage</li>
  <li>Appropriate narrative including storyboards, etc.</li>
  <li>Breakdown of your team and its members</li>
  <li>One pager introducing your past app portfolio and your company profile</li>
</ul><p>For some inspiration, Lowe's Home Improvement teamed with developer <a href="http://www.elementalsweb.com/">Elementals Web</a> to demonstrate a use case they are each working on for the launch. In the app, you can point your Project Tango-enabled smartphone at your kitchen to see where a new refrigerator or dishwasher might fit virtually. </p>
<br /><div><a href="http://2.bp.blogspot.com/-TQqHpMnDs-0/Vo8R-mVfuzI/AAAAAAAABUg/KInlB4DGcZU/s1600/image01.png"><img border="0" src="http://2.bp.blogspot.com/-TQqHpMnDs-0/Vo8R-mVfuzI/AAAAAAAABUg/KInlB4DGcZU/s640/image01.png"></a></div>

<p>Elsewhere, developer Schell Games let&#8217;s you play virtual Jenga on any surface with friends. But this time, there is no cleanup involved when the blocks topple over.</p>
<br /><div><a href="http://1.bp.blogspot.com/-8mm9QTTJjC8/Vo8SQk7qb5I/AAAAAAAABUo/bzvFHn2b_2M/s1600/image02.png"><img border="0" src="http://1.bp.blogspot.com/-8mm9QTTJjC8/Vo8SQk7qb5I/AAAAAAAABUo/bzvFHn2b_2M/s640/image02.png"></a></div>

<p>There are also some amazing <a href="https://play.google.com/store/apps/collection/promotion_3001310_project_tango_featured">featured apps</a> for Project Tango on Google Play. You can pick up your own Project Tango Tablet Development Kit <a href="https://store.google.com/product/project_tango_tablet_development_kit">here</a> to brainstorm new fun and immersive experiences that use the space around you. <a href="http://g.co/ProjectTango/AppIncubator">Apply now!</a></p>]]></description>
				<content:encoded><![CDATA[<p><i>Originally posted on <a href="http://googledevelopers.blogspot.com/2016/01/get-your-app-featured-on-first.html">Google Developers Blog</a></p></i>

<p><i>Posted by Johnny Lee, Technical Project Lead, Project Tango</p></i>

<p>Today, at CES, Lenovo announced the development of the first consumer-ready smartphone with <a href="https://www.google.com/atap/project-tango/">Project Tango</a>. By adding a few extra sensors and some computer vision software, Project Tango transforms your smartphone into a magic lens that lets you place digital information on your physical world. </p>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-jOtObf-RBcw/Vo8RZwMc1fI/AAAAAAAABUY/I-huxBYdsZs/s1600/image00.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-jOtObf-RBcw/Vo8RZwMc1fI/AAAAAAAABUY/I-huxBYdsZs/s640/image00.jpg" /></a></div>
<center><p>*Renderings only. Not the official Lenovo device.</p></center>

<p>To support the continued growth of the ecosystem, we’re also <a href="http://g.co/ProjectTango/AppIncubator">inviting</a> developers from around the world to submit their ideas for gaming and utility apps created using Project Tango. We’ll pick the best ideas and provide funding and engineering support to help bring them to life, as part of the app incubator. Even better, the finished apps will be featured on Lenovo’s upcoming device. The submission period closes on <b>February 15, 2016.</b></p>

<p>All you need to do is tell us about your idea and explain how Project Tango technologies will enable new experiences. Additionally, we’ll ask you to include the following materials:</p>
<ul>
  <li>Project schedule including milestones for development –– we’ll reach out to the selected developers by March 15, 2016</li>
  <li>Visual mockups of your idea including concept art</li>
  <li>Smartphone app screenshots and videos, such as captured app footage</li>
  <li>Appropriate narrative including storyboards, etc.</li>
  <li>Breakdown of your team and its members</li>
  <li>One pager introducing your past app portfolio and your company profile</li>
</ul>  

<p>For some inspiration, Lowe's Home Improvement teamed with developer <a href="http://www.elementalsweb.com/">Elementals Web</a> to demonstrate a use case they are each working on for the launch. In the app, you can point your Project Tango-enabled smartphone at your kitchen to see where a new refrigerator or dishwasher might fit virtually. </p>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-TQqHpMnDs-0/Vo8R-mVfuzI/AAAAAAAABUg/KInlB4DGcZU/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-TQqHpMnDs-0/Vo8R-mVfuzI/AAAAAAAABUg/KInlB4DGcZU/s640/image01.png" /></a></div>

<p>Elsewhere, developer Schell Games let’s you play virtual Jenga on any surface with friends. But this time, there is no cleanup involved when the blocks topple over.</p>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-8mm9QTTJjC8/Vo8SQk7qb5I/AAAAAAAABUo/bzvFHn2b_2M/s1600/image02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-8mm9QTTJjC8/Vo8SQk7qb5I/AAAAAAAABUo/bzvFHn2b_2M/s640/image02.png" /></a></div>

<p>There are also some amazing <a href="https://play.google.com/store/apps/collection/promotion_3001310_project_tango_featured">featured apps</a> for Project Tango on Google Play. You can pick up your own Project Tango Tablet Development Kit <a href="https://store.google.com/product/project_tango_tablet_development_kit">here</a> to brainstorm new fun and immersive experiences that use the space around you. <a href="http://g.co/ProjectTango/AppIncubator">Apply now!</a></p>]]></content:encoded>
			<wfw:commentRss>https://googledata.org/google-android/get-your-app-featured-on-the-first-smartphone-with-project-tango-from-lenovo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
	</channel>
</rss>
