Slide 1

Slide 1 text

Jaesung Lee GDSC HUFS What’s New in Android #android

Slide 2

Slide 2 text

Adobe Stock#243026154 GDSC HUFS HUFS I.C.E Android Developer Jaesung Lee @jdoongxx @JaesungLeee

Slide 3

Slide 3 text

Google I/O 22 https://www.youtube.com/watch?v=Z6iFhczA3NY&t=1269s

Slide 4

Slide 4 text

Android 13 Tiramisu

Slide 5

Slide 5 text

https://developer.android.com/about/versions/13

Slide 6

Slide 6 text

Beta 3 User now has a choice to make app icons inherit the theme color Themed App Icons

Slide 7

Slide 7 text

Beta 3 Must provide a monochromatic app icons https://developer.android.com/about/versions/13/features Should be VectorDrawable 44 x 44dp area inside a 108 x 108 dp container Can be a maximum of 72 x 72dp if needs larger

Slide 8

Slide 8 text

// Add on res/mipmap-anydpi-v26/ic_launcher.xml // In your AndroidManifest.xml https://developer.android.com/about/versions/13/features

Slide 9

Slide 9 text

https://developer.android.com/about/versions/13

Slide 10

Slide 10 text

Beta 3 Built in photo picker in OS. Using the picker doesn’t require READ_STORAGE permission. Photo Picker

Slide 11

Slide 11 text

Beta 3 Android 13 support for a new photo picker tool. https://developer.android.com/about/versions/13/features Provides a safe, built-in ways for select media files No need to grant access permission

Slide 12

Slide 12 text

// Launches photo picker in single-select mode. val intent = Intent(MediaStore.ACTION_PICK_IMAGES) startActivityForResult(intent, PHOTO_PICKER_REQUEST_CODE) // Launches photo picker in multi-select mode. val maxNumPhotosAndVideos = 10 val intent = Intent(MediaStore.ACTION_PICK_IMAGES) intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxNumPhotosAndVideos) startActivityForResult(intent, PHOTO_PICKER_MULTI_SELECT_REQUEST_CODE) https://developer.android.com/about/versions/13/features

Slide 13

Slide 13 text

// Launches photo picker in single-select mode. val intent = Intent(MediaStore.ACTION_PICK_IMAGES) startActivityForResult(intent, PHOTO_PICKER_REQUEST_CODE) // Launches photo picker in multi-select mode. val maxNumPhotosAndVideos = 10 val intent = Intent(MediaStore.ACTION_PICK_IMAGES) intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxNumPhotosAndVideos) startActivityForResult(intent, PHOTO_PICKER_MULTI_SELECT_REQUEST_CODE) https://developer.android.com/about/versions/13/features

Slide 14

Slide 14 text

// handle multiple-select images private val registerImagePickerIntent = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode != Activity.RESULT_OK) { // Handle error return } val imageUrls = mutableListOf() repeat(result.data?.clipData?.itemCount ?: 0){ imageUrls.add(result.data?.clipData?.getItemAt(it)?.uri ?: return) } // handle Images } registerImagePicker.launch() https://developer.android.com/about/versions/13/features

Slide 15

Slide 15 text

// handle multiple-select images private val registerImagePickerIntent = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode != Activity.RESULT_OK) { // Handle error return } val imageUrls = mutableListOf() repeat(result.data?.clipData?.itemCount ?: 0){ imageUrls.add(result.data?.clipData?.getItemAt(it)?.uri ?: return) } // handle Images } registerImagePicker.launch() https://developer.android.com/about/versions/13/features

Slide 16

Slide 16 text

// Launches photo picker for videos only in single select mode. val intent = Intent(MediaStore.ACTION_PICK_IMAGES) intent.type = "video/*" startActivityForResult(intent, PHOTO_PICKER_VIDEO_SINGLE_SELECT_REQUEST_CODE) https://developer.android.com/about/versions/13/features

Slide 17

Slide 17 text

Beta 3 Support multilingual users to select other languages for specific apps, such as Dutch, Chinese, or Hindi. Per-app language preferences

Slide 18

