<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-6755709643044947179</id><updated>2017-07-20T17:58:28.873-07:00</updated><category term="Featured" /><category term="Google Play" /><category term="Android" /><category term="Develop" /><category term="Android Developer" /><category term="Games" /><category term="archive" /><category term="Announcements" /><category term="Apps" /><category term="Google Play services" /><category term="Android Wear" /><category term="Android Studio" /><category term="Distribute" /><category term="User Interface" /><category term="NDK" /><category term="SDK updates" /><category term="Developer Console" /><category term="Google Play game services" /><category term="Google Services" /><category term="Security" /><category term="How-to" /><category term="Design" /><category term="Android N" /><category term="Developer Preview" /><category term="‘Google Play" /><category term="Android Developer Challenge" /><category term="Google Play Games" /><category term="GooglePlay" /><category term="Android Market" /><category term="Material Design" /><category term="AndroidDevStory" /><category term="Tools" /><category term="Android 1.5" /><category term="Android TV" /><category term="Android Design" /><category term="Google I/O" /><category term="Marshmallow" /><category term="Optimization" /><category term="Performance" /><category term="Support Library" /><category term="Android 1.6" /><category term="Android Auto" /><category term="Best Practices" /><category term="Google Analytics" /><category term="UI" /><category term="Udacity" /><category term="developers" /><category term="wear" /><category term="Android 5.0" /><category term="Google Cloud Messaging" /><category term="Google Cloud Platform" /><category term="Localization" /><category term="Location" /><category term="Tablets" /><category term="UI toolkit" /><category term="admob" /><category term="analytics" /><category term="developer" /><category term="developerstory" /><category term="engagement" /><category term="permissions" /><category term="Android Things" /><category term="App quality" /><category term="C++" /><category term="Google Cast" /><category term="Graphics" /><category term="IO2013" /><category term="IoT" /><category term="Layout" /><category term="Renderscript" /><category term="Testing" /><category term="androidn" /><category term="notifications" /><category term="Android 2.0" /><category term="Android Instant Apps" /><category term="Android O" /><category term="App Resources" /><category term="Google" /><category term="Google Fit" /><category term="Google Play games services" /><category term="Media and Camera" /><category term="Open source" /><category term="OpenGL ES" /><category term="compatibility" /><category term="io15" /><category term="users" /><category term="'Google Play" /><category term="Android 4.2" /><category term="Android 6.0" /><category term="Android for Work" /><category term="AndroidO" /><category term="App Components" /><category term="Audio" /><category term="Code Day" /><category term="Courses" /><category term="Developer profiles" /><category term="Education" /><category term="GDC" /><category term="Google Drive" /><category term="Google Mobile Ads" /><category term="Google Play Console" /><category term="IO2014" /><category term="Intents" /><category term="Licensing" /><category term="London" /><category term="Quality" /><category term="Sample code" /><category term="Samples" /><category term="monetization" /><category term="signing" /><category term="API" /><category term="Ads" /><category term="Android 3.0" /><category term="Android 3.2" /><category term="Android 4.4" /><category term="Android SDK" /><category term="AndroidWear" /><category term="Animation" /><category term="App Indexing" /><category term="Authentication" /><category term="Developer Labs" /><category term="Development Tools" /><category term="Early Access" /><category term="Firebase" /><category term="GCM" /><category term="Google Maps" /><category term="Google Play for Work" /><category term="Google client API" /><category term="Google+" /><category term="In-app Billing" /><category term="Input methods" /><category term="Launch" /><category term="LiquidFun" /><category term="Maps" /><category term="Maps API" /><category term="MaterialDesign" /><category term="Project Treble" /><category term="SDK Tools" /><category term="Text and Input" /><category term="WebView" /><category term="apk" /><category term="developergamestory" /><category term="events" /><category term="featured'" /><category term="google play for families" /><category term="growth" /><category term="mobile vision APIs" /><category term="ubicomp" /><category term="wifi" /><category term="#io17" /><category term="Action Bar" /><category term="Actions" /><category term="Android 2.1" /><category term="Android 2.2" /><category term="Android 2.3" /><category term="Android 7.0" /><category term="Android 71" /><category term="Android Developer Phone" /><category term="Android Go" /><category term="Android Pay API" /><category term="Android Vitals" /><category term="Animation and Graphics" /><category term="AppCompat" /><category term="Beta" /><category term="Boston" /><category term="Canary" /><category term="Connectivity" /><category term="Dashboard" /><category term="Daydream" /><category term="Developer Console Store Listing Experiments" /><category term="Efficient Apps" /><category term="Europe" /><category term="Featured’" /><category term="Fragments" /><category term="GLSL" /><category term="Global" /><category term="Google Assistant" /><category term="Google Wallet" /><category term="GoogleAPIClient" /><category term="Guidelines" /><category term="HTTPS" /><category term="I/O2014" /><category term="IME" /><category term="Identity" /><category term="Internet of Things" /><category term="JNI" /><category term="Java" /><category term="Java 8" /><category term="Kotlin" /><category term="LVL" /><category term="LondonEng" /><category term="Memory Management" /><category term="Nougat" /><category term="OpenGL" /><category term="Pixel" /><category term="Places" /><category term="PlayStore" /><category term="Privacy" /><category term="Profiling" /><category term="Pure" /><category term="SEA" /><category term="Saatchi" /><category term="Southeast Asia" /><category term="Subscription" /><category term="TV" /><category term="TensorFlow" /><category term="Text-to-Speech" /><category term="Treble" /><category term="UX" /><category term="Unity" /><category term="User Support" /><category term="Web" /><category term="Widgets" /><category term="android developers" /><category term="beacons" /><category term="buildingforbillions" /><category term="business" /><category term="chrome" /><category term="competition" /><category term="contest" /><category term="conversions" /><category term="documentation" /><category term="grow" /><category term="indie" /><category term="io2010" /><category term="nearby" /><category term="prizes" /><category term="showcase" /><category term="store listing experiments" /><category term="user data" /><category term="watch face API" /><category term="win" /><category term="#Android #Android development # advanced Android #learn Android #build Android apps #Udacity" /><category term="#AndroidTV #Google Cast #Udacity" /><category term="#GDC17 #GoogleDeveloperDay #GooglePlay #Games #VR #Daydream #Developers #Android #Google Play" /><category term="#GPA2017 #GooglePlayAwards #GooglePlay #Games #VR #AR #AndroidWear #Indies #Startup #Apps #Developers #Android #Google Play" /><category term="#io16" /><category term="505 Games" /><category term="AIY" /><category term="AIY Projects" /><category term="AMP" /><category term="APIs" /><category term="APK Expansion Files" /><category term="About Fun" /><category term="Actions on Google" /><category term="Activity Recognition" /><category term="Administration" /><category term="Agus Gomez" /><category term="Android 2.3.3" /><category term="Android 4.0" /><category term="Android 4.3" /><category term="Android 5.1" /><category term="Android 7.1" /><category term="Android C++" /><category term="Android Excellence" /><category term="Android IDE" /><category term="Android O Developer Preview" /><category term="Android One" /><category term="Android Pay" /><category term="Android Security Rewards" /><category term="Android Studio 3.0" /><category term="Android Wear 2.0" /><category term="AndroidThings" /><category term="AnswerLab" /><category term="Architecture" /><category term="Assistant" /><category term="Assistant SDK" /><category term="BABBQ" /><category term="BLE" /><category term="Betatesting" /><category term="Bluetooth" /><category term="Budge Studios" /><category term="C" /><category term="Certificates" /><category term="Certification" /><category term="Cloud Speech API" /><category term="Commerce" /><category term="Complications" /><category term="Contacts" /><category term="Content Provider" /><category term="Cool Stuff" /><category term="CultureAlley" /><category term="DP3" /><category term="Debugging" /><category term="Demographics" /><category term="Developer Days" /><category term="DialogFragment" /><category term="Disruptor Beam" /><category term="Doze" /><category term="EA" /><category term="Editors’ Choice" /><category term="Electronic Arts" /><category term="Engage" /><category term="Enterprise" /><category term="Finance" /><category term="Fortify" /><category term="Fundamentals" /><category term="GDC17" /><category term="GPGS" /><category term="Gestures" /><category term="Gmail" /><category term="Google Awareness API" /><category term="Google Now" /><category term="Google Play Billing" /><category term="GoogleDeveloperDay" /><category term="Gpfe" /><category term="GridLayout" /><category term="HAL" /><category term="HelloEnglish" /><category term="Holo" /><category term="HttpsURLConnection" /><category term="Hutch" /><category term="Hutch Games" /><category term="Image Processing" /><category term="Indie games developers" /><category term="Indonesia" /><category term="Indonesia Games Contest" /><category term="Inzen studio" /><category term="Issue Tracker" /><category term="KNOX" /><category term="Klei Entertainment" /><category term="LTV" /><category term="LaMatinale" /><category term="LeMonde" /><category term="Life of a Bug" /><category term="Lollipop" /><category term="MENA" /><category term="Marta Gui" /><category term="Mountain View" /><category term="Multiwindow" /><category term="Munich" /><category term="NBU" /><category term="NFC" /><category term="Niji Games" /><category term="Nix Hydra" /><category term="Now in Arabic" /><category term="OAuth" /><category term="Omnidrone" /><category term="Onboarding" /><category term="PWA" /><category term="Photo Sphere" /><category term="Physics" /><category term="Pico" /><category term="Play Console" /><category term="Playtime 2016" /><category term="Pocket Gems" /><category term="Policy" /><category term="Preview" /><category term="Promo Graphics" /><category term="Public Tracker" /><category term="Quick Search Box" /><category term="RTL" /><category term="Resources" /><category term="Robinhood" /><category term="Safe Browsing" /><category term="SafetyNet" /><category term="Schell Games" /><category term="ScreenCapture" /><category term="Screens" /><category term="Sensors" /><category term="Seriously" /><category term="ShareActionProvider" /><category term="Sharing" /><category term="Skyscanner" /><category term="Social Point" /><category term="Space" /><category term="Space Ape Games" /><category term="Speech Input" /><category term="Stencils" /><category term="Storage" /><category term="Storytoys" /><category term="Super Evil MegaCorp" /><category term="Survey" /><category term="TAGS: Google Play" /><category term="TLS" /><category term="Tel Aviv" /><category term="Telephony" /><category term="Tips" /><category term="Titan Brawl" /><category term="Touch" /><category term="Translation" /><category term="User Feedback" /><category term="VGames" /><category term="VR" /><category term="Virtual Reality" /><category term="Visibility" /><category term="Voice" /><category term="Voice Kit" /><category term="Wallapop" /><category term="Wear UI Library" /><category term="Webdriver" /><category term="XmlPullParser" /><category term="YouTube" /><category term="accessibility" /><category term="android c++ games linux open source release osx serialization windows" /><category term="android extension pack" /><category term="android o apis" /><category term="android71" /><category term="app id" /><category term="arch" /><category term="attestation" /><category term="awareness" /><category term="bar code" /><category term="beacon" /><category term="beta testing" /><category term="betatesting GooglePlayforFamilies" /><category term="clang" /><category term="class loading" /><category term="context" /><category term="cross-platform" /><category term="dalvik" /><category term="data storage" /><category term="ddms" /><category term="developer story" /><category term="developerappstory" /><category term="developerstory developerconsole" /><category term="device id" /><category term="eBook" /><category term="face detection" /><category term="families" /><category term="fitness" /><category term="free trial" /><category term="game-as-a-service" /><category term="googleservices" /><category term="hackster" /><category term="http" /><category term="iOS" /><category term="in-app purchase" /><category term="indies" /><category term="installs" /><category term="io16" /><category term="keys" /><category term="kids app developers" /><category term="kids apps" /><category term="leanback" /><category term="library" /><category term="listing" /><category term="malware" /><category term="memory" /><category term="messaging api" /><category term="mobile ads" /><category term="mobile search" /><category term="network" /><category term="ordered broadcast" /><category term="packaging" /><category term="peer group" /><category term="people" /><category term="protection" /><category term="publishing" /><category term="ratings" /><category term="recaptcha" /><category term="reviews" /><category term="runtime permissions" /><category term="sandbox" /><category term="selinux" /><category term="social impact" /><category term="spam" /><category term="storelistingexperiments" /><category term="strictmode" /><category term="subscriptions" /><category term="success stories" /><category term="threading" /><category term="traceview" /><category term="trial period" /><category term="user experience" /><category term="viewpager" /><category term="vulkan" /><category term="watch faces" /><title type="text">Android Developers Blog</title><subtitle type="html">An Open Handset Alliance Project.</subtitle><link rel="alternate" type="text/html" href="http://android-developers.googleblog.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default?start-index=26&amp;max-results=25&amp;redirect=false" /><author><name>Ian Lake</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-OUzGFk65pKc/AAAAAAAAAAI/AAAAAAAAADI/3yDSSNVmQVs/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>766</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/hsDu" /><feedburner:info uri="blogspot/hsdu" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-9106962685021849915</id><published>2017-07-20T14:10:00.000-07:00</published><updated>2017-07-20T14:10:59.886-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AndroidO" /><category scheme="http://www.blogger.com/atom/ns#" term="Security" /><title type="text">Seccomp filter in Android O</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;em&gt;Posted by Paul Lawrence, Android Security Engineer&lt;/em&gt;
&lt;br /&gt;
In Android-powered devices, the kernel does the heavy lifting to enforce the
Android security model. As the security team has worked to harden Android's
userspace and isolate and deprivilege processes, the kernel has become the focus
of more security attacks. System calls are a common way for attackers to target
the kernel.
&lt;br /&gt;
All Android software communicates with the Linux kernel using system calls, or
syscalls for short. The kernel provides many device- and SOC-specific syscalls
that allow userspace processes, including apps, to directly interact with the
kernel. All apps rely on this mechanism to access collections of behavior
indexed by unique system calls, such as opening a file or sending a Binder
message. However, many of these syscalls are not used or officially supported by
Android.
&lt;br /&gt;
Android O takes advantage of a Linux feature called &lt;a href="http://man7.org/linux/man-pages/man2/seccomp.2.html"&gt;seccomp&lt;/a&gt; that
makes unused system calls inaccessible to application software. Because these
syscalls cannot be accessed by apps, they can't be exploited by potentially
harmful apps.
&lt;br /&gt;
&lt;h1&gt;
seccomp filter&lt;/h1&gt;
Android O includes a single seccomp filter installed into zygote, the process
from which all the Android applications are derived. Because the filter is
installed into zygote—and therefore all apps—the Android security team took
extra caution to not break existing apps. The seccomp filter allows:
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;all the syscalls exposed via bionic (the C runtime for Android). These are
defined in bionic/libc/SYSCALLS.TXT.
&lt;/li&gt;
&lt;li&gt;syscalls to allow Android to boot
&lt;/li&gt;
&lt;li&gt;syscalls used by popular Android applications, as determined by running
Google's full app compatibility suite&lt;/li&gt;
&lt;/ul&gt;
Android O's seccomp filter blocks certain syscalls, such as swapon/swapoff,
which have been implicated in some security attacks, and the key control
syscalls, which are not useful to apps. In total, the filter blocks 17 of 271
syscalls in arm64 and 70 of 364 in arm.
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Developers&lt;/h3&gt;
Test your app for illegal syscalls on a device running Android O.
&lt;br /&gt;
&lt;h2&gt;
Detecting an illegal syscall&lt;/h2&gt;
In Android O, the system crashes an app that uses an illegal syscall. The log
printout shows the illegal syscall, for example:
&lt;br /&gt;
&lt;pre class="prettyprint" style="font-size: 50%;"&gt;03-09 16:39:32.122 15107 15107 I crash_dump32: performing dump of process 14942 (target tid = 14971)
03-09 16:39:32.127 15107 15107 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
03-09 16:39:32.127 15107 15107 F DEBUG   : Build fingerprint: 'google/sailfish/sailfish:O/OPP1.170223.013/3795621:userdebug/dev-keys'
03-09 16:39:32.127 15107 15107 F DEBUG   : Revision: '0'
03-09 16:39:32.127 15107 15107 F DEBUG   : ABI: 'arm'
03-09 16:39:32.127 15107 15107 F DEBUG   : pid: 14942, tid: 14971, name: WorkHandler  &amp;gt;&amp;gt;&amp;gt; com.redacted &amp;lt;&amp;lt;&amp;lt;
03-09 16:39:32.127 15107 15107 F DEBUG   : signal 31 (SIGSYS), code 1 (SYS_SECCOMP), fault addr --------
03-09 16:39:32.127 15107 15107 F DEBUG   : Cause: seccomp prevented call to disallowed system call 55
03-09 16:39:32.127 15107 15107 F DEBUG   :     r0 00000091  r1 00000007  r2 ccd8c008  r3 00000001
03-09 16:39:32.127 15107 15107 F DEBUG   :     r4 00000000  r5 00000000  r6 00000000  r7 00000037
&lt;/pre&gt;
Affected developers should rework their apps to not call the illegal syscall.
&lt;br /&gt;
&lt;h2&gt;
Toggling seccomp filters during testing&lt;/h2&gt;
In addition to logging errors, the seccomp installer respects setenforce on
devices running userdebug and eng builds, which allows you to test whether
seccomp is responsible for an issue. If you type:
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;adb shell setenforce 0 &amp;amp;&amp;amp; adb stop &amp;amp;&amp;amp; adb start
&lt;/pre&gt;
then no seccomp policy will be installed into zygote. Because you cannot remove
a seccomp policy from a running process, you have to restart the shell for this
option to take effect.
&lt;br /&gt;
&lt;h3&gt;
Device manufacturers&lt;/h3&gt;
Because Android O includes the relevant seccomp filters at
&lt;code&gt;//bionic/libc/seccomp&lt;/code&gt;, device manufacturers don't need to do any
additional implementation. However, there is a CTS test that checks for seccomp
at
&lt;code&gt;//cts/tests/tests/security/jni/android_security_cts_SeccompTest.cpp&lt;/code&gt;.
The test checks that &lt;code&gt;add_key&lt;/code&gt; and &lt;code&gt;keyctl&lt;/code&gt; syscalls are
blocked and &lt;code&gt;openat&lt;/code&gt; is allowed, along with some app-specific
syscalls that must be present for compatibility.
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=KeElbF3MaYw:rlfszQPtxFI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=KeElbF3MaYw:rlfszQPtxFI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=KeElbF3MaYw:rlfszQPtxFI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/KeElbF3MaYw" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/9106962685021849915" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/9106962685021849915" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/KeElbF3MaYw/seccomp-filter-in-android-o.html" title="Seccomp filter in Android O" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://android-developers.googleblog.com/2017/07/seccomp-filter-in-android-o.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-1667758923719017315</id><published>2017-07-18T10:00:00.000-07:00</published><updated>2017-07-18T10:00:20.806-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="HAL" /><category scheme="http://www.blogger.com/atom/ns#" term="sandbox" /><category scheme="http://www.blogger.com/atom/ns#" term="selinux" /><category scheme="http://www.blogger.com/atom/ns#" term="Treble" /><title type="text">Shut the HAL Up</title><content type="html">&lt;em&gt;Posted by Jeff Vander Stoep, Senior Software Engineer, Android Security&lt;/em&gt;
&lt;p&gt;
Updates are essential for security, but they can be difficult and expensive for
device manufacturers. &lt;a
href="https://android-developers.googleblog.com/2017/05/here-comes-treble-modular-base-for.html"&gt;Project
Treble&lt;/a&gt; is making updates easier by separating the underlying vendor
implementation from the core Android framework. This modularization allows
platform and vendor-provided components to be updated independently of each
other. While easier and faster updates are awesome, Treble's increased
modularity is also designed to improve security.
&lt;/p&gt;
&lt;h3&gt;Isolating HALs&lt;/h3&gt;
A &lt;a href="https://en.wikipedia.org/wiki/Hardware_abstraction"&gt;Hardware
Abstraction Layer&lt;/a&gt; (HAL) provides an interface between device-agnostic code
and device-specific hardware implementations. HALs are commonly packaged as
shared libraries loaded directly into the process that requires hardware
interaction. Security boundaries are enforced at the process level. Therefore,
loading the HAL into a process means that the HAL is running in the same
security context as the process it's loaded into.
&lt;p&gt;
The traditional method of running HALs in-process means that the process needs
all the permissions required by each in-process HAL, including direct access to
kernel drivers. Likewise, all HALs in a process have access to the same set of
permissions as the rest of the process, including permissions required by other
in-process HALs. This results in over-privileged processes and HALs that have
access to permissions and hardware that they shouldn't.
&lt;/p&gt;
&lt;div class="blogimage"&gt;
&lt;a href="https://2.bp.blogspot.com/-Pn9uQh2iuXQ/WW1Ky4Qkg1I/AAAAAAAAEWM/GuqnfwvJs_UCZDn4iySICuDp1nmhTv_BACLcBGAs/s1600/image2.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-Pn9uQh2iuXQ/WW1Ky4Qkg1I/AAAAAAAAEWM/GuqnfwvJs_UCZDn4iySICuDp1nmhTv_BACLcBGAs/s1600/image2.png" data-original-width="607" data-original-height="438" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="blogcaption"&gt;
&lt;strong&gt;Figure 1&lt;/strong&gt;. Traditional method of multiple HALs in one process.
&lt;/div&gt;
&lt;p&gt;
Moving HALs into their own processes better adheres to the &lt;a
href="https://en.wikipedia.org/wiki/Principle_of_least_privilege"&gt;principle of
least privilege&lt;/a&gt;. This provides two distinct advantages:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Each HAL runs in its own sandbox and is permitted access to only the
hardware driver it controls and the permissions granted to the process are
limited to the permissions required to do its job.
&lt;li&gt;Similarly, the process loses access to hardware drivers and other
permissions and capabilities needed by the HALs.&lt;/li&gt;&lt;/ol&gt;
&lt;div class="blogimage"&gt;
&lt;a href="https://2.bp.blogspot.com/-BaB3K1t1ShM/WW1Q3AMfg6I/AAAAAAAAEWw/oc4Grz9vh8AEObur9uukpZQEFJv6BU9dgCLcBGAs/s1600/image3.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-BaB3K1t1ShM/WW1Q3AMfg6I/AAAAAAAAEWw/oc4Grz9vh8AEObur9uukpZQEFJv6BU9dgCLcBGAs/s1600/image3.png" data-original-width="618" data-original-height="497" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="blogcaption"&gt;
&lt;strong&gt;Figure 2&lt;/strong&gt;. Each HAL runs in its own process.
&lt;/div&gt;
&lt;p&gt;
Moving HALs into their own processes is great for security, but it comes at the
cost of increased IPC overhead between the client process and the HAL. &lt;a
href="https://lkml.org/lkml/2016/10/24/335"&gt;Improvements to the binder
driver&lt;/a&gt; made IPC between HALs and clients practical. Introducing
scatter-gather into binder improves the performance of each transaction by
removing the need for the serialization/deserialization steps and reducing the
number of copy operations performed on data from three down to one. Android O
also introduces binder domains to provide separate communication streams for
vendor and platform components. Apps and the Android frameworks continue to use
/dev/binder, but vendor-provided components now use /dev/vndbinder.
Communication between the platform and vendor components must use /dev/hwbinder.
Other means of IPC between platform and vendor are disallowed.
&lt;/p&gt;
&lt;h2&gt;Case study: System Server&lt;/h2&gt;
&lt;p&gt;
Many of the services offered to apps by the core Android OS are provided by the
system server. As Android has grown, so has system server's responsibilities and
permissions, making it an attractive target for an &lt;a
href="https://googleprojectzero.blogspot.com/2016/09/return-to-libstagefright-exploiting.html"&gt;attacker&lt;/a&gt;.
As part of project Treble, approximately 20 HALs were moved out of system
server, including the HALs for sensors, GPS, fingerprint, Wi-Fi, and more.
Previously, a compromise in any of those HALs would gain privileged system
permissions, but in Android O, permissions are restricted to the subset needed
by the specific HAL.
&lt;/p&gt;
&lt;h2&gt;Case study: media frameworks&lt;/h2&gt;
&lt;p&gt;
Efforts to &lt;a
href="https://android-developers.googleblog.com/2016/05/hardening-media-stack.html"&gt;harden
the media stack&lt;/a&gt; in Android Nougat continued in Android O. In Nougat,
mediaserver was split into multiple components to better adhere to the principle
of least privilege, with audio hardware access restricted to audioserver, camera
hardware access restricted to cameraserver, and so on. In Android O, most direct
hardware access has been entirely removed from the media frameworks. For example
HALs for audio, camera, and DRM have been moved out of audioserver,
cameraserver, and drmserver respectively.
&lt;/p&gt;
&lt;h3&gt;Reducing and isolating the attack surface of the kernel&lt;/h3&gt;
&lt;div class="blogimagefloat"&gt;
&lt;a href="https://2.bp.blogspot.com/-4SI_0_78Lv4/WW1QyNqptGI/AAAAAAAAEWs/dZS83fmpw5ERotf3Sc-6rTgyIIfqysQzQCLcBGAs/s1600/image1.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-4SI_0_78Lv4/WW1QyNqptGI/AAAAAAAAEWs/dZS83fmpw5ERotf3Sc-6rTgyIIfqysQzQCLcBGAs/s1600/image1.png" data-original-width="964" data-original-height="437" /&gt;&lt;/a&gt;
&lt;/div&gt;
The Linux kernel is the primary enforcer of the security model on Android.
Attempts to escape sandboxing mechanisms often involve attacking the kernel. An
&lt;a
href="https://events.linuxfoundation.org/sites/events/files/slides/Android-%20protecting%20the%20kernel.pdf"&gt;analysis&lt;/a&gt;
of kernel vulnerabilities on Android showed that they overwhelmingly occurred in
and were reached through hardware drivers.
&lt;p&gt;
De-privileging system server and the media frameworks is important because they
interact directly with installed apps. Removing direct access to hardware
drivers makes bugs difficult to reach and adds another layer of defense to
Android's security model.
&lt;/p&gt;

