Author Archives: Android Developers

Performance and Velocity: How Duolingo Adopted MVVM on Android

Posted by Kateryna Semenova, Android Developer Relations Engineer

illustration of hand holding up a chart with the Duolingo bird sitting on top

Executive Summary

Duolingo’s app began to experience growing pains due to scalability issues in their Android software architecture. They were able to solve these performance problems and regain developer productivity, by refactoring to a Model-View-ViewModel architecture and using Android Jetpack’s Dagger and Hilt for dependency injection. To learn more about how this impacted their business, read the accompanying article here.

Introduction

Duolingo is the world’s most popular language learning app, with over ten million daily learners, because they’ve managed to make something people found daunting feel easy and fun. This continued success relies on a constant stream of innovations and updates — and a smooth-running app that can deliver all of them. To Duolingo, a single unresponsive app in a device anywhere in the world could mean a learner potentially discouraged. This commits them to app excellence, particularly on the Android devices used by sixty percent of their learners, including their CEO, who keeps track of the app from an entry-level phone. And so, when Duolingo's Android development team registered an increase in “App not Responding” errors, dropped frames — and even received a hand-written complaint — they took action immediately.

Their situation wasn’t that uncommon. Apps that lack scalable architecture and clear best practices often perform well at the beginning but show signs of technical debt as they grow. Duolingo’s Android codebase was designed to allow them to add and release new features rapidly, but the lack of an agreed-upon architecture was manifesting in increasingly frequent performance regressions. It was starting to suffer from unreliable frame rates, visually inconsistent or broken interactions, and a growing assortment of new bugs. These regressions not only inconvenienced learners but also cost the team substantial development effort to diagnose and repair. Duolingo’s Android development team realized that if they wanted to keep shipping new features while providing the target level of user experience, a new approach to their codebase was needed.

Discovery

First, they had to get to the bottom of what exactly was going on. A deep dive into the numbers uncovered that, as they added new functionality, the app’s rendering performance was regressing 5-10% every month. In fact, one particularly unwieldy release had increased crashes by 10%, slowed frame renders by 25%, and saw lessons starting 70% slower on entry-level devices.

Further analysis of their code led them to the conclusion that most of the app’s issues could be traced back to a single bottleneck: a global state object called DuoState, which was responsible for maintaining state across different features of the app. A number of popular features (like experience points and daily streak tracking) were using it to access vital information. Centralizing their data in this way had once enabled the team to iterate rapidly. They simply added properties to DuoState whenever a new feature needed to share information across the app. But now the unoptimized and frequent access to the object was causing increasing performance regressions.

DuoState was so tightly coupled to the entire codebase that even small changes could impact the rest of the app. The team feared that a minor new feature could have the unforeseen side effect of triggering many internal updates to the app, causing the entire release to be too slow for many devices. These performance regressions became more frequent as the app grew, and the team onboarded new engineers to keep up with the accelerating product roadmap. In 2020, as they added more developers, they were starting to see significant regressions cropping up as often as every 90 days. Upon closer inspection, the likelihood of a regression in a given release was proportional to the number of changes it implemented. At this rate, these regressions would completely derail the product roadmap within a few years.

This outdated architecture had become a bottleneck for both the performance of the app and the velocity of the team. After much internal debate, they stopped development of new features, including some closely tied to their bottom line. For two full months, Duolingo’s development team went all-in on refactoring their Android app in an effort they called the “Android Reboot”.

The Android Reboot

One of the team’s first key takeaways was that their code lacked clear boundaries. The DuoState object was readily available at any point in the code, inviting developers to access it frequently in inefficient ways. They needed to create a greater separation of concerns within the codebase. They decided to tease apart each feature into its own, clearly-defined module, using the Model-View-ViewModel architectural pattern. MVVM allowed them to remove calls to the monolithic DuoState object, letting many modules work in separate threads.

Diagram showing before and after implementing the Model-View-ViewModel architectural pattern

The team’s familiarity with MVVM, and Google’s support for it, made it an obvious choice. It allowed them to clearly document what logic should go into what files (including views, view models and repositories). This helped make their feature architecture more consistent. With a clear path to follow, the team quickly began refactoring their monolithic code into sets of classes with clear boundaries and responsibilities.

Along with MVVM, the team used Dagger and Hilt (also included in Android Jetpack) to implement repository patterns to replace DuoState. Dagger generates clear readable code that provides verbose error logging designed to help developers understand exactly what their code is doing, eliminating dead stack traces to reflected properties; and Hilt reduces the amount of boilerplate code needed to write for this.

This new architecture allowed the team to split DuoState into smaller objects. This immediately reduced unnecessary coupling between domains. For example, the code responsible for tracking a user’s progress could now access their experience points but not the number of times they’ve logged in during a month. These new architecture guidelines meant that while no single thing was too difficult to change, it took coordination and planning to change it across the app. Implementing the new architecture across the code base drove significant performance gains in aggregate.

MVVM architecture facilitates a separation of concerns between the domain data, the interface the learners see, and the logic for how these two realms interact. It gave Duolingo’s developers a more deliberate way to control how the app responds to internal state updates. They could now develop more complex user experiences without the risk of triggering regressions, or affecting the underlying business rules.

Developer Productivity

In the past, inconsistent application of development patterns made different parts of the codebase harder to understand and maintain. Without consensus, each developer implemented code as they saw fit.

