Watch sessions from the Playtime 2016 events to learn how to succeed on Android & Google Play

Posted by Patricia Correa, Head of Developer Marketing, Google Play

We’re wrapping up our annual global Playtime series of events with a last stop in Tokyo, Japan. This year Google Play hosted events in 10 cities: London, Paris, Berlin, Hong Kong, Singapore, Gurgaon, San Francisco, Sao Paulo, Seoul and Tokyo. We met with app and game developers from around the world to discuss how to build successful businesses on Google Play, share experiences, give feedback, collaborate, and get inspired.

You can now watch some of the best Playtime sessions on our Android Developers YouTube Channel, as listed below. The playlist opens with a video that celebrates collaboration.


What’s next for Google Play

Learn how we’re helping users discover apps in the right context, creating new
ways to engage with users beyond the install, and powering innovative
experiences on emerging platforms like virtual reality, wearables, and auto.

Develop and launch apps & games

development in 2016

Android development is more powerful and efficient than ever before. Android
Studio brings you speed, smarts, and support for Android Nougat. The broad range
of cross-platform tools on Firecase can improve your app on Android and beyond.
Material Design and Vulkan continue to improve the user experience and increase

& Tango

Daydream View is a VR headset and controller by Google that lets people explore
new worlds, or play games that put them at the center of action. Learn how we’re
helping users discover apps in the right context and powering new experiences
with Daydream and Tango.

chat – Wayfair & Pokémon GO on augmented reality

Augmented reality engages and delights people everywhere. In this fireside chat,
online furniture seller Wayfair and Niantic’s Pokémon
GO share their experiences with AR and discuss how other developers can make
the most of the platform.

for billions, featuring best practices from Maliyo Games

Learn how to create apps and games for emerging markets, which are expected to
drive 80% of global smartphone growth by 2020, by recognizing the key challenges
and designing the right app experiences to overcome them.

At minute 16:41, hear tips from Hugo Obi, co-founder of Nigerian games developer

smart on Google Play

Set your app up for success using experimentation and iteration. Learn best
practices for soft launching and adapting your app for different markets and
device types.


growth solves most problems for apps, featuring best practices from

Planning and executing a great growth strategy involves a complex set of choices
and mastery of many tools. In this session we discuss topics including key
business objectives, tools, and techniques to help you solve the growth puzzle
with our partner, SoundCloud.

Also, check out some growth
best practices from Peak

sustainable user growth for startups, by Greylock

User growth isn’t just about growing the number of users you have. The key to
sustainability is creating and delivering core product value. In this session,
VC Greylock discusses how to identify your core action to focus on and shows you
how to use these insights to optimize your app for long term growth.

engagement is the new black, featuring best practices from Lifesum

As the app marketplace becomes more competitive, developer success depends on
retaining users in apps they love. Find out which Google tools and features can
help you analyze your users’ behaviors, improve engagement and retention in your
app and hear insights from others developers including Lifesum.

lifetime value in the apps world

Deepdive into lifetime value models and predictive analytics in the apps ecosystem.
Tactics to get the most out of identified segments and how to upgrade their
behaviors to minimize churn.


Learn about Google’s efforts to enable users, around the world, to seamlessly
and safely pay for content. This session provides updates on Google Play billing
and recent enhancements to our subscriptions platform.


game fits all, featuring best practices from Space Ape Games

Customize your game’s experience for different users by targeting them with lifetime value
models and predictive analytics. Hear how these concepts are applied by
Space Ape Games to improve retention and monetization of their titles.

your game and growing your user base, featuring best practices from Seriously

Learn how to use Google’s latest tools, like Firebase, for benchmarking,
acquiring users and measuring your activities. Also, hear game
developer Seriously share their latest insights and strategies on YouTube
influencer campaigns.

long-term retention, loyalty and value with engaging LiveOps events, featuring
best practices from Kabam
Creative Mobile

Learn how successful developers keep their games fresh and engaging with Live
Operations. In this talk, the LiveOps expert on Marvel: Contest of Champions
discusses tips about the art and science of running an engaging LiveOps event.

Also check out the tips and best
practices to run successful LiveOps from games developer Creative Mobile

– Play fair: Maintaining a level playing field in your game, featuring Space Ape
Games and Kongregate