&lt;style&gt;

.blogimage img {
width: 100%;
margin: 0;
border: 0;
padding: 20px 0 0 0;
}

.blogcaption {
text-align: center;
padding: 10px 0 20px 0;
}

.blogimagefloat img {
width: 60%;
float: right;
padding: 0 10px 0 0px;
margin: 0;
border: 0;
}
&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=_JTFzvJGeFg:dhnTwdgFtuQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=_JTFzvJGeFg:dhnTwdgFtuQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=_JTFzvJGeFg:dhnTwdgFtuQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/_JTFzvJGeFg" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1667758923719017315" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1667758923719017315" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/_JTFzvJGeFg/shut-hal-up.html" title="Shut the HAL Up" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-Pn9uQh2iuXQ/WW1Ky4Qkg1I/AAAAAAAAEWM/GuqnfwvJs_UCZDn4iySICuDp1nmhTv_BACLcBGAs/s72-c/image2.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/07/shut-hal-up.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-4809401973799504990</id><published>2017-07-12T10:02:00.001-07:00</published><updated>2017-07-12T10:02:46.925-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mobile ads" /><category scheme="http://www.blogger.com/atom/ns#" term="peer group" /><category scheme="http://www.blogger.com/atom/ns#" term="Privacy" /><category scheme="http://www.blogger.com/atom/ns#" term="Security" /><title type="text">Identifying Intrusive Mobile Apps using Peer Group Analysis</title><content type="html">&lt;em&gt;Posted by Martin Pelikan, Giles Hogben, and Ulfar Erlingsson of Google's
Security and Privacy team&lt;/em&gt;
&lt;p&gt;
Mobile apps entertain and assist us, make it easy to communicate with friends
and family, and provide tools ranging from maps to electronic wallets. But these
apps could also seek more device information than they need to do their job,
such as personal data and sensor data from components, like cameras and GPS
trackers.
&lt;/p&gt;
&lt;p&gt;
To protect our users and help developers navigate this complex environment,
Google analyzes privacy and security signals for each app in Google Play. We
then compare that app to other apps with similar features, known as
&lt;em&gt;functional peers&lt;/em&gt;. Creating peer groups allows us to calibrate our
estimates of users' expectations and set adequate boundaries of behaviors that
may be considered unsafe or intrusive. This process helps detect apps that
collect or send sensitive data without a clear need, and makes it easier for
users to find apps that provide the right functionality and respect their
privacy. For example, most coloring book apps don't need to know a user's
precise location to function and this can be established by analyzing other
coloring book apps. By contrast, mapping and navigation apps need to know a
user's location, and often require GPS sensor access.
&lt;/p&gt;
&lt;p&gt;
One way to create app peer groups is to create a fixed set of categories and
then assign each app into one or more categories, such as tools, productivity,
and games. However, fixed categories are too coarse and inflexible to capture
and track the many distinctions in the rapidly changing set of mobile apps.
Manual curation and maintenance of such categories is also a tedious and
error-prone task.
&lt;/p&gt;
&lt;p&gt;
To address this, Google developed a machine-learning algorithm for clustering
mobile apps with similar capabilities. Our approach uses deep learning of vector
embeddings to identify peer groups of apps with similar functionality, using app
metadata, such as text descriptions, and user metrics, such as installs. Then
peer groups are used to identify anomalous, potentially harmful signals related
to privacy and security, from each app's requested permissions and its observed
behaviors. The correlation between different peer groups and their security
signals helps different teams at Google decide which apps to promote and
determine which apps deserve a more careful look by our security and privacy
experts. We also use the result to help app developers improve the privacy and
security of their apps.
&lt;/p&gt;
&lt;div class="blogimage"&gt;
&lt;a href="https://2.bp.blogspot.com/-BPUVwpzjddQ/WWZKbhzevYI/AAAAAAAAEV8/BO7CMlADQV022QQecNftnDsbAetRHt_MwCLcBGAs/s1600/image1.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-BPUVwpzjddQ/WWZKbhzevYI/AAAAAAAAEV8/BO7CMlADQV022QQecNftnDsbAetRHt_MwCLcBGAs/s1600/image1.png" data-original-width="988" data-original-height="547" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="blogcaption"&gt;
Apps are split into groups of similar functionality, and in each cluster of
similar apps the established baseline is used to find anomalous privacy and
security signals.
&lt;/div&gt;
&lt;p&gt;
These techniques build upon earlier ideas, such as using &lt;a
href="https://arxiv.org/abs/1605.08797"&gt;peer groups&lt;/a&gt; to analyze
privacy-related signals, &lt;a
href="http://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality"&gt;deep
learning for language models&lt;/a&gt; to make those peer groups better, and &lt;a
href="https://arxiv.org/abs/1605.08797"&gt;automated data analysis&lt;/a&gt; to draw
conclusions.
&lt;/p&gt;
&lt;p&gt;
Many teams across Google collaborated to create this algorithm and the
surrounding process. Thanks to several, essential team members including Andrew
Ahn, Vikas Arora, Hongji Bao, Jun Hong, Nwokedi Idika, Iulia Ion, Suman Jana,
Daehwan Kim, Kenny Lim, Jiahui Liu, Sai Teja Peddinti, Sebastian Porst, Gowdy
Rajappan, Aaron Rothman, Monir Sharif, Sooel Son, Michael Vrable, and Qiang Yan.
&lt;/p&gt;
&lt;p&gt;
For more information on Google's efforts to detect and fight potentially harmful
apps (PHAs) on Android, see &lt;a
href="https://source.android.com/security/reports/Google_Android_Security_PHA_classifications.pdf"&gt;Google
Android Security Team's Classifications for Potentially Harmful
Applications&lt;/a&gt;.
&lt;/p&gt;
&lt;h3&gt;References&lt;/h3&gt;
&lt;div class="blogref"&gt;
&lt;p&gt;
S. Jana, Ú. Erlingsson, I. Ion (2015). &lt;a
href="https://arxiv.org/abs/1510.07308"&gt;Apples and Oranges: Detecting
Least-Privilege Violators with Peer Group Analysis&lt;/a&gt;. arXiv:1510.07308
[cs.CR].
&lt;/p&gt;
&lt;p&gt;
T. Mikolov, I. Sutskever, K. Chen, G. S. Corrado, J. Dean (2013). &lt;a
href="http://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality"&gt;Distributed
Representations of Words and Phrases and their Compositionality&lt;/a&gt;. Advances in
Neural Information Processing Systems 26 (NIPS 2013).
&lt;/p&gt;
&lt;p&gt;
Ú. Erlingsson (2016). &lt;a href="https://arxiv.org/abs/1605.08797"&gt;Data-driven
software security: Models and methods.&lt;/a&gt; Proceedings of the 29th IEEE Computer
Security Foundations Symposium (CSF'16), Lisboa, Portugal.
&lt;/p&gt;
&lt;/div&gt;

&lt;style&gt;
.blogimage img {
width: 100%;
margin: 0;
border: 0;
padding: 10px 0 10px 0;
}

.blogcaption {
text-align: center;
font-style: italic;
font-size: 75%;
}

.blogref {
font-size: 75%;
}


&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=HmFJRBQQRSg:tJMuhXT2uOw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=HmFJRBQQRSg:tJMuhXT2uOw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=HmFJRBQQRSg:tJMuhXT2uOw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/HmFJRBQQRSg" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4809401973799504990" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4809401973799504990" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/HmFJRBQQRSg/identifying-intrusive-mobile-apps-using.html" title="Identifying Intrusive Mobile Apps using Peer Group Analysis" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-BPUVwpzjddQ/WWZKbhzevYI/AAAAAAAAEV8/BO7CMlADQV022QQecNftnDsbAetRHt_MwCLcBGAs/s72-c/image1.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/07/identifying-intrusive-mobile-apps-using.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-7809462036637520732</id><published>2017-07-11T09:17:00.003-07:00</published><updated>2017-07-11T10:32:48.496-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android developers" /><category scheme="http://www.blogger.com/atom/ns#" term="Featured" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Play Console" /><title type="text">Calling all indie developers in the US &amp; Canada: sign up for the Google Play Indie Games Festival in San Francisco</title><content type="html">&lt;em&gt;Posted by Jamil Moledina, Games Strategic Lead, Google Play&lt;/em&gt;
&lt;div class="blogimage"&gt;
&lt;a href="https://3.bp.blogspot.com/-MRMQX4ghD64/WWQMK7xjotI/AAAAAAAAEVo/HVmyOWEqFL4NjR2Fb2u9LRJnhSSMPWpjwCLcBGAs/s1600/image1.png" imageanchor="1" &gt;&lt;img border="0" src="https://3.bp.blogspot.com/-MRMQX4ghD64/WWQMK7xjotI/AAAAAAAAEVo/HVmyOWEqFL4NjR2Fb2u9LRJnhSSMPWpjwCLcBGAs/s1600/image1.png" data-original-width="570" data-original-height="335" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
Calling all indie developers with fun and creative mobile games: we want to see
your latest work! We'll be back with the second Google Play Indie Games Festival
taking place in San Francisco on September 23rd.
&lt;/p&gt;
&lt;p&gt;
If you're an indie developer based in the US or Canada and want to submit your
game, visit the &lt;a href="https://goo.gl/LNZ258"&gt;submission form&lt;/a&gt; and enter
now through August 6th at 11:59PM PST.
&lt;/p&gt;
&lt;p&gt;
If chosen as one of the 20 Finalists, you could have a chance to demo your game
at the event and compete for prizes and bragging rights, to go home as one of
the three festival winners!
&lt;/p&gt;
&lt;center&gt;&lt;em&gt;
 How useful did you find this blogpost?
&lt;/em&gt;&lt;/center&gt;
&lt;center&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;entry.2056663615&amp;entry.646747778=SFindiefest-07/17" style="color:gold;"&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;entry.2056663615&amp;entry.646747778=SFindiefest-07/17" style="color:gold;"&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;entry.2056663615&amp;entry.646747778=SFindiefest-07/17" style="color:gold;"&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;entry.2056663615&amp;entry.646747778=SFindiefest-07/17" style="color:gold;"&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?usp=pp_url&amp;entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;entry.2056663615&amp;entry.646747778=SFindiefest-07/17" style="color:gold;"&gt;★&lt;/a&gt;
&lt;/center&gt;

&lt;div class="bloglogo"&gt;
&lt;a href="http://developers.android.com/distribute" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-PKouUhFomVc/WWQNbjoqGwI/AAAAAAAAEVs/jKfiuP2ykl41uprwfMdaMPF1oDDyxd8kQCLcBGAs/s1600/image2.png" data-original-width="499" data-original-height="281" /&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;style&gt;
.blogimage img {
width: 100%;
padding: 10px 0 10px 0;
margin: 0;
border: 0;
}

.bloglogo img {
display: block;
width: 35%;
padding: 0;
margin: auto;
border: 0;
}

&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=y3wxY_i8PFI:oDH1n4mvqrA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=y3wxY_i8PFI:oDH1n4mvqrA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=y3wxY_i8PFI:oDH1n4mvqrA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/y3wxY_i8PFI" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7809462036637520732" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7809462036637520732" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/y3wxY_i8PFI/calling-all-indie-developers-in-us.html" title="Calling all indie developers in the US &amp; Canada: sign up for the Google Play Indie Games Festival in San Francisco" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://3.bp.blogspot.com/-MRMQX4ghD64/WWQMK7xjotI/AAAAAAAAEVo/HVmyOWEqFL4NjR2Fb2u9LRJnhSSMPWpjwCLcBGAs/s72-c/image1.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/07/calling-all-indie-developers-in-us.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-8677231575130927159</id><published>2017-07-10T09:59:00.001-07:00</published><updated>2017-07-10T09:59:19.321-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Vitals" /><category scheme="http://www.blogger.com/atom/ns#" term="engagement" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title type="text">Android vitals: Increase engagement and installs through improved app performance </title><content type="html">&lt;em&gt;Posted by Fergus Hurley, Product Manager, Google Play &lt;/em&gt;
&lt;p&gt;
Poor app performance is something that many users have experienced. Think about
that last time you experienced an app crashing, failing to respond, or rendering
slowly. Consider your reaction when checking the battery usage on your own
device, and seeing an app using excessive battery. When an app performs badly,
users notice. In fact, in an internal analysis of app reviews on Google Play, we
noticed that half of the 1-star reviews mentioned app stability.
&lt;/p&gt;
&lt;p&gt;
Conversely, people consistently reward the best performing apps with better
ratings and reviews. This leads to better rankings on Google Play, which helps
increase installs. Not only that, but users stay more engaged, and are willing
to spend more time and money.
&lt;/p&gt;
&lt;p&gt;
At Google I/O 2017, we &lt;a
href="https://android-developers.googleblog.com/2017/05/whats-new-in-google-play-at-io-2017.html"&gt;announced&lt;/a&gt;
the new Android vitals dashboard in the Google Play Console. Android vitals is
designed to help you understand and analyze bad app behaviors, so you can
improve your app's performance and reap the benefits of better performance.
&lt;/p&gt;
&lt;h3&gt;Android vitals in the Google Play Console&lt;/h3&gt;
&lt;/p&gt;
&lt;center&gt;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/vj3Y8L5HLdg" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/center&gt;
&lt;p&gt;
Android vitals helps identify opportunities to improve your app's performance.
The dashboards are useful for engineers and business owners alike, offering
quick reference performance metrics to monitor your app so you can analyze the
data and dedicate the right resources to make improvements.
&lt;/p&gt;
&lt;p&gt;
You'll see the following data collected from Android devices whose users have
opted in to automatically share usage and diagnostics data:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stability&lt;/strong&gt;: ANR rate &amp; crash rate
&lt;li&gt;&lt;strong&gt;Render time&lt;/strong&gt;: slow rendering (16ms) and frozen UI frames
(700ms)
&lt;li&gt;&lt;strong&gt;Battery usage&lt;/strong&gt;: stuck wake locks and excessive
wakeups&lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;See how Busuu increased their rating from 4.1☆ to 4.5☆ by focusing on
app performance&lt;/h3&gt;
&lt;center&gt;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/KS3EdZ6TETY" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;div style="font-size: 75%; font-style: italic; padding-bottom: 10px; width:560px;"&gt;
Busuu is one of the world's largest language learning apps. Hear from Antoine
Sakho, Head of Product about how Busuu increased user ratings.
&lt;/div&gt;
&lt;/center&gt;
&lt;h3&gt;Learn more about engineering for high performance with tools from
Android and Google Play&lt;/h3&gt;
&lt;p&gt;
Read our &lt;a
href="http://developer.android.com/distribute/best-practices/develop/android-vitals.html"&gt;best
practice article&lt;/a&gt; on Android vitals to understand the data shown in the
dashboards, and how you can improve your app's performance and stability. Watch
the I/O session to learn about more tools from Android and Google Play that you
can use to identify and fix bad behaviors:
&lt;/p&gt;
&lt;center&gt;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/ySxCrzsKSGI" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/center&gt;
&lt;p&gt;
Learn more about other Play Console features, and stay up to date with news and
tips to succeed on Google Play, with the Playbook app. &lt;a
href="http://g.co/playbookbeta"&gt;Join the beta&lt;/a&gt; and install it today.
&lt;/p&gt;
&lt;p&gt;
 How useful did you find this blogpost?
&lt;/p&gt;
&lt;center&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;entry.656324858&amp;entry.1348260426=Vitals-06/17&amp;entry.1170596605&amp;entry.646747778=Vitals-06/17" style="color:gold;" &gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;entry.656324858&amp;entry.1348260426=Vitals-06/17&amp;entry.1170596605&amp;entry.646747778=Vitals-06/17" style="color:gold;" &gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;entry.656324858&amp;entry.1348260426=Vitals-06/17&amp;entry.1170596605&amp;entry.646747778=Vitals-06/17" style="color:gold;" &gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;entry.656324858&amp;entry.1348260426=Vitals-06/17&amp;entry.1170596605&amp;entry.646747778=Vitals-06/17" style="color:gold;" &gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;entry.656324858&amp;entry.1348260426=title-m/y&amp;entry.1170596605&amp;entry.646747778=title-m/y" style="color:gold;" &gt;★&lt;/a&gt;
&lt;/center&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://developers.android.com/distribute" imageanchor="1" style="margin-left: 1em; margin-right: 1em; margin-top:0; margin-bottom:0"&gt;&lt;img border="0" src="https://3.bp.blogspot.com/-pvHtrNyv_Zk/WWOuZonDX1I/AAAAAAAAEVY/mWRKB-KopK85NRdm1fTyDaD-tHUNnoxuwCLcBGAs/s200/image5.png" width="200" height="113" data-original-width="499" data-original-height="281" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=WpQ5mJ4hdSY:mRERdAUZX8k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=WpQ5mJ4hdSY:mRERdAUZX8k:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=WpQ5mJ4hdSY:mRERdAUZX8k:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/WpQ5mJ4hdSY" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8677231575130927159" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8677231575130927159" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/WpQ5mJ4hdSY/android-vitals-increase-engagement-and.html" title="Android vitals: Increase engagement and installs through improved app performance " /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/vj3Y8L5HLdg/default.jpg" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/07/android-vitals-increase-engagement-and.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-4707917921509864979</id><published>2017-06-30T10:24:00.000-07:00</published><updated>2017-06-30T10:24:25.754-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Things" /><category scheme="http://www.blogger.com/atom/ns#" term="hackster" /><category scheme="http://www.blogger.com/atom/ns#" term="IoT" /><title type="text">Android Things Hackster Community</title><content type="html">&lt;em&gt;Posted by &lt;a href="https://google.com/+DaveSmithDev"&gt;Dave Smith&lt;/a&gt;,
Developer Advocate for IoT&lt;/em&gt;
&lt;p&gt;
&lt;a href="https://developer.android.com/things/index.html"&gt;Android Things&lt;/a&gt;
makes building connected embedded devices easy by providing the same Android
development tools, best-in-class Android framework, and Google APIs that make
developers successful on mobile. Since the initial preview launch back in
December, the community has turned some amazing ideas into exciting prototypes
using the platform.
&lt;/p&gt;
&lt;p&gt;
To empower these makers and developers using Android Things to share and learn
from each other, we have partnered with &lt;a
href="https://hackster.io"&gt;Hackster.io&lt;/a&gt; to create a community where aspiring
IoT developers can go to showcase their projects and get inspired by the work of
others. Hackster.io is a community of 200,000 engineers and developers dedicated
to building internet-connected hardware projects. They also seek to educate and
challenge members through live workshops and design contests.
&lt;/p&gt;
&lt;p&gt;
We are eager to see the projects that you come up with. More importantly, we're
excited to see how your work can inspire other developers to create something
great with Android Things. Visit our &lt;a
href="https://hackster.io/google"&gt;Hackster.io community&lt;/a&gt; to see the amazing
projects others have already built and join the community today!
&lt;/p&gt;
&lt;h3&gt;Android Things Webinar&lt;/h3&gt;
&lt;p&gt;
We will be hosting a webinar in cooperation with Hackster.io on &lt;b&gt;July
7th, 2017 at 10AM PST&lt;/b&gt; titled &lt;b&gt;Bootstrapping IoT Products with
Android Things&lt;/b&gt;. During this time, you will learn how we have designed
Android Things to address many of the pain points experienced by developers
attempting to build IoT products. You will also have the opportunity to send in
questions you have regarding the platform and ecosystem. &lt;a
href="https://attendee.gotowebinar.com/register/3772499545049167107"&gt;Register
today&lt;/a&gt; to join us for this exciting event!
&lt;/p&gt;
&lt;div class="blogimage"&gt;
&lt;a href="https://4.bp.blogspot.com/-5flkHFoqbhA/WVZ5symOWgI/AAAAAAAAEU4/FnqZ_-mSJOcUF0b_kOEHSyrqH3kKtO-_wCLcBGAs/s1600/image1.png" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-5flkHFoqbhA/WVZ5symOWgI/AAAAAAAAEU4/FnqZ_-mSJOcUF0b_kOEHSyrqH3kKtO-_wCLcBGAs/s1600/image1.png" data-original-width="1024" data-original-height="768" /&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;style&gt;
.blogimage img {
width: 100%
}
&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=PV-YH_gRKcc:5VM_rXiZXZk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=PV-YH_gRKcc:5VM_rXiZXZk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=PV-YH_gRKcc:5VM_rXiZXZk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/PV-YH_gRKcc" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4707917921509864979" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4707917921509864979" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/PV-YH_gRKcc/android-things-hackster-community.html" title="Android Things Hackster Community" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://4.bp.blogspot.com/-5flkHFoqbhA/WVZ5symOWgI/AAAAAAAAEU4/FnqZ_-mSJOcUF0b_kOEHSyrqH3kKtO-_wCLcBGAs/s72-c/image1.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/06/android-things-hackster-community.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-3593227587716858053</id><published>2017-06-28T09:00:00.000-07:00</published><updated>2017-06-28T09:00:28.751-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Things" /><category scheme="http://www.blogger.com/atom/ns#" term="Developer Preview" /><category scheme="http://www.blogger.com/atom/ns#" term="IoT" /><title type="text">Android Things Console developer preview</title><content type="html">&lt;em&gt;Posted by &lt;a href="https://google.com/+WaynePiekarski"&gt;Wayne Piekarski&lt;/a&gt;,
Developer Advocate for IoT&lt;/em&gt;
&lt;p&gt;
Today we are launching a preview of the &lt;a
href="https://partner.android.com/things/console"&gt;Android Things Console&lt;/a&gt;.
This console allows developers to manage the software running on their fleet of
Android Things IoT devices, including creating factory images, as well as
updating the operating system and developer-provided APKs. Devices need to run a
system image downloaded via the Android Things Console in order to receive
future updates, such as the upcoming Developer Preview 5. Google provides all of
the infrastructure for over-the-air (OTA) updates, so developers can focus on
their specific application and not have to build their own implementation –
getting their IoT devices to enter the market faster and more securely than
before.
&lt;/p&gt;
&lt;p&gt;
Let's take a tour of the console, and see the features it offers.
&lt;/p&gt;
&lt;h3&gt;Product Creation and Product Settings&lt;/h3&gt;
&lt;p&gt;
The developer first defines a product, which includes selecting a name and the
type of System-on-Module (SoM) that the device is based on. Many developers want
to use Google Play Services when building IoT devices, and this is configured
here as an optional feature. The size of the OEM partition is also configured,
and must be large enough to include the size of any future APK growth.
&lt;/p&gt;
&lt;div class="blogimage"&gt;
&lt;a href="https://2.bp.blogspot.com/-zcOTvDJXtDw/WVLfNgE3JgI/AAAAAAAAEUg/SI-PHJ44skgQnfyXcSbAIXp7iUw8D6ibgCLcBGAs/s1600/image3.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-zcOTvDJXtDw/WVLfNgE3JgI/AAAAAAAAEUg/SI-PHJ44skgQnfyXcSbAIXp7iUw8D6ibgCLcBGAs/s1600/image3.png" data-original-width="360" data-original-height="564" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h3&gt;Factory Images&lt;/h3&gt;
&lt;p&gt;
A device needs an initial base firmware to receive future updates for the
correct product from your console. For starters, you can simply use "Create
Build Configuration" to build a default factory image with an empty bundle that
is configured for your product. This factory image can then be downloaded and
flashed to your device, and you can start developing on it by sideloading an
APK.
&lt;/p&gt;
&lt;p&gt;
Later on, once you have prepared an application that you would like to deploy to
all the devices in your product, you can upload a bundle to the console. This
bundle is a ZIP file that contains a main APK file, user space drivers as a
service in an APK, and any additional APKs launched by the main APK. A &lt;a
href="https://source.android.com/devices/tech/ota/device_code#boot-animation"&gt;bootanimation.zip&lt;/a&gt;
file is also supported, which will be displayed during boot up. The uploaded
bundle ZIP file is then used to produce a complete system image that can be
deployed to devices. More information about the bundle ZIP file contents is
available in the &lt;a
href="https://developer.android.com/things/console/app_bundle.html"&gt;documentation&lt;/a&gt;.
&lt;/p&gt;
&lt;div class="blogimage"&gt;
&lt;a href="https://4.bp.blogspot.com/-btC5S7-5jJw/WVLfV9kMTJI/AAAAAAAAEUk/VSmX-nLsVxs1ppfCZ8WtVURUkHNznRbzQCLcBGAs/s1600/image2.png" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-btC5S7-5jJw/WVLfV9kMTJI/AAAAAAAAEUk/VSmX-nLsVxs1ppfCZ8WtVURUkHNznRbzQCLcBGAs/s1600/image2.png" data-original-width="779" data-original-height="622" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h3&gt;OTA Updates&lt;/h3&gt;
&lt;p&gt;
This tab allows the developer to select which system image should be pushed to
the fleet of product devices. The developer selects one, and then "Push to
Devices" starts the process. The update will then be securely pushed to all of
the devices, installed to one of the A/B partitions, and made active when the
device is rebooted. If any failures are detected, the device automatically rolls
back to the previous known working version, so future updates are still
possible. Developers will be able to test new releases of Android Things in
advance and decide whether devices should be updated automatically.
&lt;/p&gt;
&lt;div class="blogimage"&gt;
&lt;a href="https://3.bp.blogspot.com/-vGy4F6rQ0uI/WVLfdberSKI/AAAAAAAAEUo/iqFPbnsTn1kGGfBuaaHFnS04sTR01CjIwCLcBGAs/s1600/image1.png" imageanchor="1" &gt;&lt;img border="0" src="https://3.bp.blogspot.com/-vGy4F6rQ0uI/WVLfdberSKI/AAAAAAAAEUo/iqFPbnsTn1kGGfBuaaHFnS04sTR01CjIwCLcBGAs/s1600/image1.png" data-original-width="766" data-original-height="250" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h3&gt;Feedback&lt;/h3&gt;
&lt;p&gt;
The Android Things Console is currently a preview, and we are working on many
more features and customizations. We encourage all Android Things developers to
check out the Android Things Console and provide feedback. You can do this by
filing &lt;a
href="https://code.google.com/p/android/issues/entry?template=Android%20Things%20bug%20report"&gt;bug
reports&lt;/a&gt; and &lt;a
href="https://code.google.com/p/android/issues/entry?template=Android%20Things%20feature%20request"&gt;feature
requests&lt;/a&gt;, and asking any questions on &lt;a
href="http://stackoverflow.com/questions/tagged/android-things"&gt;Stack
Overflow&lt;/a&gt;. To learn more about the Android Things Console, read the detailed
&lt;a
href="https://developer.android.com/things/console/index.html"&gt;documentation&lt;/a&gt;.
We also encourage everyone to join &lt;a href="http://g.co/iotdev"&gt;Google's IoT
Developers Community&lt;/a&gt; on Google+, a great resource to get updates and discuss
ideas.
&lt;/p&gt;

&lt;style&gt;
.blogimage img {
max-width: 75%;
display: block;
margin: auto;
padding: 20px 0 30px 0;
}
&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=LTr12DKWwmY:HYBgfmXASy0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=LTr12DKWwmY:HYBgfmXASy0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=LTr12DKWwmY:HYBgfmXASy0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/LTr12DKWwmY" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3593227587716858053" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3593227587716858053" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/LTr12DKWwmY/android-things-console-developer-preview.html" title="Android Things Console developer preview" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-zcOTvDJXtDw/WVLfNgE3JgI/AAAAAAAAEUg/SI-PHJ44skgQnfyXcSbAIXp7iUw8D6ibgCLcBGAs/s72-c/image3.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/06/android-things-console-developer-preview.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-1875968768178611418</id><published>2017-06-22T14:29:00.000-07:00</published><updated>2017-06-22T14:29:31.691-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AndroidO" /><category scheme="http://www.blogger.com/atom/ns#" term="Safe Browsing" /><category scheme="http://www.blogger.com/atom/ns#" term="Security" /><title type="text">What’s new in WebView security</title><content type="html">&lt;em&gt;Posted by Xiaowen Xin and Renu Chaudhary, Android Security Team&lt;/em&gt;

&lt;p&gt;
The processing of external and untrusted content is often one of the most
important functions of an app.  A newsreader shows the top news articles and a
shopping app displays the catalog of items for sale.  This comes with associated
risks as the processing of untrusted content is also one of the main ways that
an attacker can compromise your app, i.e. by passing you malformed content.
&lt;/p&gt;
&lt;p&gt;
Many apps handle untrusted content using &lt;a
href="https://developer.android.com/reference/android/webkit/WebView.html"&gt;WebView&lt;/a&gt;,
and we've made many improvements  in Android over the years to protect it and
your app against compromise.  With Android Lollipop, we started delivering
WebView as an independent APK, updated every six weeks from the Play store, so
that we can get important fixes to users quickly.  With the newest WebView,
we've added a couple more important security enhancements.
&lt;/p&gt;
&lt;h3&gt;Isolating the renderer process in Android O&lt;/h3&gt;
&lt;p&gt;
Starting with Android O, WebView will have the renderer running in an isolated
process separate from the host app, taking advantage of the isolation between
processes provided by Android that has been available for other applications.
&lt;/p&gt;
&lt;div class="blogimage"&gt;
&lt;a href="https://2.bp.blogspot.com/-z8gy1RjF4l8/WUg_OQ6YibI/AAAAAAAAET4/L8-oQTxXZZse0YXOuWO-4W2_C1gH9Y9WgCLcBGAs/s1600/image1.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-z8gy1RjF4l8/WUg_OQ6YibI/AAAAAAAAET4/L8-oQTxXZZse0YXOuWO-4W2_C1gH9Y9WgCLcBGAs/s1600/image1.png" data-original-width="1284" data-original-height="572" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
Similar to Chrome, WebView now provides two levels of isolation:
&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;The rendering engine has been split into a separate process.  This insulates
the host app from bugs or crashes in the renderer process and makes it harder
for a malicious website that can exploit the renderer to then exploit the host
app.
&lt;li&gt;To further contain it, the renderer process is run within an isolated
process sandbox that restricts it to a limited set of resources. For example,
the rendering engine cannot write to disk or talk to the network on its own.  
&lt;div class="floatimage"&gt;&lt;a href="https://2.bp.blogspot.com/-04to3DfkY2s/WUhAOo30FuI/AAAAAAAAEUA/QXIwMahhrBk2yoIWGIDOZfhMG15ZkTbtgCLcBGAs/s1600/image2.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-04to3DfkY2s/WUhAOo30FuI/AAAAAAAAEUA/QXIwMahhrBk2yoIWGIDOZfhMG15ZkTbtgCLcBGAs/s1600/image2.png" data-original-width="500" data-original-height="718" /&gt;&lt;/a&gt;
&lt;/div&gt;
It is also bound to the same seccomp filter (blogpost on seccomp is coming soon) as
used by Chrome on Android. The seccomp filter reduces the number of system calls
the renderer process can access and also restricts the allowed arguments to the
system calls.&lt;/li&gt;&lt;/ol&gt;


&lt;h3&gt;Incorporating Safe Browsing&lt;/h3&gt;
&lt;p&gt;
The newest version of WebView incorporates Google's &lt;a
href="https://safebrowsing.google.com/"&gt;Safe Browsing&lt;/a&gt; protections to detect
and warn users about potentially dangerous sites.. When correctly configured,
WebView checks URLs against Safe Browsing's malware and phishing database and
displays a warning message before users visit a dangerous site. On Chrome, this
helpful information is displayed more than 250 million times a month, and now
it's available in WebView on Android.
&lt;/p&gt;
&lt;h3&gt;Enabling Safe Browsing&lt;/h3&gt;
&lt;p&gt;
To enable Safe Browsing for all WebViews in your app, add in a manifest tag:
&lt;/p&gt;


&lt;pre class="prettyprint"&gt;
&amp;lt;manifest&amp;gt;
     &amp;lt;meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
                android:value="true" /&amp;gt;
      . . .
     &amp;lt;application&amp;gt; . . . &amp;lt;/application&amp;gt;
&amp;lt;/manifest&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
Because WebView is distributed as a separate APK, Safe Browsing for WebView is
available today for devices running Android 5.0 and above. With just one added
line in your manifest, you can update your app and improve security for most of
your users immediately.
&lt;/p&gt;

&lt;style&gt;
.blogimage img {
width: 100%;
border: 0;
margin: 0;
padding: 0;
}
.floatimage img {
float: right;
width: 45%;
}
&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=_fi3MzDGRgY:4V1Moh6Mt1k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=_fi3MzDGRgY:4V1Moh6Mt1k:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=_fi3MzDGRgY:4V1Moh6Mt1k:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/_fi3MzDGRgY" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1875968768178611418" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/1875968768178611418" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/_fi3MzDGRgY/whats-new-in-webview-security.html" title="What’s new in WebView security" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-z8gy1RjF4l8/WUg_OQ6YibI/AAAAAAAAET4/L8-oQTxXZZse0YXOuWO-4W2_C1gH9Y9WgCLcBGAs/s72-c/image1.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/06/whats-new-in-webview-security.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-7982674679166696404</id><published>2017-06-20T11:00:00.000-07:00</published><updated>2017-06-20T11:00:25.725-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Market" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><title type="text">Ending support for Android Market on Android 2.1 and lower</title><content type="html">&lt;em&gt;Posted by Maximilian Ruppaner, Software Engineer on Google Play&lt;/em&gt;
&lt;p&gt;
On June 30, 2017, Google will be ending support for the Android Market app on
Android 2.1 Eclair and older devices. When this change happens, users on these
devices will no longer be able to access, or install other apps from, the
Android Market. The change will happen without a notification on the device, due
to technical restrictions in the original Android Market app.
&lt;/p&gt;
&lt;p&gt;
It has been 7 years since Android 2.1 Eclair launched. Most app developers are
no longer supporting these Android versions in their apps given these devices
now account for only a small number of installs.
&lt;/p&gt;
&lt;p&gt;
We will still be supporting later versions of Android Market for as long as
feasible. &lt;a href="http://play.google.com"&gt;Google Play&lt;/a&gt;, the replacement for
Android Market, is available on Android 2.2 and above.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=FuUs1bGvWgg:YmLvcjagi4Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=FuUs1bGvWgg:YmLvcjagi4Q:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=FuUs1bGvWgg:YmLvcjagi4Q:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/FuUs1bGvWgg" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7982674679166696404" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7982674679166696404" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/FuUs1bGvWgg/ending-support-for-android-market-on.html" title="Ending support for Android Market on Android 2.1 and lower" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://android-developers.googleblog.com/2017/06/ending-support-for-android-market-on.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-7257846621494727952</id><published>2017-06-16T10:00:00.000-07:00</published><updated>2017-06-16T10:00:25.182-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Developer" /><category scheme="http://www.blogger.com/atom/ns#" term="awareness" /><category scheme="http://www.blogger.com/atom/ns#" term="context" /><category scheme="http://www.blogger.com/atom/ns#" term="Google I/O" /><title type="text">Semantic Time support now available on the Awareness APIs</title><content type="html">&lt;em&gt;Posted by Ritesh Nayak M, Product Manager&lt;/em&gt;

&lt;div class="blogimage"&gt;&lt;a href="https://2.bp.blogspot.com/-t2yCs-z1AE4/WT7x19FnOEI/AAAAAAAAESc/cc21URIx_KEH0G_k9sberDurxMnlxRv2gCLcB/s1600/CSw7tg95fHT.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-t2yCs-z1AE4/WT7x19FnOEI/AAAAAAAAESc/cc21URIx_KEH0G_k9sberDurxMnlxRv2gCLcB/s1600/CSw7tg95fHT.png" data-original-width="1576" data-original-height="887" /&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;
Last year at I/O we launched the &lt;a
href="https://developers.google.com/awareness/"&gt;Awareness API&lt;/a&gt;, a simple yet
powerful API that let developers use signals such as Location, Weather, Time and
User Activity to build contextually relevant app experiences.
&lt;/p&gt;
&lt;p&gt;
Available via Google Play services, the Awareness API offers two ways to take
advantage of context signals within your app. The &lt;a
href="https://developers.google.com/awareness/android-api/snapshot-api-overview"&gt;Snapshot
API&lt;/a&gt; lets your app request information about the user's current context,
while the &lt;a
href="https://developers.google.com/awareness/android-api/fence-api-overview"&gt;Fence
API&lt;/a&gt; lets your app react to changes in user's context, and when it matches a
certain set of conditions. For example, "tell me whenever the user is walking
and their headphone is plugged in".
&lt;/p&gt;
&lt;p&gt;
Until now, you could specify a time fence on the Awareness APIs but were
restricted to using absolute/canonical representation of time. Based on
developer feedback, we realized that the flexibility of the API in regards to
building time fences did not support higher level abstractions people use when
they think and talk about time. "&lt;em&gt;This weekend&lt;/em&gt;", "&lt;em&gt;on the next
holiday&lt;/em&gt;", "&lt;em&gt;after sunset&lt;/em&gt;", are all very common and colloquial ways
of expressing time. That's why we're adding Semantic time support to these APIs
starting today
&lt;/p&gt;
&lt;p&gt;
For e.g., if you were building a fitness app and wanted a way to prompt users
everyday morning to start their routine, or if you're a reading app that wants
to turn on night mode after dusk; you would have to query a 3p API for
sunrise/sunset information at the user location and then write up an Awareness
fence with those canonical time values. With our latest update, you can use our
&lt;code&gt;&lt;a
href="https://developers.google.com/android/reference/com/google/android/gms/awareness/fence/TimeFence.html#TIME_INSTANT_SUNRISE"&gt;TIME_INSTANT_SUNRISE&lt;/a&gt;&lt;/code&gt;
and &lt;code&gt;&lt;a
href="https://developers.google.com/android/reference/com/google/android/gms/awareness/fence/TimeFence.html#TIME_INSTANT_SUNSET"&gt;TIME_INSTANT_SUNSET&lt;/a&gt;&lt;/code&gt;
constants and let the platform manage all the complexity for you.
&lt;/p&gt;
&lt;p&gt;
Let's look at an example. Suppose you're building a fitness app which prompts
users on Tuesday, and Thursday around sunrise to begin their morning work out.
You can set up this triggering using the following lines of code.
&lt;/p&gt;


&lt;pre
class="prettyprint"&gt;// A sun-state-based fence that is TRUE only on Tuesday and Thursday during Sunrise 
AwarenessFence.and(
    TimeFence.aroundTimeInstant(TimeFence.TIME_INSTANT_SUNRISE,
            -10 * ONE_MINUTE_MILLIS, 5 * ONE_MINUTE_MILLIS),
    AwarenessFence.or(
        TimeFence.inIntervalOfDay(TimeFence.DAY_OF_WEEK_TUESDAY,
                0, ONE_DAY_MILLIS),
        TimeFence.inIntervalOfDay(TimeFence.DAY_OF_WEEK_THURSDAY,
                0, ONE_DAY_MILLIS)));

&lt;/pre&gt;
&lt;p&gt;
One of our favorite semantic time features is public holidays. Every country and
regions within it have different holidays. Assume you were a local hiking &amp;
adventure app that wants to show users activities they can indulge in on a
holiday that falls on a Friday or a Monday. You can use a combination of Days
and Holiday flags to identify this state for all your users around the world.
You can do this with just 3 lines of code and have this work in any part of the
world.
&lt;/p&gt;


&lt;pre
class="prettyprint"&gt;// A local-time fence that is TRUE only on public holidays in the
// device locale that fall on Fridays or Mondays.
AwarenessFence.and(
    TimeFence.inTimeInterval(TimeFence.TIME_INTERVAL_HOLIDAY),
    AwarenessFence.or(
        TimeFence.inIntervalOfDay(TimeFence.DAY_OF_WEEK_FRIDAY,
                9 * ONE_HOUR_MILLIS, 11 * ONE_HOUR_MILLIS),
        TimeFence.inIntervalOfDay(TimeFence.DAY_OF_WEEK_MONDAY,
                9 * ONE_HOUR_MILLIS, 11 * ONE_HOUR_MILLIS)));&lt;/pre&gt;
&lt;p&gt;
In both example cases, Awareness does the heavy lifting of localizing time and
holidays based on the device locale settings.
&lt;/p&gt;
&lt;p&gt;
We're excited to see what problems you'll solve using this powerful API. Please
join our &lt;a
href="https://groups.google.com/forum/#!forum/google-context-apis/join"&gt;mailing
list &lt;/a&gt;to get updates about this and other Context APIs at Google.
&lt;/p&gt;

&lt;style&gt;
.blogimage img {
width: 100%;
}
&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=J_aDyTVwrno:Gavh7slSa20:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=J_aDyTVwrno:Gavh7slSa20:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=J_aDyTVwrno:Gavh7slSa20:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/J_aDyTVwrno" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7257846621494727952" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7257846621494727952" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/J_aDyTVwrno/semantic-time-support-now-available-on.html" title="Semantic Time support now available on the Awareness APIs" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-t2yCs-z1AE4/WT7x19FnOEI/AAAAAAAAESc/cc21URIx_KEH0G_k9sberDurxMnlxRv2gCLcB/s72-c/CSw7tg95fHT.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/06/semantic-time-support-now-available-on.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-3352657716029786312</id><published>2017-06-15T09:59:00.001-07:00</published><updated>2017-06-15T14:41:51.577-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Things" /><category scheme="http://www.blogger.com/atom/ns#" term="Developer Preview" /><category scheme="http://www.blogger.com/atom/ns#" term="IoT" /><category scheme="http://www.blogger.com/atom/ns#" term="Pico" /><title type="text">Android Things Developer Preview 4.1</title><content type="html">
&lt;em&gt;Posted by &lt;a href="https://google.com/+WaynePiekarski"&gt;Wayne Piekarski&lt;/a&gt;,
Developer Advocate for IoT&lt;/em&gt;

&lt;p&gt;
Today, we're releasing a new Developer Preview 4.1 (DP4.1) of &lt;a
href="https://developer.android.com/things/index.html"&gt;Android Things&lt;/a&gt;, with
updates for new supported hardware and bug fixes to the platform. Android Things
is Google's platform to enable Android Developers to create Internet of Things
(IoT) devices, and seamlessly scale from prototype to production.
&lt;/p&gt;
&lt;h3&gt;New hardware&lt;/h3&gt;
&lt;p&gt;
A new Pico i.MX6UL revision B board has been released, which supports many
common external peripherals from partners such as Adafruit and Pimoroni. There
were some prototype Pico i.MX6UL boards made available to some early beta
testers, and these are not compatible with DP4.1.
&lt;/p&gt;
&lt;h3&gt;Improvements&lt;/h3&gt;
&lt;p&gt;
DP4.1 also includes some performance improvements since DP4, such as boot time
optimizations that improve the startup time of i.MX7D based hardware. This
Developer Preview also includes a version of Google Play Services, specifically
optimized for IoT devices. This new IoT variant is a lot smaller and optimized
for use with Android Things, and requires the use of play-services 11.0.0 or
later in your build.gradle. For more information about the supported features in
the IoT variant of Google Play Services, see the &lt;a
href="http://developers.android.com/things/sdk/index.html#google-services"&gt;information
page&lt;/a&gt;.
&lt;/p&gt;
&lt;h3&gt;Google I/O&lt;/h3&gt;
&lt;p&gt;
Android Things had a large presence at Google I/O this year, with 7 talks
covering different aspects of Android Things for developers, and these are
available as videos in a &lt;a
href="https://www.youtube.com/playlist?list=PLOU2XLYxmsIIUtQeTRlRoDCdncUpWnR4M"&gt;playlist&lt;/a&gt;
for those who could not attend:
&lt;/p&gt;
&lt;div class="parent"&gt;
  &lt;div class="child1"&gt;
    &lt;a href="https://www.youtube.com/watch?v=Or1uzno8d20&amp;index=7&amp;list=PLOU2XLYxmsIKC8eODk_RNCWv3fBcLvMMy" &gt;&lt;img border="0" src="https://1.bp.blogspot.com/-mzzl31SSUdg/WUK0PL7vY7I/AAAAAAAAESo/WIroRH6nKjQU1OQH_xM-FDo5iCpxyafeACLcBGAs/s1600/maxresdefault%2B%252814%2529.jpg" /&gt;&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class="child2"&gt;
    What’s New In Google’s IoT Platform? Ubiquitous Computing at Google
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="parent"&gt;
  &lt;div class="child1"&gt;
    &lt;a href="https://www.youtube.com/watch?v=sjpNek_7z-I&amp;index=21&amp;list=PLOU2XLYxmsIKC8eODk_RNCWv3fBcLvMMy" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-FXRj_nwlmWM/WUK0xglkDlI/AAAAAAAAESs/41wJvl_RmNcVjUAaoQoF7M09Z3mArUgIACLcBGAs/s1600/maxresdefault%2B%252815%2529.jpg" data-original-width="1280" data-original-height="720" /&gt;&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class="child2"&gt;
    Bringing Device Production to Everyone With Android Things
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="parent"&gt;
  &lt;div class="child1"&gt;
    &lt;a href="https://www.youtube.com/watch?v=W6Q8MCyuIks&amp;index=40&amp;list=PLOU2XLYxmsIKC8eODk_RNCWv3fBcLvMMy" &gt;&lt;img border="0" src="https://1.bp.blogspot.com/-vH98LTQ5Fuo/WUK1S6vb5rI/AAAAAAAAESw/alwMZ_caA4QiX7MQI00L8fExEJblDAZeQCLcBGAs/s1600/maxresdefault%2B%252816%2529.jpg" data-original-width="1280" data-original-height="720" /&gt;&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class="child2"&gt;
    From Prototype to Production Devices with Android Things
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="parent"&gt;
  &lt;div class="child1"&gt;
    &lt;a href="https://www.youtube.com/watch?v=v3Dm5aeuQKE&amp;list=PLOU2XLYxmsIKC8eODk_RNCWv3fBcLvMMy&amp;index=58" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-ImmV--eMyAM/WUK1oKcPHBI/AAAAAAAAES0/NCLFEkNgSV8X2L0QXs0-3BFpd0RGv0YUACLcBGAs/s1600/maxresdefault%2B%252817%2529.jpg" data-original-width="1280" data-original-height="720" /&gt;&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class="child2"&gt;
    Developing for Android Things Using Android Studio
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="parent"&gt;
  &lt;div class="child1"&gt;
    &lt;a href="https://www.youtube.com/watch?v=U4QBI4PJj8Y&amp;index=43&amp;list=PLOU2XLYxmsIKC8eODk_RNCWv3fBcLvMMy" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-bku_DMXfBYY/WULdbB55JNI/AAAAAAAAETY/mSOnjA9cwl0j8WYhUkWajlgMmbfHwnrDwCLcBGAs/s1600/maxresdefault%2B%252820%2529.jpg" data-original-width="1280" data-original-height="720" /&gt;&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class="child2"&gt;
    Security for IoT on Android Things
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="parent"&gt;
  &lt;div class="child1"&gt;
    &lt;a href="https://www.youtube.com/watch?v=0JWGFMtDDy0&amp;index=82&amp;list=PLOU2XLYxmsIKC8eODk_RNCWv3fBcLvMMy" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/--IddqbtWSt0/WULBxE-OeOI/AAAAAAAAETQ/bt5-QozG-mMUpIsi1OPGvMI6J4OuJ40YgCLcBGAs/s1600/maxresdefault%2B%252818%2529.jpg" data-original-width="1280" data-original-height="720" /&gt;&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class="child2"&gt;
    Using Google Cloud and TensorFlow on Android Things
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="parent"&gt;
  &lt;div class="child1"&gt;
    &lt;a href="https://www.youtube.com/watch?v=ETWhOWvqH5E&amp;list=PLOU2XLYxmsIKC8eODk_RNCWv3fBcLvMMy&amp;index=65" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-uOmZ8o5V2gc/WUK7Jlz-hQI/AAAAAAAAETE/O0wxM92GkHgK2PBx9ekLIk0E-9Pdg9J2QCLcBGAs/s1600/maxresdefault%2B%252819%2529.jpg" data-original-width="1280" data-original-height="720" /&gt;&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class="child2"&gt;
    Building for Enterprise IoT Using Android Things and Google Cloud Platform
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
Google I/O also had a codelab area, where attendees could sit down and test out
Android Things development with some simple guided training guides. These
codelabs are available for anyone to try at &lt;a
href="https://codelabs.developers.google.com/?cat=IoT"&gt;https://codelabs.developers.google.com/?cat=IoT&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;Feedback&lt;/h3&gt;
&lt;p&gt;
Thank you to all the developers who submitted feedback for the previous
developer previews. Please continue sending us your feedback by filing &lt;a
href="https://code.google.com/p/android/issues/entry?template=Android%20Things%20bug%20report"&gt;bug
reports&lt;/a&gt; and &lt;a
href="https://code.google.com/p/android/issues/entry?template=Android%20Things%20feature%20request"&gt;feature
requests&lt;/a&gt;, and asking any questions on &lt;a
href="http://stackoverflow.com/questions/tagged/android-things"&gt;stackoverflow&lt;/a&gt;.
To download images for DP4.1, visit the Android Things &lt;a
href="https://developer.android.com/things/preview/download.html"&gt;download&lt;/a&gt;
page and find the changes in the &lt;a
href="https://developer.android.com/things/preview/releases.html"&gt;release
notes&lt;/a&gt;. You can also join &lt;a href="http://g.co/iotdev"&gt;Google's IoT
Developers Community&lt;/a&gt; on Google+, a great resource to get updates and discuss
ideas, with over 5,600 members.
&lt;/p&gt;



&lt;style&gt;
.parent {
display: flex;
justify-content: space-around;
align-items: center;
width: 100% 
flex-wrap: wrap;
}

.child1 {
width: 30%;
display: flex;
justify-content: center;
align-items: center;
}

.child1 img {
object-fit: contain;
width: 150px;
margin: 0;
border: 0;
padding: 0;
}

.child2 {
width: 70%;
text-align: left;
padding: 0 0 0 5px;
}

&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=JS9H_7kfV7c:rXdpA1HZlpQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=JS9H_7kfV7c:rXdpA1HZlpQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=JS9H_7kfV7c:rXdpA1HZlpQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/JS9H_7kfV7c" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3352657716029786312" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/3352657716029786312" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/JS9H_7kfV7c/android-things-developer-preview-41.html" title="Android Things Developer Preview 4.1" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-mzzl31SSUdg/WUK0PL7vY7I/AAAAAAAAESo/WIroRH6nKjQU1OQH_xM-FDo5iCpxyafeACLcBGAs/s72-c/maxresdefault%2B%252814%2529.jpg" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/06/android-things-developer-preview-41.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-4844511226533557112</id><published>2017-06-14T10:00:00.000-07:00</published><updated>2017-06-14T11:16:09.682-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Play services" /><category scheme="http://www.blogger.com/atom/ns#" term="Location" /><title type="text">Reduce friction with the new Location APIs</title><content type="html">&lt;em&gt;Posted by Aaron Stacy, Software Engineer, Google Play services&lt;/em&gt;

&lt;p&gt;
The 11.0.0 release of the Google Play services SDK includes a new way to access
&lt;a
href="https://developers.google.com/android/reference/com/google/android/gms/location/LocationServices"&gt;LocationServices&lt;/a&gt;.
The new APIs do not require your app to manually manage a connection to Google
Play services through a &lt;code&gt;GoogleApiClient&lt;/code&gt;. This reduces boilerplate
and common pitfalls in your app.
&lt;/p&gt;
&lt;p&gt;
Read more below, or head straight to &lt;a
href="https://github.com/googlesamples/android-play-location"&gt;the updated
location samples on GitHub&lt;/a&gt;.
&lt;/p&gt;
&lt;h3&gt;Why not use GoogleApiClient?&lt;/h3&gt;
&lt;p&gt;
The LocationServices APIs allow you to access device location, set up geofences,
prompt the user to enable location on the device and more. In order to access
these services, the app must connect to Google Play services, which can involve
error-prone connection logic. For example, can you spot the crash in the app
below?
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Note&lt;/strong&gt;: we'll assume our app has the
&lt;code&gt;ACCESS_FINE_LOCATION&lt;/code&gt; permission, which is required to get the
user's exact location using the LocationServices APIs.
&lt;/p&gt;


&lt;pre
class="prettyprint"&gt;public class MainActivity extends AppCompatActivity implements
        GoogleApiClient.OnConnectionFailedListener {

  @Override
  public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    GoogleApiClient client = new GoogleApiClient.Builder(this)
        .enableAutoManage(this, this)
        .addApi(LocationServices.API)
        .build();
    client.connect();

    PendingResult&lt;Status&gt; result = 
         LocationServices.FusedLocationApi.requestLocationUpdates(
                 client, LocationRequest.create(), pendingIntent);

    result.setResultCallback(new ResultCallback&lt;Status&gt;() {
      @Override
      public void onResult(@NonNull Status status) {
        Log.d(TAG, "Result: " + status.getStatusMessage());
      }
    });
  }

  // ...
}&lt;/pre&gt;
&lt;p&gt;
If you pointed to the &lt;code&gt;requestLocationUpdates()&lt;/code&gt; call, you're right!
That call throws an &lt;code&gt;IllegalStateException&lt;/code&gt;, since the
&lt;code&gt;GoogleApiClient&lt;/code&gt; is has not yet connected. The call to
&lt;code&gt;connect()&lt;/code&gt; is asynchronous.
&lt;/p&gt;
&lt;p&gt;
While the code above looks like it should work, it's missing a &lt;a
href="https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient.ConnectionCallbacks"&gt;ConnectionCallbacks&lt;/a&gt;
argument to the &lt;code&gt;GoogleApiClient&lt;/code&gt; builder. The call to request
location updates should only be made after the &lt;code&gt;onConnected&lt;/code&gt; callback
has fired:
&lt;/p&gt;