MVVM, Dagger, and Hilt, provided the team with a more detailed understanding of how new features should be implemented. Following these best practices made the code easier and more predictable. Developers could now assist in debugging features that they hadn’t originally worked on. And new developers could be onboarded more efficiently; as long as they understood the architecture, they could contribute meaningfully right away. This new clarity significantly boosted the team’s development velocity.

Ensuring Quality

Crucially, the new architecture also revealed that certain animation features in the app were underperforming on entry-level devices. Accordingly, the other core focus of the Android Reboot was the reduction of jank, dropped frames, and "App Not Responding” (ANR) errors. The team used repository patterns to help streamline the sharing of data between threads. These patterns ensured that they could more efficiently use device resources with multiple threaded modules. Moving work off the main thread improved responsiveness, overall frame rate, and led to smoother animations on entry-level devices. Performance on flagship devices improved as well.

A Better Overall Android Experience

In the six months working with the new architecture, Duolingo’s Android team has continued to ship new features without recording significant performance regressions. The days where they had to halt feature production to hunt and fix bugs are safely behind them.

The app’s daily ANR rate dropped 41%. The percentage of time that the app’s frame rate fell below target decreased by 28%. And importantly, users experienced a 40% increase in speed when scrolling through lessons, the leaderboard, and stories in the app.

The reboot allowed Duolingo to consistently provide their trademark fun, effective, and delightful language learning experience on a much wider range of Android devices.

Conclusion

Duolingo’s dedication to their mission made them the world's top app in the language learning space. Their commitment to app excellence — creating cutting edge educational experiences without compromising accessibility — is what kept them there.

If you’re interested in getting your team on board for your own Android Reboot, check out our condensed case study for product owners and executives linked here.

Making Ratings and Reviews better for users and developers

Posted by Tom Grinsted, Scott Lin, and Tat Yang Koh, Product Managers at Google Play


Illustration of person holding phone looking at 4 star rating

Ratings and reviews are important. They provide valuable quantitative and qualitative feedback on your users’ reported experience of your app or game, and the broader service that you offer. That’s why they’re one of the signals people use when deciding what to download on Google Play.

We’ve heard from both Play Store users and developers that ratings and reviews could be more helpful. This is especially true when ratings from one area unfairly impact another — like when a bug that only impacted a single country negatively affects the app’s rating everywhere; or when positive improvements in a tablet experience are overlooked because of the number of users on phones. So we’re starting a multi-quarter program of improvements to make ratings more personalized and indicative of the experience each individual user can expect, and to make them easier to navigate and use for developers:

  • From November 2021, users on phones will start to see ratings specific to their registered country
  • Early in 2022 users on other form-factors such as tablets, Chromebooks, and wearables will start to see ratings specific to the device that they’re on

We understand that many developers closely monitor the ratings that their potential users see, so we’re making sure you have plenty of notice about these upcoming changes. We’ve also made enhancements to Play Console to help you understand your ratings and reviews - especially across form-factors.

Changes to Google Play Console

Device type insights

Expanding your support for different device types is one of the most important and impactful changes you can make to your user interfaces. Adding tablet-optimized layouts or better mouse and keyboard support for Chrome OS can result in a step-change in the quality of your users’ experience, which in turn influences their ratings and reviews.

New Device type ratings insights are available in Play Console 
ratings overview and breakdown pages

New Device type ratings insights are available in Play Console ratings overview and breakdown pages

To make it easier to spot opportunities across various device types and track the impact of enhanced experiences, we’ve added new Device Type dimensions to the ratings page. We’ve also added a Device Type filter to your reviews so you can easily see how your tablet users are rating you, or what your users on Chrome OS say in their reviews.

More flexible date and period selections

Many of you have told us that you want to access more granular data than our selectors allowed. So, we’ve broken down your segmentation options and made them easier to use. You can now independently select the time period you want to plot (from the last 28 days through to your app’s complete lifetime), and how you want your ratings data to be aggregated (daily, weekly, or every 28 days). This allows you to access more granular data over longer periods of time.

Select any time range and aggregation period independently 
to find the ratings data you want

Select any time range and aggregation period independently to find the ratings data you want

Download data easily

We’ve also enabled CSV downloads of your average data and rating distributions. Combined with the new data selection options, you can easily query and download much more of your data and perform offline analysis. For example, you could download your entire history of daily ratings distributions and correlate it in a spreadsheet with customer service contacts.

Access and download all your data including ratings breakdowns 
directly from the overview page

Access and download all your data including ratings breakdowns directly from the overview page

All of these changes are live in Play Console now. Visit Ratings analysis and Reviews to try them out.*

Upcoming changes to ratings in Google Play

Ratings help people decide which apps to download and they are taken into consideration for featuring and placement on Play Store. But because the app experience can vary depending on the user’s region and device type, aggregate ratings don’t always tell the whole story. That’s why, starting in November 2021, we’re going to change the ratings that individual users see based on where they’re registered, and later in the year what device they’re using.

From November, this means that users on phones will see specific ratings for the country or region they’re based in. So a user in Japan will see app ratings generated from those submitted by other Japanese users.

Early next year we’ll further update ratings to reflect the device type users are browsing Play on, whether it’s: tablets and foldables, Chrome OS, Wear, or Auto. This will give users a better impression of the experience that they can expect for the device they’re using. We recommend you take a look at your form-factor ratings today - especially for tablets where growth is very strong - to see if you should invest in optimising your users’ experiences.