Ensuring that your game is fair is critical to success. Find out how game
developers are achieving this and some ways Google Play can help.


you need to build for families

Family-based households with children have higher tablet and smartphone
ownership rates than the general population. These families are more likely to
make purchases on their mobile devices and play games. Learn about how parents
choose what to download and buy, and how you can prepare for maximum conversion.

keys to growth: user acquisition & app engagement, by Cartoon Network

Hear how Cartoon Network leverages their network to cross-promote new titles,
acquire new users and keep them engaged through immersive experiences.

global: Getting ready for the emerging markets revolution, by

Papumba has a clear vision to grow a global business. Hear how they work with
experts to adapt their games to local markets and leverage Google Play’s
developer tools to find success around the world.

for a post install world

You’ve spent time and resources getting users to download your apps, but what
happens after the install? Learn how to minimize churn and keep families engaged
with your content long term.

best practices on freemium, by 01 Digital

Learn how 01 Digital uses In-App-Purchases (IAP) to effectively monetize their
apps while maintaining a safe environment for families.

a subscription business that appeals to parents, by PlayKids

PlayKids has been at the forefront of the subscription business model since
their inception. See how they best serve their subscribers by refreshing their
content, expanding their offerings and investing in new verticals.

How useful did you find this blogpost?


O'Reilly Web Development Blog: On becoming a web artisan

The O’Reilly Web Programming blog recently posted an interview with Matt Stauffer, the author of their recently published Laravel: Up & Running book. In the interview Matt talks about becoming a "web artisan" and offers some advice you could apply to your own development work.

I recently asked Matt Stauffer, Partner and Technical Director at Tighten Co. to discuss his work with the Laravel community, including what makes the PHP framework great for rapid application development and how it interoperates with new and emerging frontend tooling. Matt is also the author of Laravel: Up and Running, which O’Reilly published in November 2016.

Matt answers questions about the Laravel framework (why it’s for "web artisans"), using it for prototyping, upcoming features he’s excited about and advice he has for those just starting out in web development. Check out the full post for the answers to these and other questions.

Source: Upgrading Your Linux Server to PHP 7.0

The site has a new tutorial posted showing you how to upgrade your Linux server to run PHP 7.0, the latest major release of the PHP language.

PHP 7 was released last December. Once you’ve tested your code locally to run on it, it’s time to upgrade your production server. Generally, I found that most of my sites run well on it.

However, I suspect that not many sites have upgraded yet. It’s often safer and easier to stay on older releases. […] But PHP 7 has now been out for nearly a year.

In today’s episode, I’ll walk you through my recommended approach to upgrading to PHP 7 on Ubuntu 14.x and resolving problems with PHPMyAdmin, which a lot of early upgraders ran into.

He starts by helping you identify any customizations that you might have related to PHP 5, specifically related to configuration options. He then provides the commands to remove PHP 5 packages from the system and add in the "ondrej/php" PPA for apt-get as the source for the PHP 7 packages. After a quick apt-get cleanup, he includes the commands to install the "php7" packages, enable a few extra modules and getting phpMyAdmin back up and in working order.


Laravel News: Route improvements are coming to Laravel 5.4

The Laravel News site has a quick new post about some routing improvements that are coming in the next larger release of the framework , Laravel v5.4:

As Laravel 5.4 development continues, two new improvements are coming to your routes, better route caching for large applications and fluently registering routes.

The route caching updates will help performance with larger applications, reducing the parsing time required to locate and push a request to the right location. The "fluent" route improvements basically allow for the definition of some things, like middleware or route names, as a part of the route definition rather than after the fact. Examples of this are included in the post.


SitePoint PHP Blog: The Delicious Evils of PHP

On the SitePoint PHP blog Christopher Pitt is back with another interesting article, this time talking about two "delicious evils of PHP" – the eval and exec functionality.

I want to look at two PHP functions: eval and exec. They’re so often thrown under the sensible-developers-never-use-these bus that I sometimes wonder how many awesome applications we miss out on.

Like every other function in the standard library, these have their uses. They can be abused. Their danger lies in the amount of flexibility and power they offer even the most novice of developers. Let me show you some of the ways I’ve seen these used, and then we can talk about safety precautions and moderation.

