Upgrade to Pro — share decks privately, control downloads, hide ads and more …

What’s new in Android?(Google IO ex 23-GDG Pangyo)

TaeHwan
August 18, 2023

What’s new in Android?(Google IO ex 23-GDG Pangyo)

TaeHwan

August 18, 2023
Tweet

More Decks by TaeHwan

Other Decks in Programming

Transcript

  1. 권태환
    What’s new in Android
    안드로이드 14가 어김없이 나왔지만, 이제 예전만큼 재미 요소가 있진 않다.
    꾸준한 업데이트를 하지만 IO 이전에 이미 나온 내용이 더 많은 Android 14와 컴포즈에 대한 이야기를 짧게 이야기한다.

    View full-size slide

  2. Android 14 주요 업데이트 Compose 신규 기능
    Android 14 Compose
    오늘은?
    오늘은 안드로이드 14의 보안 관련 업데이트와 Compose 새로운 기능을 짧게 보자.

    View full-size slide

  3. 얼마 안남은 정식 배포
    정식 버전은 얼마 남지 않음

    View full-size slide

  4. 보안 관련
    보안 관련 업데이트는 사용자 중심의 업데이트가 주를 이루는데,
    카메라/마이크 사용에 대한 표기, 위치정보 사용한 앱의 흔적, 위치 정보의 범위 선택 가능, 사용하지 않는 앱에 대한 권한
    및 앱 삭제, 카메라 마이크에 대한 권한 옵션 제거 등 사용자 입장에서 보안적 개선이 일어남

    View full-size slide

  5. 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

    View full-size slide

  6. 7
    Media 권한 대신 - Photo picker
    사용
    안드로이드 8 안드로이드 13
    권한이 없이 사용할 수 있는 Photo Picker를 기본으로 제공하지만, 안드로이드 버전별 UI가 다르니 참고

    View full-size slide

  7. 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,
    동영상 등을 선택할 수 있지만 항상 새로운 미디어만 고를 수 있기에 커스텀 요구사항이 있는 경우엔 적합하진 않음.

    View full-size slide

  8. 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를 받아와 처리한다.

    View full-size slide

  9. 10
    ● 사용자가 정확한 위치가 아닌 근사치 위치 정보 제공 가능
    ● 위치 정보 공유 정보를 사용자에게 제공
    ○ 추가 정보 제공 - 타사 제공 여부 등
    권한 - Location
    Location에 사용자에게 제공하는 추가 정보가 있는데, 위치 정보를 타사 제공 여부를 바로 확인할 수 있도록 제공한다.

    View full-size slide

  10. 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 정책 변경 부분도 있으니 참고

    View full-size slide

  11. 12
    ● Target 34 - Broadcast 등록 시
    ○ 앱 내/외 - RECEIVER_EXPORTED
    ○ 앱 내 - RECEIVER_NOT_EXPORTED
    보안 - BroadcastReceiver
    BroadcastReceiver도 앱 내에서 오는 이벤트인지, 앱 내/외부에서 오는 이벤트인지를 구분하여 옵션을 적용 필요

    View full-size slide

  12. 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 사용 시

    View full-size slide

  13. 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인 경우 강제이며 이 부분은 구글 스토어 정책과도 연결되니
    필수 사항이다.

    View full-size slide

  14. 15
    Foreground services
    권한과 serviceType을 모두 지정 필요

    View full-size slide

  15. 공유하기 커스텀 제공(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 쪽에 추가해 주길 기다려야…

    View full-size slide

  16. Back to home animation
    ● Android 13에서 제공하던 부분에 커스텀 애니메이션 추가 제공
    ○ android:enableOnBackInvokedCallback=true
    ○ 필요에 따라 true/false 지정
    ○ Features and APIs Overview | Android Developers
    안드로이드 13에 추가되었다고 하지만 14부터 애니메이션 커스텀도 제공한다.
    하지만… 이거 왜 있는지는 사실 잘 모르겠

    View full-size slide

  17. ● 기존 API 업데이트
    ○ 바코드
    ○ 포즈 감지
    ○ 텍스트 인식 등
    ● 신규 API
    ○ Face mesh : Face mesh detection | ML Kit | Google for Developers
    ○ 문서 스캔 (Q4)
    ML Kit
    ML Kit에서 쓸만해 보이는 문서 스캔이다
    문서 스캔은 Google Drive에서 미리 경험할 수 있음

    View full-size slide

  18. Android Runtime(ART)
    ● Java 17 지원
    ● 새로운 GC 알고리즘 적용으로 메모리 및 코드 사용 향상
    OS의 성능도 향상되었다.

    View full-size slide

  19. 새로운 정책?
    ● 하반기 회원 탈퇴를 웹에서도 제공 필요
    ○ 링크 업데이트 필수
    ● 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 번호를 사용하여 조직을 인증필요

    View full-size slide

  20. 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 버전을 활용 중이다. 현재까지 큰 문제가 발생한 부분은 없고, 예외 처리가
    필요한 부분이 간혹 있지만 사용 못 할 만큼의 문제는 발생하진 않음.

    View full-size slide

  21. Compose
    ● Compose 활용 가능
    ○ Android
    ○ Android widget
    ○ Android TV
    ○ Google Wear
    컴포즈는 Android, Android Widget, Android TV, Google Wear에서 활용이 가능

    View full-size slide

  22. Compose Multiplatform
    ● Develop stunning shared UIs for
    ○ Android
    ○ iOS(Alpha)
    ○ desktop
    ○ web(Experimental)
    컴포즈의 미래 중 하나인데 Multiplatform에서 활용할 수 있다는 점이다.
    아직은 iOS는 Alpha, web은 실험용으로 제공하고 있다.

    View full-size slide

  23. 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가 추가되었다.

    View full-size slide

  24. Compose M3 사용은?
    ● M2/M3 선택 사용 가능
    ○ 둘다 사용하지 않고, foundation을 이용하고, M3를 참고해 디자인 컴포넌트를 개발 사용 가능
    ○ M3를 기반 디자인 컴포넌트 개발 활용도 가능
    ● M2에 비해 M3 theme 구성이 더 구체적
    ○ 하지만 안쓰는 부분이 생각보다 많다
    ● 피그마에서 컴포즈 코드를 제공
    ○ 디자인 시스템과 완전한 연동은 안되어있어 복사 붙여넣기는 힘듬
    Compose에는 3가지 선택지가 있을 수 있는데,
    머트리얼을 사용하지 않고, foundation만을 활용한 우리만의 디자인을 구성하거나, 머트리얼 2/3를 기반으로 앱을
    개발하는 것이다.
    아무래도 만들어둔 머트리얼 2/3를 활용하는 편이 더 좋을지도

    View full-size slide

  25. 27
    Pager
    Pager는 HorizontalPager, VerticalPager로 사용할 수 있다.

    View full-size slide

  26. 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을 외부에서 변경하고 이동이 일어나는 경우 충돌이 발생하는 걸로 보이는데…

    View full-size slide

  27. 29
    Pager - 참고
    ● 해결?
    ○ Pager의 이벤트를 통해 Pager position을 업데이트 하도록 수정
    ■ Tab을 누르면 Pager의 위치를 이동.
    ■ Pager의 current position을 받아 current position을 업데이트
    이런 부분을 해결하기 위해서 Pager에 current position을 실시간으로 받는 코드를 추가하고, tab을 눌렀을 때 Pager의
    위치를 변경하고, current position의 위치를 통해 다른 이벤트 처리를 하도록 변경하여 우회하는 형태로 해결했다.

    View full-size slide

  28. 30
    FlowRow(ExperimentalLayoutApi)

    View full-size slide

  29. Compose library
    Maps Compose Library | Maps SDK for Android | Google for Developers
    Glide도 compose 용이 나왔지만 보통 coil을 더 많이 쓸 것 같지만…
    Google Maps도 compose 용으로 배포되었다.

    View full-size slide

  30. Compose library
    ● Compose m3 - 1.2.0(아직 alpha)
    ○ ModalBottomSheet
    ○ BottomSheetScaffold
    Compose 용 m3는 아직 alpha 버전이며, 만약 바텀 시트 관련을 m3로 사용하고 싶다면 alpha 버전 활용이 필요하다.

    View full-size slide

  31. Compose 팁?
    ● Recomposition이 중요할까?
    ○ Recomposition이 중요하기보단 화면 갱신이 일어남이 중요
    ○ 화면 갱신이 일어나면서 발생하는 값의 계산(로직 처리)이 일어난다면?
    ■ 성능은 떨어진다.
    ● Compose에서 제공하는 상태 관리가 중요
    ○ 2022년 Google I/O Jetpack Compose의 상태
    ○ 2023년 Google I/O Jetpack Compose의 고급 상태 및 사이드 효과
    Compose는 Recomposition을 중요하게 생각하는 경우가 있는데, 화면 갱신이 발생하면 이 부분이 recomposition이
    발생한다.
    이때 불필요한 계산이 일어날 수 있는 부분을 rememeber 등으로 감싸 필요한 계산이 일어나도록 처리가 필요한데,
    2022년, 2023년 상태 관리에 대한 트랙이 있으니 참고하면 좋다.

    View full-size slide

  32. Compose 팁?
    ● Layout Inspector을 활용한 Recomposition count 체크
    ○ Root view를 찾지 못하는 경우가 있어 비정상 동작하는 경우 있음
    ● Chris banes이 소개한 방법도 있으니 참고
    ○ Composable metrics · Chris Banes
    ○ 이를 활용한 git actions 연동도 가능
    Recomposition count는 체크할 수 있는 방법은 AS에서 제공하고 있다.
    하지만 간혹 Root View를 찾지 못하는 케이스가 있을 수도 있으니, git actions 연동으로 카운트 체크도 가능.

    View full-size slide

  33. Android Studio

    View full-size slide

  34. Android Studio
    안드로이드 스튜디오는 총 3가지 버전을 배포하고 있는데, 최근 Nightly가 포함되었다.
    까나리가 있는데 Nightly를 포함한 이유는 사실 잘 모르겠다.

    View full-size slide

  35. Thank You
    TaeHwan kwon
    레몬트리 / 안드로이드 개발

    View full-size slide