&lt;pre
class="prettyprint"&gt;public class MainActivity extends AppCompatActivity implements 
        GoogleApiClient.OnConnectionFailedListener,
        GoogleApiClient.ConnectionCallbacks {

  private GoogleApiClient client;

  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    client = new GoogleApiClient.Builder(this)
        .enableAutoManage(this, this)
        .addApi(LocationServices.API)
        .addConnectionCallbacks(this)
        .build();

    client.connect();
  }

  @Override
  public void onConnected(@Nullable Bundle bundle) {
    PendingResult&lt;Status&gt; result = 
            LocationServices.FusedLocationApi.requestLocationUpdates(
                    client, LocationRequest.create(), pendingIntent);
    
    result.setResultCallback(new ResultCallback&lt;Status&gt;() {
      @Override
      public void onResult(@NonNull Status status) {
        Log.d(TAG, "Result: " + status.getStatusMessage());
      }
    });
  }

  // ...
}&lt;/pre&gt;
&lt;p&gt;
Now the code works, but it's not ideal for a few reasons:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;It would be hard to refactor into shared classes if, for instance, you wanted
to access Location Services in multiple activities.
&lt;li&gt;The app connects optimistically in &lt;code&gt;onCreate&lt;/code&gt; even if Location
Services are not needed until later (for example, after user input).
&lt;li&gt;It does not handle the case where the app fails to connect to Google Play
services.
&lt;li&gt;There is a lot of boilerplate connection logic before getting started with
location updates.&lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;A better developer experience&lt;/h3&gt;
&lt;p&gt;
The new &lt;code&gt;LocationServices&lt;/code&gt; APIs are much simpler and will make your
code less error prone.  The connection logic is handled automatically, and you
only need to attach a single completion listener:
&lt;/p&gt;