We understand that as a developer you will want to make sure you understand and get ahead of any major shifts in your user-visible ratings. So at least 10 weeks before any change in Play Store, we’ll automatically analyze the change your app can expect to see and reach out to any developer that will see a change of more that 0.2 stars on any device type in a key market (one with >5% of your store listing visitors). This will give you time to plan if you want to make key changes to your app.

These changes in Google Play will start to roll out from November with country or region-specific ratings. Look out for messages about your ratings in your Play Console Inbox towards the end of this year, and don’t forget that you can get ahead by checking your ratings by country and device-type today.

*Please note you need a Play Console account to access these links.

How useful did you find this blog post?

Working Towards Android App Excellence

Posted by Jacob Lehrbaum Director of Developer Relations, Android

illustration of freckled hand over mobile phone with graphs

Great app experiences are great for business. In fact, nearly three-quarters of Android app users who leave a 5 star review on Google Play mention the quality of their experience with the app1; its speed, design, and usability. At Google, we want to help all developers achieve app excellence, and in turn help you drive user acquisition, retention, and monetization.

So what is “app excellence”? This may sound aspirational, but it is within reach for many apps. It starts with a laser focus on the user, and more specifically, with intuitive user experiences that get people to the main functionality of your app as quickly as possible — but that is just the beginning. Excellent apps are consistent across all of their screens and experiences. They perform well, no matter the device used. App excellence is achievable when all of the stakeholders who influence your app are invested in the experience of using your app.

One of the blockers that gets in the way of app excellence is shared or unclear accountability. Some of the primary measures of app quality, such as crashes and load times, are often seen as the responsibility of one group in the company, such as the engineering team. However, when we talk to best-in-class organizations2 about how they achieve app quality, it is clear that taking a cross-functional approach is key, with engineering, design, product, and business teams working toward a common goal.

So what are some internal best practices behind app excellence?

Make app quality a cross-organizational focus — not just an engineering concern

It’s a way easier conversation for me at the business end because I can say “these competitors’ apps are faster than ours; we need to reduce our load time down from 5 seconds to 4 seconds”.
Software engineer, x-platform app

App excellence helps drive business performance. New features are great, but if they slow down app start-up times or take up too much device space, people will eventually use your app less often or even delete it. Engineers who have built a company-wide focus on quality have often done so by quantifying the impact of quality issues on business performance, through:

  • Case studies showing the impact of responsiveness, APK size, start-up time, and memory usage on business KPIs. Here you can find practical case studies showcasing how developers such as Headspace and Duolingo achieved app excellence.
  • Benchmarking against competitor apps. Check out peer benchmarks and other metrics on the Google Play Console.

Organize teams around features and/or app user journey stages

Companies that organize teams around features — or stages in the user journey — are more likely to deliver consistent experiences across each operating system they support, bring new apps or features to market faster, and deliver a better app experience for all their customers. These teams are often cross-functional groups that span engineering, marketing, ux, and product — and are responsible for the success of a feature or user journey stage3 across all devices and platforms. In addition to better experiences and feature parity, this structure enables alignment of goals across functional areas while reducing silos, and it also helps teams hyper-focus on addressing specific objectives.

Feature organized team graph

Squads focused on business objectives heighten focus on the user.

Use the same devices your customers use

If a majority of your users are on a specific type of device, you can build empathy for their experience if you use the same phone, tablet or smart watch as your primary device. This is especially relevant for senior leadership in your organization who make decisions that impact the day-to-day experience of millions of users. For example, Duolingo has built this into their company DNA. Every Duolingo employee — including their CEO — either uses exclusively or has access to an entry level Android device to reflect a significant portion of their user base.

A user-centric approach to quality and app excellence is essential to business growth. If you are interested in learning how to achieve app excellence, read our case studies with practical tips, and sign up to attend our App Excellence Summit by visiting the Android app excellence webpage.

In subsequent blog posts, we will dig deep into two drivers of excellent app experiences: app performance and how it is linked to user behavior, and creating seamless user experiences across devices. Sign up to the Android developer newsletter here to be notified of the next installment, and get news and insights from the Android team.

Notes


  1. Internal Google Play data, 2021. 

  2. Google App Quality Research, 2021 

  3. The series of steps each user takes as they interact with your app is referred to as the “user journey.” Examples of user journey stages include installs, onboarding, engagement, and retention 

Android 12 Beta 4 and Platform Stability

Posted by Dave Burke, VP of Engineering

Android 12 logo

Today we’re bringing you the fourth Beta of Android 12, and moving into the final phase of the release. We’ve built Android 12 with a new UI that adapts to you, performance improvements, privacy and security enhancements, and more. We’re now shifting our focus to polish, performance, and stability. Thanks for all the feedback you’ve shared to help us refine the release and get us to this point.

For developers, Beta 4 takes us to Platform Stability, which means that Android 12’s APIs and all app-facing behaviors are finalized. For apps, the focus is now on compatibility and quality. It’s time to start preparing your compatible app updates in time for the official release later in the year.

You can try Beta 4 today on your Pixel device by enrolling here for over-the-air updates, and if you previously enrolled, you’ll automatically get today’s update. You can also get Android 12 Beta 4 on select devices from several of our partners like ASUS, Oneplus, Oppo, Realme, Sharp, and ZTE - learn more at android.com/beta. Visit the Android 12 developer site for details on how to get started.

Platform Stability

Android 12 Beta 4 has reached Platform Stability, a milestone that means all app-facing surfaces and behaviors are now final in Android 12. This includes not only the official SDK and NDK APIs, but also final app-facing system behaviors and restrictions on non-SDK interfaces that may affect apps. So from Beta 4, you can confidently release your compatibility updates knowing that the platform won’t change. More on the timeline is here.

