 Hey, thanks and welcome. We're going to be doing building modern applications or at least modern Android applications using Xamarin. I'm John Douglas. I'm a senior program manager over the Mobile Dev Tools. I've worked with Xamarin since about 2013 or so. So I've been around in some way or shape or form. So if you're unfamiliar with Xamarin, Xamarin's app architecture is quite unique compared to some other approaches. You have three different UI layers or framework layers with regards to iOS using C-Sharp, Android using C-Sharp, and you have the .NET framework using C-Sharp. And this kind of all encompasses into a shared C-Sharp layer, which you can include all of your business logic, all of your platform APIs, and even your whole user interface, such as using Xamarin Forms or other MVVM frameworks. If you want to get started with Xamarin, of course, we have awesome docs.net.microsoft.com slash apps slash Xamarin. And you can get started there. We'll kind of cover this as well while we're going through this presentation. But what I want to focus on is the Android section. And if you're familiar, this fall, of course, we had a new iOS drop. We had a new Android drop. And I just kind of want to talk about some of the new features and show you how you can get started with those today. So Android 10, Android 10, which was released earlier this September, it's Google's latest operating system. And hopefully, if you have an Android device today, you've updated to it. Let me know your feedback if you like Android 10 or not. Like I said earlier, it was released in September. This is kind of a yearly lifecycle with Android releases, usually one per year, sometimes two. But this release includes quite a bit of support. So like iOS, it includes a dark mode. However, Android is a little bit more unique and includes foldables. So devices that allow you to fold. And I don't know if you've ever seen some of those reviews, but there's some pretty cool foldables out on the market today, and it's still only in its infancy. You also have some support for some privacy improvements. And what this really is, is just making sure that your data is at the forefront of your decisions rather than apps using your data in potentially malicious ways. There's also gesture navigation. So they're kind of trying to move away from the hardware buttons, if you're familiar with that. You can now do a lot of navigation just via gestures, similar to iOS. There's a lot of notification improvements. If you haven't seen some of those improvements, they're allowing you to do more actions within notifications and quick replies and the likes. Android 10 also includes TLS 1.3 and also improved security with biometrics. So better biometric support. So you can get your hands onto that, literally. And there's so much more. This is only the tip of the iceberg. But you can kind of see some of the various features here. Dark theme, just kind of get a dark theme on all of your apps. You can opt into it. Apps that support dark theme, it's a quick little add-on that you can add into your app today. You also have gesture navigation, which is a cool little ability to just swipe your finger and exit out of the app, swipe up, those type of things. And then foldable support, again. Similar, you can just be able to fold your device, kind of like a Palm Pilot 2.0, I guess. So I want to talk about Jetpack. And Android Jetpack is a new kind of collection of recommended packages to build high-quality mobile applications with. So what kind of happened was there was all these open source projects, a lot of different packages that were just like, oh, that's a must-have in this app, or that's a must-have in this app. And Google kind of took a step back and said, well, let's actually just create a suite of recommended packages that are highly testable, app store quality, whatever you can figure there. But they kind of come in four different categories. The first one being kind of architecture components. We're going to cover that a little bit later, but these are kind of the packages that help add anything to an architecture. So they added a new thing called ViewModel, allows you to do an NVVM pattern within Android. They also allow some different architecture components that allow you to have better lifecycle dependencies and the like. So you can actually add events onto various lifecycle events within Activity, Fragment, and the likes. There's also like Work Manager, which is kind of a cross-platform, or a cross-API way of doing services. So if you are familiar with Android services, it does get complicated, but we'll go into that a little bit later. You also have a UI section. This is going to be anything that is UI-driven. So think of like a RecyclerView, maybe a ViewPager, and the likes. There's also a Foundation package, which is basically all the things that are kind of required for most apps today. We won't get too much into that just because they're kind of a default package. And then there's also behaviors. So behaviors are more of like, how do you want your app to interact? Do you want animations? Do you want emoji support? Those type of things. And again, I mentioned earlier, every collection is backwards compatible and also limits any of the boilerplate code that you might have to deal with. So AndroidX Libraries. So I talked about Jetpack, and Jetpack being a collection of AndroidX Libraries, but AndroidX is much more than a recommended collection. AndroidX is the successor to the Android Support Library. And if you aren't familiar with the Android Support Library is this is kind of the first effort to create a library that really supported the Android framework. And this was back in 2011. So this has come about eight years to kind of make this a little bit more simple and even refined and actually rethought. So one distinction here is that it's known as Android extensions. And that's not to be confused with Android 10, if you were to use like a Roman numeral X. So this is kind of one of those points where it's an extension onto the Android framework. So they basically took a step back and made huge improvements. So one huge thing was coherent package naming was one of the biggest issues. There used to be a package convention such as Support v7, AppCompat v7, or sorry, Support v4, AppCompat v7, and the likes. And those used to mean that they were supported all the way back to API4 or API7. And now there's really none of that to get to worry about. You also have each package and they are separately maintained. And what that means is that you just have a better life cycle with regards to the development features on those and also the servicing and the likes. Previously, they were all updated in one huge sweep and that wasn't too frequently. And again, as I mentioned, features just get added as they pertain to each package. And all of these Android X packages are available on NuGet when you use Xamarin. So you can find them easily. You don't have to worry about the support libraries anymore, you can go straight to Android X instead. And so talking about Android X packages, all your favorite packages like Fragment, AppCompat, RecyclerView, and the likes, they now just come into a Jetpack collection or as a standalone Android X package. So as you may see from this list, you might see that Foundation includes an AppCompat package, a Wearable OS package, architecture includes that WorkManager, that ViewModel, and Room, and the likes. So they kind of are broken down into that way. When it comes to Android X, you might already have the Android Support Library installed in your project. And what this really requires is a migration. So we have a migration package available on NuGet that basically will take your support library packages and move them over slash migrate them to an Android X equivalent. This doesn't capture the whole migration process, but the IDE also has Visual Studio, also has a one-time migration tooling that is available in the 16.4 and 8.4 previews. That's for Visual Studio or Visual Studio for Mac. And what that will do is if your package had the old support namespaces within your project, it'll just migrate all those to the Android X equivalent and make sure that you can just get started and work on your app. So let's talk about material components before we jump into some of the other Jetpack areas. So material components are based off of material design. And what is material design, you may ask? Well, material design is a visual language that basically takes all of these classic principles of good design and just tries to keep up with the pace of technology. That's kind of it as a nutshell, but some of the things that really influence material design is that it's inspired by the physical world and all the textures. So if you think of like a piece of paper, how does a piece of paper sit on a desk? Is there some like elevation? Is there some shadowing, you know, those type of things? So really it's about how the surface is interact, how does the light reflect the shadows, all those different things. Another big concept is that material design is very bold, graphic and intentional. So what that means is that there's very bright colors, very bold colors. All of the typography is intentional. All the grids are used wisely. The space, there's plenty of white space and the likes. And then kind of like the last main concept, although there's many concepts around material design, is that motion provides meaning. So as you're interacting with an app, you're going to get feedback regarding, you know, did something do a transition on me? Can I go backwards with this gesture? Can I tap on this button and see feedback of it rippling and the likes? And last but not least, material design is cross-platform. What that means is it's just a design philosophy that can be applied to really everything. So if you think of material design, you'll see Google apps that look consistent on all platforms, the web, iOS and Android. And it all kind of stemmed from Android. So material components, however, material components are a collection of just these beautiful reusable controls that Google has provided that are based off of material design. And really you can use these as the interactive building blocks for all of your Android user interfaces. And the cool part about material components is you're going to have a beautiful app while using them. And they're also backwards compatible to API 14. And API 14, for those who don't know, it's pretty old nowadays, which means that you're gonna be able to support probably 98 to 100% of the modern day market. And again, these are available on NuGet. If you do wanna get those, and we'll show the links at the end. But you can kind of see some cool little, you'll see all the various motion being done on this sample and the likes where you hit something, you can see that feedback where you go to a new page, you see that you transitioned and the likes. But let's talk about architecture components now. So architecture components I mentioned earlier are kind of one of those four areas. And it's really just a collection of libraries to design like very testable and maintainable apps. And previously it was very difficult to do testing and the likes on Android, especially with the various ways that you would manage your life cycles and the likes. But this is an Android oriented approach to like data persistence and the management of all those components. So they added a few different types of libraries here. So one popular one known as Room, which is a SQLite mapping library. And there's a lot of ways that you can do a SQLite, like ORM or object relational mapper. But Room does a pretty good job and it's very performant. Next is ViewModel. So if you come from the .NET world, ViewModel is pretty much already a baked concept and it's been around for a while or at least MVVM has been in that standard for a while. This is just a special class within the architecture components that allows you to basically have a ViewModel that already stores like the UI data and also can persist on a configuration change. So you don't have to really worry about a lot of that boilerplate code as you would if you rolled your own MVVM framework within Xamarin. And then you have like Lifecycle. And Lifecycle again kind of manages your activity in fragment life cycles. This has been a really hard thing to manage historically speaking. So like what happens when the activity rotates? What happens when the activity is destroyed? What happens when the fragments paused? You know, these different life cycle events and likes again, these are all available on Nougat so you can get started. Android app bundles. So one cool thing about Android app bundles is that the Android app bundle is a new packaging format created by Google to really become the successor to the APK. And although it's not quite a successor because it generates APKs, it's the new file format that Google is going to expect you to upload and so that you can deploy your applications on the Google Play Store. So what the app bundle does is it generates an optimized APK based on the bundle, your device and some of your device settings such as your locale, the language, the CPU and the likes just to kind of understand what you need within that APK. It's also known as a AAB or a dot Android app bundle. And what this does is this enables what's called Google Play Dynamic Delivery. And Google Play Dynamic Delivery will just generate a custom APK based off of all those things I mentioned before. So instead of having this huge APK package that you put on the Play Store and it can support every single device, every language and every architecture and the likes, you can still do that with a very large app bundle. However, the app bundle is only going to generate an APK that will match your user at the current time. So if they, well, we'll go to an example in a second here. And then kind of the next thing that's being done here is you can also support dynamic features within your app. So if you want your users to be able to download features in your app such as, for example, you just want a slim version of your app, but if they paid money and then you wanted them to download new features, you can do that now, which is kind of cool because previously you'd have like a light version of your app on the app store and then a paid version and the likes. And of course you can still do that, but this kind of makes it a little bit easier to potentially monetize your applications. So going back to the Android app bundle, here's a quick example. Say you had a specific language, you had a specific size of your phone and you also had an ABI or basically your architecture. And well, you're like, okay, I want to download this app from the app store. Well, once I do that, Google Play Dynamic Delivery is going to generate an APK that has all the items that you require from your device. So for example, you might have an ARM64 device. You might need to support English and French. This device supports pretty high quality resources and then it just has the base of your app. So basically your app with all the various items on top. The cool thing about Android app bundles though is it really reduces the size of the APK that the user is going to install. That is huge for a lot of different areas where data might be limited. You might be on a 3G connection. You might go to the app store and see that this application is over like 50 megabytes. Well, if you're like me, you probably won't download that right at the spot because that's a lot of data. So instead this can really shave those packages sizes to be quite small, close to I'd say 15 to 20 megabytes instead for most cases and it's pretty powerful. But last but not least, I do want to talk about C-Sharp 8 support and starting with a mono 6.0 C-Sharp 8 support kind of already landed and they're continually have a support added in 6.2 and 6.4 and those are mono versions but this includes support for default interface methods, noble reference types, acing streams and quite a bit more. But the cool part about this is that this is included in Xamarin Android 10.0 and above which includes that mono 6.4 version. So if you want to use C-Sharp 8 support or if you only use C-Sharp 8 today within Xamarin all you have to do is update to the latest stable and you can get that today. There's also .NET standard 2.1. So Xamarin Android 10.0 now supports .NET standard 2.1 so it includes all those added types from the 2.0 to 2.1 release. And last, really last but not least, all this, all that we talked about and the likes it's either on Nougat today or it's included within Xamarin Android 10.0 which you can get within Visual Studio 16.3 or Visual Studio for Mac 8.3. So again, that's Android 10 app bundles, Android X packages, material components, .NET standard 2.1 and C-Sharp 8 support. And if you want to get started today you can go to visualstudio.microsoft.com slash downloads and download Visual Studio or Visual Studio for Mac. Thanks. Perfect, let me change over here. So if we do have maybe five minutes we can take some questions and the likes. Yeah, so, oh, actually there's a great question here. I'm from, I can't read it, act by, look, he says, look, or here she says, looking at new phones, do you have any advantages for you as a test device? Sorry, John, I mean, I was muted over here so again, I'm trying to go with four buttons. Yeah, so the question is looking at new phones, do you have any advantage for you as a test device? Yeah, so when it comes to new phones, I've been an Android developer for almost a decade now. When it comes to buying a new phone and the likes, really I think the best phones are the PixelSuite devices just because they get over-the-air updates. However, if you're on a budget, it's pretty affordable to go to any store buy a $50 phone on eBay or Walmart or something like that and that will get you by for a year or two of updates. Gotcha. From earlier on, there was a question about, is Material Design the child of Esquimorphic and Metro? I don't believe it's the child. I think it was mostly driven by Google research efforts and kind of the trend around Metro and Flat and all these various design patterns that were kind of going on back in the early 2000s. Okay, we're having a little bit of issue with your Skype connection. It kind of showed, you kind of flickered a little bit. Could you repeat that answer again or say it again? Absolutely. Yeah, so for Material Design, it's been kind of a Google research effort for a long time before it ever was announced and it was kind of a collection of seeing the trends with regards to like Metro, Flat and all the various other design patterns that were kind of being thrown around back in like the early 2000s, late 2000s and the likes. It's been around for a while now though. Okay, cool. So let me ask you this. This is more of my question. So I'm an ASP.net developer and so what would you recommend for me to try to make a jump to start doing some mobile development whether it be with iOS or with Android? Using Samsung? Sure. Yeah, so if you were kind of like an ASP.net developer.net developer, you might have experience using XAML and the likes. Xamarin.Forms is a great way to get started. It's a way to build a cross-platform application using one code base, but you get to have iOS, Android and more with regards to what you want to target. That's one way to start. However, if you're kind of interested in mobile development, you can also get started using say the native toolkits and the ways of building apps similar to what you would do with Xcode or Android Studio, but you can do that all using .net and C-Sharp instead. That's a great answer. So let me ask you this. What's in, is it better? And this is more of like, I would say a preference question to do some of the development on macOS or in Windows. Obviously with Windows you have Visual Studio and obviously in macOS you have Visual Studio for Mac. So is there a preference of coming from either side? Yeah, so the best thing to do, of course, is determine your situation. If you want to be building applications for Mac or iOS, you're gonna need a Mac of some sort to kind of use the Xcode tooling. But if you want to get started with Android, you can do that on either platform. So it really just depends on what you prefer. Windows is a great environment and Mac's also a great environment. The beauty with cross-platform frameworks is you can do them on either. You can actually go between both if you want it as well. So just depends on what device you want to use and the likes. Perfect, thank you so much. If anybody has any more questions, we still have some time left here with John. Kendra, what do you have any questions? No. I do not. All right, well, John, thank you so much for taking the time to speak with us. And where can we download that again? Some of the... VisualStudio.Microsoft.com slash downloads to get started with Xamarin. Thank you so much. We're gonna finish up here and we're gonna get the next speaker rocking and rolling. Thank you so much, John. Thank you, bye-bye.