&lt;pre
class="prettyprint"&gt;public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    FusedLocationProviderClient client =
            LocationServices.getFusedLocationProviderClient(this);

    client.requestLocationUpdates(LocationRequest.create(), pendingIntent)
        .addOnCompleteListener(new OnCompleteListener&lt;Void&gt;() {
          @Override
          public void onComplete(@NonNull Task&lt;Void&gt; task) {
            Log.d("MainActivity", "Result: " + task.getResult());
          }
        });
  }
}&lt;/pre&gt;
&lt;p&gt;
The new API immediately improves the code in a few ways:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;The API calls automatically wait for the service connection to be
established, which removes the need to wait for &lt;code&gt;onConnected&lt;/code&gt; before
making requests.
&lt;li&gt;It uses the &lt;a
href="https://firebase.googleblog.com/2016/09/become-a-firebase-taskmaster-part-1.html"&gt;Task&lt;/a&gt;
API which makes it easier to compose asynchronous operations.
&lt;li&gt;The code is self-contained and could easily be moved into a shared utility
class or similar.
&lt;li&gt;You don't need to understand the underlying connection process to start
coding.&lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;What happened to all of the callbacks?&lt;/h3&gt;
&lt;p&gt;
The new API will automatically resolve certain connection failures for you, so
you don't need to write code that for things like prompting the user to update
Google Play services. Rather than exposing connection failures globally in the
&lt;a
href="https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient.OnConnectionFailedListener.html#onConnectionFailed(com.google.android.gms.common.ConnectionResult))"&gt;onConnectionFailed&lt;/a&gt;
method, connection problems will fail the Task with an &lt;a
href="https://developers.google.com/android/reference/com/google/android/gms/common/api/ApiException"&gt;ApiException&lt;/a&gt;:
&lt;/p&gt;


&lt;pre
class="prettyprint"&gt;    client.requestLocationUpdates(LocationRequest.create(), pendingIntent)
        .addOnFailureListener(new OnFailureListener() {
          @Override
          public void onFailure(@NonNull Exception e) {
            if (e instanceof ApiException) {
              Log.w(TAG, ((ApiException) e).getStatusMessage());
            } else {
              Log.w(TAG, e.getMessage());
            }
          }
        });&lt;/pre&gt;
&lt;h3&gt;Try it for yourself&lt;/h3&gt;
&lt;p&gt;
Try the new &lt;code&gt;LocationServices&lt;/code&gt; APIs out for yourself in your own app
or head over to the &lt;a
href="https://github.com/googlesamples/android-play-location"&gt;android-play-location
samples on GitHub&lt;/a&gt; and see more examples of how the new clients reduce
boilerplate and simplify logic.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=MsNWowOJwO4:L4laHE9EPqU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=MsNWowOJwO4:L4laHE9EPqU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=MsNWowOJwO4:L4laHE9EPqU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/MsNWowOJwO4" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4844511226533557112" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4844511226533557112" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/MsNWowOJwO4/reduce-friction-with-new-location-apis.html" title="Reduce friction with the new Location APIs" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://android-developers.googleblog.com/2017/06/reduce-friction-with-new-location-apis.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-5687811374415376762</id><published>2017-06-13T09:00:00.000-07:00</published><updated>2017-06-13T09:00:28.361-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Android Excellence" /><category scheme="http://www.blogger.com/atom/ns#" term="Editors’ Choice" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><title type="text">Recognizing Android Excellence on Google Play</title><content type="html">&lt;em&gt;Posted by Kacey Fahey, Developer Marketing, Google Play&lt;/em&gt;

&lt;div class="blogimage"&gt;&lt;a href="https://2.bp.blogspot.com/-FyxDNfrSyZA/WT7pFitOIBI/AAAAAAAAESI/_Lva65XJDtMdgY5i3Y9GrXqu5WScF4UZwCLcB/s1600/image3.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-FyxDNfrSyZA/WT7pFitOIBI/AAAAAAAAESI/_Lva65XJDtMdgY5i3Y9GrXqu5WScF4UZwCLcB/s1600/image3.png" data-original-width="905" data-original-height="1600" /&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;
Every day developers around the world are hard at work creating high quality
apps and games on Android. Striving to deliver amazing experiences for an ever
growing diverse user base, we've seen a significant increase in the level of
polish and quality of apps and games on Google Play.
&lt;/p&gt;
&lt;p&gt;
As part of our efforts to recognize this content on the Play Store, today we're
launching &lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/topic?id=editors_choice"&gt;Android
Excellence&lt;/a&gt;&lt;/strong&gt;. The new collections will showcase apps and games that
deliver incredible user experiences on Android, use many of our &lt;a
href="https://developer.android.com/distribute/best-practices/index.html"&gt;best
practices&lt;/a&gt;, and have great design, technical performance, localization, and
device optimization.
&lt;/p&gt;
&lt;p&gt;
Android Excellence collections will refresh quarterly and can be found within
the revamped &lt;a
href="https://play.google.com/store/apps/topic?id=editors_choice"&gt;Editors'
Choice&lt;/a&gt; section of the Play Store – which includes app and game reviews
curated by our editorial team.
&lt;/p&gt;
&lt;p&gt;
Congrats to our first group of Android Excellence apps and games!
&lt;/p&gt;

&lt;table&gt;
  &lt;tr&gt;
   &lt;th&gt;&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/collection/promotion_30028e5_android_excellence_collection_apps"&gt;Android
Excellence Apps&lt;/a&gt;&lt;/strong&gt;
   &lt;/th&gt;
   &lt;th&gt;&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/collection/promotion_30028e5_android_excellence_collection_games"&gt;Android
Excellence Games&lt;/a&gt;&lt;/strong&gt;
   &lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.alibaba.aliexpresshd&amp;e=-EnableAppDetailsPageRedesign"&gt;AliExpress&lt;/a&gt;&lt;/strong&gt;
by Alibaba Mobile
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.bhphoto&amp;e=-EnableAppDetailsPageRedesign"&gt;B&amp;H
Photo Video&lt;/a&gt;&lt;/strong&gt; by B&amp;H Photo Video
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.citymapper.app.release&amp;e=-EnableAppDetailsPageRedesign"&gt;Citymapper&lt;/a&gt;
&lt;/strong&gt;by Citymapper Limited
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=br.com.ctncardoso.ctncar&amp;hl=en&amp;e=-EnableAppDetailsPageRedesign"&gt;Drivvo&lt;/a&gt;&lt;/strong&gt;
by Drivvo
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=mobi.drupe.app&amp;e=-EnableAppDetailsPageRedesign"&gt;drupe&lt;/a&gt;&lt;/strong&gt;
by drupe
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.evernote&amp;e=-EnableAppDetailsPageRedesign"&gt;Evernote&lt;/a&gt;&lt;/strong&gt;
by Evernote Corporation
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.hoteltonight.android.prod&amp;e=-EnableAppDetailsPageRedesign"&gt;HotelTonight&lt;/a&gt;&lt;/strong&gt;
by HotelTonight
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.ajnsnewmedia.kitchenstories&amp;e=-EnableAppDetailsPageRedesign"&gt;Kitchen
Stories&lt;/a&gt;&lt;/strong&gt; by Kitchen Stories
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=de.komoot.android&amp;e=-EnableAppDetailsPageRedesign"&gt;Komoot&lt;/a&gt;
&lt;/strong&gt;by komoot GmbH
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.sillens.shapeupclub&amp;e=-EnableAppDetailsPageRedesign"&gt;Lifesum&lt;/a&gt;&lt;/strong&gt;
by Lifesum
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.memrise.android.memrisecompanion&amp;hl=en&amp;e=-EnableAppDetailsPageRedesign"&gt;Memrise&lt;/a&gt;&lt;/strong&gt;
by Memrise
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.ideashower.readitlater.pro&amp;hl=en&amp;e=-EnableAppDetailsPageRedesign"&gt;Pocket&lt;/a&gt;&lt;/strong&gt;
by Read It Later
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.runtastic.android&amp;e=-EnableAppDetailsPageRedesign"&gt;Runtastic
Running &amp; Fitness&lt;/a&gt;&lt;/strong&gt; by Runtastic
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=net.skyscanner.android.main&amp;hl=en&amp;e=-EnableAppDetailsPageRedesign"&gt;Skyscanner&lt;/a&gt;&lt;/strong&gt;
by Skyscanner Ltd
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.urbandroid.sleep&amp;e=-EnableAppDetailsPageRedesign"&gt;Sleep
as Android&lt;/a&gt;&lt;/strong&gt; by Urbandroid Team
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=vivino.web.app&amp;e=-EnableAppDetailsPageRedesign"&gt;Vivino&lt;/a&gt;&lt;/strong&gt;
by Vivino
   &lt;/td&gt;
   &lt;td&gt;&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.nexonm.aftertheend&amp;e=-EnableAppDetailsPageRedesign"&gt;After
the End Forsaken Destiny&lt;/a&gt;&lt;/strong&gt; by NEXON M Inc.
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.zeptolab.cats.google&amp;e=-EnableAppDetailsPageRedesign"&gt;CATS:
Crash Arena Turbo Stars&lt;/a&gt;&lt;/strong&gt; by ZeptoLab
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.playdemic.golf.android&amp;e=-EnableAppDetailsPageRedesign"&gt;Golf
Clash&lt;/a&gt;&lt;/strong&gt; by Playdemic
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.squareenixmontreal.hitmango&amp;e=-EnableAppDetailsPageRedesign"&gt;Hitman
GO&lt;/a&gt;&lt;/strong&gt; Square Enix Ltd
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.aquiris.horizonchase&amp;e=-EnableAppDetailsPageRedesign"&gt;Horizon
Chase&lt;/a&gt;&lt;/strong&gt; by Aquiris Game Studio S.A
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.hotheadgames.google.free.ks2&amp;e=-EnableAppDetailsPageRedesign"&gt;Kill
Shot Bravo&lt;/a&gt;&lt;/strong&gt; by Hothead Games
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.ncsoft.redknights&amp;e=-EnableAppDetailsPageRedesign%27"&gt;Lineage
Red Knights&lt;/a&gt;&lt;/strong&gt; by NCSOFT Corporation
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.koplagames.kopla01&amp;e=-EnableAppDetailsPageRedesign"&gt;Nonstop
Knight&lt;/a&gt;&lt;/strong&gt; by flaregames
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=eu.bandainamcoent.pacman256&amp;e=-EnableAppDetailsPageRedesign"&gt;PAC-MAN
256 - Endless Maze&lt;/a&gt;&lt;/strong&gt; by Bandai Namco Entertainment Europe&lt;strong&gt;
&lt;/strong&gt;
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.etermax.pictionary&amp;e=-EnableAppDetailsPageRedesign"&gt;Pictionary™&lt;/a&gt;&lt;/strong&gt;
by Etermax
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.devolver.reigns&amp;e=-EnableAppDetailsPageRedesign"&gt;Reigns&lt;/a&gt;&lt;/strong&gt;
by DevolverDigital
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.vectorunit.silver.googleplay&amp;e=-EnableAppDetailsPageRedesign"&gt;Riptide
GP: Renegade&lt;/a&gt;&lt;/strong&gt; by Vector Unit
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.ea.game.starwarscapital_row&amp;e=-EnableAppDetailsPageRedesign"&gt;Star
Wars™: Galaxy of Heroes&lt;/a&gt;&lt;/strong&gt; by Electronic Arts
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.omnidrone.lanes&amp;e=-EnableAppDetailsPageRedesign"&gt;Titan
Brawl&lt;/a&gt;&lt;/strong&gt; by Omnidrone
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.tocaboca.blocks&amp;e=-EnableAppDetailsPageRedesign"&gt;Toca
Blocks&lt;/a&gt;&lt;/strong&gt; by Toca Boca
&lt;p&gt;
&lt;strong&gt;&lt;a
href="https://play.google.com/store/apps/details?id=com.kabam.bigrobot&amp;e=-EnableAppDetailsPageRedesign"&gt;Transformers:
Forged to Fight&lt;/a&gt;&lt;/strong&gt; by Kabam
   &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;