Slide 18 text

Beta 3 Per-app language preferences https://developer.android.com/about/versions/13/features/app-languages Provide a better experience for multilingual users APIs that let apps set a different language at runtime

Slide 19

Slide 19 text

Beta System Settings for users https://developer.android.com/about/versions/13/features/app-languages To ensure your app's languages are configurable in system settings on devices running Android 13

Slide 20

Slide 20 text

// Create file called res/xml/locale_config.xml // Add a localeConfig on AndroidManifest.XML https://developer.android.com/about/versions/13/features/app-languages

Slide 21

Slide 21 text

Alpha Handle in-app language pickers https://developer.android.com/about/versions/13/features/app-languages Can implement using AndroidX androidx.appcompat:appcompat:1.6.0-alpha04

Slide 22

Slide 22 text

val appLocale: LocaleListCompat = LocaleListCompat.forLanguageTags("xx-YY") // Call this on the main thread as it may require Activity.restart() AppCompatDelegate.setApplicationLocales(appLocale) https://developer.android.com/about/versions/13/features/app-languages#androidx-impl

Slide 23

Slide 23 text

Beta 3 Notification will be opted-out by default. Apps need to request permission to send notification. Notification Permission

Slide 24

Slide 24 text

Beta 3 Notification permission https://developer.android.com/about/versions/13/changes/notification-permission New runtime permission for sending non-exempt notification from an app

Slide 25

Slide 25 text

https://developer.android.com/training/permissions/requesting

Slide 26

Slide 26 text

Beta 3 On newly installed app https://developer.android.com/about/versions/13/changes/notification-permission Must ask permission explicitly if the app targets Android 13 System will ask permission when first notification channel is created if the app targets Android 12 and lower On existing app The grant lasts until user launches the app if the app targets Android 13 The grant lasts until user select an option from permission prompt if the app targets Android 12 and lower

Slide 27

Slide 27 text

// Add on AndroidManifest.XML ... https://developer.android.com/about/versions/13/features/app-languages

Slide 28

Slide 28 text

Beta 3 Other Changes https://developer.android.com/about/versions/13/features NEARBY_WIFI_DEVICE permission Body sensor background permission Quick settings API BLE Audio support and more…

Slide 29

Slide 29 text

Developing privacy user-centric apps Recommended https://io.google/2022/program/b1812a3f-fa67-423e-85fa-4edb0bf54d30/intl/ko/

Slide 30

Slide 30 text

Overview of the Privacy Sandbox on Android Recommended https://io.google/2022/program/3b5391ef-d824-4480-a619-30ee923dd0ce/intl/ko/

Slide 31

Slide 31 text

Basics for System Back Recommended https://io.google/2022/program/5c6a8dbb-7ac2-4c31-a707-0a16e8424970/intl/ko/

Slide 32

Slide 32 text

Best practices for running background work on Android Recommended https://io.google/2022/program/477adf14-7c6d-4710-9f19-b127421a396c/intl/ko/

Slide 33

Slide 33 text

Jetpack JankStats, Baseline Profiles, Room, …

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

androidx.metrics:metrics-performance JankStats Alpha Track and analyze jank performance problems in your app’s UI

Slide 37

Slide 37 text

JankStats Alpha Compatible down to API Level 16 Identifies performance issues using internal heuristics Provides UI context to attribute data to user states and actions Reports results on every frame via a listener androidx.metrics:metrics-performance:1.0.0-alpha01 https://developer.android.com/topic/performance/jankstats

Slide 38

Slide 38 text

androidx.profilesinstaller:profileinstaller:1.1.0 Baseline Profiles Stable Create profiles for your app that prepopulate ahead of time compilation tracest to reduce startup times and reduce jank

Slide 39

Slide 39 text

Baseline Profiles Stable Provide custom profile rules in apps and libraries Startup and jank performance improvements Profiles added to popular Jetpack libraries androidx.profileinstaller:profileinstaller:1.1.0 https://developer.android.com/jetpack/androidx/releases/navigation#2.4.0

Slide 40

Slide 40 text

