attached to post

# 엔지니어링 위크 금주 원티드랩에서는 첫번째 “엔지니어링 위크”를 개최했습니다. 목표는 아래와 같습니다. 1. 성능을 향상한다. 2. 기술 부채를 해결하여 개발 생산성을 높인다. 3. 지속적인 엔지니어링 활동 일어나는 환경을 조성한다. 이번 엔지니어링 위크에서 저는 Android 14 버전에서의 이슈를 대응하는 것으로 준비하였습니다. 해당 업무를 통해 배웠던 경험과 AGP 8.2 버전을 대응하면서 생겼던 이슈를 공유하려합니다. ## Android 14 변동 사항 아래 링크를 참고 바랍니다. https://www.wanted.co.kr/community/post/10524?utm_source=wanted&utm_medium=share ## targetSdk 34를 대응하면서 가장 많이 발견된 이슈 ### 런타임 등록 broadcast receiver는 내보내기 동작을 지정해야 함 - Android 14를 타겟팅하고 컨텍스트 등록 수신기를 사용하는 앱과 서비스는 수신기를 기기의 다른 모든 앱으로 내보내야 하는지 나타내는 플래그를 지정해야 합니다(`RECEIVER_EXPORTED` 또는 `RECEIVER_NOT_EXPORTED`). - `브로드캐스트리시버`를 외부에 노출할지 안할지를 결정하는 flag를 설정해주지 않으면 앱에서 크래시가 발생합니다. ### broadcast receive 취약점 관련 영상

## AGP 8.0 이상으로 업데이트 “MeasureLimit (120) is out of start (0) and limit (119) bounds” 와 같은 Crash를 보신적이 있나요? Compose ui-text에 발생한 이슈이고 1.6.0-alpha 버전에서 수정이 되었습니다. 라이브러리를 해당 버전으로 높이기 위해서는 코틀린 버전을 높여야하고 AGP(Android Gradle Plugin) 버전을 높여야지 가능합니다. 우선으로 고려해야할 사항은 아니지만 추후 도입 가능성이 있기에 버전을 올려서 테스트를 진행해봤습니다. - 이슈 https://issuetracker.google.com/issues/243338896 ## AGP 8.0 이상 변동 사항 ### gradle.properties android.nonFinalResIds - default가 true로 바뀝니다. - R 값들을 final 값으로 만들지 않음으로써 최적화를 합니다. - static value에 R 리소스 값을 세팅할 수 없습니다. android.nonTransitiveRClass - default가 true로 바뀝니다. - R 클래스에 라이브러리 자체에 선언된 리소스만 포함하고, 라이브러리에 종속되는 항목들은 포함하지 않도록 하는 옵션입니다. - 이 옵션을 사용하면 APK 용량이 줄어듭니다. android.enableR8.fullMode - default가 true로 바뀝니다. (fullMode 활성) - R8은 런타임에 클래스의 객체를 검사하고 조작하는 코드가 있다고 가정하고, 자동으로 클래스와 클래스의 정적 초기화 프로그램을 유지합니다. - 그러나 'full mode'를 사용하면 R8은 이러한 가정을 하지 않으며 런타임에 코드가 클래스를 사용하지 않는다고 판단되면 앱의 최종 DEX에서 클래스를 삭제합니다. - 즉, 클래스와 클래스의 정적 초기화 프로그램을 유지하려면 규칙 파일에 keep 규칙을 포함해야 합니다. android.defaults.buildfeatures.buildconfig - default가 false로 바뀝니다. - true인 경우 BuildConfig 파일을 생성합니다. ### R8 fullMode R8 fullMode를 사용하면서 약 3MB의 앱 용량이 줄어드는 것을 확인했습니다. 하지만 프로가드 규칙을 추가해줘야 하는 라이브러리가 많았으며(Retrofit, GSON, Firebase 등..), 예상치도 못한 곳에서 에러가 발생하는 경우도 많았습니다. 바로 도입 하는것은 리스크가 커서 단계별로 마이그레이션을 하는 것을 추천드립니다. targetSdk 업데이트는 반드시 진행되어야 하는 작업이며, 이번 기회를 통해 대비할 수 있어서 좋은 경험이라 생각합니다. ## 참고 - https://developer.android.com/build/releases/gradle-plugin#kts - https://developer.android.com/build/releases/past-releases/agp-8-0-0-release-notes

콘텐츠를 더 읽고 싶다면?
원티드에 가입해 주세요.
로그인 후 모든 글을 볼 수 있습니다.
댓글 3