Placeholder Image

Subtitles section Play video

  • [MUSIC PLAYING]

  • CHET HAASE: Hey.

  • [CLAPPING]

  • DAN SANDLER: Hey everybody.

  • Welcome back to What's New in Android.

  • I'm Dan Sandler from the System UI team.

  • CHET HAASE: I'm Chet Haase from the Android Toolkit team.

  • ROMAIN GUY: And I'm Romain Guy from--

  • I still don't have a name for my team.

  • So from the Android team.

  • [LAUGHTER]

  • And you may remember us from other talks,

  • such as What's New in Android 2017,

  • What's New in Android 2016, What's New in Android 2015,

  • What's New in Android 2014.

  • Not What's New in Android 2013.

  • CHET HAASE: We don't talk about that one.

  • ROMAIN GUY: We don't talk about that one.

  • DAN SANDLER: You know, that was the time

  • that we had Jelly Bean two years in a row.

  • It was brilliant.

  • We didn't have to redo the logo or anything.

  • [LAUGHTER]

  • ROMAIN GUY: But now--

  • CHET HAASE: What's New in Android,

  • what I like to call the Android keynote.

  • Nobody else does.

  • But I like to call it that.

  • Because this is where we talk to you about all of the developer

  • stuff going on in the Android platform.

  • In particular, let's talk about Android P. Specifically,

  • let's talk today about--

  • oh, hang on.

  • Android APIs.

  • [LAUGHTER]

  • ROMAIN GUY: All right, first we'll start with distribution.

  • You saw in the keynote we introduced the dynamic ad

  • bundles.

  • [? Tor's ?] demo was pretty clear.

  • It's pretty easy for you.

  • All you have to do is click your different menu

  • when you build your application.

  • And we're going to save you some space.

  • It's going to be faster and easier for your users

  • to download your app.

  • And I'm sure you have a lot of questions about it.

  • So we have a couple of talks this afternoon,

  • at 5:00 PM and 6:00 PM.

  • Go there if you want answers, because we don't have them.

  • CHET HAASE: So you're going to see a slide a whole lot

  • like this through the rest of the talk.

  • I feel like the main function we serve

  • in this talk is to tell you the other talks to go to.

  • We're like the appendix.

  • We're like the index for the rest of the content.

  • DAN SANDLER: I mean, we're like obsolete, like vestigial.

  • Is that what it is?

  • CHET HAASE: I don't like to think about that.

  • ROMAIN GUY: Yeah.

  • Let's be clear.

  • A lot of people back at work have done all the hard work.

  • We just get to go on stage and talk about their hard work.

  • CHET HAASE: So speaking of that, let's talk

  • about Android Jetpack.

  • We heard Steph talk about this in the developer keynote.

  • This is a set of components, as well as

  • guidance on how to build better Android applications.

  • All of you are familiar with most of what

  • is in Android Jetpack already.

  • What we're doing is adding to it over time

  • with stuff that's going to make it even better.

  • And we're also improving it over time.

  • One of the major steps that we're taking

  • is what I like to think of as a refactor, because it's

  • a refactor.

  • My favorite thing about the support library

  • is how the package names embed the release number in them.

  • So, for example, we support things like v4.

  • Actually we don't support v4 anymore.

  • We have a min SDK of at least 14 now.

  • But it's in the package name.

  • Isn't that a little bit silly?

  • So we're doing away with that.

  • We're doing a whole lot of tedious renaming.

  • And we're also providing tools to make it easier

  • for you to do the similar refactoring that you're

  • going to need to do in your application,

  • as well as in Android Studio.

  • Everything is being renamed to something more appropriate

  • called Androidx.

  • If you want to know more about the details of that,

  • the renaming, as well as doing more modular, more fine-grained

  • splits to make sure that you don't drag in too much stuff,

  • go to the talk.

  • Learn what's new in Android Support Library.

  • Also, there was an article that was

  • posted on the Android Developers blog about a half hour ago.

  • Check that out for more of the details there.

  • Let's talk about Android Test, which

  • is part of this new Jetpack thing going on.

  • Android Test is the ATSL stuff, the Espresso

  • stuff that hopefully you were already using really good ways

  • to test your application.

  • Now, they provide first class Kotlin support, as well as

  • more elegant APIs for reducing a lot of the boilerplate.

  • Here's a simple example.

  • We used to have a way of asserting,

  • which, A, was not necessarily obvious

  • in the parameters you were passing.

  • Also, unobvious in the order of the parameters

  • that you were passing.

  • And then it would give you an error message that also

  • didn't really help very much.

  • So we have something a little more sensible now.

  • You can assert that it's actually working

  • on the visible property.

  • And the error message gives you something more

  • that you can work with a little bit better.

  • Go to the Frictionless Android Testing

  • talk for more information about that stuff.

  • Jetpack architecture is about the architecture components

  • that were announced last year at I/O

  • and then iterated with feedback from the community,

  • and finally went 1.0 in the fall.

  • So we have the release parts of those,

  • which includes all the Lifecycle stuff, and the ViewModel stuff,

  • as well as the Room, the persistent data model

  • stuff, and LiveData.

  • So hopefully you are using that stuff already,

  • at least in your new applications.

  • And what we also have is recently we

  • released the paging library for doing asynchronous data paging

  • into RecyclerView.

  • That was alpha, then beta, because that's

  • how those things work.

  • And now it's 1.0 this week.

  • So please start using that.

  • And we also talked in the developer keynote

  • about a couple of new things that you should check out soon.

  • WorkManager is currently in preview.

  • There's going to be a talk about it.

  • It's about job scheduling, but job

  • scheduling in a way where we handle all the cases back

  • in previous releases, instead of you having

  • to use specific approaches, depending

  • on what version and device that you're on.

  • Also, navigation.

  • It turns out that up versus back is a hard problem

  • for applications to solve.

  • We are making that much easier.

  • And we're integrating with the tool

  • to make it even easier yet.

  • So go to all these talks.

  • There's an overview talk, as well as

  • specific talks on Navigation Controller and WorkManager,

  • and also a talk on RecyclerView and Paging.

  • Me?

  • Again?

  • ROMAIN GUY: It says your name on the slide.

  • CHET HAASE: I keep building suspense into this thing.

  • What's going to happen next?

  • Who's he going to hand the clicker to?

  • It's still mine.

  • DAN SANDLER: It's still you.

  • CHET HAASE: OK.

  • Let's talk about battery.

  • This is one of the ongoing efforts in Android

  • to help the users, because it turns out

  • battery is really important.

  • We're all power users.

  • Unfortunately, we just keep using the power.

  • So what can we do about it?

  • We can create these app standby buckets.

  • We're going to monitor the usage of applications,

  • and see how actively the user is using it,

  • and then make determinations about how much access

  • that application has to ongoing things

  • in the system which are going to take up more battery.

  • We also had background restrictions

  • that the user has the ability to kick in in settings.

  • So if an application is behaving badly,

  • let's say holding wake locks for long periods of time,

  • or waking up constantly, or accessing services

  • way more than they should when it's not on a charger,

  • then we'll note that and expose that in settings.

  • And then the user can take some action on that

  • if they deem that necessary.

  • Go to the battery session on Thursday morning

  • to learn more of the details there.

  • ROMAIN GUY: So one of the things that we've been focusing on

  • with Android P is privacy.

  • Maybe that's what it stands for.

  • So one of the things we've done is

  • that when your app is in the background,

  • it doesn't have access to the microphone anymore.

  • It doesn't have access to the camera anymore.

  • And it doesn't have access to the sensor kind of.

  • So you won't receive the data from the sensors automatically.

  • You can manually pull from the sensors,

  • and you'll get batch updates, but the best thing

  • to do if you want to get access to the sensor data

  • is to keep a foreground service running instead.

  • So no more microphone.

  • No more camera for you.

  • I think I've heard in the past that some apps were trying

  • to stay alive in memory by playing a white noise

  • or keeping the microphone on.

  • Don't do that anymore.

  • It's not OK.

  • Kotlin-- it's this little thing we announced last year.

  • So we are busy.

  • We want to make it better for all the Kotlin developers

  • out there.

  • I'm sure there's a lot of you here today.

  • So some of the things we've been doing,

  • the R team has been really busy with D8, R8, and ART itself.

  • They've been looking at the byte code generated by the Kotlin

  • compiler.

  • They've analyzed some of the byte code patterns that

  • were different from the ones generated by the Java

  • programming language compiler.

  • And they've been optimizing for those patterns.

  • We've also been adding a lot of nullability annotations

  • to our Java APIs, both in the core libraries,

  • so libcore, and our support libraries

  • to make it easier for you to use the platform APIs when you're

  • in Kotlin.

  • And finally, we launched on GitHub

  • a new library called Android KTX.

  • It's a set of Kotlin extensions for existing platform APIs.

  • And the goal here is to try to take advantage

  • of some of the Kotlin language features

  • to make existing APIs easier to use.

  • They're already easier to use just by using Kotlin,

  • but with the extension they get even better.

  • And I want to thank the community,

  • because we've received dozens of pull requests,

  • and also bugs and feature requests from you.

  • And we've accepted a bunch of them.

  • So if you have ideas, if you have

  • things that you would like to see in Android KTX,

  • please go to GitHub, and we'll take a look at your PR.

  • And this is an example of the kind of code

  • you can write with KTX.

  • If you want to create a bitmap, you

  • don't have to specify its ARGB 8.8.8.8 anymore.

  • You can call applyCanvas, which automatically

  • creates the canvas for you.

  • It becomes this.

  • And at the bottom you can see, for instance, the destructuring

  • assignment for color integer.

  • So you don't have to do any shifting or masking

  • of the int into bytes.

  • We'll take care of that for you.

  • There is a talk by Jack Wharton on Thursday at 10:30 AM.

  • He's going to go through most of the extensions.

  • He's going to talk about the philosophy

  • behind the extensions, how we write them, what

  • are the kind of extensions that we want to see in that library

  • that we're not looking for in that library.

  • So before you do all the work and send a PR,

  • go attend that talk to understand

  • what we're looking for.

  • CHET HAASE: We already talked about the Android Test

  • stuff that is part of Jetpack earlier.

  • That's probably a better, more holistic way

  • to test your application.

  • But if there is a specific situation

  • in which you find it necessary or helpful

  • to mock the framework--

  • and I don't mean ridicule it, because that wouldn't be nice--

  • then it is possible to do that in easier ways now in Mockito.

  • We are not changing the framework,

  • but we're actually integrating changes into Mockito itself.

  • So you can now mock final methods.

  • And soon you should be able to mock static methods.

  • [CLAPPING]

  • [CHEERING]

  • ROMAIN GUY: And Chet is making that face

  • because he doesn't understand why

  • that is so interesting to you.

  • [LAUGHTER]

  • CHET HAASE: And system created objects like activity,

  • eventually.

  • Working on that internally, but it should be on the way

  • eventually.

  • A background text measurement.

  • This is part of a bunch of smaller changes

  • that we made in the text area.

  • It turns out that measurement is really expensive.

  • So most applications do text.

  • And I would bet that the text operations in your application

  • are some of the most expensive going on in the UI thread,

  • which can contribute to jank.

  • Wouldn't it be nicer if you could offload that

  • to a background thread so that by the time you actually

  • need to render the text, or perform

  • those operations on the UI thread, most of the hard work

  • was done for you?

  • So the observation is that 80% to 90%

  • of the operations that are necessary for actually

  • displaying text happen in text measurement.

  • Well, we've made it possible and much easier to actually perform

  • this as a background operation.

  • So we have a class called pre-computed text.

  • And you can query that.

  • And you can say, I want you to pre-measure this.

  • And then you can set that text that's spannable on the text

  • view later whenever you want.

  • So you do it in background threads, like this.

  • You say create this thing.

  • And then you can set that on the text view

  • later when you actually need it.

  • Should be much faster.

  • Magnifier is something that if you're

  • using the preview releases you might see,

  • if you select some text, it pops up this little bar up above it.

  • It makes it easier to manipulate the cursor.

  • That's really great for text, but the other cool thing

  • about it is that it's also available for your applications

  • for any other use case.

  • So there's an API that allows you

  • to pop up this magnifier for whatever

  • happens to be in your view.

  • So you can show this, and dismiss it, and use it

  • for your stuff as well.

  • So core functionality that we want in the system user

  • interface.

  • But also useful APIs for developers

  • to use for their own purposes.

  • I don't know if you've worked with your design department,

  • and they've specified something about text in your UI,

  • and, OK, well, I want this aligned this many dips away

  • from the top.

  • And I want the baseline on the bottom

  • this many dips away from the bottom.

  • And then you have this interspersed vertical alignment

  • stuff going on.

  • And then you sort of puzzle with this for a while.

  • And you basically futz with padding

  • in all kinds of different configurations

  • to sort of get it to where they wanted to get it.

  • We have worked with that and created

  • some new attributes, and methods, and properties for you

  • to use that make that much easier.

  • So we allow you to just pass us the information

  • about the baseline alignment calculations

  • that you would like to perform.

  • And then we'll futz with padding on your behalf.

  • Smart Linkify.

  • I think of this as being Linkify, but smarter.

  • So we already have the ability to ask

  • for links in a block of text, and it'll detect things

  • like phone numbers and addresses.

  • But we also have the ability, through machine learning

  • models, and stuff that you've seen through smart text

  • selection, to detect other entities.

  • We can do the same thing with Linkify.

  • It takes a little bit potentially longer.

  • So you do this off thread.

  • So you would basically generate the links off thread,

  • and then set it on your text view

  • later, using code similar to this.

  • There's a text talk on Wednesday evening.

  • So please go to that for more details about all

  • of this, as well as more.

  • ROMAIN GUY: So location.

  • Now you can take advantage of a new package,

  • android.net.wifi.rtt.

  • It's the WiFi round trip time API.

  • It requires compatible hardware on your phone.

  • It also requires a compatible access point.

  • And it allows you to find a precise location indoors

  • for the user's device.

  • You need to request the Find Location permission.

  • And you don't need to connect to the access point.

  • So if you're building an application that

  • requires locating the user inside a big building,

  • you can take advantage of this API in Android P.

  • CHET HAASE: Accessibility has some improvements

  • for navigation through the app.

  • So it's easier for you to declare

  • these functional blocks.

  • It makes it easier for accessible users

  • to understand how things are being grouped on the screen.

  • There's an important talk on accessibility right now?

  • No, that's tomorrow.

  • OK.

  • Hopefully it's tomorrow.

  • I'm not sure that's correct.

  • ROMAIN GUY: It's tomorrow or 40 minutes ago.

  • CHET HAASE: OK.

  • All right.

  • DAN SANDLER: It's on YouTube.

  • CHET HAASE: Yes, it is.

  • Eventually.

  • Like now.

  • Yeah.

  • I think I got the day wrong.

  • Sorry about that.

  • It's now.

  • If you're in the wrong talk, I invite

  • you to go to the other one.

  • [LAUGHTER]

  • ROMAIN GUY: Oh, my turn.

  • Security.

  • New API in Android P, the Unified BiometricDialog.

  • So we deprecated the FingerprintManager

  • because there are more ways to authenticate yourself

  • with your body than just with a fingerprint.

  • Could be your eyes.

  • Could be whatever else that device manufacturers will

  • think of next.

  • So now we have a single UI for all devices

  • and all means of authentication.

  • We also have stronger protections for private keys.

  • And very important in your application,

  • if you're using the API, Build.SERIAL,

  • it doesn't work anymore.

  • The API is still there.

  • But it basically returns bogus data.

  • So you cannot rely on it at all anymore.

  • CHET HAASE: Various changes in Enterprise.

  • Just a couple of them that are interesting.

  • We made it easier to work with work profile

  • apps or different profile apps by having these different tabs

  • that you can associate with them so they're not all mixed

  • together, but you can actually have these whole sections

  • of these different profiles.

  • Also, you're allowed to lock packages to a specific task.

  • You could have a launcher with just a minimum set of a group

  • or a single application.

  • That works in combination with the ability

  • to have ephemeral users, which now gives you kiosk mode.

  • So you will no longer have experiences

  • like I had on a recent flight, as you

  • can see from my blurry picture, where you see a movie

  • and you wonder what operating system is running under that.

  • So you swipe from the bottom of the screen.

  • You see the ICS navigation bar.

  • And then you press on the recent tasks,

  • and you swipe the movie away, and you confuse

  • the heck out of the system.

  • ROMAIN GUY: I have to admit, that's what

  • I try every time I'm on a plane these days.

  • And it works a surprising number of times.

  • DAN SANDLER: Homework for all of you.

  • CHET HAASE: This is like fun for Android engineers.

  • This is what we do.

  • ROMAIN GUY: Hopefully this is not

  • linked to the plane navigation.

  • DAN SANDLER: Now?

  • Is it OK?

  • Can I talk now?

  • Is that all right?

  • CHET HAASE: Very briefly.

  • DAN SANDLER: Very briefly.

  • All right.

  • Let's talk about actually a lot of the system UI stuff

  • typically gets shown at one of the keynotes that

  • precedes What's New in Android.

  • So you've all seen a lot of the great stuff

  • that users are getting.

  • I'm going to talk to you about some of the stuff

  • that as developers you might be interested in.

  • The first one is display cutouts, a.k.a.--

  • well, there are other names for it.

  • These are coming to the ecosystem all over the place.

  • And so as a developer, you need to know where it's safe to draw

  • and where it isn't.

  • When you get your window insets on viewWindowInset, something

  • or other, you get DisplayCutout object,

  • which gives you all kinds of interesting data

  • about the cutout.

  • But you're probably going to want

  • to use something called windowLayoutInDisplayCutoutMode

  • on your window.

  • So there's the basic way, which is, I never

  • want to overlap the cutout.

  • Just leave a black bar at the top or the bottom.

  • Whatever.

  • I'm not all that interested.

  • A little more advanced would be display

  • cutout mode default, which is, if you were already

  • going to clear the status bar just fine,

  • we'll let the app window draw underneath the cutout as well.

  • So you'll get the nice action bar

  • color extending through the status bar

  • and extending underneath the cutout.

  • Better still, or more advanced still

  • is shortEdges cutout mode, which means

  • essentially any time there's a cutout on the short edges

  • of the device, and we're in portrait,

  • I will just draw underneath.

  • You don't have to do anything special.

  • And in that situation you do need

  • to look at the display cutout and ask it for the safe insets.

  • Essentially, well, OK, I'm drawing everywhere.

  • But you tell me what single rectangle of the screen

  • is safest to draw in.

  • And then finally, the cosmic version of this.

  • You can do shortEdges, but you can actually

  • get the bounds of the cutout as a region.

  • So you will get the exact set of rectangles

  • that are unavailable to you on the screen

  • so you can display UI in the corners

  • if the corners are available.

  • Or if there's a corner cutout, you

  • can move things out of the way so

  • that it's visible in the center of the display.

  • This is the most advanced version of it.

  • And you can put the electrical tape away,

  • because you can actually simulate notches now

  • in developer options on your device.

  • This is really, really exciting.

  • Slices actually was what we were calling it internally.

  • And we liked it so much we just kept it.

  • You've seen Slices now in a couple of keynotes.

  • It's essentially something that we've discovered and learned

  • about on system UI and in the toolkit over many years

  • of dealing with remote views for app widgets dealing

  • with notifications.

  • Essentially the problem of getting content from your app

  • into some other place.

  • So Slices is our new approach to remote content

  • that you can actually use to project UI into your own app,

  • or into other apps that support it.

  • It's very structured.

  • This is not sort of, here's a canvas, or an absolute layout.

  • Go nuts with it.

  • We give you a structure to fill out,

  • and a whole bunch of very flexible templates in which

  • to populate that data with some display

  • hints so that the receiving end of the slice, the slice host,

  • kind of knows what to do with it.

  • These are interactive.

  • These are updateable.

  • This is meant to be something that holds rich UI.

  • Sliders, controls, live information, possibly

  • videos, things that actually feel like real UI,

  • as opposed to a snapshot of something happening

  • in a distant process somewhere.

  • Slices are addressable by content URI.

  • And this is how they're passed around the system,

  • and how they're passed along to app indexing

  • to be shown in context like search.

  • And then finally, Slices is entirely

  • inside the support library.

  • It's entirely in Jetpack.

  • So it's backwards compatible.

  • You can use Slices all the way back to API 19.

  • There's a great talk about Slices tomorrow

  • bright and early, building interactive results

  • for Google Search.

  • Come to find out more about how all this technology works

  • and how you can build your own.

  • Related to Slices is Actions.

  • You can think of these as shortcuts with parameters.

  • Romain likes to think of them as visible intent.

  • This is essentially a deep link into your app

  • with some additional payload.

  • It's not just a link to music.

  • It's linked to the particular album, or something like that.

  • And you saw these as well in the keynotes,

  • showing up in a predictive space inside our app launching

  • experience, actions you define in an actions XML

  • file that goes into your APK or app bundle.

  • And that too can get registered with app indexing

  • so that search results and predictive features

  • can show those actions.

  • And there's a talk about this too,

  • Thursday, slightly less early in the morning.

  • Integrating your Android apps with the Google Assistant.

  • Notifications.

  • There was a lot of great stuff about digital wellness

  • and controlling notifications that you saw in the keynote.

  • And I'm very excited about it in P. I'm going to talk about some

  • of the developer stuff, though, that we have in here.

  • We asked users what notifications

  • are most important to them.

  • Users love messages.

  • So we focused our energy in enhancing the messaging style

  • API.

  • You can do inline images now.

  • You can do participant images, and attach other metadata

  • about the participant.

  • And we finally now have UI for smart reply,

  • which we've had on Android Wear for years.

  • So when you use RemoteInput.setChoices,

  • those will now appear as chips right in the notification

  • so you can respond instantly in the middle of a chat

  • without leaving the notification shade.

  • And there's tons of other stuff as usual.

  • I had one other slide that we added

  • about 10 minutes ago to this deck about notifications.

  • And I'm just going to let that sit

  • on the screen for a little while.

  • [CLAPPING]

  • So if you're doing something in the background,

  • the user still needs to know.

  • But Android P does a much better job of allowing notifications

  • that you may already have running

  • testify to that background activity,

  • including things like overlaying windows.

  • So with that, talk about the runtime, Romain.

  • ROMAIN GUY: So probably one of the most important things

  • for you as an Android developer is to understand

  • our deprecation policy.

  • It was announced a few weeks ago.

  • Soon we will require all the applications to target

  • some of the newest API levels.

  • And we're doing that to make sure

  • that we can keep the security level of Android

  • as high as possible, as well as performance,

  • and a lot of other nice things.

  • So what does it mean for you?

  • As of August this year, new applications

  • published on the Play Store will have to target API level 26.

  • And as of November this year, any update

  • to an existing application that you publish on the Play Store

  • will have to target API 26.

  • And you can expect those numbers to go up over time.

  • If you have native code in your application,

  • we've been supporting 32-bit and 64-bit for a few years now.

  • We will make 64-bit APIs required

  • as of August of next year.

  • You'll still be able to ship 32-bit support

  • in your application, but we will ask you to ship 64-bit as well.

  • One of the reasons to ship 64-bit on 64-bit devices

  • is that you get better performance and much

  • better code out of it.

  • If you want to know more about the deprecation policy,

  • there is a talk on Thursday afternoon.

  • And I'm sure you'll have a lot of questions for the folks

  • there.

  • App compatibility.

  • If you've tried the developer preview in P,

  • you might have noticed something different

  • if you're one of those naughty applications that

  • uses some of our private APIs.

  • On Android we have two types of private APIs, the APIs that

  • are actually marked private.

  • And then there's this weird @hide thing

  • that we use in our source code.

  • It's a Java Doc tag that we process especially

  • to indicate that this is a public API for us.

  • Not for you.

  • Just for us.

  • And we're a bit jealous because a lot of you are using them.

  • So from now on, a lot of those APIs

  • will trigger warnings in one form or another.

  • It might be toast, or it might be logs

  • when you make an illegal call.

  • For some of these APIs we need to hear from you

  • that you need those APIs for your application

  • to keep working.

  • Sometimes it's just an oversight.

  • We didn't make the API public.

  • It's just because we didn't think about it.

  • So please go to this URL, and let

  • us know if there's an API that you

  • think should be made public.

  • We might say yes.

  • We might also say no.

  • We have three types of lists.

  • I won't go into too much detail here.

  • But basically, if an API falls into the blacklist,

  • you will not be able to call it ever.

  • I'm not sure if we have anything in the blacklist right now.

  • But those will evolve over time.

  • So, again, let us know what APIs you need.

  • CHET HAASE: This is one of the important reasons.

  • This is why we ship previews.

  • We need you to go out there and try your applications

  • on the previews, because this is the time

  • to find out when there's problems that either you

  • can fix before the real release is out there,

  • or you can let us know if it's a problem that we

  • need to work on instead.

  • ROMAIN GUY: And that's Chet trying

  • to increase his engagement with his podcast.

  • So there's this podcast called ADB, Android Developer

  • Backstage.

  • And in episode 89, they had-- who

  • did you have in the episode?

  • CHET HAASE: Brian Carlstrom.

  • ROMAIN GUY: Brian Carlstrom.

  • And they talked about this app compatibility issue,

  • and what it means for you.

  • So go listen to it.

  • NDK.

  • The release 17 of the NDK brings a lot

  • of very interesting things.

  • So, first of all, the neural networks

  • APIs that were part of API level 27.

  • We also have a new shared memory API if you do a lot of JNI.

  • More importantly, we have finally ASAN,

  • the address sanitizer to make sure your code doesn't

  • scribble all over the memory.

  • Now you don't need a rooted device anymore to use it.

  • And we also have an undefined behavior sanitizer.

  • It can be very difficult to detect undefined behaviors

  • in your C or C++ code.

  • So now there's a tool for that.

  • We finally removed support for the deprecated APIs.

  • So if you still use ARMv5 or MIPS, MIPS 32-bit or 64-bit,

  • support is gone.

  • You should not be shipping those anymore.

  • In the upcoming release, release 18, we will remove GCC.

  • So the GCC compiler was deprecated last year.

  • Now everything is compiled with Clang in the NDK.

  • We think we gave enough time.

  • So GCC is going away.

  • So if you're still using it, maybe you

  • should not be in this talk.

  • You should go fix your code.

  • [LAUGHTER]

  • And finally, we added support for the simpleperf CPU

  • profiler.

  • And we also have support in Android Studio

  • for native profiling.

  • So you don't even have to type anything in the terminal.

  • Graphics and media.

  • The camera APIs are getting better and better.

  • We've added a lot of things that we were using ourselves

  • in the camera applications.

  • For instance, we give you access to the timestamps

  • of the optical image stabilization.

  • So if you want to build the kind of stabilization

  • we've built in the video recording part of the camera

  • application, now you can.

  • If your app is doing a lot of selfies

  • and using the display as a flash,

  • you can tell the camera that you're

  • doing that so you can adapt the exposure accordingly.

  • We have support for USB cameras.

  • I haven't seen any use for it, but I've heard some of you

  • ask about it.

  • So now it's available.

  • Multi-camera support.

  • There are some phones coming out out there

  • with multiple cameras in the back, or in the front

  • I suppose.

  • And now we can expose them as a logical camera that contains

  • more than one stream of data.

  • ImageDecoder.

  • I'm sure a lot of you are familiar with BitmapFactory.

  • And if you're not fond of that API, trust me,

  • we're not either.

  • So there's a new one called ImageDecoder.

  • It's part of Android P. The idea is to make it not only easier

  • to decode images, but also to make it possible to decode

  • animated images.

  • So ImageDecoder can decode bitmaps, but also drawables,

  • including animated drawables.

  • CHET HAASE: There's this new thing called animated GIFs.

  • I don't know.

  • All the kids are using them.

  • It's possible to actually load those now.

  • ROMAIN GUY: So there are a few concepts

  • that you have to learn when you learn ImageDecoder.

  • And we're going to go through them in an example.

  • So we have the concept of the source.

  • We have the concept of the post processor,

  • and finally, the header listener.

  • So this is what the API looks like.

  • First, you have to call createSource

  • on the ImageDecoder.

  • The source can be an asset.

  • It could be a file descriptor.

  • It can be many different things.

  • And the goal here is that once you create a source,

  • you can decode multiple images from the same source.

  • This is particularly useful if you want to build thumbnails.

  • You can decode the same source once at high resolution,

  • once at lower resolution, or even intermediate resolutions.

  • And that can be done from multiple worker threads.

  • Then you can call decodeBitmap.

  • You pass the source.

  • And you can optionally pass a header listener.

  • So the header listener, we have a lambda.

  • It gives you back the decoder itself,

  • the metadata about the image and the source.

  • And it's inside the header listener

  • that you can set the options.

  • So in BitmapFactory you had bitmapfactory.options

  • that you had to pass through Decode.

  • Here you have to wait for the header listener to be invoked.

  • CHET HAASE: We should point out too,

  • that set target size, that's kind

  • of a fundamental difference where the old bitmap--

  • DAN SANDLER: It's up there for them.

  • CHET HAASE: No.

  • I know.

  • I see that.

  • It's right there it.

  • [INTERPOSING VOICES]

  • CHET HAASE: That's a huge difference.

  • Like before, if you wanted the right target size,

  • you needed to work with, what?

  • In density?

  • As well as?

  • ROMAIN GUY: In sample size, in density,

  • and do a lot of trickery.

  • CHET HAASE: We didn't know how they worked either.

  • ROMAIN GUY: Yeah.

  • [LAUGHTER]

  • CHET HAASE: So a lot easier now.

  • ROMAIN GUY: Yeah.

  • Usually our answer was, figure it out.

  • Anyways, so now you can just tell us

  • what size you want the bitmap to be in.

  • And we'll take care of it, finally.

  • And you can also set the post processor.

  • So the post processor is something

  • with a simple interface.

  • It gives you a canvas so you can draw on the bitmap right

  • after it's decoded so you can add a header, like your title,

  • or some metadata on it.

  • Media.

  • We are adding support in the platform for the HDR

  • profile of VP9 so you can play HDR videos

  • in your applications.

  • YouTube was doing it, but they had their own way

  • of decoding videos.

  • If you own a device that doesn't support HDR,

  • the playback will be in low dynamic range instead.

  • But on a device that's capable, like a Pixel 2,

  • you will be able to see the HDR stream in all its glory.

  • We're also adding support, and bear with me,

  • cause it's a little bit confusing,

  • a format called HEIF.

  • Yeah.

  • It rolls off the tongue.

  • The High Efficiency Image Format.

  • So it's based on HEVC, which was also called H.265.

  • And the filename extension is commonly HEIC.

  • I don't know why they used different letters.

  • But that's what they did.

  • So we have to deal with it.

  • So it is a container.

  • And it can store multiple images.

  • So you can use it to store a single image with higher

  • quality and higher compression ratios than JPEG, for instance.

  • JPEG is a lot easier to say.

  • I like JPEG.

  • But you can also sew multiple images

  • if you want animated images or short movies.

  • This is part of the support library,

  • or, I guess, Jetpack now.

  • And this is not part of the compressed API

  • that you find on bitmap.

  • Because it's a container, it works differently.

  • So this is what it looks like.

  • You have to create a builder.

  • You have to tell us the path where

  • you want to output the file.

  • You have to give us in advance the width

  • and the height of the image.

  • And the source of the image can come from a bitmap.

  • But it can also come from a surface.

  • So you don't necessarily have, for instance,

  • if you're doing GR rendering, or if you're doing video playback,

  • you can include that directly as an image.

  • You don't have to go through an intermediate bitmap.

  • And then when you call writer to choose,

  • you can add multiple bitmaps.

  • In this case, we're adding only one.

  • And when you call stop, we write it out.

  • CHET HAASE: I should point out too

  • that even though it's spelled HEIC, it's pronounced GIF.

  • [LAUGHTER]

  • All right.

  • DAN SANDLER: Go.

  • ROMAIN GUY: What are you still doing here?

  • Vulkan.

  • So this is the slide that I'm excited about.

  • Very few of you will be.

  • And I'm sure you will be super excited by things like subgroup

  • ops and YCrCb formats.

  • More seriously, anybody who's building

  • middleware, for instance, the Unity engine, the Orion engine,

  • or if you're building games, Vulkan

  • is a low level graphics API that gives you

  • a lot more control over the GPU so you get higher performance

  • code.

  • And Vulkan 1.1 adds new capabilities that

  • were not possible in OpenGL.

  • But it also closes the gap with OpenGL.

  • So, for instance, the support of protected content.

  • We were not able to play back protected content in Vulkan

  • before.

  • So that will unlock a lot of things, like video players,

  • for instance.

  • Neural networks APIs.

  • They are not technically part of P. I mean, they are part of P,

  • but we announced them in API level 27.

  • You might have missed that.

  • It's a C API that's designed for machine learning.

  • It's also a fairly low level API.

  • It's meant for basically playback of trained models.

  • So things like TensorFlow are built on top

  • of your neural network API.

  • So you would use TensorFlow to do all the learning.

  • And the neural network APIs can do basically

  • the inference on device.

  • The interesting thing is that we're also unlocking the access

  • to the DSP that we use on Pixel 2

  • so you can get hardware accelerated machine learning

  • effectively on select devices.

  • ARCore you just saw in the developer keynote.

  • A couple months ago we introduced ARCore 1.0.

  • And they just announced ARCore 1.2.

  • This takes care of tracking things in the real world.

  • The problem is that you had to write a lot of OpenGL code.

  • And it's not always pleasant.

  • So to makes your life easier, we're

  • introducing support in the emulator.

  • So when you create an AVD, you can specify a virtual camera

  • stream for the back camera, and you get the full 3D scene.

  • And it works in any view that displays the camera stream.

  • And using the keyboard and the mouse,

  • you can just navigate around the UI.

  • You even get patterns on that fake TV screen

  • so you can do image recognition and pattern

  • tracking, that kind of stuff.

  • It's available today.

  • Also we have Sceneform.

  • So they already talked about it in the dev keynote.

  • I won't talk about it too much.

  • I will only say, this is what I've been working on

  • for the past few months.

  • So I still don't have a name, because we did that

  • to Daydream.

  • But anyway, that's what I was up to.

  • And if you want to know more about Sceneform,

  • there is a talk tomorrow afternoon at 5:30 PM.

  • And we're going to talk about the underlying tech

  • and how to use the API.

  • And finally, Chrome OS on Pixelbook,

  • you can now run Linux applications

  • on your Chromebook.

  • And in particular, you can run Android Studio.

  • I believe there are some limitations.

  • But one of the things you can do is run your Android apps

  • as apps on Chrome OS.

  • So you can use Chrome OS as a full blown Android development

  • platform, I guess whenever it's available.

  • [CLAPPING]

  • Many, many more sessions today, tomorrow, and Thursday.

  • You know, I said earlier, there's

  • a lot of folks back home who have

  • been doing all the hard work.

  • We're just talking about it.

  • So thank you very much to all the engineering

  • teams, and the PMs, and the designers, and tech writers,

  • everyone who made this possible.

  • We didn't do anything.

  • We're just here to hear you be happy.

  • CHET HAASE: Some of us did even less.

  • ROMAIN GUY: Yes.

  • And that's it for today.

  • So thank you very much.

  • DAN SANDLER: See you at the Sandbox office hours.

  • Bring your questions.

  • CHET HAASE: Yes.

  • We have Framework office hours.

  • There is Android Sandbox running all week.

  • DAN SANDLER: We've done our best to bring

  • as many people from our teams here

  • to be able to talk to you about these new features,

  • these new APIs as possible, because we

  • know you can't get that anywhere else besides Google I/O.

  • CHET HAASE: And also there's an overflow area.

  • I can't remember where it is exactly.

  • Most of the speakers from Android sessions

  • will make their way afterwards.

  • So if you can't get your question answered

  • at the session, you should be able to find them

  • after that, like us there now.

  • Thank you.

  • [CLAPPING]

  • [MUSIC PLAYING]

[MUSIC PLAYING]

Subtitles and vocabulary

Click the word to look it up Click the word to find further inforamtion about it