androidx.room:room:2.4.2 Room Stable Database persistence layer designed for usability, safety, and testability

Slide 41

Slide 41 text

Room Stable Auto Migrations Support for Kotlin 1.6 Room written in Kotlin starting from 2.5.0 Performance Improvements with KSP in 2.4.0 Room-Paging Support (Paging 3.0) Relational Query Methods androidx.room:room:2.4.2 https://developer.android.com/jetpack/androidx/releases/room#2.4.0

Slide 42

Slide 42 text

// Auto Migrations @Database( version = 2, entities = [User::class], autoMigrations = [ AutoMigration ( from = 1, to = 2, spec = AppDatabase.MyAutoMigration::class ) ] ) abstract class AppDatabase : RoomDatabase() { @RenameTable(fromTableName = "User", toTableName = "AppUser") class MyAutoMigration : AutoMigrationSpec } https://developer.android.com/training/data-storage/room/migrating-db-versions#automated

Slide 43

Slide 43 text

// Supports multimap return types // like Map, SparseArray, LongSparseArray, etc. // 1:1 Relation Map @Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map // 1:N Relation Map @Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map> https://developer.android.com/training/data-storage/room/accessing-data#multimap

Slide 44

Slide 44 text

What’s new in Jetpack Recommended https://io.google/2022/program/c7710536-a86d-42a6-b43e-e69ae76dbb34/intl/ko/

Slide 45

Slide 45 text

What’s new in Jetpack Recommended 06/30 20:40!

Slide 46

Slide 46 text

Fragment New Fragment API, Migrations..

Slide 47

Slide 47 text

Unbundled Library Fragment Added in Honeycomb, unbundled in Ice Cream Sandwich 01 Consistent experience across all SDK levels 02 https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/

Slide 48

Slide 48 text

Mini Activity Fragment View Lifecycle SavedInstanceState onConfigurationChanged onActivityResult Loaders Fragment https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/

Slide 49

Slide 49 text

Fragment Today Fragment View The View is all your fragment needs by default Lifecycle Fragment Result ViewModelStore ActivityResultCaller SavedStateRegistry MenuProvider https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/

Slide 50

Slide 50 text

Good Fragment APIs? Not in androidx.fragment 01 You should be using the other components that Fragments now have access to 02 https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/

Slide 51

Slide 51 text

AndroidX Lifecycle https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/

Slide 52

Slide 52 text

https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/ ViewPager

Slide 53

Slide 53 text

