Share
Embed
Transcript
37 slides
-
권태환 What’s new in Android 안드로이드 14가 어김없이 나왔지만, 이제
예전만큼 재미 요소가 있진 않다. 꾸준한 업데이트를 하지만 IO 이전에 이미 나온 내용이 더 많은 Android 14와 컴포즈에 대한 이야기를 짧게 이야기한다. -
Android 14 주요 업데이트 Compose 신규 기능 Android 14 Compose
오늘은? 오늘은 안드로이드 14의 보안 관련 업데이트와 Compose 새로운 기능을 짧게 보자. -
보안 관련 보안 관련 업데이트는 사용자 중심의 업데이트가 주를 이루는데,
카메라/마이크 사용에 대한 표기, 위치정보 사용한 앱의 흔적, 위치 정보의 범위 선택 가능, 사용하지 않는 앱에 대한 권한 및 앱 삭제, 카메라 마이크에 대한 권한 옵션 제거 등 사용자 입장에서 보안적 개선이 일어남 -
6 • Photo Picker를 활용하거나, 다음 권한 활용 ◦ READ_MEDIA_IMAGES
◦ READ_MEDIA_VIDEO ◦ READ_MEDIA_VISUAL_USER_SELECTED 권한 - Media 안드로이드 14에서 미디어 권한이 또 한 번 개선되었는데, iOS와 동일한 사용자 선택 옵션을 추가로 제공. 안드로이드 미디어 권한은 버전별 차이가 크다 보니 다음 링크와 같은 긴 코드를 작성해 처리. https://github.com/Drjacky/ImagePicker/blob/master/imagepicker/src/main/kotlin/com/github/drjacky/imagepick er/provider/GalleryProvider.kt -
7 Media 권한 대신 - Photo picker 사용 안드로이드 8
안드로이드 13 권한이 없이 사용할 수 있는 Photo Picker를 기본으로 제공하지만, 안드로이드 버전별 UI가 다르니 참고 -
8 안드로이드 8.x 안드로이드 13 • androidx.activity 1.7.0 이상에서 제공,
API 19 이상에서 활용 가능 • 버전별 보이는 화면이 다름 • 이미지 한 장 또는 멀티, gif, 동영상을 선택할 수 있음 ◦ 항상 새로운 미디어만 고를 수 있음 • 권한이 필요 없어 단순 미디어 선택 시에는 가장 좋은 선택 Media 권한 대신 - Photo picker 사용 Photo Picker는 androidx.activity 1.7.0 버전 API Level 19 이상에서 활용할 수 있으며, 이미지 한 장 또는 여러 장, gif, 동영상 등을 선택할 수 있지만 항상 새로운 미디어만 고를 수 있기에 커스텀 요구사항이 있는 경우엔 적합하진 않음. -
9 Photo picker 적용 // Registers a photo picker activity
launcher in single-select mode. private val pickMedia = registerForActivityResult( ActivityResultContracts.PickVisualMedia() ) { uri -> // Callback is invoked after the user selects a media item or closes the // photo picker. if (uri != null) { Log.d("PhotoPicker", "Selected URI: $uri") } else { Log.d("PhotoPicker", "No media selected") } } Photo Picker의 사용법은 registerForActivityResult를 통해 URI를 받아와 처리한다. -
10 • 사용자가 정확한 위치가 아닌 근사치 위치 정보 제공
가능 • 위치 정보 공유 정보를 사용자에게 제공 ◦ 추가 정보 제공 - 타사 제공 여부 등 권한 - Location Location에 사용자에게 제공하는 추가 정보가 있는데, 위치 정보를 타사 제공 여부를 바로 확인할 수 있도록 제공한다. -
Full screen Intent • 호출 또는 알람 앱에서 USE_FULL_SCREEN_INTENT 권한
사용 • Android 13(Target 33부터) 알람에 대한 권한 강화 ◦ 정확한 알람이 필요한 경우 추가 권한- USE_EXACT_ALARM ◦ 그 외 - SCHEDULE_EXACT_ALARM ◦ https://support.google.com/googleplay/android-developer/answer/1316107 2?sjid=15141204011318763737-AP 알람 관련 권한도 강화되었는데, 이 부분은 Google Play store policy 정책 변경 부분도 있으니 참고 -
12 • Target 34 - Broadcast 등록 시 ◦ 앱
내/외 - RECEIVER_EXPORTED ◦ 앱 내 - RECEIVER_NOT_EXPORTED 보안 - BroadcastReceiver BroadcastReceiver도 앱 내에서 오는 이벤트인지, 앱 내/외부에서 오는 이벤트인지를 구분하여 옵션을 적용 필요 -
registerReceiver( smsAuthBroadcastReceiver, IntentFilter().apply { addAction(SmsRetriever.SMS_RETRIEVED_ACTION) }, SmsRetriever.SEND_PERMISSION, null, if (Build.VERSION.SDK_INT
>= Build.VERSION_CODES.TIRAMISU) { Context.RECEIVER_EXPORTED } else { 0 } ) 13 보안 - SmsReceiver 사용 시 -
Foreground services Android 14 타겟팅 - 포그라운드 서비스 유형 •
Camera • connectedDevices • dataSync • Health • location(네비게이션) • mediaPlayback • mediaProjection • Microphone • phoneCall • remoteMessaging • shortService • specialUse • systemExempted Foreground service types are required | Android Developers 포그라운드 서비스의 유형을 지정해 줘야 하는데, 타겟 34인 경우 강제이며 이 부분은 구글 스토어 정책과도 연결되니 필수 사항이다. -
공유하기 커스텀 제공(API 34) 1. 커스텀 액션 a. Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS 옵션을
사용한 커스텀 액션 지정 2. 미리 보기 추가 a. 이미지, 동영상 미리 보기 제공 가능 3. 공유 순위 개선 a. ShortcutInfoCompat.Builder#addCapabilityBunding("actions.intent.SEND_MESSAGE") 옵션 지정으로 개선 가능 Features and APIs Overview | Android Developers 1 2 3 안드로이드 34에 새롭게 추가한 커스텀 공유가 추가되었는데, 아직은 34에서만 동작한다. jetpack의 activity 쪽에 추가해 주길 기다려야… -
Back to home animation • Android 13에서 제공하던 부분에 커스텀
애니메이션 추가 제공 ◦ android:enableOnBackInvokedCallback=true ◦ 필요에 따라 true/false 지정 ◦ Features and APIs Overview | Android Developers 안드로이드 13에 추가되었다고 하지만 14부터 애니메이션 커스텀도 제공한다. 하지만… 이거 왜 있는지는 사실 잘 모르겠 -
• 기존 API 업데이트 ◦ 바코드 ◦ 포즈 감지 ◦
텍스트 인식 등 • 신규 API ◦ Face mesh : Face mesh detection | ML Kit | Google for Developers ◦ 문서 스캔 (Q4) ML Kit ML Kit에서 쓸만해 보이는 문서 스캔이다 문서 스캔은 Google Drive에서 미리 경험할 수 있음 -
Android Runtime(ART) • Java 17 지원 • 새로운 GC 알고리즘
적용으로 메모리 및 코드 사용 향상 OS의 성능도 향상되었다. -
새로운 정책? • 하반기 회원 탈퇴를 웹에서도 제공 필요 ◦
링크 업데이트 필수 • Target 14부터 앞서 소개한 Foreground services 관련 적용 필수 ◦ Preview: Device and Network Abuse - Play Console Help • 내년 8월 신규 Android 14 (API level 34) 업데이트 ◦ 이번달 말 Android 13(API level 33) 타겟팅 ◦ Meet Google Play's target API level requirement | Android Developers • 금융 관련 ◦ 대출을 하거나 알선하는 것을 목표로 하는 경우 연락처나 사진에 액세스 할 수 없음 ▪ 대출 만을 제공하는 서비스의 경우 해당 필수 ▪ https://support.google.com/googleplay/android-developer/answer/9876821?visit_id=638278322754855899-1312865792 ◦ 기기에서 암호화폐를 채굴하는 앱은 허용되지 않습니다. 암호화폐 채굴을 원격 관리하는 앱은 허용됩니다. ▪ Preview: Blockchain-based Content - Play Console Help • 개발자 연락처 관련(8월 31일 자 시행) ◦ 조직의 D-U-N-S 번호: D-U-N-S 번호는 Dun & Bradstreet에서 제공하는 9자리 고유 번호로, 전 세계에서 비즈니스를 확인하는 데 사용되고 있습니다. Google에서는 D-U-N-S 번호를 사용하여 조직을 인증필요 -
Compose 얼마나 쓰시나요? • Compose 99% ◦ Toast는 xml 활용
• Compose 1.6.0-alpha • Compose-compiler 1.5.1(kotlin 1.9.0) 사용 • Accompanist ◦ placeholder는 0.31.6-rc에서 Deprecated ◦ GDE 안성용님 별도 배포 버전 참고 ◦ https://github.com/fornewid/placeholder/releases/tag/v1.0.0-rc • Material3 1.2.0-alpha 사용 • Navigation 2.6.0(2.7.0 부터 에니메이션을 기본 제공하는데…) • constraintLayout-1.1.0-alpha 사용 • Coil 사용 • Compose lottie 사용 Compose를 사용하고 있는데, 대부분 alpha 버전을 활용 중이다. 현재까지 큰 문제가 발생한 부분은 없고, 예외 처리가 필요한 부분이 간혹 있지만 사용 못 할 만큼의 문제는 발생하진 않음. -
Compose • Compose 활용 가능 ◦ Android ◦ Android widget
◦ Android TV ◦ Google Wear 컴포즈는 Android, Android Widget, Android TV, Google Wear에서 활용이 가능 -
Compose Multiplatform • Develop stunning shared UIs for ◦ Android
◦ iOS(Alpha) ◦ desktop ◦ web(Experimental) 컴포즈의 미래 중 하나인데 Multiplatform에서 활용할 수 있다는 점이다. 아직은 iOS는 Alpha, web은 실험용으로 제공하고 있다. -
Compose • 2021년 1.0 첫 배포 현재 1.5 버전 릴리즈
• 1.5 버전에서 달라진 점 ◦ Modifier에 대한 성능 개선 ▪ 1.5 버전에서 80% 성능 향상된 Modifier를 활용 가능 ◦ 메모리 관련 안정화 ▪ ComposeView 사용에 메모리 누수 보완하여 View/Compose 상호 운영하는 앱에 유용 ◦ 텍스트 관련 ▪ 기존 버전에 비해 초기 구성 시간 평균 22% 성능 향상 ▪ Paint, brash, Alignment 등의 API에 대한 안정화 • 1.5 버전 추가 ◦ Accompanist의 Pager 정식 지원 ◦ FlowRow 추가 • Android Developers Blog: What’s new in the Jetpack Compose August ’23 release 컴포즈는 1.0 출시 이후 1.5버전까지 릴리즈 되었는데, 전체적인 성능은 80%의 Modifier 성능 향상이 일어났고, 텍스트 관련 구성 시간도 22% 성능 향상이 일어났다고 한다. 기존에 Accompanist의 Pager를 정식 지원으로 이동하였고, FlowRow가 추가되었다. -
Compose M3 사용은? • M2/M3 선택 사용 가능 ◦ 둘다
사용하지 않고, foundation을 이용하고, M3를 참고해 디자인 컴포넌트를 개발 사용 가능 ◦ M3를 기반 디자인 컴포넌트 개발 활용도 가능 • M2에 비해 M3 theme 구성이 더 구체적 ◦ 하지만 안쓰는 부분이 생각보다 많다 • 피그마에서 컴포즈 코드를 제공 ◦ 디자인 시스템과 완전한 연동은 안되어있어 복사 붙여넣기는 힘듬 Compose에는 3가지 선택지가 있을 수 있는데, 머트리얼을 사용하지 않고, foundation만을 활용한 우리만의 디자인을 구성하거나, 머트리얼 2/3를 기반으로 앱을 개발하는 것이다. 아무래도 만들어둔 머트리얼 2/3를 활용하는 편이 더 좋을지도 -
28 Pager - 참고 • Pager와 Tab select를 함께 사용하는
경우 ◦ Pager에서 이동 후 tab select 시에는 동작에 문제가 없음 ◦ Tab select 시 Pager의 이동과 current Position(0 to 2로 순간 이동) 업데이트가 동시에 일어나는 경우 간혹 runtime 오류 발생 ◦ at androidx.compose.ui.node.LayoutNodeKt.requireOwner(LayoutNode.kt:1434) Pager 사용 시 이런 버그가 발생할 수 있는데, 총 5개의 Pager가 있고, 5개의 버튼이 있다. 이때 0번째 탭에서 아이콘 4번째를 눌러 이동하는 과정에서 runtime exception이 발생하는데, position을 외부에서 변경하고 이동이 일어나는 경우 충돌이 발생하는 걸로 보이는데… -
29 Pager - 참고 • 해결? ◦ Pager의 이벤트를 통해
Pager position을 업데이트 하도록 수정 ▪ Tab을 누르면 Pager의 위치를 이동. ▪ Pager의 current position을 받아 current position을 업데이트 이런 부분을 해결하기 위해서 Pager에 current position을 실시간으로 받는 코드를 추가하고, tab을 눌렀을 때 Pager의 위치를 변경하고, current position의 위치를 통해 다른 이벤트 처리를 하도록 변경하여 우회하는 형태로 해결했다. -
Compose library Maps Compose Library | Maps SDK for Android
| Google for Developers Glide도 compose 용이 나왔지만 보통 coil을 더 많이 쓸 것 같지만… Google Maps도 compose 용으로 배포되었다. -
Compose library • Compose m3 - 1.2.0(아직 alpha) ◦ ModalBottomSheet
◦ BottomSheetScaffold Compose 용 m3는 아직 alpha 버전이며, 만약 바텀 시트 관련을 m3로 사용하고 싶다면 alpha 버전 활용이 필요하다. -
Compose 팁? • Recomposition이 중요할까? ◦ Recomposition이 중요하기보단 화면 갱신이
일어남이 중요 ◦ 화면 갱신이 일어나면서 발생하는 값의 계산(로직 처리)이 일어난다면? ▪ 성능은 떨어진다. • Compose에서 제공하는 상태 관리가 중요 ◦ 2022년 Google I/O Jetpack Compose의 상태 ◦ 2023년 Google I/O Jetpack Compose의 고급 상태 및 사이드 효과 Compose는 Recomposition을 중요하게 생각하는 경우가 있는데, 화면 갱신이 발생하면 이 부분이 recomposition이 발생한다. 이때 불필요한 계산이 일어날 수 있는 부분을 rememeber 등으로 감싸 필요한 계산이 일어나도록 처리가 필요한데, 2022년, 2023년 상태 관리에 대한 트랙이 있으니 참고하면 좋다. -
Compose 팁? • Layout Inspector을 활용한 Recomposition count 체크 ◦
Root view를 찾지 못하는 경우가 있어 비정상 동작하는 경우 있음 • Chris banes이 소개한 방법도 있으니 참고 ◦ Composable metrics · Chris Banes ◦ 이를 활용한 git actions 연동도 가능 Recomposition count는 체크할 수 있는 방법은 AS에서 제공하고 있다. 하지만 간혹 Root View를 찾지 못하는 케이스가 있을 수도 있으니, git actions 연동으로 카운트 체크도 가능. -
Android Studio 안드로이드 스튜디오는 총 3가지 버전을 배포하고 있는데, 최근
Nightly가 포함되었다. 까나리가 있는데 Nightly를 포함한 이유는 사실 잘 모르겠다.