Subtitles section Play video Print subtitles [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]
B1 US chet android api apis sandler cutout What's new in Android (Google I/O '18) 24 2 Tony Yu posted on 2019/01/02 More Share Save Report Video vocabulary