He then talks about some of the "interesting" things you can do with these two pieces of functionality including:

  • Dynamic Class Creation
  • [Creating] Domain Specific Languages
  • Parallelism (with exec)

He ends the post with some advice how to avoid issues with the topics he’s mentioned and how to "stay safe" while still using these two dangerous pieces of functionality.


Community News: Recent posts from PHP Quickfix (12.07.2016)

Recent posts from the PHP Quickfix site:


Saving Data: Reducing the size of App Updates by 65%

Posted by Andrew Hayden, Software Engineer on Google Play

Android users are downloading tens of billions of apps and games on Google Play.
We’re also seeing developers update their apps frequently in order to provide
users with great content, improve security, and enhance the overall user
experience. It takes a lot of data to download these updates and we know users
care about how much data their devices are using. Earlier this year, we
announced that we started using the
bsdiff algorithm
Colin Percival)
. Using bsdiff, we were able to reduce the size of app
updates on average by 47% compared to the full APK size.

Today, we’re excited to share a new approach that goes further — File-by-File
App Updates using File-by-File patching are, on average,
65% smaller than the full app, and in some cases more than 90%

The savings, compared to our previous approach, add up to 6 petabytes of user
data saved per day!

In order to get the new version of the app, Google Play sends your device a
patch that describes the differences between the old and new versions
of the app.

Imagine you are an author of a book about to be published, and wish to change a
single sentence – it’s much easier to tell the editor which sentence to change
and what to change, rather than send an entirely new book. In the same way,
patches are much smaller and much faster to download than the entire APK.

Techniques used in File-by-File

Android apps are packaged as APKs, which are ZIP files with special conventions.
Most of the content within the ZIP files (and APKs) is compressed using a
technology called Deflate.
Deflate is really good at compressing data but it has a drawback: it makes
identifying changes in the original (uncompressed) content really hard. Even a
tiny change to the original content (like changing one word in a book) can make
the compressed output of deflate look completely different. Describing
the differences between the original content is easy, but describing
the differences between the compressed content is so hard that it leads
to inefficient patches.

Watch how much the compressed text on the right side changes from a one-letter
change in the uncompressed text on the left:

File-by-File therefore is based on detecting changes in the uncompressed data.
To generate a patch, we first decompress both old and new files before computing
the delta (we still use bsdiff here). Then to apply the patch, we decompress the
old file, apply the delta to the uncompressed content and then recompress the
new file. In doing so, we need to make sure that the APK on your device is a
perfect match, byte for byte, to the one on the Play Store (see APK Signature
Schema v2
for why).

When recompressing the new file, we hit two complications. First, Deflate has a
number of settings that affect output; and we don’t know which settings were
used in the first place. Second, many versions of deflate exist and we need to
know whether the version on your device is suitable.

Fortunately, after analysis of the apps on the Play Store, we’ve discovered that
recent and compatible versions of deflate based on zlib (the most popular
deflate library) account for almost all deflated content in the Play Store. In
addition, the default settings (level=6) and maximum compression settings
(level=9) are the only settings we encountered in practice.

Knowing this, we can detect and reproduce the original deflate settings. This
makes it possible to uncompress the data, apply a patch, and then recompress the
data back to exactly the same bytes as originally uploaded.

However, there is one trade off; extra processing power is needed on the device.
On modern devices (e.g. from 2015), recompression can take a little over a
second per megabyte and on older or less powerful devices it can be longer.
Analysis so far shows that, on average, if the patch size is halved then the
time spent applying the patch (which for File-by-File includes recompression) is

For now, we are limiting the use of this new patching technology to auto-updates
only, i.e. the updates that take place in the background, usually at night when
your phone is plugged into power and you’re not likely to be using it. This
ensures that users won’t have to wait any longer than usual for an update to
finish when manually updating an app.

How effective is File-by-File

Here are examples of app updates already using File-by-File Patching:

Original Size
Previous (BSDiff) Patch Size
(% vs original)
File-by-File Patch Size (% vs original)
71.1 MB
13.4 MB (-81%)
8.0 MB (-89%)
32.7 MB
17.5 MB (-46%)
9.6 MB (-71%)
17.8 MB
7.6 MB (-57%)
7.3 MB (-59%)
18.9 MB
17.2 MB (-9%)
13.1 MB (-31%)
52.4 MB
19.1 MB (-64%)
8.4 MB (-84%)
16.2 MB
7.7 MB (-52%)
1.2 MB (-92%)

