Illustration by Virginia Poltrack

Now in Android #28

MAD Skills Navigation, AndroidX libraries, Kotlin Vocabulary, articles and videos, a nanodegree on Android Kotlin development, and a podcast episode on Paging

Chet Haase
Android Developers
Published in
8 min readOct 28, 2020

--

Welcome to Now in Android, your ongoing guide to what’s new and notable in the world of Android development.

NiA28 in Video and Podcast Form

This Now in Android is also offered in video and podcast form. It’s the same content, but with less reading required. The article version (keep reading!) is still the place to come for links to all of the content that’s covered.

Video

Podcast

Click on the link below, or just subscribe to the podcast in your favorite client app.

MAD Skills: Navigation

MAD Skills is a new series of content teaching developers how to use the technologies of Modern Android Development to create better applications more easily. The series had just launched when I posted the last Now in Android. Fast forward a couple of weeks, and the first miniseries on Navigation component has now completed. Well… almost completed. We have one more Navigation episode left: a live Q&A.

One of the things we wanted to do with MAD Skills was to not just teach about how to use various features of Modern Android Development, but also to hear about problems or questions you have so that we can try to help. At the end of each miniseries, we’ll be hosting a live Q&A on YouTube to do just that.

Beforehand, we’ll reach out on Twitter to get some questions from you. Plus, we’ll also try to field questions live on Twitter and YouTube. Then we’ll have a conversation with some of the experts who work on the product to hear what they recommend.