Stay up-to-date on best practices to succeed on Play and get the latest news and
videos with the new beta version of our &lt;a
href="http://g.co/playbookbeta"&gt;Playbook app for developers&lt;/a&gt;.
&lt;/p&gt;

&lt;div class="note"&gt;
 How useful did you find this blogpost?
&lt;/div&gt;

&lt;center&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;entry.656324858&amp;entry.1348260426=AndroidExcellence-06/17&amp;entry.1170596605&amp;entry.646747778=AndroidExcellence-06/17" style= "color: gold";&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;entry.656324858&amp;entry.1348260426=AndroidExcellence-06/17&amp;entry.1170596605&amp;entry.646747778=AndroidExcellence-06/17" style= "color: gold";;&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;entry.656324858&amp;entry.1348260426=AndroidExcellence-06/17&amp;entry.1170596605&amp;entry.646747778=AndroidExcellence-06/17" style= "color: gold";;&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;entry.656324858&amp;entry.1348260426=AndroidExcellence-06/17&amp;entry.1170596605&amp;entry.646747778=AndroidExcellence-06/17" style= "color: gold";&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;entry.656324858&amp;entry.1348260426=AndroidExcellence-06/17&amp;entry.1170596605&amp;entry.646747778=AndroidExcellence-06/17" style= "color: gold";;&gt;★&lt;/a&gt;
&lt;/center&gt;

&lt;div class="playlogo"&gt;&lt;a href="https://4.bp.blogspot.com/-QMajQGkKcTA/WT7qkvygkGI/AAAAAAAAESQ/RhnULVRZbLoTH18jhFsO4bVi7bpfnKa2wCLcB/s1600/image1.png" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-QMajQGkKcTA/WT7qkvygkGI/AAAAAAAAESQ/RhnULVRZbLoTH18jhFsO4bVi7bpfnKa2wCLcB/s1600/image1.png" data-original-width="499" data-original-height="281" /&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;style&gt;
.blogimage img {
    float: right;
    margin: 0;
    padding: 0;
    border: 0;
    width: 40%;
}

table {
    border-collapse: collapse;
    border-spacing: 0;
    width: 100%;

}

th {
    text-align: left;
    padding: 8px;
    text-align: left;
    vertical-align: middle;
    width: 50%;
    font-size: 125%;

}

td {
    text-align: left;
    padding: 8px;
    vertical-align: top;
    width: 50%;
}

.note {
    text-align: center;
    margin: 0;
    padding: 0;
    font-size: 75%;
}

.playlogo img {
    display: block;
    margin: auto;
    width: 40%;
} 
&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=H3ImYAGGCE4:LhJ7Xc82bKE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=H3ImYAGGCE4:LhJ7Xc82bKE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=H3ImYAGGCE4:LhJ7Xc82bKE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/H3ImYAGGCE4" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/5687811374415376762" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/5687811374415376762" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/H3ImYAGGCE4/recognizing-android-excellence-on.html" title="Recognizing Android Excellence on Google Play" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-FyxDNfrSyZA/WT7pFitOIBI/AAAAAAAAESI/_Lva65XJDtMdgY5i3Y9GrXqu5WScF4UZwCLcB/s72-c/image3.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/06/recognizing-android-excellence-on.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-8538726772234052368</id><published>2017-06-12T09:00:00.000-07:00</published><updated>2017-06-12T09:00:00.192-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="In-app Billing" /><category scheme="http://www.blogger.com/atom/ns#" term="in-app purchase" /><category scheme="http://www.blogger.com/atom/ns#" term="library" /><category scheme="http://www.blogger.com/atom/ns#" term="Subscription" /><title type="text">Money made easily with the new Google Play Billing Library</title><content type="html">&lt;em&gt;Posted by Neto Marin, Developer Advocate&lt;/em&gt;
&lt;p&gt;
Many developers want to make money through their apps, but it's not always easy to deal with all the different types of payment methods. We launched the Google Play In-app Billing API v3 in 2013, helping developers offer in-app products and subscriptions within their apps. Year after year, we've added features to the API, like subscription renewal, upgrades and downgrades, free trials, introductory pricing, promotion codes, and more.
&lt;/p&gt;
&lt;p&gt;
Based on your feedback, we’re pleased to announce the &lt;b&gt;Play Billing Library - Developer Preview 1&lt;/b&gt;. This library aims to simplify the development process when it comes to billing, allowing you to focus your efforts on implementing logic specific to your app, such as application architecture and navigation structure. The library includes several convenient classes and features for you to use when integrating your Android apps with the In-app Billing API. The library also provides an abstraction layer on top of the Android Interface Definition Language (AIDL) service, making it easier for you to define the interface between your app and the In-app Billing API. 
&lt;/p&gt;
&lt;center&gt;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/9chvh1WYCvw" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/center&gt;
&lt;h3&gt;Easy to get started and easy to use&lt;/h3&gt;
&lt;p&gt;
Starting with Play Billing Library Developer Preview release, the minimum
supported API level is Android 2.2 (API level 8), and the minimum supported
In-app Billing API is version 3.
&lt;/p&gt;
&lt;p&gt;
In-app billing relies on the Google Play Store, which handles the communication
between your app and Google's Play billing service. To use Google Play billing
features, your app must request the &lt;code&gt;com.android.vending.BILLING
&lt;/code&gt;permission in your &lt;code&gt;AndroidManifest.xml&lt;/code&gt; file.
&lt;/p&gt;
&lt;p&gt;
To use the library, add the following dependency in your
&lt;code&gt;build.gradle&lt;/code&gt; file:
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;dependencies {
    ...
    compile 'com.android.billingclient:billing:dp-1'
}
&lt;/pre&gt;
&lt;p&gt;
After this quick setup process, you're ready to start using the Play Billing
Library in your app and can connect to the In-app Billing API, query for
available products, start the purchase flow, and more.
&lt;/p&gt;
&lt;h3&gt;Sample updated: Trivial Drive V2&lt;/h3&gt;
&lt;p&gt;
With a new library comes a refreshed sample! To help you to understand how to
implement in-app billing in your app using the new Play Billing Library, we've
rewritten the &lt;a
href="https://github.com/googlesamples/android-play-billing/tree/master/TrivialDrive"&gt;Trivial
Drive&lt;/a&gt; sample from the ground up.
&lt;/p&gt;
&lt;p&gt;
Since we released Trivial Drive back in 2013, many new features, devices, and
platforms have been added to the Android ecosystem. To reflect this evolution,
the &lt;a
href="https://github.com/googlesamples/android-play-billing/tree/master/TrivialDrive_v2"&gt;Trivial
Drive v2&lt;/a&gt; sample now runs on Android TV and Android Wear.
&lt;/p&gt;
&lt;h3&gt;Give it a try!&lt;/h3&gt;
&lt;p&gt;
Before integrating within your app, you can try the Play Billing Library with
the codelab published during Google I/O 2017: &lt;a
href="https://codelabs.developers.google.com/codelabs/play-billing-codelab"&gt;Buy
and Subscribe: Monetize your app on Google Play&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
In this codelab, you will start with a simplified version of Trivial Drive V2
that lets users to "drive" and then you will add in-app billing to it. You'll
learn how to integrate purchases and subscriptions as well as the best practices
for developing reliable apps that handle purchases.
&lt;/p&gt;
&lt;p&gt;
If you are looking for a step-by-step guide about how to sell in-app products
from your app using the Play Billing Library, check out our new &lt;a
href="http://developer.android.com/training/play-billing-library/index.html"&gt;training
class&lt;/a&gt;, explaining how to prepare your application, add products for
purchase, start purchase flow and much more.
&lt;/p&gt;
&lt;h3&gt;We want your feedback&lt;/h3&gt;
&lt;p&gt;
We look forward to hearing your feedback about this new library. Visit the &lt;a
href="https://developer.android.com/google/play/billing/billing_library.html"&gt;Play
Billing Library&lt;/a&gt; site,
the library &lt;a
href="https://developer.android.com/google/play/billing/billing_reference.html"&gt;reference&lt;/a&gt;,
and the new version of the &lt;a
href="https://github.com/googlesamples/android-play-billing/tree/master/TrivialDrive"&gt;Trivial
Drive&lt;/a&gt; sample. If you have issues or questions, file a &lt;a
href="https://issuetracker.google.com/issues/new?component=311487&amp;template=1014446"&gt;bug
report&lt;/a&gt; on the &lt;a
href="https://issuetracker.google.com/issues?q=componentid:311487"&gt;Google Issue
Tracker&lt;/a&gt;, and for issues and suggestions on the sample, contact us on the &lt;a
href="https://github.com/googlesamples/android-play-billing/issues"&gt;Trivial
Drive issues page&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
For technical questions on implementation, library usage, and best practices,
you can use the tags &lt;a
href="https://stackoverflow.com/questions/tagged/google-play"&gt;google-play&lt;/a&gt;
and &lt;a
href="https://stackoverflow.com/questions/tagged/play-billing-library"&gt;play-billing-library&lt;/a&gt;
on Stackoverflow or visit the &lt;a
href="https://plus.google.com/+AndroidDevelopers/palette"&gt;community pages&lt;/a&gt; on
our Google+ page.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=aZvr3ZnJbyk:jY7EWO3-Opc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=aZvr3ZnJbyk:jY7EWO3-Opc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=aZvr3ZnJbyk:jY7EWO3-Opc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/aZvr3ZnJbyk" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8538726772234052368" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8538726772234052368" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/aZvr3ZnJbyk/money-made-easily-with-new-google-play.html" title="Money made easily with the new Google Play Billing Library" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/9chvh1WYCvw/default.jpg" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/06/money-made-easily-with-new-google-play.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-7541953635347093819</id><published>2017-06-09T09:15:00.000-07:00</published><updated>2017-06-09T09:15:08.106-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="protection" /><category scheme="http://www.blogger.com/atom/ns#" term="recaptcha" /><category scheme="http://www.blogger.com/atom/ns#" term="spam" /><title type="text">Making the Internet safer and faster: Introducing reCAPTCHA Android API</title><content type="html">&lt;em&gt;Posted by Wei Liu, Product Manager&lt;/em&gt;
&lt;p&gt;
When we launched reCAPTCHA ten years ago, we had a simple goal: enable users to
visit the sites they love without worrying about spam and abuse. Over the years,
reCAPTCHA has changed quite a bit. It evolved from the distorted text to &lt;a
href="https://security.googleblog.com/2014/04/street-view-and-recaptcha-technology.html"&gt;street
numbers&lt;/a&gt; and names, then &lt;a
href="https://security.googleblog.com/2014/12/are-you-robot-introducing-no-captcha.html"&gt;No
CAPTCHA reCAPTCHA&lt;/a&gt; in 2014 and Invisible reCAPTCHA in March this year.
&lt;/p&gt;
&lt;div class="gif"&gt;
&lt;a href="https://2.bp.blogspot.com/-8XZF7G6MPgw/WTmj2gekLxI/AAAAAAAABJY/WBN6YTzZ7B0ohNIzPIdmd84mUie_ZXppgCLcB/s1600/image2.gif" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-8XZF7G6MPgw/WTmj2gekLxI/AAAAAAAABJY/WBN6YTzZ7B0ohNIzPIdmd84mUie_ZXppgCLcB/s1600/image2.gif" data-original-width="450" data-original-height="150" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
By now, more than a billion users have benefited from reCAPTCHA and we continue
to work to refine our protections.
&lt;/p&gt;
&lt;p&gt;
reCAPTCHA protects users wherever they may be online. As the use of mobile
devices has grown rapidly, it's important to keep the mobile applications and
data safe. Today, on reCAPTCHA's tenth birthday, we're glad to announce the
first reCAPTCHA &lt;a
href="https://developer.android.com/training/safetynet/recaptcha.html"&gt;Android
API&lt;/a&gt; as part of Google Play Services.
&lt;/p&gt;
&lt;p&gt;
With this API, reCAPTCHA can better tell human and bots apart to provide a
streamlined user experience on mobile. It will use our newest Invisible
reCAPTCHA technology, which runs risk analysis behind the scene and has enabled
millions of human users to pass through with zero click everyday. Now mobile
users can enjoy their apps without being interrupted, while still staying away
from spam and abuse.
&lt;/p&gt;
&lt;div class="gif2"&gt;
&lt;a href="https://4.bp.blogspot.com/-xbLxAzouDMA/WTmkAUyi5AI/AAAAAAAABJc/U1V7wABw468G64VRXPNZpMdAXxxRw3i3ACLcB/s1600/image1.gif" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-xbLxAzouDMA/WTmkAUyi5AI/AAAAAAAABJc/U1V7wABw468G64VRXPNZpMdAXxxRw3i3ACLcB/s1600/image1.gif" data-original-width="640" data-original-height="1136" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
reCAPTCHA Android API is included with Google &lt;a
href="https://developer.android.com/training/safetynet/index.html"&gt;SafetyNet&lt;/a&gt;,
which provides services like device attestation and safe browsing to protect
mobile apps. Mobile developers can do both the device and user attestations in
the same API to mitigate security risks of their apps more efficiently. This
adds to the &lt;a
href="https://security.googleblog.com/2017/03/diverse-protections-for-diverse.html"&gt;diversity
of security protections&lt;/a&gt; on Android: &lt;a
href="https://blog.google/products/android/google-play-protect/"&gt;Google Play
Protect&lt;/a&gt; to monitor for potentially harmful applications, device encryption,
and regular security updates. Please &lt;a
href="https://developers.google.com/recaptcha/docs/versions"&gt;visit our site&lt;/a&gt;
to learn more about how to integrate with the reCAPTCHA Android API, and keep an
eye out for our iOS library.
&lt;/p&gt;
&lt;p&gt;
The journey of reCAPTCHA continues: we'll make the Internet safer and easier to
use for everyone (except bots).
&lt;/p&gt;


&lt;style&gt;
.gif img {
display: block;
margin: auto;
max-width: 50%;
}
.gif2 img {
display: block;
margin: auto;
max-width: 200px;
}
&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=DfyEaMc4zkE:idNTB-5mZ-Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=DfyEaMc4zkE:idNTB-5mZ-Y:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=DfyEaMc4zkE:idNTB-5mZ-Y:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/DfyEaMc4zkE" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7541953635347093819" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/7541953635347093819" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/DfyEaMc4zkE/making-internet-safer-and-faster.html" title="Making the Internet safer and faster: Introducing reCAPTCHA Android API" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-8XZF7G6MPgw/WTmj2gekLxI/AAAAAAAABJY/WBN6YTzZ7B0ohNIzPIdmd84mUie_ZXppgCLcB/s72-c/image2.gif" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/06/making-internet-safer-and-faster.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-6039244429522800501</id><published>2017-06-08T10:25:00.001-07:00</published><updated>2017-06-08T11:40:24.941-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android O" /><category scheme="http://www.blogger.com/atom/ns#" term="android o apis" /><category scheme="http://www.blogger.com/atom/ns#" term="AndroidO" /><category scheme="http://www.blogger.com/atom/ns#" term="API" /><category scheme="http://www.blogger.com/atom/ns#" term="Develop" /><category scheme="http://www.blogger.com/atom/ns#" term="Developer Preview" /><category scheme="http://www.blogger.com/atom/ns#" term="Featured" /><category scheme="http://www.blogger.com/atom/ns#" term="Project Treble" /><title type="text">Android O APIs are final, get your apps ready!</title><content type="html">&lt;em&gt;Posted by Dave Burke, VP of Engineering&lt;/em&gt;
&lt;div class="logo"&gt;
&lt;a href="https://1.bp.blogspot.com/-KmlkgcALVek/WTiR-dK4kOI/AAAAAAAAERc/EkdIk09kEN8URozB43KK7APj4LEXR2V3wCLcB/s1600/image5.png" imageanchor="1" &gt;&lt;img border="0" src="https://1.bp.blogspot.com/-KmlkgcALVek/WTiR-dK4kOI/AAAAAAAAERc/EkdIk09kEN8URozB43KK7APj4LEXR2V3wCLcB/s1600/image5.png" data-original-width="716" data-original-height="716" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
Three weeks ago at Google I/O, we &lt;a
href="https://android-developers.googleblog.com/2017/05/whats-new-in-android-o-developer.html"&gt;announced&lt;/a&gt;
the second developer preview of Android O along with key themes, &lt;strong&gt;Fluid
Experiences&lt;/strong&gt; and &lt;strong&gt;Vitals, &lt;/strong&gt;and highlighted our work
towards a modular base with &lt;a
href="https://android-developers.googleblog.com/2017/05/here-comes-treble-modular-base-for.html"&gt;Project
Treble&lt;/a&gt;. It was also an important milestone for us with the release
of the first beta-quality candidate. We talked a lot about what's new in Android
during the keynote and breakout sessions—if you missed the livestream, be sure
to check out the full archive of talks &lt;a
href="https://www.youtube.com/user/androiddevelopers/playlists?sort=dd&amp;view=50&amp;shelf_id=14"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Today we're rolling out Developer Preview 3 with the final Android O APIs, the
latest system images, and an update to Android Studio to help you get ready for
the consumer release later in the summer. Watch for one more preview update
coming in July that will bring you the near-final system images.
&lt;/p&gt;
&lt;p&gt;
If you've already enrolled your device in the &lt;a
href="http://android.com/beta"&gt;Android Beta Program&lt;/a&gt;, you'll receive an
update to Developer Preview 3 shortly.
&lt;/p&gt;
&lt;h3&gt;Make your app compatible with Android O&lt;/h3&gt;
&lt;p&gt;
With the consumer launch approaching &lt;a
href="https://developer.android.com/preview/migration.html"&gt;in the coming
months&lt;/a&gt;, a critical first step is making your current app compatible with
Android O. This will give your users a seamless transition to the new platform
as it arrives on their devices.
&lt;/p&gt;
&lt;p&gt;
If you haven't tested your app for compatibility yet, getting started is
straightforward -- just enroll a supported device in Android Beta and get the
latest update over-the-air, then install your current app from Google Play and
test. The app should run and look great, and it should handle the Android O &lt;a
href="https://developer.android.com/preview/behavior-changes.html"&gt;behavior
changes&lt;/a&gt; properly -- in particular pay attention to &lt;a
href="https://developer.android.com/preview/behavior-changes.html#abll"&gt;background
limits&lt;/a&gt; and changes in &lt;a
href="https://developer.android.com/preview/behavior-changes.html#networking-all"&gt;networking&lt;/a&gt;,
&lt;a
href="https://developer.android.com/preview/behavior-changes.html#security-all"&gt;security&lt;/a&gt;,
and &lt;a
href="https://developer.android.com/preview/behavior-changes.html#privacy-all"&gt;identifiers&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
After you've made any necessary updates, we recommend publishing the compatible
version of your app to Google Play right away -- without changing the app's
platform targeting.
&lt;/p&gt;
&lt;h3&gt;Enhance your app with Android O features and APIs&lt;/h3&gt;
&lt;p&gt;
Extending your apps with Android O features can help you drive more engagement,
offer new interactions, give users more control and security, and even improve
your app's performance.
&lt;/p&gt;
&lt;p&gt;
&lt;a
href="https://developer.android.com/preview/features/notification-channels.html"&gt;Notification
channels&lt;/a&gt; and &lt;a
href="https://developer.android.com/preview/features/notification-badges.html"&gt;dots&lt;/a&gt;
give you more ways to surface new content to users and bring them back into your
app. Picture-in-picture keeps your app onscreen while users are multitasking,
and &lt;a
href="https://developer.android.com/preview/features/autofill.html#optimizing_your_app_for_autofill"&gt;autofill&lt;/a&gt;
makes it simple for them to enter forms data and helps keep their data secure.
Also check out &lt;a
href="https://developer.android.com/preview/features/adaptive-icons.html"&gt;adaptive
icons&lt;/a&gt;, &lt;a
href="https://developer.android.com/preview/features/fonts-in-xml.html"&gt;XML font
resources&lt;/a&gt;, &lt;a
href="https://developer.android.com/preview/features/downloadable-fonts.html"&gt;downloadable
fonts &lt;/a&gt;and &lt;a
href="https://developer.android.com/preview/features/emoji-compat.html"&gt;emoji&lt;/a&gt;,
&lt;a
href="https://developer.android.com/preview/features/autosizing-textview.html"&gt;autosizing
TextView&lt;/a&gt;,&lt;a
href="https://developer.android.com/ndk/guides/audio/aaudio/aaudio.html"&gt; AAudio
API&lt;/a&gt;, and &lt;a
href="https://developer.android.com/preview/api-overview.html"&gt;many others&lt;/a&gt;.
You'll also want plan your support for &lt;a
href="https://developer.android.com/preview/features/background.html"&gt;background
execution limits&lt;/a&gt; and other important &lt;a
href="https://developer.android.com/preview/behavior-changes.html#o-apps"&gt;changes
in vital system behavior for O apps&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Visit the &lt;a href="https://developer.android.com/preview/index.html"&gt;O Developer
Preview site&lt;/a&gt; to learn about all of the new features and APIs and how to
build them into your apps.
&lt;/p&gt;
&lt;div class="parent"&gt;
&lt;div class="child"&gt;
&lt;a href="https://2.bp.blogspot.com/-oMDPlKgn2Nc/WTiTlCmQluI/AAAAAAAAERs/GyPG-gZsdZADH5wS9KtW3y8WcRor7dq5wCLcB/s1600/image1.gif" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-oMDPlKgn2Nc/WTiTlCmQluI/AAAAAAAAERs/GyPG-gZsdZADH5wS9KtW3y8WcRor7dq5wCLcB/s1600/image1.gif" data-original-width="501" data-original-height="990" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="child"&gt;
&lt;a href="https://2.bp.blogspot.com/-jjOz9L44CMk/WTiTk6tYjgI/AAAAAAAAERo/dgO6u_6rv2YqbAj_c_eF9ABgNG_0Ih6rACLcB/s1600/image2.gif" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-jjOz9L44CMk/WTiTk6tYjgI/AAAAAAAAERo/dgO6u_6rv2YqbAj_c_eF9ABgNG_0Ih6rACLcB/s1600/image2.gif" data-original-width="500" data-original-height="978" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="captionx"&gt;
Picture-in-Picture mode lets you keep users engaged while they are multitasking (left). Notification dots keep users active in your app and let them jump directly the app’s core functions (right).
&lt;/div&gt;
&lt;h3&gt;&lt;strong&gt;Get started with Developer Preview 3&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;
Today's preview update includes the latest version of the Android O platform
with the final API level 26 and hundreds of bugfixes and optimizations. You can
download the final API 26 SDK from the SDK Manager in &lt;a
href="https://developer.android.com/studio/index.html?utm_campaign=android_launch_npreview_061516&amp;utm_source=anddev&amp;utm_medium=blog"&gt;Android
Studio&lt;/a&gt;, and &lt;a
href="https://developer.android.com/topic/libraries/support-library/revisions.html?utm_campaign=android_launch_npreview_061516&amp;utm_source=anddev&amp;utm_medium=blog"&gt;Android
Support Library&lt;/a&gt; 26.0.0 beta 2 from &lt;a
href="https://developer.android.com/studio/build/dependencies.html#google-maven"&gt;Google's
Maven repository&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Together, these give you everything you need to develop and test your apps with
the official Android O APIs. Once you've installed the final SDK, you can update
your project's &lt;code&gt;compileSdkVersion&lt;/code&gt; to API 26 to compile against the
official Android O APIs. We also recommend updating your app's
&lt;code&gt;targetSdkVersion&lt;/code&gt; to API 26 to opt-in and test your app with Android
O specific &lt;a
href="https://developer.android.com/preview/behavior-changes.html?utm_campaign=android_launch_npreview_061516&amp;utm_source=anddev&amp;utm_medium=blog"&gt;behavior
changes&lt;/a&gt;. See the &lt;a
href="https://developer.android.com/preview/migration.html#bfa"&gt;migration
guide&lt;/a&gt; for details on how to set up your environment to build with Android O.
&lt;/p&gt;
&lt;p&gt;
APIs have changed since the second developer preview, so if you have existing
code using Android O preview APIs, take a look at the &lt;a
href="https://developer.android.com/sdk/api_diff/26-incr/changes.html"&gt;diff
report&lt;/a&gt; to see where your code might be affected.
&lt;/p&gt;
&lt;p&gt;
If you're developing for Android O, we recommend updating to the latest version
of &lt;a
href="https://android-developers.googleblog.com/2017/05/android-studio-3-0-canary1.html"&gt;Android
Studio 3.0,&lt;/a&gt; now available in the canary channel. Aside from great new
features like improved app performance profiling tools, support for the &lt;a
href="http://android-developers.googleblog.com/2017/05/android-announces-support-for-kotlin.html"&gt;Kotlin
programming language&lt;/a&gt;, and Gradle build optimizations, Android Studio 3.0
includes build support for &lt;a
href="https://android-developers.googleblog.com/2017/05/android-instant-apps-is-open-to-all.html"&gt;Instant
Apps&lt;/a&gt;, an &lt;a
href="https://developer.android.com/preview/features/adaptive-icons.html"&gt;Adaptive
Icon Wizard&lt;/a&gt;, and support for &lt;a
href="https://developer.android.com/preview/features/working-with-fonts.html"&gt;XML
Fonts,&lt;/a&gt; &lt;a
href="https://developer.android.com/preview/features/working-with-fonts.html"&gt;a&lt;/a&gt;n&lt;a
href="https://developer.android.com/preview/features/working-with-fonts.html"&gt;d&lt;/a&gt;
&lt;a
href="https://developer.android.com/preview/features/downloadable-fonts.html"&gt;Downloadable
Fonts&lt;/a&gt;.
&lt;/p&gt;
&lt;div class="assetx"&gt;
&lt;a href="https://1.bp.blogspot.com/-dDAXOR-dqnk/WTiWimzUy9I/AAAAAAAAER4/7Whm_rTF1S8FmANbubGFhlLJLxJnNrEQgCLcB/s1600/image3.png" imageanchor="1" &gt;&lt;img border="0" src="https://1.bp.blogspot.com/-dDAXOR-dqnk/WTiWimzUy9I/AAAAAAAAER4/7Whm_rTF1S8FmANbubGFhlLJLxJnNrEQgCLcB/s1600/image3.png" data-original-width="1600" data-original-height="545" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="captionx"&gt;
Android Studio 3.0 includes tools for developing with Android O features lets you preview XML font resources in your app.
&lt;/div&gt;
&lt;p&gt;
If you don't plan to use those features, you now have the option of developing
for Android O using &lt;a
href="https://developer.android.com/studio/index.html"&gt;Android Studio 2.3.3&lt;/a&gt;
from the stable channel. Note that the tools for working with adaptive icons and
downloadable fonts, and XML fonts are not available in Android Studio 2.3.3.
&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Publish your apps to alpha, beta or production channels in Google
Play&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;
Now that the APIs are final, you can publish APK updates compiling with, and
optionally targeting, API 26 to your alpha, beta, or even production channels in
Google Play. Publishing your O-targeted app during the preview lets you test
compatibility on existing devices and push updates to devices running API 26 --
such as users who are enrolled in the Android Beta program.
&lt;/p&gt;
&lt;p&gt;
To make sure that your updated app runs well on Android O as well as older
versions, a common strategy is to use &lt;a
href="https://developer.android.com/distribute/engage/beta.html?utm_campaign=android_launch_npreview_061516&amp;utm_source=anddev&amp;utm_medium=blog"&gt;Google
Play's beta testing feature&lt;/a&gt; to get early feedback from a small group of
users -- including developer preview users — and then do a staged rollout as you
release the updated app to all users.
&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;How to get the preview update&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;
Through the &lt;a href="https://android.com/beta"&gt;Android Beta program&lt;/a&gt;,
developers and early adopters worldwide will soon be getting Developer Preview 3
on their devices. If you aren't yet enrolled, just visit &lt;a
href="https://android.com/beta"&gt;android.com/beta&lt;/a&gt; and opt-in your eligible
Android phone or tablet. As always, you can also download and &lt;a
href="https://developer.android.com/preview/download.html?utm_campaign=android_launch_npreview_061516&amp;utm_source=anddev&amp;utm_medium=blog#flash"&gt;flash
this update manually&lt;/a&gt;. The O Developer Preview is available for Pixel, Pixel
XL, Pixel C, Nexus 5X, Nexus 6P, and Nexus Player.
&lt;/p&gt;
&lt;p&gt;
Thanks so much for all of your feedback so far. Please continue to share &lt;a
href="https://developer.android.com/preview/feedback.html"&gt;feedback or
requests&lt;/a&gt; as we work towards the consumer release later this summer. We're
looking forward to seeing your apps on Android O!
&lt;/p&gt;