Android 12 timeline

We’re asking all app and game developers to start your final compatibility testing now and prepare to publish your compatibility updates as soon as possible ahead of the final release.

For all SDK, library, tools, and game engine developers, it’s even more important to start testing now and release your compatible updates as soon as possible -- your downstream app and game developers may be blocked until they receive your updates. When you’ve released a compatible update, be vocal and let developers know!

App compatibility

For Android, App compatibility means that your app runs as intended on a new version of the platform. You can check your app’s compatibility just by installing the production version of your app on a device or emulator and testing it - if the app looks good and runs properly, then you’re done, it’s compatible!

Testing your app for compatibility is important because with each release, we make integral changes to the platform that improve privacy and security and the overall user experience across the OS. These can affect your apps, so you should take a look at the behavior changes and test against them, then publish a compatible update to your users. It’s a basic but critical level of quality that ensures users have a good app experience.

As people update their devices to Android 12, they want to explore the latest version of Android, and experience it with their favorite apps. If those apps don’t work properly, it’s a major issue, ultimately resulting in uninstalls.

So while there are a ton of new APIs and capabilities to explore, start by testing your current app and releasing a compatible update first.

Get your apps ready

To test your app for compatibility with Android 12, just install your production app from Google Play or other source onto a device running Android 12 Beta 4. Work through all of the app’s flows and watch for functional or UI issues. Review the Android 12 behavior changes for all apps to focus your testing. Here are some changes to watch for:

  • Privacy dashboard - A new dashboard in Settings lets users see which apps are accessing which type of data and when. Users can adjust permissions if needed, and they can request details from your app on the reason for access. More here.
  • Microphone & camera indicators - Android 12 shows an indicator in the status bar when an app is using the camera or microphone. More here.
  • Microphone & camera toggles - New toggles in Quick Settings let users instantly disable microphone and camera access for all apps. More here.
  • Clipboard read notification - A toast alerts users when an app reads data from the clipboard unexpectedly. More here.
  • Stretch overscroll - A new “stretch” overscroll effect replaces the previous “glow” overscroll effect systemwide. More here.
  • App splash screens - Android 12 launches apps with a new splash screen animation. More here.
  • Keygen changes - Several deprecated BouncyCastle cryptographic algorithms are removed in favor of Conscrypt versions. If your app uses a 512-bit key with AES, you’ll need to use one of the standard sizes supported by Conscrypt. More here.

Remember to test the libraries and SDKs in your app for compatibility. If you find any SDK issues, try updating to the latest version of the SDK or reaching out to the developer for help.

Once you’ve published the compatible version of your current app, you can start the process to update your app's targetSdkVersion. Review the behavior changes for Android 12 apps and use the compatibility framework to help you detect issues quickly. Here are some of the changes to test for (these apply when your app’s targetSdkVersion is 31 or higher):

  • Foreground service launch restriction - Apps can no longer launch foreground services from the background. For high-priority background tasks, use expedited jobs in WorkManager instead. More here.
  • Approximate location - When apps request permission for precise location, users can now choose to grant either precise or approximate location. More here.
  • New permission for exact alarms - Apps that want to use exact alarms must request a new normal permission, SCHEDULE_EXACT_ALARM. More here.
  • Modern SameSite cookie behaviors in WebView - If your app uses WebView, test your app with the new SameSite cookie behaviors. More here.
  • Safer exporting of components - your app must explicitly specify an android:exported attribute for any app components that use intent filters. More here.
  • Custom notifications - The system applies a standard notification template to fully custom notifications, with affordances for app name, app icon, and expand/collapse data. More here.
  • Notification trampolines restriction - Notifications can no longer launch your app using a “trampoline” - an intermediary broadcast receiver or service that starts the target Activity. More here.

During testing, also watch for uses of restricted non-SDK interfaces in your app and move those to public SDK equivalents instead. You can read about the restricted APIs here.

Get started with Android 12!

Today’s Beta release has everything you need to try the Android 12 features, test your apps, and give us feedback. Just enroll any supported Pixel device to get the update over-the-air. To get started developing, set up the Android 12 SDK.

You can also get Android 12 Beta 4 on devices from some of our partners like ASUS, OnePlus, Oppo, Realme, Sharp, and ZTE. Visit android.com/beta to see the full list of partners participating in Android 12 Beta. For even broader testing, you can try Android 12 Beta 4 on Android GSI images, and if you don’t have a device, you can test on the Android Emulator.

Beta 4 is also available for Android TV, so you can check out the latest TV features and test your apps on the all-new Google TV experience. Try it out with the ADT-3 developer kit. More here.

Watch for one more Beta coming in the weeks ahead as a release candidate for your final testing.

For complete details on Android 12 Beta, visit the Android 12 developer site.

Sharing Tiles with your smartwatch users:

Posted by Jeremy Walker, Engineer

Tiles provide quick access to information and actions with a simple swipe from the watch face home screen. This gives smartwatch users more control over what information and actions they want to see, and it’s no surprise that Tiles have become one of the most helpful and useful features for smartwatches that run on Wear OS.

Today we’re announcing Tiles can be shared with your smartwatch users. You can start creating your custom Tile by downloading the latest Alpha release of the Jetpack Tiles API. Once you upload your experience to Google Play, your users will be able to download your Tile and start using it. Let your users know they can try out the new experience. You can also upload a screenshot of your Tile to your Play Store preview assets within Google Play Console.

