◦ 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
API 19 이상에서 활용 가능 • 버전별 보이는 화면이 다름 • 이미지 한 장 또는 멀티, gif, 동영상을 선택할 수 있음 ◦ 항상 새로운 미디어만 고를 수 있음 • 권한이 필요 없어 단순 미디어 선택 시에는 가장 좋은 선택 Media 권한 대신 - Photo picker 사용 Photo Picker는 androidx.activity 1.7.0 버전 API Level 19 이상에서 활용할 수 있으며, 이미지 한 장 또는 여러 장, gif, 동영상 등을 선택할 수 있지만 항상 새로운 미디어만 고를 수 있기에 커스텀 요구사항이 있는 경우엔 적합하진 않음.
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를 받아와 처리한다.
사용 • 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 정책 변경 부분도 있으니 참고
사용한 커스텀 액션 지정 2. 미리 보기 추가 a. 이미지, 동영상 미리 보기 제공 가능 3. 공유 순위 개선 a. ShortcutInfoCompat.Builder#addCapabilityBunding("actions.intent.SEND_MESSAGE") 옵션 지정으로 개선 가능 Features and APIs Overview | Android Developers 1 2 3 안드로이드 34에 새롭게 추가한 커스텀 공유가 추가되었는데, 아직은 34에서만 동작한다. jetpack의 activity 쪽에 추가해 주길 기다려야…
애니메이션 추가 제공 ◦ android:enableOnBackInvokedCallback=true ◦ 필요에 따라 true/false 지정 ◦ Features and APIs Overview | Android Developers 안드로이드 13에 추가되었다고 하지만 14부터 애니메이션 커스텀도 제공한다. 하지만… 이거 왜 있는지는 사실 잘 모르겠
텍스트 인식 등 • 신규 API ◦ Face mesh : Face mesh detection | ML Kit | Google for Developers ◦ 문서 스캔 (Q4) ML Kit ML Kit에서 쓸만해 보이는 문서 스캔이다 문서 스캔은 Google Drive에서 미리 경험할 수 있음
링크 업데이트 필수 • 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 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 버전을 활용 중이다. 현재까지 큰 문제가 발생한 부분은 없고, 예외 처리가 필요한 부분이 간혹 있지만 사용 못 할 만큼의 문제는 발생하진 않음.
• 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가 추가되었다.
사용하지 않고, foundation을 이용하고, M3를 참고해 디자인 컴포넌트를 개발 사용 가능 ◦ M3를 기반 디자인 컴포넌트 개발 활용도 가능 • M2에 비해 M3 theme 구성이 더 구체적 ◦ 하지만 안쓰는 부분이 생각보다 많다 • 피그마에서 컴포즈 코드를 제공 ◦ 디자인 시스템과 완전한 연동은 안되어있어 복사 붙여넣기는 힘듬 Compose에는 3가지 선택지가 있을 수 있는데, 머트리얼을 사용하지 않고, foundation만을 활용한 우리만의 디자인을 구성하거나, 머트리얼 2/3를 기반으로 앱을 개발하는 것이다. 아무래도 만들어둔 머트리얼 2/3를 활용하는 편이 더 좋을지도
경우 ◦ 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을 외부에서 변경하고 이동이 일어나는 경우 충돌이 발생하는 걸로 보이는데…
Pager position을 업데이트 하도록 수정 ▪ Tab을 누르면 Pager의 위치를 이동. ▪ Pager의 current position을 받아 current position을 업데이트 이런 부분을 해결하기 위해서 Pager에 current position을 실시간으로 받는 코드를 추가하고, tab을 눌렀을 때 Pager의 위치를 변경하고, current position의 위치를 통해 다른 이벤트 처리를 하도록 변경하여 우회하는 형태로 해결했다.
일어남이 중요 ◦ 화면 갱신이 일어나면서 발생하는 값의 계산(로직 처리)이 일어난다면? ▪ 성능은 떨어진다. • Compose에서 제공하는 상태 관리가 중요 ◦ 2022년 Google I/O Jetpack Compose의 상태 ◦ 2023년 Google I/O Jetpack Compose의 고급 상태 및 사이드 효과 Compose는 Recomposition을 중요하게 생각하는 경우가 있는데, 화면 갱신이 발생하면 이 부분이 recomposition이 발생한다. 이때 불필요한 계산이 일어날 수 있는 부분을 rememeber 등으로 감싸 필요한 계산이 일어나도록 처리가 필요한데, 2022년, 2023년 상태 관리에 대한 트랙이 있으니 참고하면 좋다.
Root view를 찾지 못하는 경우가 있어 비정상 동작하는 경우 있음 • Chris banes이 소개한 방법도 있으니 참고 ◦ Composable metrics · Chris Banes ◦ 이를 활용한 git actions 연동도 가능 Recomposition count는 체크할 수 있는 방법은 AS에서 제공하고 있다. 하지만 간혹 Root View를 찾지 못하는 케이스가 있을 수도 있으니, git actions 연동으로 카운트 체크도 가능.