&lt;style&gt;
.logo img {
float: right;
margin: 0 0 10px 10px;
width: 200px;
}
.parent {
display: flex;
justify-content: space-around;
align-items: center;
width: 100%
}
.child {
width: 50%;
}
.child img {
width: 100%
}
.captionx {
font-size: 75%;
margin: 5px 0 10px 0;
}
.assetx {
width: 100%
}
.assetx img {
width: 100%;
padding: 0;
margin: 10px 0 10px 0;
}
&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=9pHl9Zjee8E:TdnwvvKk3Lk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=9pHl9Zjee8E:TdnwvvKk3Lk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=9pHl9Zjee8E:TdnwvvKk3Lk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/9pHl9Zjee8E" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/6039244429522800501" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/6039244429522800501" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/9pHl9Zjee8E/android-o-apis-are-final-get-your-apps.html" title="Android O APIs are final, get your apps ready!" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-KmlkgcALVek/WTiR-dK4kOI/AAAAAAAAERc/EkdIk09kEN8URozB43KK7APj4LEXR2V3wCLcB/s72-c/image5.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/06/android-o-apis-are-final-get-your-apps.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-5346090213832828087</id><published>2017-06-05T10:00:00.000-07:00</published><updated>2017-06-05T10:00:32.593-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="'Google Play" /><category scheme="http://www.blogger.com/atom/ns#" term="installs" /><category scheme="http://www.blogger.com/atom/ns#" term="ratings" /><category scheme="http://www.blogger.com/atom/ns#" term="reviews" /><title type="text">Google Play’s policy on incentivized ratings, reviews, and installs</title><content type="html">&lt;p&gt;
&lt;em&gt;Posted by Kazushi Nagayama, Ninja Spamologist and Bryan Woodward, Policy
Specialist&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Ensuring Google Play remains trusted and secure is one of our top priorities.
We've recently announced improvements in fighting &lt;a
href="https://android-developers.googleblog.com/2016/10/keeping-the-play-store-trusted-fighting-fraud-and-spam-installs.html"&gt;spam
installs&lt;/a&gt; as well as &lt;a
href="https://android-developers.googleblog.com/2016/11/keeping-it-real-improving-reviews-and-ratings-in-google-play.html"&gt;fake
ratings &amp; reviews&lt;/a&gt;. In order to underscore these announcements and provide
more clarity, we have now updated our &lt;a
href="https://play.google.com/about/storelisting-promotional/ratings-reviews-installs/"&gt;Developer
Program Policies&lt;/a&gt; on incentivized ratings, reviews, and installs:
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;em&gt;Developers must not attempt to manipulate the placement of any apps in the
Store. This includes, but is not limited to, inflating product ratings, reviews,
or install counts by illegitimate means, such as fraudulent or incentivized
installs, reviews and ratings.&lt;/em&gt;&lt;/blockquote&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;h2&gt;Defining an incentivized action&lt;/h2&gt;
&lt;p&gt;
We deem an action to be incentivized if a user is offered money, goods, or the
equivalent in exchange for the action – be it a rating, review or install.
Incentivized ratings and reviews have always been against our policies and we
will continue to take action against them in order to protect the integrity of
our store. Installs done with the intent to manipulate the placement of an app
in Google Play will &lt;a
href="http://android-developers.blogspot.com/2016/10/keeping-the-play-store-trusted-fighting-fraud-and-spam-installs.html"&gt;be
detected and filtered&lt;/a&gt;.
&lt;/p&gt;
&lt;h2&gt;Incentivized installs as user acquisition&lt;/h2&gt;
&lt;p&gt;
We've observed instances where incentivized installs are utilized solely to
manipulate the placement of apps in Google Play; these instances are a policy
violation. However, we also recognize that incentivized installs can be a
legitimate user acquisition channel for some developers. In order to recognize
these two distinct use cases, we are taking the following approach:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Whilst we won't automatically remove apps from the store just because they
utilize incentivized installs as one of their user acquisition channels, we will
monitor for, and take action against behaviour that compromises the integrity of
the store.
&lt;li&gt;To address those whose intent we perceive is to manipulate the placements of
their apps, we will monitor and filter incentivized installs in our systems,
including removal from the top charts. If warranted, identified apps also may be
removed from the Store.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
Through this approach, we hope to further ensure that the top charts and other
discovery mechanisms on Google Play reflect the reality of the popularity of an
app.
&lt;/p&gt;
&lt;p&gt;
As a general rule, we advise against utilizing incentivized actions.
Incentivized users are a very different user base than users found through other
acquisition channels. In an internal analysis, the Google Research team found
that incentivized users generally have lower retention rates and make fewer
in-app purchases than users found through paid or organic acquisition channels.
&lt;/p&gt;
&lt;p&gt;
For more information on the Google Play policies, please visit the &lt;a
href="https://play.google.com/about/developer-content-policy/"&gt;developer policy
center&lt;/a&gt;. For tips and best practices to find success on Google Play, visit
the &lt;a href="http://g.co/play/bestpractices"&gt;Android Developers website&lt;/a&gt;.
&lt;/p&gt;
&lt;p style="font-size:75%; text-align:center; padding:none; border:none; margin:none"&gt;
 How useful did you find this blogpost?
&lt;/p&gt;
&lt;center&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;entry.656324858&amp;entry.1348260426=security-05/17&amp;entry.1170596605&amp;entry.646747778=security-05/17" style="color:gold;"&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;entry.656324858&amp;entry.1348260426=security-05/17&amp;entry.1170596605&amp;entry.646747778=security-05/17" style="color:gold;"&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;entry.656324858&amp;entry.1348260426=security-05/17&amp;entry.1170596605&amp;entry.646747778=security-05/17" style="color:gold;"&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;entry.656324858&amp;entry.1348260426=security-05/17&amp;entry.1170596605&amp;entry.646747778=security-05/17" style="color:gold;"&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;entry.656324858&amp;entry.1348260426=security-05/17&amp;entry.1170596605&amp;entry.646747778=security-05/17" style="color:gold;"&gt;★&lt;/a&gt;
&lt;/center&gt;
&lt;div class="separator" style="clear: both; text-align: center; padding: none; margin: none;"&gt;&lt;a href="http://developers.android.com/distribute" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://3.bp.blogspot.com/-3bldlJjjIYQ/WTWH8kTpLhI/AAAAAAAAEQ8/1T8wEzxFx6s0_JcWHJULYSKBaGVa0tyQQCLcB/s320/image2.png" width="320" height="180" data-original-width="499" data-original-height="281" style="margin:"0;" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;style&gt;
.post-content img {
margin: 0;
padding: 0;
}
&lt;/style&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=r2pKF7YZ3rA:w0wHG-bcC7Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=r2pKF7YZ3rA:w0wHG-bcC7Y:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=r2pKF7YZ3rA:w0wHG-bcC7Y:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/r2pKF7YZ3rA" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/5346090213832828087" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/5346090213832828087" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/r2pKF7YZ3rA/google-plays-policy-on-incentivized.html" title="Google Play’s policy on incentivized ratings, reviews, and installs" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://3.bp.blogspot.com/-3bldlJjjIYQ/WTWH8kTpLhI/AAAAAAAAEQ8/1T8wEzxFx6s0_JcWHJULYSKBaGVa0tyQQCLcB/s72-c/image2.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/06/google-plays-policy-on-incentivized.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-2067741982565276569</id><published>2017-06-01T09:12:00.001-07:00</published><updated>2017-06-02T10:50:14.389-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Android Security Rewards" /><category scheme="http://www.blogger.com/atom/ns#" term="Security" /><title type="text">2017 Android Security Rewards </title><content type="html">&lt;em&gt;Posted by Mayank Jain and Scott Roberts of the Android Security team&lt;/em&gt;
&lt;p&gt;
Two years ago, we launched the &lt;a
href="https://www.google.com/about/appsecurity/android-rewards/"&gt;Android
Security Rewards&lt;/a&gt; program. In its second year, we've seen great progress. We
received over 450 qualifying vulnerability reports from researchers and the
average pay per researcher jumped by 52.3%. On top of that, the total Android
Security Rewards payout doubled to $1.1 million dollars. Since it launched,
we've rewarded researchers over $1.5 million dollars.
&lt;/p&gt;
&lt;p&gt;
Here are some of the highlights from the Android Security Rewards program's
second year:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;There were no payouts for the top reward for a complete remote exploit chain
leading to TrustZone or Verified Boot compromise, our highest award amount
possible.
&lt;li&gt;We paid 115 individuals with an average of $2,150 per reward and $10,209 per
researcher.
&lt;li&gt;We paid our top research team, &lt;a href="http://c0reteam.org/"&gt;C0RE Team&lt;/a&gt;,
over $300,000 for 118 vulnerability reports.
&lt;li&gt;We paid 31 researchers $10,000 or more.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
Thank you to all the amazing &lt;a
href="https://source.android.com/security/overview/acknowledgements.html"&gt;researchers&lt;/a&gt;
who submitted complete &lt;a
href="https://source.android.com/security/overview/updates-resources#report-issues"&gt;vulnerability
reports&lt;/a&gt; to us last year.
&lt;/p&gt;
&lt;h3&gt;Improvements to Android Security Rewards program&lt;/h3&gt;
&lt;p&gt;
We're constantly working to improve the Android Security Rewards program and
today we're making a few changes to all vulnerability reports filed after June
1, 2017.
&lt;/p&gt;
&lt;p&gt;
Because every Android release includes more security protections and no
researcher has claimed the top reward for an exploit chains in 2 years, we're
excited to increase our top-line payouts for these exploits.
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Rewards for a remote exploit chain or exploit leading to TrustZone or
Verified Boot compromise increase from $50,000 to $200,000.
&lt;li&gt;Rewards for a remote kernel exploit increase from $30,000 to
$150,000.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
In addition to rewarding for vulnerabilities, we continue to work with the broad
and diverse Android ecosystem to protect users from issues reported through our
program. We collaborate with manufacturers to ensure that these issues are fixed
on their devices through monthly &lt;a
href="https://source.android.com/security/bulletin/"&gt;security updates&lt;/a&gt;.&lt;a
href="https://source.android.com/security/bulletin/"&gt; &lt;/a&gt;Over 100 device models
have a majority of their deployed devices running a security update from the
last 90 days. This table shows the models with a majority of deployed devices
running a security update from the last two months:
&lt;/p&gt;
&lt;table&gt;
  &lt;tr&gt;
   &lt;th&gt;&lt;b&gt;Manufacturer &lt;/b&gt;&lt;/th&gt;
   &lt;th&gt;&lt;b&gt;Device&lt;/b&gt;&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;b&gt;BlackBerry&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;PRIV&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;b&gt;Fujitsu&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;F-01J&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;b&gt;General Mobile&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;GM5 Plus d, GM5 Plus, General Mobile 4G Dual, General Mobile 4G&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;b&gt;Gionee&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;A1&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;b&gt;Google&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;Pixel XL, Pixel, Nexus 6P, Nexus 6, Nexus 5X, Nexus 9&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;b&gt;LGE&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;LG G6, V20, Stylo 2 V, GPAD 7.0 LTE&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;b&gt;Motorola&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;Moto Z, Moto Z Droid&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;b&gt;Oppo&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;CPH1613, CPH1605&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;b&gt;Samsung&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;Galaxy S8+, Galaxy S8, Galaxy S7, Galaxy S7 Edge, Galaxy S7 Active,
Galaxy S6 Active, Galaxy S5 Dual SIM, Galaxy C9 Pro, Galaxy C7, Galaxy J7,
Galaxy On7 Pro, Galaxy J2, Galaxy A8, Galaxy Tab S2 9.7&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;b&gt;Sharp&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;Android One S1, 507SH&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;b&gt;Sony&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;Xperia XA1, Xperia X&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;b&gt;Vivo&lt;/b&gt;&lt;/td&gt;
   &lt;td&gt;Vivo 1609, Vivo 1601, Vivo Y55&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;div class="note"&gt;
Source: Google May 29th, 2017.
&lt;/div&gt;
&lt;p&gt;
Thank you to everyone who helped make Android safer and stronger in the past
year. Together, we made a huge investment in security research that helps
Android users everywhere. If you want to get involved to make next year even
better, check out our detailed &lt;a
href="https://www.google.com/about/appsecurity/android-rewards/"&gt;Program
Rules&lt;/a&gt;. For tips on how to submit complete reports, see &lt;a
href="https://sites.google.com/site/bughunteruniversity/improve/how-to-submit-an-android-platform-bug-report"&gt;Bug
Hunter University&lt;/a&gt;.
&lt;/p&gt;

&lt;style&gt;
table {
    border-collapse: collapse;
    border-spacing: 0;
    width: 100%;
    border: 1px solid #ddd;
}

th {
    border: 1px solid #ddd;
    text-align: left;
    padding: 8px;
    background-color: #d3d3d3;
    text-align: center;
    vertical-align: middle;
}

td {
    border: 1px solid #ddd;
    text-align: left;
    padding: 8px;
    vertical-align: middle;
    min-width: 100px;
}