Apps such as Calm and Sleep Cycle have already started building custom Tiles.


Tiles blog









"Using the new Tiles API, we were able to easily expose our Wear app features to be just a swipe away from your watch face." -Samo Kralj, Android Staff Software Engineer at Calm.

Tiles blog











The API was easy to understand and the documentation was quite clear, enabling us to have our first tile running with real data within hours. It feels like a very modern API that is easy to get started with.” -Viktor Åkerskog, Technical Lead at Sleep Cycle












We've appreciated all your feedback on the alpha library, and have included many of the requests and performance improvements into the APIs. You can add any additional feedback here to help us prioritize API improvements for future releases.

If you haven't had a chance to try out the API, check out the guide, or if you prefer a walkthrough, explore the Tiles codelab.

Happy coding!

Meet some of the best indie game devs

Posted by Patricia Correa, Director, Global Developer Marketing

During the month of June we received thousands of submissions for two of our annual developer programs - the Indie Games Accelerator and the Indie Games Festival. These programs support the growth of small games studios on Google Play.

Every year we’re impressed with the art and creativity of the entries. This year was no exception. Many thanks to everyone who submitted their game.

Meet the Festival finalists

Today, we’re announcing the finalists of the Festivals in Europe, Japan, and South Koreadrumroll, please.

Indie Games

Europe

Beat Workers by NaturalPad Games, France

Bird Alone by George Batchelor, United Kingdom

Cats in Time by Pine Studio, Croatia

Figment by Bedtime Digital Games, Denmark

Froglike: The Frog Roguelike by Jimjum Studios, Israel

Garson by Anastasiya Shabunia, Belarus

Gumslinger by Itatake, Sweden

Lyxo by Emoak, Austria

Psychofunk by Tommy Søreide Kjær, Norway

Railways by Infinity Games, Portugal

Sticky Terms by kamibox, Germany

Sweet Sins Superstars by Platonic Games, Spain

Tiny Robots Recharged by Big Loop Studios, Bulgaria

Tofu Drifter by Roach Games, Russia

Towers by JOX Development, Ukraine

Unholy Adventure by Dali Games, Poland

Warplane Inc by Nuclear Games, Russia

Watch Me Stream My Mental Breakdown by Ultaan Games, Poland

Woof: The Good Boy Story by CHPV.GAMES, Russia

Zen Symmetry by 8tbl, Russia

Sign up to attend the European finals.

Indie Games

Japan

3D Chess: NOCCA NOCCA by Curiouspark, Inc.

5colors in Nate by NekodoraSoft

Amabie san by HARAPECORPORATION Inc.

Archer Battle Online by Takuya Fujieda

Cthulhu DreamStairs by Tenyu

ElectriarCode by ELECTRIAR LABO

Escape from the Closed Circle by Hanachiru

Heart of Sengoku by ZEN APP

Leaving Two Tiles Dojo by ScreenPocket

Living in the Ending World by illuCalab.

MAKOTO WAKAIDO’s Case Files “Executioner’s Wedge” by HafHaf-Oden(Sukashiuma-LAB)

Mini Mini Farm by CoffeeBreak

MonohakobiPro by CGO

Mousebusters by Odencat

Numpurr Card Wars by Nukenin

Parasite Days by Zxima

Quantum Transport by ruccho

Super Glitter Rush by tiny cactus studio

Survivor's guilt by aso

Wolf Chess by Baton

Sign up to attend the Japanese finals.

Indie Games

South Korea

Angel Saga by Alchemist Games Inc.

Animal Card Royale by Banjihagames

Animal Doll Shop by Funnyeve

BattleLive: Zombie&Human by PLOTRICK

Box It Up! Inc. by team TAPE

CATS & SOUP by HIDEA

Cats are Cute: Pop Time by kkiruk studio

Detective Mio by 1N1

Dicast: Rules of Chaos by BSS COMPANY

Forest Island by Nanali Studios

Frontier of Fortune by Dotomchi Games Inc.

FUNKYGUNNER by FUNKY5

Group Project Simulator! by Studio806

Gun Tactics by Gimle Games

Hybrid Warrior: Dungeon of the Overlord by Cat Lab

Metro Blossom by The Sane Studio

Portal Dungeon by Oblique Line

Rush Hour Rally by Soen Games

The Way Home by CONCODE

Titan Slayer by Touchholic

Sign up to attend the South Korean finals.

Join the adventure on September 4

This year the three Festivals are virtual, so everyone has the chance to explore the games, meet the developers who made them, cheer them on, and be the first to hear who the winners are.

Expect plenty of fun and some very special surprises. So, don’t miss out. Sign up now to virtually attend the events showcasing the finalists from Europe, Japan, and South Korea. The events are free to attend and will all take place in the same space, so sign up to one and you will be able to teleport to all events!

How about the Indie Games Accelerator?

If you’re interested in knowing which developers are joining the 2021 class of the Indie Games Accelerator, sign up to attend the European Festival, where we will also announce the selected developers.

Indie Games

Android Studio Arctic Fox (2020.3.1) Stable

Posted by Amanda Alexander, Product Manager, Android

  Live Edit of Literals: edit strings and see it reflected immediately in Preview

We are excited to announce that Android Studio Arctic Fox is now available to download in the stable release channel. This latest release brings to life Jetpack Compose 1.0, Android's new toolkit for building native UI. The release also focuses on devices, including Wear OS, and helps with developer productivity, with features like a new Background Task Manager. We used your feedback to create this suite of new Android Studio features that will help empower the developer community to create high quality, modern apps across devices faster!

