image from droidholic

This article is an overview of all the new android related announcements at Google I/O 18.

Google announced Android jetpack in their developer keynotes as a set of libraries with tools which help us build great apps. They also categorized the jetpack into four components.

Google revealed their new package structure for android.

Packages bundled in the Android OS will go with android.* package hierarchy and all other packages that ship with APK/AAB will go with androidx.* hierarchy. Here is the AndroidX Artifact mappings.

Android studio 3.2 ships with AndroidX refactoring tool.

New in Architectural components:

Architectural components gets two new libraries (Navigation and WorkManager) and also has adopted DataBinding.

Databinding:

Native support for LiveData in DataBinding. In short, We can directly use LiveData in our layout xml.

Lifecycle aware ViewBindings.

DataBinding now supports feature module plugin (ie: Instant Apps)

Room:

Room supports parallel read and write access in sqlite (with WriteAheadLogging), also with improvements in write speed.

Room now supports dynamic query with @rawquery annotation.

navigation editor

Navigation:

Navigation component provides assistance in implementing navigation in our app (No more fragment transactions :P).

Android Studio 3.2 ships with a navigation editor, a graphical representation of navigation graph.

WorkManager can see this as a wrapper above ThreadPool, JobScheduler, JobDispatcher or AlarmManager. Give a task to WorkManager and let it choose an appropriate way to run it in background depending on conditions.

It also packs some features like chaining tasks and listening for task status using LiveData.

We can take advantage of Kotlin language features in Android APIs with the help of KTX.

The Kotlin version of Android APIs are now listed alongside the original documentation and it’s no longer separate.

Guide for building kotlin-friendly libraries

Keep (Kotlin Evolution and Enhancement Process) 110 Annotations:

Few annotations, that can make kotlin-friendly java APIs

@ExtensionFunction — Turn a static java method with at least one argument into an extension function.

— Turn a static java method with at least one argument into an extension function. @DefaultValue — can be used to give a default value to the parameter in java function.

— can be used to give a default value to the parameter in java function. @KtName — This annotation in java method parameter can help Kotlin’s named parameter feature.

(He)ART of Android:

Google announced few crucial improvements in ART(Android Run Time), the first one is of-course optimizations for Kotlin language.

Memory and Storage improvements:

CompactDex is a new feature introduced in new ART, which shrinks dex files with few techniques. The most important one is deduplicating multidex data. CompactDex identifies common data between multiple dex and deduplicate it in a shared data section.

Cloud Profiling:

Google tries to improve startup time of an application with the cloud profiling technique. For this to work better from the first use of the app, they recommend you to use alpha and beta testing channel in google play.

Google collects profiling information from early access users, aggregate them to create a cloud profile which will then be shipped with the APKs to improve startup time from the beginning. Also in the near future the aggregated profile will be shared with the developers, which in turn will help them to optimize their apps.

App Actions:

Google Search App recommends installed app actions

Google introduced App actions, and this one can cast a spell over re-engagement of our apps. App Actions can increase traction for our apps by giving various touch points to our apps across the platform.

A single actions.xml file with intents and fulfillments can help us get more retention. Google derived a list of Built-In intents that can be used by our apps with a fulfillment in our app.

Touch points where App Actions will be show to users:

Google Search App — recommends actions in installed apps

All Apps — Android P

All Apps — predictive actions will be shown based on users routine and context.

Smart Text Selection — relevant app actions for the selected text will be shown.

Play Store will show app actions as “Top Actions” for the queried string.

Integration with Google Assistant:

App Actions can also be extended beyond devices running android, once our app with actions xml is uploaded to google play, it detects the actions and give us an option to claim a project in Actions On Google console to extend our action to all assistant supported devices.

Extending App Actions

We can think app slices as an extended version of app actions. Unlike App Actions which are just touch points across the platform, App slices will feature rich and dynamic content from our app. And it will be suggested to the user in the Google Search App. Slice can help app engagement through the context of search.

App Slice in the context of search

App Bundle is a new format(.aab) which includes all compiled code and resources. With App Bundles, we no longer need to build multiple APKs to support different device configurations.

Google play now has this feature called Dynamic Delivery by which play takes in app bundle and takes care of generating APKs for every different device configurations.

You need to enroll for play’s app signing program to take advantage of distributing smaller and modular apps to your users.

Oh wait, there is something more than the split APKs generation with App Bundles. Now we can load/distribute a feature on demand from application without being installed at the beginning.

We load our apps with features, but what about the size of the downloadable APK. Sometimes only very few percentage of the users will use a specific feature in the app, we can split those feature and load them on demand from the user.

By this, the initial installation will not have the feature which is rarely used. And if the user wants to load that feature we can use Play Core Library to load that feature APK dynamically on demand.

Dynamic Feature plugin shares almost 95% of code from Instant Apps feature plugin.

We can expect the consolidation of dynamic feature and instant app very soon. A Dynamic feature APK will be available to use without installing like instant apps.

Google Play Console:

Play Console puts forth few improvements in release management and audience bench-marking.

Play console can now tell us about the instant apps referrer platform(like browser/search/store try now).

It can also give conversion rate from instant apps to installation.

instant apps referrer platforms with conversion rate in play console

User Acquisition report in play console now comes with organic installs breakdown, like how many installs from users randomly browsing the store and searching the store for the app.

We can also check which search term gives us more impression.

Organic data split in play console

Play console added Advanced subscription report with data like free trail success rates and number of users renewing the subscriptions.

Also gives some insight on subscription cancellation.

Also gives some insight on subscription cancellation. It also features a new App Dashboard with high level number on installation, active users etc.

Play console publishing APIs now support all testing tracks.

Publishing APIs can now draft a release, which can be reviewed and published later in the console.

Alpha and Beta testing channels are for testing at a scale, it takes some time to get published. What should I do if I need to share the APK with my testing team and still get early access reports like crash reports and other stuffs?

Sharing APKs with testing team is now made easy with Internal Testing in Play console. One can simply add the tester’s id in the console and share APKs seamlessly to the tester.

Firebase:

Firebase vitals can show us information about slow rendering screens and frozen frames. Slow/frozen frame data will be provided per activity.

Slow frames/ frozen frames rate in firebase

That’s all people :)

Let me know if I had missed anything, in the comment below. Thanks.