Disclaimer: if you see different patch sizes when you press “update”
manually, that is because we are not currently using File-by-file for
interactive updates, only those done in the background.

Saving data and making our
users (& developers!) happy

These changes are designed to ensure our community of over a billion Android
users use as little data as possible for regular app updates. The best thing is
that as a developer you don’t need to do anything. You get these reductions to
your update size for free!

If you’d like to know more about File-by-File patching, including the technical
details, head over to the Archive Patcher GitHub
where you can find information, including the source code. Yes,
File-by-File patching is completely open-source!

As a developer if you’re interested in reducing your APK size still further,
here are some general
tips on reducing APK size


Master Zend Framework: How To Automate Projects Using Composer Scripts

The Master Zend Framework site has posted a new tutorial showing you how to automate your projects with Composer, making use of the "scripts" section to add commands that can be automatically executed via a "composer" command line call.

Here, in the second part of the series, we’ll look at the scripts section of composer.json. If you’ve never heard of this section, it provides a way to automate tasks in your project.

Perhaps you think that this is unnecessary, as there is already such a wealth of tools available; including Make, Ant, Phing, and so on. But I see a place for having automation in Composer — though at first I didn’t.

Why? Because you can bring everything that much closer together. Because you can keep everything in a very tidy, organized, and well-structured way.

He starts with a brief overview of how the "scripts" section of the composer.json configuration works. He also shows examples of setting up scripts for code sniffing, running tests and generating test coverage reports. He also shows how to run these commands via the Composer command line and an the use of event handlers (like "post-install-cmd") to execute things at a certain point in the install/update process. He finishes off the post with an example from Zend Expressive calling an "Automation" to clear out the contents of the caches.


DaedTech Blog: Avoid these Things When Logging from Your Application

On the DaedTech blog Erik Dietrich has written up a list of a few things he suggests avoiding when using logging functionality in your application. The suggestions range from the actual contents of the message out to some logging best practices.

It seems almost strange to talk about avoiding things while logging. After all, logging is your last line of defense or your salvation in many cases. […] Well, it turns out that, while logging may be a highly inclusive activity in terms of what should be included, there are ways to create problems. You want to be liberal in terms of what you log, but judicious and wise in terms of how you log it. You don’t want to indulge in a feckless free-for-all when it comes to the calls you make to your application’s logger.

So what are these problems, and how to avoid them? Let’s take a look at some things that can come back to bite you.

He points out the following (common) bad practices he has seen during his time developing:

  • Forgetting Context
  • Cryptic Codes
  • Spamming the Log File
  • Unsafe Logging Calls
  • Mixing Application Logic with Logging

He ends the post with a suggestion of "sensible logging" – capturing as much meaningful information as possible while not overdoing it. Logs can be a powerful ally when hunting down an issue or trying to provide documentation of a security issue. Log wisely, log on purpose.


Stovepipe Systems: What are Bundles in Symfony?

On the Stovepipe Systems Dev blog today Iltar van der Berg has shared a post about bundles, one of the key concepts in the Symfony ecosystem – what they are and some of the common features they all share.

People often refer to bundles as modules or re-usable code for Symfony applications. When a developer has experience with Symfony1 or another framework with the module concept, it might seem logical that this is what a bundle represents in Symfony.

So what is a bundle? When do you need one and what can it do? What’s the difference between an AppBundle and a vendor Bundle?

He starts with the release of Symfony 2, including bundle support, and how common practices created hard dependencies between bundles. This created issues in the applications and reusability of the bundles (their whole purpose) so a solution was created: the AppBundle. This bundle shifted the emphasis away from the file structure of the bundles and more towards the domain they occupied, handling some "magic" references automatically for you.

As mentioned, the bundle provides an extension point. Other bundles for example, can hook in on your bundle because it contains some logic to expose information such as the directory of the bundle.

[…] The main purpose of a bundle however, is to provide an extension point for the Dependency Injection Container. When talking about this extension point, it revolves around adding, changing or removing service definitions.