Note: As we announced last year, we adjusted our version numbering of Android Studio to match the year and version of the IntelliJ IDEA that Android Studio is based on, plus our own patch number. We will be using code names (in alphabetical order); the first is Arctic Fox and the next is Bumblebee (currently in canary).Android Studio Arctic Fox (2020.3.1) updates Android Studio to version 2020.3 of the IntelliJ platform which adds a slew of new features including debugger interactive hints, VCS updates, and several new code editor enhancements to speed up your workflow. Learn more.

To support rapid design of modern UI, we added additional features for Jetpack Compose. Compose Preview lets you create previews of multiple components of your Compose UI to instantly see the impact of your changes across dimensions (such as themes, screen and font sizes, and more). The Deploy Preview to device feature enables deploying snippets of your Compose code directly to a device or emulator so you can quickly test small parts of your code. If you want to dive deeper into your Layouts, we added Compose support to the Layout Inspector to help you understand how your layouts are rendered. Additionally, we added Live Editing of literals so you can instantly see your Compose code changes in previews and when running your app on an emulator or physical device without the need for compilation.

For increased device support, we built a new Wear OS pairing assistant to simplify the pairing of Wear OS emulators with physical or virtual phones. To use the newest Wear OS version, you can now access the developer preview of the Wear OS 3 system image. When you run the Wear OS emulator, you will also find added support for the Heart Rate Sensor API. For apps targeting Google TV, we added the newest Google TV Remote Control features and updated the Google TV system images to reflect the latest UI design. Additionally, we have completed the development and testing workflow for the Automotive OS by enabling the emulator to use car sensor data to simulate driving use cases. For apps targeting tablets, we have updated all templates to support landscape out of the box. Whether you are developing for small or large screen devices, we have included new features to help you keep innovating and building amazing apps.

Lastly, in an effort to boost developer productivity, we have added features to help you work more efficiently. For example, we added lint checks for Android 12 to provide guidance on building apps for the next version of Android. To help you test your code, we added an Accessibility Scanner for Layout Editor so you can more easily identify accessibility issues in your layouts and the new Test Matrix lets you view test results in real time across multiple devices in parallel. Additionally, we added preview support for Apple Silicon (arm64) hardware and extended the emulator controls for wider coverage in testing. Lastly, for debugging, the new Background Task Inspector helps you to analyze your app's background workers.

There are many enhancements to Android Studio Arctic Fox. To see the full list of changes, view the Android Studio Arctic Fox (2020.3.1) Beta release blog and release notes. You can take a look below at some highlights of the changes.

What's new in Android Studio Arctic Fox

Design

Use the @Preview annotation to generate previews of Compose code and visualize the different configurations of multiple components (e.g. devices or themes). Compose Preview can make it simpler for you to construct a mental mapping of the composables in your code.

Compose preview

Compose Preview

Layout Inspector for Compose

For both apps written fully in Compose and apps with some Compose alongside Views, Layout Inspector makes it possible to get more details on your layouts and troubleshoot. For example, you will be able to see the parameters and modifiers passed to each composable. There is an option to turn on Live Updates to stream data from your device as you develop your app.

Compose Layout Inspector

Compose Layout Inspector

Live Edit of literals

You can now ​​quickly edit literals (strings, numbers, booleans, etc.) inline and see the immediate results on the change on screen (previews, emulator, or physical device), without having to compile.

  Live Edit of Literals: edit strings and see it reflected immediately in Preview

Live Edit of Literals: edit strings and see it reflected immediately in Preview

Devices

Wear OS Pairing

The new Wear OS Pairing assistant will help walk you through the pairing process to make pairing Wear OS emulators with virtual or physical phone simple. Note that this feature assists with pairing with Wear OS 2 companion; support for Wear OS 3 will be coming soon. Learn more.

  Wear OS emulator pairing assistant dialog

Wear OS emulator pairing assistant dialog

  Phone + Watch emulators paired successful state

Phone + Watch emulators paired successful state

Developer Productivity

Background Task Inspector

You can use the new Background Task Inspector to visualize, monitor, and debug your app's background workers when using WorkManager library 2.5.0 or higher on a device running API level 26 and higher. You can access it by selecting View > Tool Windows > App Inspection from the menu bar. Learn more.

 background task inspector

To recap, Android Studio Arctic Fox (2020.3.1) Stable includes these new enhancements & features:

Design

  • Compose Preview
  • Compose Layout Inspector
  • Deploy Preview to Device
  • Live Edit of literals

Devices

  • Wear OS Pairing
  • Heart Rate Sensor
  • New Wear OS system images
  • Google TV Remote Control
  • Google TV system Images
  • Automotive OS Sensor Replay
  • Templates support for Tablets

Developer Productivity

  • IntelliJ 2020.3.1
  • Android 12 lint checks
  • Non-transitive R classes Refactoring
  • Apple Silicon Support Preview
  • Android Emulator Extended Controls
  • Background Task Inspector
  • Accessibility Scanner in Layout Editor
  • Test matrix
  • Memory Profiler new recording UI
  • AGP Upgrade Assistant Improvements
  • C++ editor: Set execution point in debugger

Check out the Android Studio release notes, Android Gradle plugin release notes, and the Android Emulator release notes for more details.

Getting Started

Download