For Navigation, I will be hosting a live Q&A with this Thursday at 10am PST. Send in any questions on this Twitter thread (or just post tweets with #AskAndroid), and join us for the session if you can. We’ll post the video when it’s done, so you can still catch the live show… when it’s not live anymore.

In case you missed the Navigation episodes, you can consume them in video and article format:

For ongoing content, be sure to check the MAD Skills playlist on YouTube, the articles on Medium, or this handy landing page that points to all of it. And stay tuned for more MAD content; the next series begins next week!

AndroidX

AndroidX libraries on GitHub

First of all, AndroidX has made more libraries available for contributions through GitHub.

We know that many developers prefer the familiar GitHub contribution flow to the AOSP+Gerrit system Android traditionally uses, and would be happy to see us use GitHub more.

Which is a great idea! But… difficult to do (given the infrastructure that we rely on). But we heard you and have started exploring this, making a small handful of libraries in active development available on GitHub, starting a few months back with Paging, Room, and WorkManager. Recently, we’ve also added the Activity, Fragment, and Navigation libraries. So check them out, and if you feel like contributing, see the details in the CONTRIBUTING doc for more information.

Stable releases

There were the usual plethora of alpha, beta, RC and minor stable releases, including this notable stable release:

MediaRouter 1.2.0: This version is interesting because it adds functionality that syncs with some of the new media functionality in Android 11.

Android 11 added a bunch of UI niceties for media players, sending the media controls into a new, dedicated space in the notification panel, to make it easier to control your media from one place instead of being interleaved with the rest of the notifications. This isn’t about new developer functionality, but rather a different presentation for notifications you are probably already creating; you can continue to use the MediaSession and MediaStyle APIs that have been available since the Lollipop release.

But there was some new functionality added in Android 11 for “seamless media transfer”, which allows users to change the playback device through the output switcher (shown below). This new release of MediaRouter allows you to interact with this new platform capability.

This new release of MediaRouter allows you to control which playback devices show up in the output switcher so your users can seamlessly move their audio around.

If you want to see the media changes in Android 11, check out ’s What’s New in media video.

Now in Alpha

I also wanted to call out a couple of interesting alpha releases. I don’t usually dwell on alphas because, well, they are alpha, and are therefore subject to change and iteration as the team continues to pound on them. But there were new releases for Paging and Navigation (just today!) that are interesting in terms of what they say about future development.

One of the questions we’ve been getting recently, as Jetpack Compose has been working through its alpha journey, is “What’s the future of [insert favorite Jetpack library here] in a Jetpack Compose world?”

Which is an… excellent question! The answer is that many of the architecture components aren’t specifically about Views or the existing UI Toolkit, so they will be equally necessary and helpful in the new world of Jetpack Compose. More than that, we’re building integrations to make it easy for different components to work together. Compose already offers integrations with ViewModels and LiveData and today marks the first release of both Paging and Navigation support for Jetpack Compose.

Kotlin Vocabulary

There were three posts on Kotlin language features recently that you might want to check out.

Destructuring

posted a new article and video on Kotlin’s destructuring feature. Destructuring allows a convenient way to assign multiple variables to the values of different fields in an object. For example, you could have the following data class:

data class Donut(
dough: String,
topping: String
)

and quickly assign variables to a Donut instance’s fields with:

val (dough, topping) = someDonut

Destructuring works automatically for data classes, but you can provide functions in other classes to give them destructuring capability as well.

Extensions

has released a new article which talks about the Kotlin language feature of extensions. Extensions allow you to add new methods or properties to existing classes… sort of. Extensions aren’t actually inserted into an existing class , but they look, to callers of those methods, like they are. (Spoiler: they are implemented internally as static methods which receive an instance of the class.)

This is probably my favorite Kotlin feature: as an API developer, I love the idea of being able to improve APIs in the future by adding APIs that can live outside of the core platform or library, but which look right at home in the way that you use them in your code. So, for example, I could create an extension method on the String class, String.isAGoodDonutName(). Then callers using my extension method could call that method directly on a String, like “Sprinkle”.isAGoodDonutName() instead of the approach in other languages of calling it through some other package/class, like Utils.StringMethods.isAGoodDonutName(“Sprinkle”). Not as nice, even if it is about donuts.

Coroutines

And finally, published a new video on “the ABCs of Coroutines,” in which he explains topics like CoroutineScope, CoroutineContext, Dispatchers and Jobs. So maybe more like the CDJs than the ABCs of coroutines.

Articles & Videos

Common Play Policy Violations

One of the tricky things with publishing apps is making sure that those apps adhere to the guidelines of the store, which are there to make a good app ecosystem for users. But sometimes it can be difficult to tell exactly how to do this correctly. So the Play Store published this article to help you understand some of the common violations that can cause problems, and how to avoid them.

Some of these areas include app UI that links out to the Play Store, descriptions that are more focused on search terms than a clear summary of the app, and apps that are simply a WebView wrapper around website content.

Conference Presentations

Droidcon took at interesting approach during this online-only conference season by combining many of its annual events into larger, timezone-wide events. The EMEA version of this conference happened in October and all of those videos (by some of us on the team as well as many, many developers in the broader community) are now available online:

(Stay tuned for the Americas and APAC versions, coming up in the next few weeks.)

MotionTags

The MotionTags series of screencasts posted two more episodes since last time.

Episode 7 covers <KeyAttribute>, which is the tag containing properties of the view, like its transform and alpha values.

Episode 8 covers <KeyCycle>. This tag has many of the same attributes as KeyAttribute, but also offers properties that define the waveform being used for an animation, which can lead to really interesting complex motion behavior. Note that there is a standalone CycleEditor tool to make creating and editing KeyCycles easier.

You can see these episodes along with the rest of the series in the MotionTags playlist:

Training

The new Udacity Android Kotlin Developer Nanodegree recently launched. This course is for people who want to learn how to build Android apps in Kotlin by following best practices. For prerequisites and more details, check out the program overview.

Note that the nanodegree is a paid program that includes projects with feedback, technical mentor support, and career services from Udacity. However, the underlying course content that Google developed with Udacity is free for anyone to access. You can check out that content at Developing Android Apps with Kotlin and Advanced Android with Kotlin.

Podcast Episodes

There’s been another episode of Android Developers Backstage posted since the last Now in Android. Check it out at the link below, or in your favorite podcast client:

ADB 151: Paging 3

and I chatted with Dustin Lam and Chris Craik from the Android Toolkit team about the new 3.0 version of the Paging library (“Paging 3”). This version (currently in alpha) is a complete rewrite in Kotlin, using coroutines and Flow, for various reasons that we go into in the podcast. Check it out to learn more.

Now then…

That’s it for this time. Go check out the MAD Skills series! Download the latest AndroidX libraries! Learn about Kotlin language features! See the latest developer articles and videos! Get a nanodegree! Listen to the latest ADB podcast episode! And come back here soon for the next update from the Android developer universe.

--

--

Chet Haase
Android Developers

Past: Android development Present: Student, comedy writer Future: ???