override fun onViewCreted(view: View, savedInstanceState: Bundle?) { viewLifecycleOwner.lifecycleScope.launch { viewLifecycleOwner.repeatOnLifecycle(RESUMED) { viewModel.locationFlow.collect { // handle flow } } } } https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/

Slide 54

Slide 54 text

What about outside of these scopes? https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/ App UI Layer UI Element belong to Fragments State Holder manages UI State

Slide 55

Slide 55 text

@HiltViewModel class HomeViewModel @Inject constructor( val newsRepository: NewsRepository ): ViewModel { val news: Flow> = newsRepository.getNews() ... } @AndroidEntryPoint class HomeFragement : Fragment() { // Use fragment-ktx extension to get a ViewModel private val viewModel: HomeViewModel by viewModels() } https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/

Slide 56

Slide 56 text

class PageFragment : Fragment() { // Scope the fragment to the parent fragment private val sharedViewModel: PagerViewModel by viewModels(ownerProducer = { requireParentFragment() }) // Or scope the fragment to an Activity private val activityViewModel: mainViewModel by activityViewModels() // Or scope the fragment to a Navigation Graph private val graphViewModel: WelcomeGraphViewModel by navGraphViewModels("welcome") } https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/

Slide 57

Slide 57 text

class PageFragment : Fragment() { // Scope the fragment to the parent fragment private val sharedViewModel: PagerViewModel by viewModels(ownerProducer = { requireParentFragment() }) // Or scope the fragment to an Activity private val activityViewModel: mainViewModel by activityViewModels() // Or scope the fragment to a Navigation Graph private val graphViewModel: WelcomeGraphViewModel by navGraphViewModels("welcome") } https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/

Slide 58

Slide 58 text

class PageFragment : Fragment() { // Scope the fragment to the parent fragment private val sharedViewModel: PagerViewModel by viewModels(ownerProducer = { requireParentFragment() }) // Or scope the fragment to an Activity private val activityViewModel: mainViewModel by activityViewModels() // Or scope the fragment to a Navigation Graph private val graphViewModel: WelcomeGraphViewModel by navGraphViewModels("welcome") } https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/

Slide 59

Slide 59 text

Adobe Stock#243026154 ViewModel Fragment Result

Slide 60

Slide 60 text

// In Fragment B binding.submitBtn.setOnClickListener { val result = "result" // Use Kotlin extension in fragment-ktx artifact setFragmentResult("requestKey", bundleof("bundleKey" to result)) } // In Fragment A setFragmentResultListener("requestKey") { _, bundle -> // Any type can be put in a bundle is supported val result = bundle.getString("bundleKey") // Do something by result } https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/

Slide 61

Slide 61 text

// In Fragment B binding.submitBtn.setOnClickListener { val result = "result" // Use Kotlin extension in fragment-ktx artifact setFragmentResult("requestKey", bundleof("bundleKey" to result)) } // In Fragment A setFragmentResultListener("requestKey") { _, bundle -> // Any type can be put in a bundle is supported val result = bundle.getString("bundleKey") // Do something by result } https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/

Slide 62

Slide 62 text

Fragment Result https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/ FragmentManager Fragment B Fragment A

Slide 63

Slide 63 text

Fragment Result https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/ FragmentManager Fragment B Fragment A Result

Slide 64

Slide 64 text

Fragment Result https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/ FragmentManager Result Fragment B Fragment A

Slide 65

Slide 65 text

Fragment Result https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/ FragmentManager Result Fragment B Fragment A

Slide 66

Slide 66 text

Fragments: The good (non-deprecated) parts Recommended https://io.google/2022/program/c9085b18-4e8e-4183-b303-1d1716b0c070/intl/ko/

Slide 67

Slide 67 text

Lazy Layouts

Slide 68

Slide 68 text

https://io.google/2022/program/14bb63ef-2dd1-460a-9871-5f51ec1afec9/intl/ko/

Slide 69

Slide 69 text

https://io.google/2022/program/14bb63ef-2dd1-460a-9871-5f51ec1afec9/intl/ko/ LazyColumn LazyRow Lazy grids

Slide 70

Slide 70 text

class FlowersAdapter(private val onClick: (Flower) -> Unit) : ListAdapter(FlowerDiffCallback) { class FlowerViewHolder( itemView: View, val onClick: (Flower) -> Unit ) : RecyclerView.ViewHolder(itemView) { private val flowerTextView: TextView = itemView.findViewById(R.id.flower_text) ... fun bind(flower: Flower) { ... } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FlowerViewHolder { ... } override fun onBindViewHolder(holder: FlowerViewHolder, position: Int) { ... } } https://io.google/2022/program/14bb63ef-2dd1-460a-9871-5f51ec1afec9/intl/ko/

Slide 71

Slide 71 text

https://io.google/2022/program/14bb63ef-2dd1-460a-9871-5f51ec1afec9/intl/ko/

Slide 72

Slide 72 text

https://io.google/2022/program/14bb63ef-2dd1-460a-9871-5f51ec1afec9/intl/ko/

Slide 73

Slide 73 text

https://io.google/2022/program/14bb63ef-2dd1-460a-9871-5f51ec1afec9/intl/ko/ class FlowerListActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val flowersAdapter = FlowersAdapter { flower -> adapterOnClick(flower) } val recyclerView: RecyclerView = findViewById(R.id.recycler_view) recyclerView.apply { adapter = flowersAdapter ... } } }

Slide 74

Slide 74 text

@Composable fun FlowerList(flowers: List) { LazyColumn { items(flowers) { flower -> FlowerItem(flower) } } } @Composable fun FlowerItem(flower: Flower) { Column { Image(flower.image) Text(flower.name) } } https://io.google/2022/program/14bb63ef-2dd1-460a-9871-5f51ec1afec9/intl/ko/

Slide 75

Slide 75 text

Adobe Stock#243026154 LazyColumn { // LazyListScope block item { Text(header) } items(data) { item -> Item(item) } }

Slide 76

Slide 76 text

Adobe Stock#243026154 LazyColumn { // LazyListScope block item { Text(header) } items(data) { item -> Item(item) } }

Slide 77

Slide 77 text

Adobe Stock#243026154 LazyColumn { // LazyListScope block item { Text(header) } itemsIndexed(data) { index, item -> Item(item, index) } } 3 2 5 4 6 1

Slide 78

Slide 78 text

Lazy layouts in Compose Recommended https://io.google/2022/program/14bb63ef-2dd1-460a-9871-5f51ec1afec9/intl/ko/

Slide 79

Slide 79 text

Large Screens

Slide 80

Slide 80 text

Why Large Screens? Large Screens https://io.google/2022/program/eb6e6fb3-b24d-4baf-a1d9-f176198fc595/intl/ko/ Android 12L (API Level 32) Optimized UX Multi-tasking

Slide 81

Slide 81 text

Quality matters Large Screens Material guidelines https://goo.gle/large-screens-guidelines App quality guidelines https://goo.gle/ls-app-quality Compatibility checklist https://goo.gle/ls-checklist https://io.google/2022/program/eb6e6fb3-b24d-4baf-a1d9-f176198fc595/intl/ko/

Slide 82

Slide 82 text

Adobe Stock#243026154 Large Screens Large Screens made easy Jetpack WindowManager 1.0 released! Window size classes Activity embedding SlidingPaneLayout Jetpack DragAndDrop and more.. https://io.google/2022/program/eb6e6fb3-b24d-4baf-a1d9-f176198fc595/intl/ko/

Slide 83

Slide 83 text

Jetpack WindowManager

Slide 84

Slide 84 text

Adobe Stock#243026154 Large Screens WindowMetrics Building Android UIs for any screen size https://io.google/2022/program/eb6e6fb3-b24d-4baf-a1d9-f176198fc595/intl/ko/

Slide 85

Slide 85 text

class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val windowMetrics = WindowMetricsCalculator.getOrCreate() .computeCurrentWindowMetrics(this) val maxMetrics = WindowMetricsCalculator.getOrCreate() .computeMaximumWindowMetrics(this) } } https://io.google/2022/program/eb6e6fb3-b24d-4baf-a1d9-f176198fc595/intl/ko/

Slide 86

Slide 86 text

class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val windowMetrics = WindowMetricsCalculator.getOrCreate() .computeCurrentWindowMetrics(this) val maxMetrics = WindowMetricsCalculator.getOrCreate() .computeMaximumWindowMetrics(this) } } https://io.google/2022/program/eb6e6fb3-b24d-4baf-a1d9-f176198fc595/intl/ko/

Slide 87

Slide 87 text

Window Size Classes

Slide 88

Slide 88 text

Window Size Classes Large Screens https://io.google/2022/program/eb6e6fb3-b24d-4baf-a1d9-f176198fc595/intl/ko/

Slide 89

Slide 89 text

How to design for Large Screens

Slide 90

Slide 90 text

Large Screens https://io.google/2022/program/222bf914-24e3-4478-be37-9d8162d6460e/intl/ko/

Slide 91

Slide 91 text

Why adapt apps 01 How to adapt 02 Approaches 03 Large Screens

Slide 92

Slide 92 text

Learning how to update your app for the large screen Recommended https://io.google/2022/program/eb6e6fb3-b24d-4baf-a1d9-f176198fc595/intl/ko/

Slide 93

Slide 93 text

Designing apps for large screens Recommended https://io.google/2022/program/222bf914-24e3-4478-be37-9d8162d6460e/intl/ko/

Slide 94

Slide 94 text

Camera

Slide 95

Slide 95 text

Understanding the Full Stack Camera Consistency and quality is becoming part of core architecture xTS : OEM testing suites Performance Class Metadata : device capabilities beyond baseline CameraXlab : Google testing https://io.google/2022/program/f4726bbd-d230-4574-abc6-211baa6aec35/intl/ko/

Slide 96

Slide 96 text

CameraX Camera Perfect place for apps to get the best out of the Android Camera stack. 1. Built on top of Camera2 performance; CameraX is faster to use for development. 2. CameraX lab for daily testing; To reach consistency on devices 3. As a Jetpack library has faster launches, to address ad-hoc or planned needs and more. https://io.google/2022/program/f4726bbd-d230-4574-abc6-211baa6aec35/intl/ko/

Slide 97

Slide 97 text

CameraX

Slide 98

Slide 98 text

Stable A viewfinder that enables getting the preview on the screen. Preview 01 To access the output buffer seamlessly for use with algorithms such as the ones in ML Kit. Image Analysis 02 Used to save high-quality images. Image Capture 03 CameraX 1.0.0 Use Cases https://io.google/2022/program/f4726bbd-d230-4574-abc6-211baa6aec35/intl/ko/

Slide 99

Slide 99 text

Video Capture now available in CameraX 1.1.0 https://developer.android.com/training/camerax/video-capture?hl=ko

Slide 100

Slide 100 text

What’s new in Android Camera Recommended https://io.google/2022/program/f4726bbd-d230-4574-abc6-211baa6aec35/intl/ko/

Slide 101

Slide 101 text

Development Tools Chipmunk, Dolphin, Electric Eel

Slide 102

Slide 102 text

Android Studio 2021.2.1 Stable Patch 1 Chipmunk 01 2021.3.1 Beta 2 Dolphin 02 2022.1.1 Canary 3 Electric Eel 03 https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/

Slide 103

Slide 103 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Stable

Slide 104

Slide 104 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Animated Vector Drawable Preview

Slide 105

Slide 105 text

ADB over Wi-Fi https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/

Slide 106

Slide 106 text

QR Code https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Pairing Code

Slide 107

Slide 107 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Stable Device Manager Emulator tool window Instrumented Tests Profilable Apps Layout Inspector Snapshots and more..

Slide 108

Slide 108 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Stable

Slide 109

Slide 109 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Compose Animation Preview

Slide 110

Slide 110 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Jank Detection in CPU Controller

Slide 111

Slide 111 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Janky Frames No Jank detected 01 Sending frames to the system before the previous frame is displayed Previous frame was janked 02 App process running longer than expected Frames considered jank because they crossed the Deadline criterion 03

Slide 112

Slide 112 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Stable Jank Detection Compose animation preview Build Analyzer - Jetifier Check Test Sharding Quality

Slide 113

Slide 113 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Android Studio Dolphin Beta 2 Android Studio Electric Eel Canary 3

Slide 114

Slide 114 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Library has policy issues in SDK Index A policy issue that blocks publishing on the Google Play Store.

Slide 115

Slide 115 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Library has policy issues in SDK Index A policy issue that blocks publishing on the Google Play Store.

Slide 116

Slide 116 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ New Logcat New formatter / Multiple Logcat windows / Log View Type changed

Slide 117

Slide 117 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Live Edit Automatically update the preview Code changes can be checked in real time

Slide 118

Slide 118 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Compose Animation All animations can be inspected and adjusted at once Specific animations can be fixed Electric Eel

Slide 119

Slide 119 text

https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/ Dolphin Electric Eel Logcat v2 SDK Index Integration Gradle Managed Devices Compose Animation Coordination Preview and more.. Live Edit (Jetpack Compose) Visual Lint for Compose Compose Multi-Preview Device Mirroring and more..

Slide 120

Slide 120 text

What’s new in Android development tools Recommended https://io.google/2022/program/8215c766-f097-4b18-bc97-5085d77c4dad/intl/ko/

Slide 121

Slide 121 text

Thank you! Resources Jaesung Lee https://io.google/2022/program/intl /ko/ https://www.youtube.com/watch?v =Z6iFhczA3NY Android Developer / GDSC HUFS HUFS I.C.E @jdoongxx @JaesungLeee https://speakerdeck.com/jaesungleee/whats-new-in-android-2022