You can download the latest version of Android Studio Arctic Fox from the download page and download the Apple Silicon preview build here. If you are using a previous release of Android Studio, you can simply update to the latest version of Android Studio. If you want to maintain a stable version of Android Studio, you can run the stable release version and canary release versions of Android Studio Arctic Fox at the same time. Learn more.

We appreciate any feedback on things you like, and issues or features you would like to see. If you find a bug or issue, feel free to file an issue. Follow us -- the Android Studio development team ‐ on Twitter and on Medium.

Jetpack Compose is now 1.0: announcing Android’s modern toolkit for building native UI

Posted by Anna-Chiara Bellini, Product Manager, Nick Butcher, Developer Relations

Today, we're launching version 1.0 of Jetpack Compose, Android's modern, native UI toolkit to help you build better apps faster. It's stable, and ready for you to adopt in production. We have been developing Compose in the open with feedback and participation from the Android community for the last two years. As we reach 1.0, there are already over 2000 apps in the Play Store using Compose - in fact, the Play Store app itself uses Compose! But that’s not all, we have been working with a number of top app developers and their feedback and support has helped us make the 1.0 release even stronger. Square, for instance, told us that by using Compose, they can “focus on things that are unique to Square and their UI infrastructure, rather than solving the broader issue of building a declarative UI framework”. Monzo said Compose allows them to “build higher quality screens more quickly”. And Twitter summed it up nicely: “We love it! ❤️

We designed Compose to make it faster and easier to build native Android apps. With a fully declarative approach, you just describe your UI, and Compose takes care of the rest. As app state changes, your UI automatically updates, making it a lot simpler to build UI quickly. Intuitive Kotlin APIs help you build beautiful apps with way less code, and native access to all existing Android code means you can adopt at your own pace. Powerful layout APIs and code-driven UI make it easy to support different form factors, like tablets and foldables, and Compose support is coming for WearOS, Homescreen Widgets, and more!

This 1.0 release is ready for use in production, offering key features that you need:

  • Interoperable: Compose is built to interoperate with your existing app. You can embed compose UIs within Views or Views within Compose. You can add as little as a single button to a screen, or keep that custom view you’ve created in a now Compose screen.
  • Jetpack Integration: Compose is built to integrate with the Jetpack libraries you already know and love. With integration with Navigation, Paging, LiveData (or Flow/RxJava), ViewModel and Hilt, Compose works with your existing architecture.
  • Material: Compose offers an implementation of Material Design components and theming, making it easy to build beautiful apps that reflect your brand. The Material theming system is easier to understand and trace, without having to consult multiple XML files.
  • Lists: Compose’s Lazy components offer a simple, succinct but powerful way to efficiently display lists of data, with minimal boilerplate.
  • Animation: Compose’s simple and coherent animation APIs make it far easier to delight your app’s users.


New Tools

The fully declarative approach in Jetpack Compose radically changes how you develop UI. To support new workflows and a different way of thinking, we are delivering new tools, designed specifically for Compose, and adding support for Compose to some of our existing tooling.

Compose Preview

The new Compose Preview, available in Android Studio Arctic Fox allows you to see your Composables in different states, light and dark theme, or different font scalings, all at the same time, making component development easier, without having to deploy a whole app to your device. Enhanced with live editing of literals, you can see updates without recompiling your project.


Deploy Preview

If you ever wished to be able to test parts of the UI on a device, without having to navigate through your app to the screen you’re working on, you will like the new Deploy Preview: just create a preview for your Composable, and deploy it on your device for fast iteration.

Compose support in Layout Inspector

Layout Inspector adds support for Composables, so that you can confidently mix Compose with existing Views.

Read more about Compose support in Android Studio Arctic Fox, here.

Sharing our roadmap for Compose

Adopting any new framework requires evaluation, especially something as far reaching as a new UI Toolkit. To help you to make an informed decision whether it’s the right time for you we’re publishing a public roadmap to share our plans to continue to build out Jetpack Compose.





Learning Compose

To help you get composing, we’ve prepared an extensive set of resources for you and your team:


There’s a lot to learn! The Jetpack Compose Pathway provides a step-by-step journey through key codelabs, videos and docs to help guide you.

Enjoy composing!

We really believe that Jetpack Compose is a huge leap forward, making it so much faster and easier to build great UIs; we can’t wait to see what you build with it. Now that Compose is stable at 1.0, it’s time to get started; there’s nothing better than getting right to the code. Happy Composing!

Preparing for Google Play’s new safety section

Posted by Suzanne Frey, VP, Product, Android Security and Privacy

Today, we’re announcing additional details for the upcoming safety section in Google Play. At Google, we know that feeling safe online comes from using products that are secure by default, private by design, and give users control over their data. This new safety section will provide developers a simple way to showcase their app’s overall safety. Developers will be able to give users deeper insight into their privacy and security practices, as well as explain the data the app may collect and why — all before users install the app.

Ultimately, all Google Play store apps will be required to share information in the safety section. We want to give developers plenty of time to adapt to these changes, so we’re sharing more information about the data type definitions, user journey, and policy requirements of this new feature.



What the new safety section may look like:

Images are directional and subject to change

Users will see the new summary in an app’s store listing page. It’ll share the developer’s explanation of what data an app collects or shares and highlight safety details, such as whether:

  • The app has security practices, like data encryption
  • The app follows our Families policy
  • The app has been independently validated against a global security standard

Images are directional and subject to change

Users can tap into the summary to see details like:

  • What type of data is collected and shared, such as location, contacts, personal information (e.g., name, email address), financial information and more
  • How the data is used, such as for app functionality, personalization, and more
  • Whether data collection is optional or required in order to use an app