.note {
font-size: 10px;
padding-top: 0;
margin; 0;
text-align: center;
}
&lt;/style&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=slYXFnxazAA:p8h4XL4Aqgw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=slYXFnxazAA:p8h4XL4Aqgw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=slYXFnxazAA:p8h4XL4Aqgw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/slYXFnxazAA" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2067741982565276569" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2067741982565276569" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/slYXFnxazAA/2017-android-security-rewards.html" title="2017 Android Security Rewards " /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://android-developers.googleblog.com/2017/06/2017-android-security-rewards.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-8028952255518378197</id><published>2017-05-26T09:00:00.000-07:00</published><updated>2017-05-26T09:00:04.682-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android developers" /><category scheme="http://www.blogger.com/atom/ns#" term="Develop" /><category scheme="http://www.blogger.com/atom/ns#" term="Featured" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><category scheme="http://www.blogger.com/atom/ns#" term="social impact" /><title type="text">Meet 5 Android developers working to improve lives around the world</title><content type="html">&lt;img itemprop="image" style="display:none" src="http://services.google.com/fh/files/blogs/social_impact_blog_post.png"&gt;
&lt;style&gt;
  .asset img {
width: 200px;
text-align: center;
padding: 0;
border: 0;
margin: auto;
display: block;
}
  .caption {
text-align: center;
font-size: 6pts;
font-style: italic;
padding: 10px 0 0 0;
margin: 0;
border: 0;
}

  .use {
text-align: center;
font-size: 6pts;
padding:10px 0 0 0;
margin: 0;
border: 0;

  .stars {
text-align: center;
}

&lt;/style&gt;


&lt;em&gt;Posted by Maxim Mai, Apps Partnerships, Google Play&lt;/em&gt;
&lt;p&gt;
Last Thursday at Google I/O 2017, we announced the &lt;a
href="https://g.co/play/gpa2017"&gt;winners of this year's Google Play Awards&lt;/a&gt;.
Grab some popcorn and watch the &lt;a
href="https://www.youtube.com/watch?v=ayXMtOmXXhw"&gt;award ceremony&lt;/a&gt;, we think
it's just as fun as The Oscars. This year, we included a category to celebrate
the achievements of developers who publish outstanding apps that have positive
social impact.
&lt;/p&gt;
&lt;p&gt;
In introducing this awards category, we were inspired by the UN's &lt;a
href="https://sustainabledevelopment.un.org/sdgs"&gt;17 Sustainable Development
Goals&lt;/a&gt;. With the ability to reach over 1 billion active Android devices
around the world, we think that app developers have a tremendous opportunity to
impact Zero Hunger (&lt;a href="https://sustainabledevelopment.un.org/sdg2"&gt;SDG
#2&lt;/a&gt;), Good Health and Wellbeing (&lt;a
href="https://sustainabledevelopment.un.org/sdg3"&gt;SDG #3&lt;/a&gt;) and Quality
Education (&lt;a href="https://sustainabledevelopment.un.org/sdg4"&gt;SDG #4&lt;/a&gt;), and
many others. Read on to find out more about how this year's winner and finalists
and impacting these goals.
&lt;/p&gt;
&lt;h2&gt;Get in touch about your social impact app or game&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;
Our work in supporting developer success in this area on Android and Google Play
is just beginning. We would like to encourage Android developers with a focus on
social impact to &lt;a
href="https://goo.gl/ZXXGx5"&gt;get
in touch with us here at Google Play&lt;/a&gt; and to tell us about their app or game.
It doesn't matter where you are based, what problems you are solving, or which
countries you are targeting, we would like to hear your story and maybe we can
help you grow faster and improve your app's quality.
&lt;/p&gt;
&lt;h2&gt;Social impact winner &amp; finalists in the 2017 Google Play
Awards&lt;/h2&gt;
&lt;div class="asset"&gt;
&lt;a href="https://4.bp.blogspot.com/-wQH1KzlQJ40/WSctOYnFlaI/AAAAAAAAEP0/4XxjCrPZo9IelD3D0vAi7H-UC0SdUnzGwCLcB/s1600/image7.png" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-wQH1KzlQJ40/WSctOYnFlaI/AAAAAAAAEP0/4XxjCrPZo9IelD3D0vAi7H-UC0SdUnzGwCLcB/s1600/image7.png" data-original-width="200" data-original-height="200" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="caption"&gt;
&#x1f3c6; &lt;a
href="https://play.google.com/store/apps/details?id=org.sharethemeal.app&amp;e=-EnableAppDetailsPageRedesign"&gt;ShareTheMeal&lt;/a&gt;
by United Nations &#x1f3c6;
&lt;/div&gt;
&lt;p&gt;
The Google Play Award category winner, ShareTheMeal, generates large scale,
global awareness for "Zero Hunger" and its users' donations pay for school
meals, which are provided by the World Food Programme, in regions around the
world experiencing food insecurity. Over 13 million meals have been donated via
the app since launch!
&lt;/p&gt;
&lt;div class="asset"&gt;
&lt;a href="https://1.bp.blogspot.com/-Jl5ZQNRb9pE/WScvoL2-fPI/AAAAAAAAEQE/yN6jwNOjaIwoHCqtGZJzznIvZyNw5CBEgCLcB/s1600/image5.png" imageanchor="1" &gt;&lt;img border="0" src="https://1.bp.blogspot.com/-Jl5ZQNRb9pE/WScvoL2-fPI/AAAAAAAAEQE/yN6jwNOjaIwoHCqtGZJzznIvZyNw5CBEgCLcB/s1600/image5.png" data-original-width="200" data-original-height="200" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="caption"&gt;
&lt;a
href="https://play.google.com/store/apps/details?id=com.charitymilescm.android&amp;e=-EnableAppDetailsPageRedesign"&gt;Charity
Miles&lt;/a&gt; by Charity Miles
&lt;/div&gt;
&lt;p&gt;
This is a running, cycling and walking tracker app with a social impact twist.
Charity Miles earns money for charity on your behalf for every mile you move,
via its brand fitness exercise sponsors! Users have already donated $2 million
to charity by recording over 40 million miles!
&lt;/p&gt;
&lt;div class="asset"&gt;
&lt;a href="https://1.bp.blogspot.com/-PML25bgsTEI/WScv7Tj9PMI/AAAAAAAAEQI/GeJrdW0PRms0PixfjbNCmIsKOkmSveF_ACLcB/s1600/image1.png" imageanchor="1" &gt;&lt;img border="0" src="https://1.bp.blogspot.com/-PML25bgsTEI/WScv7Tj9PMI/AAAAAAAAEQI/GeJrdW0PRms0PixfjbNCmIsKOkmSveF_ACLcB/s1600/image1.png" data-original-width="200" data-original-height="200" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="caption"&gt;
&lt;a
href="https://play.google.com/store/apps/details?id=org.peekvision.public.android&amp;e=-EnableAppDetailsPageRedesign"&gt;Peek
Acuity&lt;/a&gt; by Peak Vision
&lt;/div&gt;
&lt;p&gt;
Peek Acuity allows anyone with an Android phone to easily measure visual acuity,
which is one of the components of vision. It is designed by eye care
professionals to be used to help identify people who need further examination
by, for example, an optometrist or ophthalmologist. In developing countries,
over XM [confirm number with Peek Vision] struggle with vision impairment and
many don't have easy access to an eye care professional.
&lt;/p&gt;
&lt;div class="asset"&gt;
&lt;a href="https://4.bp.blogspot.com/-ZyroTVxz20I/WScwHmaNmWI/AAAAAAAAEQM/Ylcq_WTHyuMCXjNZxJsXUHW-exuIByYaQCLcB/s1600/image3.png" imageanchor="1" &gt;&lt;img border="0" src="https://4.bp.blogspot.com/-ZyroTVxz20I/WScwHmaNmWI/AAAAAAAAEQM/Ylcq_WTHyuMCXjNZxJsXUHW-exuIByYaQCLcB/s1600/image3.png" data-original-width="200" data-original-height="200" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="caption"&gt;
&lt;a
href="https://play.google.com/store/apps/details?id=com.Proativa.ProDeafMovel"&gt;Prodeaf
Translator&lt;/a&gt; by ProDeaf Tecnologias Assistivas
&lt;/div&gt;
&lt;p&gt;
This app lets anyone translate phrases and words from Portuguese for Brazilian
Sign Language (Libras) or from English to American Sign Language (ASL). This
significantly reduces barriers to communication between the millions of people
who depend on Libras or ASL as their lingua franca and others who have not had
the opportunity to learn this form of communication.
&lt;/p&gt;
&lt;div class="asset"&gt;
&lt;a href="https://1.bp.blogspot.com/-MQdEnBdZ2lc/WScwUyLIegI/AAAAAAAAEQQ/iUtNIdShh4M133vGJWnnTY5Xso81TYKPwCLcB/s1600/image6.png" imageanchor="1" &gt;&lt;img border="0" src="https://1.bp.blogspot.com/-MQdEnBdZ2lc/WScwUyLIegI/AAAAAAAAEQQ/iUtNIdShh4M133vGJWnnTY5Xso81TYKPwCLcB/s1600/image6.png" data-original-width="200" data-original-height="200" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="caption"&gt;
&lt;a
href="https://play.google.com/store/apps/details?id=com.glitchers.catchhero&amp;e=-EnableAppDetailsPageRedesign"&gt;Sea
Hero Quest&lt;/a&gt; by GLITCHERS
&lt;/div&gt;
&lt;p&gt;
This is not just a game, it's a quest to help scientists fight dementia! It
sounds too good to be true but this really is a game, where simply by having
loads of fun chasing creatures around magical seas and swamps, you can help to
fight a disease that currently affects 45 million people worldwide. In fact
playing SEA HERO QUEST for just 2 minutes will generate the equivalent of 5
hours of lab-based research data.
&lt;/p&gt;
&lt;p&gt;
If you're working on an app or game with a positive social impact, don't forget
to &lt;a
href="https://goo.gl/ZXXGx5"&gt;get
in touch via this form&lt;/a&gt; and tick the "Social Impact app" checkbox.
&lt;/p&gt;
&lt;div class="use"&gt;
How useful did you find this blogpost? 
&lt;/div&gt;
&lt;center&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;entry.656324858&amp;entry.1348260426=socialimpact-05/17&amp;entry.1170596605&amp;entry.646747778=socialimpact-05/17" style="color: gold"; &gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;entry.656324858&amp;entry.1348260426=socialimpact-05/17&amp;entry.1170596605&amp;entry.646747778=socialimpact-05/17" style="color: gold";&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;entry.656324858&amp;entry.1348260426=socialimpact-05/17&amp;entry.1170596605&amp;entry.646747778=socialimpact-05/17" style="color: gold";&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;entry.656324858&amp;entry.1348260426=socialimpact-05/17&amp;entry.1170596605&amp;entry.646747778=socialimpact-05/17" style="color: gold";&gt;★&lt;/a&gt;
&lt;a
href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;entry.656324858&amp;entry.1348260426=socialimpact-05/17&amp;entry.1170596605&amp;entry.646747778=socialimpact-05/17" style="color: gold";&gt;★&lt;/a&gt;
&lt;/center&gt;
&lt;div class="asset"&gt;&lt;a href="https://2.bp.blogspot.com/-dMf7_d_VO1A/WScxJWLCBYI/AAAAAAAAEQY/ogcgiUlVNOQx9sFsIfddCiGeo-AF28xeACLcB/s1600/image2.png" imageanchor="1" &gt;&lt;img border="0" src="https://2.bp.blogspot.com/-dMf7_d_VO1A/WScxJWLCBYI/AAAAAAAAEQY/ogcgiUlVNOQx9sFsIfddCiGeo-AF28xeACLcB/s1600/image2.png" data-original-width="499" data-original-height="281" /&gt;&lt;/a&gt;


&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=iL7a1LkSr6g:WCB0vKwuGLA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=iL7a1LkSr6g:WCB0vKwuGLA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=iL7a1LkSr6g:WCB0vKwuGLA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/iL7a1LkSr6g" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8028952255518378197" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8028952255518378197" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/iL7a1LkSr6g/meet-5-android-developers-working-to.html" title="Meet 5 Android developers working to improve lives around the world" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-dMf7_d_VO1A/WScxJWLCBYI/AAAAAAAAEQY/ogcgiUlVNOQx9sFsIfddCiGeo-AF28xeACLcB/s72-c/image2.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/05/meet-5-android-developers-working-to.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-8405762214612757207</id><published>2017-05-25T10:00:00.000-07:00</published><updated>2017-06-15T10:43:50.141-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android TV" /><category scheme="http://www.blogger.com/atom/ns#" term="APIs" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Assistant" /><title type="text">Welcome to your New Home on Android TV</title><content type="html">&lt;style&gt;
.image img {
  width: 100%;
  padding: 10px 0;
  margin: 0;
  border: 0;
}
&lt;/style&gt;

&lt;em&gt;Posted by &lt;a href="https://plus.google.com/+PaulSaxman"&gt;Paul Saxman&lt;/a&gt;, Android Devices and Media Developer Relations Lead&lt;/em&gt;
&lt;div class="image"&gt;
  &lt;a href="https://2.bp.blogspot.com/-pXQ1_sfY6H8/WSYFmaC19KI/AAAAAAAAEPk/B7xvj8g61xsqPr-CwQ5RYPfOsnwQkZObwCLcB/s1600/image1.png" &gt;&lt;img 
  src="https://2.bp.blogspot.com/-pXQ1_sfY6H8/WSYFmaC19KI/AAAAAAAAEPk/B7xvj8g61xsqPr-CwQ5RYPfOsnwQkZObwCLcB/s1600/image1.png" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
Android TV brings rich app experiences and entertainment to the biggest screen in your house, and with Android O, we’re making it even easier for users to access content from their favorite apps. We’ve built a new, content-centric home screen experience for Android TV, and we're bringing the Google Assistant to the platform as well. These features put content that users want to access a few clicks, or spoken words, away.
&lt;/p&gt;
&lt;h2&gt;The New Android TV Home Screen&lt;/h2&gt;
&lt;p&gt;
The new Android TV home screen organizes video content into channels and programs in a way that’s familiar to TV viewers. Each Android TV app can publish multiple channels, which are represented as rows of programs on the home screen. Apps add relevant programs on each channel, and update these programs and channels as users access content or when new content is available. To help engage users, programs can include a video preview, which is automatically played when a user focuses on a program. Users can configure which channels they wish to see on the home screen, and the ordering of channels, so the themes and shows they’re interested in are quick and easy to access.
&lt;/p&gt;
&lt;p&gt;
In addition to channels for you app, the top of the new Android TV home screen includes a quick launch bar for users' favorite apps, and a special Watch Next channel. This channel contains programs based on the viewing habits of the user.
&lt;/p&gt;
&lt;p&gt;
The APIs for creating and maintaining channels and programs are part of the &lt;a
href="https://developer.android.com/reference/android/support/media/tv/package-summary.html"&gt;TvProvider
APIs&lt;/a&gt;, which are distributed as an Android Support Library module with
Android O. To get started using these APIs, visit the &lt;a
href="https://developer.android.com/preview/features/tvlauncher.html"&gt;Android O
Developer Preview site&lt;/a&gt; for an overview, and try out the &lt;a
href="https://codelabs.developers.google.com/codelabs/tv-channels-programs/index.html"&gt;Android
TV Channels and Programs codelab&lt;/a&gt; for a first-hand experience building an
Android TV app for Android O.
&lt;/p&gt;
&lt;p&gt;
Later this year, Nexus Players will receive the new Android TV home experience
as an OTA update. If you wish build and test apps for the new interface today,
however, you can use the Android TV emulator or Nexus Player device images that
are part of the latest &lt;a
href="https://developer.android.com/preview/index.html"&gt;Android O Developer
Preview&lt;/a&gt;.
&lt;/p&gt;
&lt;h2&gt;The Google Assistant on Android TV&lt;/h2&gt;
&lt;p&gt;
The Google Assistant on Android TV, coming later this year, will allow users to
quickly find and access content using their voice. Because the Assistant is
context-aware, it can help users narrow down what content to play. Users will
also be able access the Assistant to control playback, even while a video or
music is playing. And since the Assistant can control compatible smart home
devices, a simple voice request can dim the lights to create an ideal movie
viewing environment. When the Google Assistant comes to Android TV, it will
launch in the US on Android devices running M, N, and O.
&lt;/p&gt;
&lt;p&gt;
We're looking forward to seeing how developers take advantage of the new Android
TV home screen. We welcome feedback, so please visit the &lt;a
href="https://plus.google.com/communities/112881895888889393129"&gt;Android TV
Developer Community on G+&lt;/a&gt; to share you thoughts and ideas!
&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=y87ok71k8ug:blylv9VCBw0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=y87ok71k8ug:blylv9VCBw0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=y87ok71k8ug:blylv9VCBw0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/y87ok71k8ug" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8405762214612757207" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8405762214612757207" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/y87ok71k8ug/welcome-to-your-new-home-on-android-tv.html" title="Welcome to your New Home on Android TV" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-pXQ1_sfY6H8/WSYFmaC19KI/AAAAAAAAEPk/B7xvj8g61xsqPr-CwQ5RYPfOsnwQkZObwCLcB/s72-c/image1.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/05/welcome-to-your-new-home-on-android-tv.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-388924587668686214</id><published>2017-05-24T10:45:00.000-07:00</published><updated>2017-05-30T08:12:58.060-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google Play" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Play Console" /><category scheme="http://www.blogger.com/atom/ns#" term="Localization" /><category scheme="http://www.blogger.com/atom/ns#" term="Translation" /><title type="text">Request a professional app translation from the Google Play Console and reach new users</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;style&gt;
.post-content img {
  padding: 20px 0 10px 0;
}
b {
  color: gold;
}

.stars {
  color: gold;
  text-align: center;
}

.use {
  font-style: italic;
  font-size: 8pt;
  text-align: center;
}
&lt;/style&gt;  &lt;em&gt;Posted by Rahim Nathwani, Product Manager, Google Play&lt;/em&gt; &lt;br /&gt;
Localizing your app or game is an important step in allowing you to reach the widest possible audience. It helps you increase downloads and provide better experiences for your audience. &lt;br /&gt;
To help do this, Google Play offers an app translation service. The service, by professional linguists, can translate app user interface strings, Play Store text, in-app products and universal app campaign ads. We've made the app translation service available directly from inside the Google Play Console, making it easy and quick to get started. &lt;a href="https://3.bp.blogspot.com/-hJ-n86fU_ME/WSXDezClraI/AAAAAAAAEPU/FFPRdycx1DgOJzQ4CQxor3iu8D-w8BnnACLcB/s1600/App%2Btrans.png" imageanchor="1" &gt;&lt;img border="0" src="https://3.bp.blogspot.com/-hJ-n86fU_ME/WSXDezClraI/AAAAAAAAEPU/FFPRdycx1DgOJzQ4CQxor3iu8D-w8BnnACLcB/s1600/App%2Btrans.png" width="100%" /&gt;&lt;/a&gt; &lt;ul&gt;&lt;li&gt;Choose from a selection of professional translation vendors. &lt;/li&gt;
&lt;li&gt;Order, receive and apply translations, without leaving the Play Console. &lt;/li&gt;
&lt;li&gt;Pay online with &lt;strong&gt;Google Wallet.&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Translations from your previous orders (if any) are reused, so you &lt;strong&gt;never pay for the same translation twice. &lt;/strong&gt;Great if you release new versions frequently.&lt;/li&gt;
&lt;/ul&gt;Using the app translation service to translate a typical app and store description into one language may cost around US$50. (cost depends on the amount of text and languages). &lt;br /&gt;
Find out more and &lt;a href="https://support.google.com/l10n/#topic=6307483"&gt;get started with the app translation service&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;div class="use"&gt;How useful did you find this blogpost? &lt;/div&gt;&lt;div class="stars"&gt;&lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;entry.656324858&amp;entry.1348260426=apptrans-05/17&amp;entry.1170596605&amp;entry.646747778=apptrans-05/17" style="color: gold"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;entry.656324858&amp;entry.1348260426=apptrans-05/17&amp;entry.1170596605&amp;entry.646747778=apptrans-05/17" style="color: gold"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;entry.656324858&amp;entry.1348260426=apptrans-05/17&amp;entry.1170596605&amp;entry.646747778=apptrans-05/17" style="color: gold"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;entry.656324858&amp;entry.1348260426=apptrans-05/17&amp;entry.1170596605&amp;entry.646747778=apptrans-05/17" style="color: gold"&gt;★&lt;/a&gt; &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;entry.656324858&amp;entry.1348260426=apptrans-05/17&amp;entry.1170596605&amp;entry.646747778=apptrans-05/17" style="color: gold"&gt;★&lt;/a&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; margin: 0 0 0 0; padding: 0 0 0 0; text-align: center;"&gt;&lt;a href="http://developers.android.com/distribute" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://2.bp.blogspot.com/-9I581b-TlGE/WSTLCZzGVvI/AAAAAAAAEPA/32O2STHzOuwnL20RTB5X-zkacYaFu3KhACLcB/s320/image1.png" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=zSQRHrvs7r8:LkC_VSYvXdg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=zSQRHrvs7r8:LkC_VSYvXdg:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=zSQRHrvs7r8:LkC_VSYvXdg:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/zSQRHrvs7r8" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/388924587668686214" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/388924587668686214" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/zSQRHrvs7r8/request-professional-app-translation.html" title="Request a professional app translation from the Google Play Console and reach new users" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://3.bp.blogspot.com/-hJ-n86fU_ME/WSXDezClraI/AAAAAAAAEPU/FFPRdycx1DgOJzQ4CQxor3iu8D-w8BnnACLcB/s72-c/App%2Btrans.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/05/request-professional-app-translation.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-325150875520926746</id><published>2017-05-23T13:48:00.000-07:00</published><updated>2017-05-23T13:48:36.782-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Android Auto" /><category scheme="http://www.blogger.com/atom/ns#" term="API" /><category scheme="http://www.blogger.com/atom/ns#" term="messaging api" /><title type="text">Group Messaging in Android Auto</title><content type="html">&lt;em&gt;Posted by David Nelloms, Software Engineer&lt;/em&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://4.bp.blogspot.com/-cA6vqISfC20/WSRnWiAg7vI/AAAAAAAAEOc/BjBkTKMfC38rItCAmk9kE5UCkkiIFZ28gCLcB/s1600/image2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://4.bp.blogspot.com/-cA6vqISfC20/WSRnWiAg7vI/AAAAAAAAEOc/BjBkTKMfC38rItCAmk9kE5UCkkiIFZ28gCLcB/s640/image2.png" width="640" height="480" /&gt;&lt;/a&gt;&lt;/div&gt;

Communicating with a group of people is a common use case for many messaging
apps.  However, it may be difficult to know how the &lt;a
href="https://developer.android.com/training/auto/messaging/index.html"&gt;Android
Auto messaging API&lt;/a&gt; applies to group conversations.  Here are some tips for
getting started with group messaging in Android Auto:
&lt;/p&gt;
&lt;h2&gt;Conversation Name&lt;/h2&gt;
&lt;p&gt;
When constructing the UnreadConversation builder, you are required to pass in a
name.  This is the name of the conversation that is displayed to the user when
messages arrive.
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
UnreadConversation.Builder unreadConvBuilder =
    new UnreadConversation.Builder(conversationName)
        .setReadPendingIntent(msgHeardPendingIntent)
        .setReplyAction(msgReplyPendingIntent, remoteInput);
&lt;/pre&gt;
&lt;p&gt;
For one-on-one conversations, this is simply the name of the other participant.
For group conversations, it is best to choose one of two options for the name:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Conversation title: If your app supports adding a title to group
conversations, use the title for the name parameter to be consistent with your
in-app experience.  This field is similar to &lt;a
href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.MessagingStyle.html#setConversationTitle(java.lang.CharSequence)"&gt;NotificationCompat.MessagingStyle#setConversationTitle&lt;/a&gt;.
  &lt;li&gt;A list of participants: Build a comma-separated list of participants for the
name parameter to identify the group.  Note that this is read aloud by the
text-to-speech system, so you may need to abbreviate the list for large groups.
You should balance allowing users to uniquely identify the group with the time
taken to listen to messages.
&lt;/li&gt;&lt;/ol&gt;
&lt;h2&gt;Text to Speech Formatting&lt;/h2&gt;
&lt;p&gt;
Getting text to sound natural using a TTS system is a challenging problem.
There are teams working hard to improve this, but there are steps you can take
to create a better user experience with the current capabilities.  The Android
Auto messaging API does not yet have an option for pairing participants with
individual messages in a group conversation.  This is problematic for drivers
when there are multiple unread messages from multiple participants in a group
conversation, as the drivers cannot see which group member sent which message.
One solution is to prepend the sender's name to the message whenever the sender
changes so that the names are read aloud to the driver.
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
CharSequence currentSender = null;
for (Message message : myMessages) {
    StringBuilder messageText = new StringBuilder();
    CharSequence sender = message.getSender();
    // Maybe append sender to indicate who is speaking.
    if (!TextUtils.isEmpty(sender) &amp;&amp; !sender.equals(currentSender)) {
        if (currentSender != null) {
            // Punctuation will briefly pause TTS readout between senders.
            messageText.append(". ");
        }
        currentSender = sender;
        messageText.append(sender.toString().toLowerCase(Locale.getDefault()));
        // Punctuation will separate sender from message in TTS readout.
        messageText.append(": ");
    }
    messageText.append(message.getText());
    unreadConvBuilder.addMessage(messageText.toString());
}
&lt;/pre&gt;
&lt;p&gt;
Some things to note about the above sample code:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Adding punctuation is not strictly necessary, but it can produce a more
natural sounding result.
&lt;li&gt;The sender names are converted to lowercase. This is workaround for a quirk
where the TTS implementation vocalizes ". " as "dot" when preceding a capital
letter on some devices.&lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt;Get participants&lt;/h2&gt;
&lt;p&gt;
In searching for how to handle group messaging, you may have noticed &lt;a
href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.CarExtender.UnreadConversation.html#getParticipants()"&gt;UnreadConversation#getParticipants&lt;/a&gt;.
 This can be confusing as there is no mechanism to add multiple participants in
the builder.  The builder implementation populates the array with the
conversation name passed to its constructor.  Internally, Android Auto uses the
singular &lt;a
href="https://developer.android.com/reference/android/support/v4/app/NotificationCompat.CarExtender.UnreadConversation.html#getParticipant()"&gt;UnreadConversation#getParticipant&lt;/a&gt;,
which returns the first element of the participants array, to populate the title
in the notification view.
&lt;/p&gt;
&lt;h2&gt;Stay tuned&lt;/h2&gt;
&lt;p&gt;
The Android Auto team is working on ways to make messaging with drivers simpler
and more intuitive for app developers.  Stay tuned for future updates so that
you can continue to deliver a great user experience!

&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://3.bp.blogspot.com/-7fTMW8djm2k/WSRotb2sevI/AAAAAAAAEOo/Ggng08syv44XZGByKjDDX6FWIZsfEQusgCLcB/s1600/image1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://3.bp.blogspot.com/-7fTMW8djm2k/WSRotb2sevI/AAAAAAAAEOo/Ggng08syv44XZGByKjDDX6FWIZsfEQusgCLcB/s640/image1.png" width="100px" /&gt;&lt;/a&gt;&lt;/div&gt;


&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=ErVip6AT--I:ooInoooUL9I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=ErVip6AT--I:ooInoooUL9I:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=ErVip6AT--I:ooInoooUL9I:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/ErVip6AT--I" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/325150875520926746" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/325150875520926746" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/ErVip6AT--I/group-messaging-in-android-auto.html" title="Group Messaging in Android Auto" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://4.bp.blogspot.com/-cA6vqISfC20/WSRnWiAg7vI/AAAAAAAAEOc/BjBkTKMfC38rItCAmk9kE5UCkkiIFZ28gCLcB/s72-c/image2.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/05/group-messaging-in-android-auto.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-4670008224824157877</id><published>2017-05-19T10:30:00.000-07:00</published><updated>2017-05-19T10:30:12.510-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="developers" /><category scheme="http://www.blogger.com/atom/ns#" term="Featured" /><category scheme="http://www.blogger.com/atom/ns#" term="GooglePlay" /><category scheme="http://www.blogger.com/atom/ns#" term="subscriptions" /><title type="text">Make more money with subscriptions on Google Play</title><content type="html">&lt;em&gt;Posted by George Audi, Tom Grinsted and Larry Yang, Google Play&lt;/em&gt;
&lt;p&gt;
The subscription business model is one of the best ways to make more regular, reliable, and recurring revenue on Android and Google Play. In fact, both developers and users love subscription apps so much that we’ve seen a 10X growth in consumer spend over the past three years and double the number of active subscribers in the past year. Thousands of developers are offering subscriptions through Google Play and are already seeing success with our billing platform. That’s why we’ve been working hard to help you take advantage of this opportunity and give you greater insights into your business and Android users.
&lt;/p&gt;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/6bAyQvCWSlA" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;h2&gt;
New features to help your subscriptions business
thrive&lt;/h2&gt;
&lt;p&gt;
You've got a high-performing product with fantastic features and compelling
content, but your business can't succeed without acquiring new users. In
addition to free trials, intro pricing, flexible billing periods, and more, we
recently launched the &lt;strong&gt;ability to pay for subscriptions with Google Play
balance&lt;/strong&gt;. Although people have already been using gift cards to pay for
Play content in over 20 countries, the use of gift cards to pay for
subscriptions in regions where cash is a popular form of payment, such as Latin
America, has resulted in as high as a 15% increase in subscription spend.
&lt;/p&gt;
&lt;p&gt;
But it's not just about acquiring new customers, it's about retaining the ones
you have. That's why we are introducing &lt;strong&gt;account hold&lt;/strong&gt;, where we
work with you to block access to your content or service if a user's form of
payment fails. This directly links a payment failure to the user losing access
to your content and/or premium features, which is enough to get them to go and
choose a new form of payment. When Keepsafe–the developer of &lt;a
href="https://play.google.com/store/apps/details?id=com.kii.safe&amp;hl=en"&gt;Keepsafe
Photo Vault&lt;/a&gt;, a photo locker for private pictures and videos with over 50M
downloads–integrated account hold, their renewal rate on Android increased by
25%. We have over a dozen developers in early access today, and we will be
announcing public availability at the end of June.
&lt;/p&gt;
&lt;p&gt;
We know data is vital to running your business, so we're excited to announce a
new &lt;strong&gt;subscriptions dashboard&lt;/strong&gt; in the Play Console, and a new
report on Android app subscribers.
&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://3.bp.blogspot.com/-euR_zxU7ddE/WR36NufKapI/AAAAAAAAENs/LGvZwSKpmOU0OC478TgoeXE7zowI6LlaACLcB/s1600/01-Dashboard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="https://3.bp.blogspot.com/-euR_zxU7ddE/WR36NufKapI/AAAAAAAAENs/LGvZwSKpmOU0OC478TgoeXE7zowI6LlaACLcB/s640/01-Dashboard.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;
The dashboard brings together subscription data like new subscribers, cancellations, and total subscribers. It also displays daily and 30-day rolling revenue data, and highlights your top-performing products. This will give visibility into your subscription products and users and will help guide your business decisions. 
&lt;/p&gt;
&lt;h2&gt;
Insights to help you grow your subscriptions
business&lt;/h2&gt;
&lt;p&gt;
In addition to products and features, understanding people's needs is core to
building a successful subscription business. We talked to 2,000 Android app
subscribers in the US and UK and asked them how and why they use the apps they
do. The results shared in '&lt;strong&gt;&lt;a
href="http://services.google.com/fh/files/misc/subscription_apps_on_google_play.pdf"&gt;Subscription
apps on Google Play: User insights to help developers win'&lt;/a&gt;&lt;/strong&gt; report
highlight some of the opportunities for you to grow your subscriptions user
base, set pricing strategies and learn to keep your users engaged, including:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use free trials to acquire users&lt;/strong&gt;. 78% of users start with a
free version of an app, and many cite a discount or end of a free trial as a
reason to pay.
&lt;li&gt;&lt;strong&gt;Keep your content appealing and updated to get and keep users
paying&lt;/strong&gt;. It's the most important driver in converting users from free to
paid users, as well as keeping users engaged and retained.&lt;/li&gt;&lt;/ul&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://1.bp.blogspot.com/-ma1xbUYQCAo/WR36jq2NJ_I/AAAAAAAAEN0/-gNK86H5hFoc_KvuGNAWF5aMPsxb0TDaACLcB/s1600/image2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="https://1.bp.blogspot.com/-ma1xbUYQCAo/WR36jq2NJ_I/AAAAAAAAEN0/-gNK86H5hFoc_KvuGNAWF5aMPsxb0TDaACLcB/s640/image2.jpg" width="521" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;There is a huge opportunity to make money from
subscriptions.&lt;/strong&gt; While pricing elasticity varies by category, few users
cite price as a reason to churn from a paid subscription and 64% either budget
on a per app basis or not at all (as opposed to budgeting across all app
subscriptions).&lt;/li&gt;
&lt;/ul&gt;
To find out more about your growing your subscription business with Google Play,
&lt;a href="https://events.google.com/io/schedule/?section=may-19&amp;amp;sid=9e98e824-4ffc-4a6a-9121-12fa7ece15ff"&gt;watch
our I/O session&lt;/a&gt;, &lt;a href="http://services.google.com/fh/files/misc/subscription_apps_on_google_play.pdf"&gt;download
the research report (PDF)&lt;/a&gt;, and get started with &lt;a href="https://developer.android.com/distribute/best-practices/earn/subscriptions.html"&gt;subscriptions
with Google Play In-app Billing&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;
&lt;em&gt;
 How useful did you find this blogpost?
&lt;/em&gt;&lt;/center&gt;
&lt;br /&gt;
&lt;style&gt;
.stars {
color: gold;
text-align: center;
}
&lt;/style&gt;

&lt;div class="stars"&gt;
&lt;href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=1%E2%98%85+%E2%80%93+Not+at+all&amp;entry.656324858&amp;entry.1348260426=subscriptiongrow-04/17&amp;entry.1170596605&amp;entry.646747778=subscriptiongrow-04/17"&gt;★&lt;/a&gt;
&lt;href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=2%E2%98%85+%E2%80%93+Not+very&amp;entry.656324858&amp;entry.1348260426=subscriptiongrow-04/17&amp;entry.1170596605&amp;entry.646747778=subscriptiongrow-04/17"&gt;★&lt;/a&gt;
&lt;href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=3%E2%98%85+%E2%80%93+Somewhat&amp;entry.656324858&amp;entry.1348260426=subscriptiongrow-04/17&amp;entry.1170596605&amp;entry.646747778=subscriptiongrow-04/17"&gt;★&lt;/a&gt;
&lt;href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=4%E2%98%85+%E2%80%93+Very&amp;entry.656324858&amp;entry.1348260426=subscriptiongrow-04/17&amp;entry.1170596605&amp;entry.646747778=subscriptiongrow-04/17"&gt;★&lt;/a&gt;
&lt;href="https://docs.google.com/forms/d/e/1FAIpQLScLTlzFd_aV-3rAdBqO1QxwCsuAcDCIM6fJFXyNcyf7zElVXg/viewform?entry.753333049=5%E2%98%85+%E2%80%93+Extremely&amp;entry.656324858&amp;entry.1348260426=subscriptiongrow-04/17&amp;entry.1170596605&amp;entry.646747778=subscriptiongrow-04/17"&gt;★&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; margin: 0 0 0 0; padding: 0 0 0 0; text-align: center;"&gt;
&lt;a href="https://2.bp.blogspot.com/-c8OajvcUpKM/WR36pvEzkLI/AAAAAAAAEN4/CtwyFwbdNYk3SPZQZ8chWEyhr4t8Cke-wCLcB/s1600/image1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="https://2.bp.blogspot.com/-c8OajvcUpKM/WR36pvEzkLI/AAAAAAAAEN4/CtwyFwbdNYk3SPZQZ8chWEyhr4t8Cke-wCLcB/s320/image1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=7-wo5KdCDyg:csKgVkjdgsA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=7-wo5KdCDyg:csKgVkjdgsA:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=7-wo5KdCDyg:csKgVkjdgsA:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/7-wo5KdCDyg" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4670008224824157877" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/4670008224824157877" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/7-wo5KdCDyg/make-more-money-with-subscriptions-on.html" title="Make more money with subscriptions on Google Play" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/6bAyQvCWSlA/default.jpg" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/05/make-more-money-with-subscriptions-on.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-8984323426165033076</id><published>2017-05-18T10:00:00.000-07:00</published><updated>2017-05-18T10:00:37.016-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Wear" /><category scheme="http://www.blogger.com/atom/ns#" term="Android Wear 2.0" /><category scheme="http://www.blogger.com/atom/ns#" term="Complications" /><category scheme="http://www.blogger.com/atom/ns#" term="Wear UI Library" /><title type="text">Android Wear: New complications tools and watch friendly UI library </title><content type="html">&lt;em&gt;Posted by &lt;a href="https://twitter.com/hoitab"&gt;Hoi Lam&lt;/a&gt;, Lead Developer Advocate, Android Wear&lt;/em&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://4.bp.blogspot.com/-l8KEeIG13X0/WR3LjoVPsFI/AAAAAAAAENc/FNw-jBe1zXk7OO0DMQaYlE02WHVuIQ6uwCLcB/s1600/complications_config_800x450_10fps.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="360" src="https://4.bp.blogspot.com/-l8KEeIG13X0/WR3LjoVPsFI/AAAAAAAAENc/FNw-jBe1zXk7OO0DMQaYlE02WHVuIQ6uwCLcB/s640/complications_config_800x450_10fps.gif" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
Android Wear 2.0 gives users more informative watch faces and provides developers with new ways to build useful apps. These new opportunities have been well received by users and developers alike. To help developers take advantage of these new features, we have released a suite of complication API tools, to make it easier for developers to add complication support to their watch faces, and a new Wear UI library, to help developers build watch friendly user interfaces.
&lt;br /&gt;
&lt;h2&gt;New Complications API tools for Watch Face developers&lt;/h2&gt;
&lt;p&gt;
Complications are bite-sized pieces of information displayed directly on the watch face. They can also be great shortcuts into your favorite apps. We introduced the &lt;a href="https://developer.android.com/training/wearables/watch-faces/complications.html"&gt;Complications API&lt;/a&gt; last year to enable watch faces to receive data from any app that the user selects, and display the data to the user in a way that is stylistically coherent. Today, we are introducing four new tools to make it easier for watch face developers to integrate with the Complications API:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/training/wearables/watch-faces/complications.html#rendering-text"&gt;TextRenderer&lt;/a&gt; - Auto-sizes text to fit in bounds defined by watch face makers.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/training/wearables/watch-faces/complications.html#drawing-complications"&gt;ComplicationDrawable&lt;/a&gt; - A full rendering solution for complications, that handles all the styling for you, and adjusts the layout to fit the space you specify&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/googlesamples/android-WatchFace"&gt;Easy watch face settings sample&lt;/a&gt; - Adoptable sample code that makes it easier to build complication settings with a rich and usable experience.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/googlesamples/android-WearComplicationProvidersTestSuite"&gt;Complication test suite&lt;/a&gt; - A sample data provider to help check that your watch face can handle all the combinations of fields that can make up complication data.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
It's never been easier to integrate complications into your watch faces.
&lt;/p&gt;
&lt;h2&gt;New Wear UI Library for Wear developers&lt;/h2&gt;
&lt;p&gt;
We have provided Android view components for building watch friendly user interfaces since the launch of Android Wear 1.0. Developers have told us that they would like to see these components open sourced. So, starting at Google I/O, we are open sourcing some components and providing some Android Wear UI components in the Android Support Library. This brings a number of advantages, including more consistent APIs with the rest of the Support Library, more frequent releases, and better responsiveness to developer feedback. We will:
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Migrate Wearable Support classes&lt;/b&gt; - Migrate and update Android Wear specific view components, such as WearableRecyclerView, from android.support.wearable.view in Wearable Support to android.support.wear.widget in the Android Support Library. This new package is available as open source. In terms of developer impact, we expect the migration process to be simple, with minor API name changes to bring consistency with the existing Android Support Library.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Merge some Android Wear functionality to Android&lt;/b&gt; - Some Android Wear components have a lot of overlap with Android, e.g. &lt;a href="https://developer.android.com/reference/android/support/wearable/view/CircledImageView.html"&gt;CircledImageView&lt;/a&gt; and &lt;a href="https://developer.android.com/reference/android/support/wearable/view/DelayedConfirmationView.html"&gt;DelayedConfirmationView&lt;/a&gt;. We will merge the Android Wear specific functionality with the Android counterparts under android.support.v4.widget.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Deprecate outdated user interface patterns&lt;/b&gt; - Two user interface patterns are deprecated with Android Wear 2.0: the Card pattern and the Multi-directional layout. As a result, we have deprecated all supporting classes, such as &lt;a href="https://developer.android.com/reference/android/support/wearable/view/GridViewPager.html"&gt;GridViewPager&lt;/a&gt; and &lt;a href="https://developer.android.com/reference/android/support/wearable/view/CardFragment.html"&gt;CardFragment&lt;/a&gt;. Please refer to the class reference docs for their replacements.&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;
In &lt;a href="https://developer.android.com/reference/android/support/wear/widget/package-summary.html"&gt;the first wave of these changes&lt;/a&gt;, we migrated the WearableRecyclerView, BoxInsetLayout and SwipeDismissFrameLayout classes to the new Android Wear UI Library. We expect the migration process to continue during 2017, and developers will have until mid-2018 to migrate to the new UI components. For additional information, see &lt;a href="https://developer.android.com/training/wearables/ui/wear-ui-library.html"&gt;Using the Wear UI Library&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Get started and give us feedback!&lt;/h2&gt;
&lt;p&gt;
To get started with these new tools, simply update the Android Support Library in Android Studio and update your gradle build files to import the new support libraries. In addition to the documentation links above, check out the Google I/O session - &lt;a href="https://events.google.com/io/schedule/?section=may-19&amp;amp;sid=3c8f9b3c-2bdf-4e18-9797-1f087aff9b13"&gt;Android Wear UI development best practice&lt;/a&gt; - where lead engineers for these tools will be on-hand to explain the technical details.
&lt;/p&gt;
&lt;p&gt;
We will continue to update these tools over the next few months, based on &lt;a href="http://g.co/wearpreviewbug"&gt;your feedback&lt;/a&gt;. The sooner we hear from you, the more we can include, so don't be shy! Let us do some of the heavy lifting for your Android Wear apps and watch faces.
&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=1sd81HWLRhM:DVnZrSaKB88:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=1sd81HWLRhM:DVnZrSaKB88:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=1sd81HWLRhM:DVnZrSaKB88:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/1sd81HWLRhM" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8984323426165033076" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/8984323426165033076" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/1sd81HWLRhM/android-wear-new-complications-tools.html" title="Android Wear: New complications tools and watch friendly UI library " /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://4.bp.blogspot.com/-l8KEeIG13X0/WR3LjoVPsFI/AAAAAAAAENc/FNw-jBe1zXk7OO0DMQaYlE02WHVuIQ6uwCLcB/s72-c/complications_config_800x450_10fps.gif" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/05/android-wear-new-complications-tools.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6755709643044947179.post-2269549880102777143</id><published>2017-05-18T06:00:00.000-07:00</published><updated>2017-05-18T07:57:59.852-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="#io17" /><category scheme="http://www.blogger.com/atom/ns#" term="Android Pay" /><category scheme="http://www.blogger.com/atom/ns#" term="Android Pay API" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Assistant" /><category scheme="http://www.blogger.com/atom/ns#" term="Google I/O" /><title type="text">What’s next for Google payment and loyalty experiences</title><content type="html">&lt;style&gt;
.caption {
font-size: 75%;
text-align: center;
text-format: italic;
}
&lt;/style&gt;


&lt;em&gt;Posted by Pali Bhat, VP of Payment Products&lt;/em&gt;
&lt;p&gt;
Thousands of apps and millions of stores accept Android Pay, a simpler and more
secure mobile payment experience. Android Pay is now available in 10 markets,
with more coming soon, including Brazil, Canada, Russia, Spain and Taiwan. And
in addition to our already announced &lt;a
href="https://blog.google/topics/shopping-payments/android-pay-partners-visa-checkout-and-masterpass/"&gt;Visa
and Mastercard&lt;/a&gt; partnerships, we'll soon enable a streamlined mobile checkout
experience for PayPal users.
&lt;/p&gt;
&lt;h2&gt;The newest ways to pay with Google&lt;/h2&gt;
&lt;p&gt;
Yesterday, we announced the Google Payment API, which lets people pay in app or
online with any verified credit or debit card saved to their Google Account, via
products like Google Play, Chrome and YouTube.
&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://2.bp.blogspot.com/-2F6CVeP1dRU/WRvt_D_dl-I/AAAAAAAAELo/30SDsQgW2LoVWpsHQNEuuJPE03AzUUVDQCLcB/s1600/pixel_comps_2560x1440_transparent.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="450" src="https://2.bp.blogspot.com/-2F6CVeP1dRU/WRvt_D_dl-I/AAAAAAAAELo/30SDsQgW2LoVWpsHQNEuuJPE03AzUUVDQCLcB/s400/pixel_comps_2560x1440_transparent.png" width="447" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="caption"&gt;Paying with Google in the Wish app&lt;/div&gt;
&lt;p&gt;
For users, the option to pay with Google means breezing through checkout without
needing to remember and type multiple lines of payment details. You simply
choose your preferred card, enter a security code or authenticate with your
Android device, and check out.
&lt;/p&gt;
&lt;p&gt;
Developers who adopt this API can enable an easy-to-use checkout experience for
their customers. Sign up for &lt;a
href="https://www.google.com/payments/solutions"&gt;early access&lt;/a&gt; to the new
Google Payment API.
&lt;/p&gt;
&lt;p&gt;
In the upcoming months, we'll also enable people in the U.S. to send or receive
payments via the Google Assistant. On your Google Home or Android device, it's
as simple as saying "Ok Google, send $10 to Jane for pizza." All you need is a
debit card linked to your Google account.
&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://1.bp.blogspot.com/-lljdm2MIzYA/WRvuRQX48HI/AAAAAAAAELs/gVWCota9X-ckZh224CWaFsMn8zEJEItKQCLcB/s1600/io_payments_p2p.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="540" src="https://1.bp.blogspot.com/-lljdm2MIzYA/WRvuRQX48HI/AAAAAAAAELs/gVWCota9X-ckZh224CWaFsMn8zEJEItKQCLcB/s640/io_payments_p2p.gif" width="280" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="caption"&gt;Pay friends on Google Assistant&lt;/div&gt;
&lt;p&gt;
&lt;h2&gt;Connect with customers before, during and after purchase&lt;/h2&gt;
&lt;/p&gt;
&lt;p&gt;
We're also announcing new ways for merchants to engage and reward customers
before they walk into the store and after they've left.
&lt;/p&gt;
&lt;p&gt;
The Card Linked Offers API drives customer loyalty by providing a new channel to
deliver targeted offers, and Panera Bread is one of the first merchants who will
roll out this new capability nationally. MyPanera members who save their loyalty
card to Android Pay can discover offers and learn about new menu items, surfaced
by Android Pay when they are at the store. The offer is redeemed when you use
your MyPanera account at checkout.
&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://4.bp.blogspot.com/-73Ogk52yOSY/WRvu4-epd6I/AAAAAAAAEL0/vOgMh8FtceAI2J2t9nSwRena-YahNd2YQCLcB/s1600/io_payments_panera.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="https://4.bp.blogspot.com/-73Ogk52yOSY/WRvu4-epd6I/AAAAAAAAEL0/vOgMh8FtceAI2J2t9nSwRena-YahNd2YQCLcB/s640/io_payments_panera.png" width="619" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="caption"&gt;Card Linked Offers for Panera Bread in the Android Pay app&lt;/div&gt;
&lt;p&gt;
We're also making it easier for Android Pay users to add loyalty programs. For
example, Walgreens Balance Rewards® members who manually apply their loyalty
account with a phone number and use Android Pay will receive a notification on
their phone that easily enables them to link that loyalty card to Android Pay
for future visits. This experience is powered by our smart tap technology, which
Walgreens has fully deployed across their 8,000+ U.S. stores.
&lt;/p&gt;
&lt;p&gt;
There's more—we're collaborating with &lt;a
href="https://www.clover.com/"&gt;Clover&lt;/a&gt;, a First Data company, to expand our
smart tap technology beyond national retailers to businesses of all sizes. With
the upcoming integration of smart tap in &lt;a
href="https://www.clover.com/developers"&gt;Clover's developer APIs&lt;/a&gt;, you'll be
able to build Android apps for loyalty, coupon and gift card redemption and new
features, such as order ahead and tap for pick up.
&lt;/p&gt;
&lt;p&gt;
Visit &lt;a
href="http://developers.google.com/payments"&gt;developers.google.com/payments&lt;/a&gt;
for the latest on all of our Google Payment, Loyalty and Offers APIs.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=scZxOqoqNuE:wNqqjAOdfC0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/hsDu?a=scZxOqoqNuE:wNqqjAOdfC0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/hsDu?i=scZxOqoqNuE:wNqqjAOdfC0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/hsDu/~4/scZxOqoqNuE" height="1" width="1" alt=""/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2269549880102777143" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6755709643044947179/posts/default/2269549880102777143" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/hsDu/~3/scZxOqoqNuE/beyond-tap-whats-next-for-google.html" title="What’s next for Google payment and loyalty experiences" /><author><name>Android Developers</name><uri>http://www.blogger.com/profile/08588467489110681140</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img1.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-2F6CVeP1dRU/WRvt_D_dl-I/AAAAAAAAELo/30SDsQgW2LoVWpsHQNEuuJPE03AzUUVDQCLcB/s72-c/pixel_comps_2560x1440_transparent.png" height="72" width="72" /><feedburner:origLink>http://android-developers.googleblog.com/2017/05/beyond-tap-whats-next-for-google.html</feedburner:origLink></entry></feed>