Images are directional and subject to change

In designing our labels, we learned developers appreciate when they can provide context about their data practices and more detail on whether their app automatically collects data versus if that collection is optional. We also learned that users care about whether their data is shared with other companies, and why.

The final design is subject to change as we continue working with developers and designing for the best blend of developer and user experiences.

Policy changes to support the safety section

Today we announced new user data policies designed to provide more user transparency and to help people make informed choices about how their data is collected, protected and used.

  • All developers must provide a privacy policy. Previously, only apps that collected personal and sensitive user data needed to share a privacy policy.
  • Developers are responsible for providing accurate and complete information in their safety section, including data used by the app’s third party libraries or SDKs.

This applies to all apps published on Google Play, including Google's own apps.

What you can expect

We want to provide developers with plenty of time and resources to get prepared.

Target Timeline. Dates subject to change.

Starting in October, developers can submit information in the Google Play Console for review. We encourage you to start early in case you have questions along the way. The new safety section will launch for apps in Google Play in Q1 2022.

We know that some developers will need more time to assess their apps and coordinate with multiple teams. So, you’ll have until April 2022 before your apps must have this section approved. Without an approved section, your new app submission or app update may be rejected.

Images are directional and subject to change

If your app’s information is not approved by the time we launch the safety section in Google Play to users in Q1 2022, then it will display “No information available.”

How to get prepared:

  • Visit the Play Console Help Center for more details about providing app privacy details in Play Console, including data type lists and examples.
  • Review how your app collects, protects and shares data. In particular, check your app’s declared permissions and the APIs and libraries that your app uses. These may require you to indicate that your app collects and shares specific types of data.
  • Join a policy webinar and send us your questions in advance. You can register for Global, India, Japan, or Korea sessions.

We’ll continue to share more guidance, including specific dates, over the next few months.

Thank you for your continued partnership in building this feature alongside us and in making Google Play a safe and trustworthy platform for everyone.

Announcing Policy Updates To Bolster Privacy and Security

Posted by Krish Vitaldevara, Director, Product Management

We are always looking to make Google Play a safer and more trustworthy experience for developers and consumers. Today, we’re announcing new policy updates to bolster user control, privacy, and security.

Giving users more transparency into data privacy and security

We’re sharing our new policy for the upcoming safety section in Google Play alongside additional information, like data definitions. Learn more.

Improving advertising privacy and security

We’ve long offered users meaningful controls with advertising ID, like being able to reset their identifier at any time or opt out of allowing the identifier to be used for ads personalization. We’re continuing to add more controls this year.

As we pre-announced to developers on June 2, we’re making a technical change as part of Google Play services update in late 2021. When users opt out of interest-based advertising or ads personalization, their advertising ID will be removed and replaced with a string of zeros. As a reminder, this Google Play services change will be a phased rollout, affecting apps running on Android 12 devices starting late 2021 and expanding to all apps running on devices that support Google Play in early 2022. Also, apps updating their target API level to Android 12 will need to declare a new Google Play services permission in the manifest file in order to use advertising ID.

We will also test a new feature that notifies developers and ad/analytics service providers of user opt-out preferences to help developers implement user choice and add to existing policy restrictions on how advertising ID can be used. When a user deletes their advertising ID, developers will receive a notification so they can promptly erase advertising IDs that are no longer in use.

In addition, we’re prohibiting linking persistent device identifiers to personal and sensitive user data or resettable device identifiers. This policy adds an additional layer of privacy protection when users reset their device identifiers or uninstall apps.

And last, we’re offering a developer preview of app set ID for essential use cases such as analytics or fraud prevention. App set ID is a unique ID that, on a given device, allows you to correlate usage or actions across a set of apps owned by your organization. You cannot use app set ID for ads personalization or ads measurement. It will also automatically reset if all the developers’ apps on the device are uninstalled or none of the apps have accessed the ID in 13 months.

Enhancing protection for kids

As we introduce app set ID for analytics and fraud prevention, we are also making changes to further enhance privacy for kids. If an app is primarily directed to children, it cannot transmit identifiers like advertising ID. If an app’s audience is both kids and adults, then it needs to avoid transmitting these identifiers for kids.

Over the next several months, we’ll share more information for a smooth transition.

Strengthening security

Security is fundamental to enabling privacy across our platform. We’re announcing a few policy updates to help keep user data secure.

First, Google Play remains a safer ecosystem when developers actively maintain their apps. So, we will close dormant accounts if the account is inactive or abandoned after a year. This includes accounts where the developer has never uploaded an app or accessed Google Play Console in a year.

We will continue supporting developers with actively growing apps. We won’t close accounts with apps that have 1000+ installs or have in-app purchases in the last 90 days. Developers whose accounts are closed can create new ones in the future, but they won’t be able to reactivate old accounts, apps, or data.

Second, it’s important for users to have an accessible experience that is secure. So, we’re adding new requirements on how AccessibilityService API and IsAccessibilityTool can be used. These tools help build accessible experiences, which often require access to user data and device functionality. Now, all apps that use the AccessibilityService API will need to disclose data access and purpose in Google Play Console and get approval. Learn more.

Reminder on Payments policy

As we shared earlier in July, after careful consideration of feedback from both large and small developers, we are giving developers an option to request a 6-month extension until March 31, 2022 to comply with our Payments policy.

For more resources

Thank you for helping us make Google Play an even more trustworthy platform for everyone.