안녕하세요, IMQA 노성현입니다.
오늘은 Android의 새로운 버전 소식을 들고 왔습니다. 2월 9일 Android는 Android14( 업사이드 다운 케이크
)의 개발자 프리뷰를 공개하였습니다. 지난 13버전인 티라미수는 22년 2월 10일에 공개해서 22년 8월 16일에 정식 출시가 되었는데요.
미리 개발자분들께 어떤 기능이 포함될지 소개해 드리는 내용을 준비해 봤습니다. 다만 지금은 Preview이기 때문에 실제 Final Release에는 조금은 달라질 수 있다는 점 참고해 주세요!
로드맵
Android 14는 ‘Developer Preview’ - ‘Beta Release’ - ‘Platform Stability’를 거쳐 Final Release를 진행합니다.
공개된 ‘Developer Preview’는 2월, 3월에 한 번씩 2회에 걸쳐 진행될 예정입니다. 이때 새롭게 추가되거나 변경되는 API에 대해서 미리 알게 되며, 피드백을 받으면서 진행하게 됩니다.
4월부터는 ‘Beta Release’를 진행하여 개발자분들이 테스트를 본격적으로 해볼 수 있게 되어서 미리 호환성 테스트를 진행하실 수 있습니다. 저희 IMQA SDK도 이때부터 호환성 테스트를 진행할 수 있도록 준비하고 있답니다.
6월부터 7월까지는 플랫폼 안정성을 확보하는 기간으로 사실상 이 기간에는 API가 크게 변하지 않으며 최종 버전이 거의 확정됩니다. Android팀도 6월에 나오는 Beta3부터는 안정성이 어느 정도 올라올 것이라 이야기하고 있습니다.
그리고 8월부터 ‘Final Release’ 버전을 공식적으로 사용하실 수 있게 됩니다. Android에서는 미리 호환성 테스트를 준비하실 수 있도록 Android Studio에서 Android14용 SDK 및 도구와 에뮬레이터 이미지를 제공하기 때문에 어렵지 않게 준비하실 수 있습니다.
새로운 기능
Working across devices and form factors
첫 번째로 소개 드리는 기능은 태블릿과 접이식 디바이스와 같은 다양한 폼 팩터(Form Factor)에 대한 지원을 개선한다고 합니다. 기존에 Android12과 13에서 나왔던 폼 팩터를 고도화하고 있는데요.
다양한 화면 크기를 지원할 수 있도록, 윈도우 크기 클래스(window size classes), 슬라이딩 패널 레이아웃(sliding pane layout), 액티비티 임베딩(Activity embedding), 제약 사항을 가진 박스(box with constraints) 등 다양한 기능이 제공됩니다. 이러한 기능은 Jetpack Compose에서 지원되며 모든 Android 플랫폼에서 최적화된 앱을 만들 수 있도록 도와줍니다.
국내에는 플립이나 폴드 디바이스를 사용하고 계신 유저들이 많은데요. 이러한 디바이스에서의 앱 화면 구성을 할 수 있도록 더욱더 많은 지원을 늘리고 있습니다. 관련한 앱 품질 가이드도 업데이트해 준다고 하니까 기대해 봐도 좋을 것 같네요.
Streamlining background work
프리뷰 블로그에서는 앱이 동작하는 방식을 최적화하고 시스템 상태와 배터리 수명을 개선하였다고 하는데요. 무엇을 개선했다는 것일까요?
백그라운드 작업을 간소화하기 위해 Android 14에서는 개발자가 앱의 백그라운드 작업을 더 잘 관리할 수 있도록 새로운 API와 기존 API의 개선 사항을 도입하고 있습니다.
새로운 API 중 하나인 "WorkerManager"는 시스템 리소스 제약과 사용자 행동 패턴을 고려하면서 백그라운드 작업을 예약하고 실행하는 효율적인 방법을 제공합니다. 또한 이 API는 개발자가 앱의 성능과 배터리 수명을 최적화할 수 있도록 배터리 최적화 및 네트워크 사용 제한과 같은 고유한 작업 정책을 지원합니다.
WorkerManager 외에도 Android 14에는 백그라운드에서 실행되는 동안 위치 데이터에 액세스할 수 있는 앱을 사용자가 더 잘 제어할 수 있도록 백그라운드 위치 액세스 기능이 개선되었습니다. 앱은 백그라운드에서 사용자의 위치에 액세스할 때 포그라운드 서비스 알림을 받아야 하므로 사용자가 자신의 위치 데이터에 액세스하는 앱과 그 이유를 더 쉽게 이해할 수 있습니다.
또한 Android 14는 UI 구성요소 빌드 프로세스를 간소화하여 개발자가 앱 논리 및 기능에 더 집중할 수 있도록 하는 Jetpack Compose를 계속 지원합니다. 이를 통해 다양한 장치와 플랫폼에서 효율적이고 원활하게 작동하는 앱을 더 쉽게 만들 수 있습니다.
전반적으로 Android 14의 개선 사항은 더 나은 사용자 환경을 제공하는 동시에 개발자에게 더 효율적이고 최적화되고 사용자 친화적인 앱을 만드는 데 필요한 도구를 제공하는 것을 목표로 합니다.
Updates and additions to JobScheduler and Foreground Services
Android 14에서는 JobScheduler 및 Foreground Services API에 대한 업데이트 및 추가 기능을 도입하여 백그라운드 작업을 단순화하고 리소스 소비 및 배터리 수명을 개선합니다.
새로 추가된 기능 중 하나는 사용자 시작 데이터 전송 작업으로 Wi-Fi를 사용할 수 있을 때만 다운로드하는 것과 같이 제약이 필요한 사용자 시작 다운로드 및 업로드를 더 쉽게 관리할 수 있습니다. 이 새로운 기능은 앱 개발을 단순화하고 잠재적으로 사용자 경험을 개선합니다.
또한 Android 14에는 포그라운드 서비스 유형을 선언하기 위한 업데이트된 요구 사항이 도입되어 개발자가 앱의 백그라운드 작업 의도를 명확하게 정의하는 동시에 포그라운드 서비스에 적합한 사용 사례를 명확히 할 수 있습니다. 포그라운드 서비스는 우선순위가 가장 높은 사용자 대면 작업에만 예약되므로 리소스 소비와 배터리 수명을 개선하는 데 도움이 됩니다.
이러한 API의 적절한 사용을 보장하기 위해 Google Play는 새로운 정책을 출시할 예정이며 자세한 내용은 곧 제공될 예정입니다. 이러한 정책은 개발자가 가능한 가장 효율적이고 적절한 방식으로 JobScheduler 및 Foreground Services API를 사용하는 데 도움이 됩니다.
전반적으로 Android 14의 JobScheduler 및 Foreground Services API에 대한 이러한 업데이트 및 추가를 통해 개발자는 백그라운드 작업을 더 쉽게 관리하고 사용자 환경을 개선하는 동시에 리소스 소비와 배터리 수명도 개선할 수 있습니다.
Exact alarms
Android 14에서는 정확한 알람을 호출하는 것이 배터리 수명과 같은 기기 자원에 큰 영향을 미칠 수 있다는 문제가 있습니다. 이 문제를 해결하기 위해 시계나 캘린더가 아닌 새로 설치된 앱 중 Android 13+ 을 대상으로 하는 경우, 정확한 알람을 설정하기 전에 사용자에게 SCHEDULE_EXACT_ALARM 특별 권한 부여를 요청해야 합니다. 이 권한은 밀리초까지 정확한 시간에 발생하는 알람인 정확한 알람을 설정하는 데 필요합니다.
앱은 이 권한을 전환하기 위한 인텐트를 통해 사용자를 설정 페이지로 안내할 수 있지만, 개발자는 가능한 경우 사용 사례를 평가하고 더 유연하게 예약할 수 있는 대안을 선택할 것을 권장합니다. 예를 들어, 앱은 주어진 시간 창 내에서 발생하는 알람인 불확정 알람이나 JobScheduler API를 사용하여 설정할 수 있습니다. 불확정 알람은 기기 자원(예: 배터리 수명)에 덜 영향을 미치면서 사용자에게 시기적절한 알림을 제공할 수 있습니다.
SCHEDULE_EXACT_ALARM 권한 요청을 앱에 요구함으로써 Android 14는 정확한 알람이 필요한 경우에만 사용되며, 앱이 기기 자원에 미치는 영향에 대해 더욱 신중하게 설계되도록 보장하고자 합니다. 이는 Android 기기에서 전반적으로 더 나은 사용자 경험과 개선된 배터리 수명을 가져올 것입니다.
Customization
Android 14은 사용자가 개별적인 요구에 맞게 사용자 경험을 맞춤화할 수 있도록 초점을 맞추고 있습니다. 이는 가능한 많은 사용자가 Android를 접근하고 사용할 수 있도록 개선된 접근성 및 국제화 기능을 포함합니다.
접근성을 향상시키기 위해, Android 14에는 시각 장애인을 위해 오디오 피드백을 제공하는 스크린 리더인 TalkBack에 대한 개선 사항이 포함됩니다. 이러한 개선 사항은 업데이트된 제스처, 개선된 오디오 힌트 및 개선된 읽기 순서를 포함합니다. 또한 내장형 화면 확대기와 같은 새로운 접근성 기능 및 색상 보정 및 고대비 텍스트와 같은 기존 기능의 개선이 있습니다.
Android 14에는 비 라틴 문자를 위한 새로운 글꼴과 우측에서 왼쪽으로 쓰는 언어에 대한 개선된 지원과 같은 국제화 기능이 개선되어 있습니다. 이는 전 세계 사용자가 Android를 자신의 모국어로 사용할 수 있으며, 앱이 사용자에게 로컬화된 경험을 제공할 수 있도록 보장합니다.
Bigger fonts with non-linear scaling
Android 14에서는 사용자가 글꼴 크기를 200%까지 확대할 수 있습니다. 이는 Pixel 기기에서 이전에 가능했던 최대 글꼴 크기인 130%보다 더 큰 값입니다. 하지만 글꼴이 너무 커지는 문제를 방지하기 위해 Android 14는 자동으로 비선형 글꼴 크기 조정 곡선을 적용합니다.
이 비선형 글꼴 크기 조정 곡선은 이미 충분히 큰 텍스트의 경우 작은 텍스트보다 같은 비율로 증가하지 않도록 보장합니다. 이는 글꼴 크기의 증가가 다양한 텍스트 크기에 걸쳐 더욱 점진적이고 균형 있게 이루어지도록 합니다. 사용자는 접근성 > 디스플레이 크기 및 텍스트 설정에서 글꼴 크기 옵션을 사용하여 글꼴 크기 조정을 할 수 있습니다.
개발자로서는 Font size 옵션을 사용하여 최대 글꼴 크기로 UI를 테스트하여 조정된 큰 텍스트 크기 설정이 UI에 반영되고 텍스트가 잘리는지 확인하는 것이 중요합니다. Android 문서에서는 앱의 UI가 다양한 글꼴 크기에서도 잘 작동하도록 보장하는 최적의 방법을 제공합니다.
Per-app language preferences
Android 14에서는 개발자가 LocaleManager.setOverrideLocaleConfig 메서드를 사용하여 앱의 localeConfig를 동적으로 업데이트하여 Android 설정에서 per-app 언어 목록에 표시되는 언어 집합을 사용자 정의할 수 있습니다. 이 기능을 사용하면 개발자는 지역별로 언어 목록을 사용자 정의하거나 A/B 실험을 실행하거나, 앱에서 서버 측 로컬화 푸시를 사용하는 경우 업데이트된 로케일을 제공할 수 있습니다.
예를 들어, 여러 지역에 사용자가 있는 경우 개발자는 setOverrideLocaleConfig 메서드를 사용하여 각 지역별로 사용자 정의된 언어 목록을 제공할 수 있습니다. 이렇게 하면 Android 설정의 언어 목록이 각 사용자에게 적합하게 표시되어 다른 언어 간 전환을 보다 쉽게 할 수 있습니다.
또한, IME(입력 방법 편집기)는 이제 LocaleManager.getApplicationLocales 메서드를 사용하여 현재 앱의 UI 언어를 확인하고 키보드 언어를 자동으로 업데이트할 수 있습니다. 따라서 사용자가 앱에서 언어를 변경하면, IME가 키보드 언어를 새 언어 설정에 맞게 자동으로 업데이트할 수 있습니다.
총적으로, Android 14의 per-app 언어 설정 기능은 사용자가 언어 설정을 보다 쉽게 사용자 정의할 수 있도록 도와주면서 개발자는 앱에서 언어가 표시되는 방식과 다른 앱 및 시스템 기능과 상호작용하는 방법을 더욱 효율적으로 제어할 수 있습니다.
Grammatical Inflection API
문법적 감염 API는 문법적 성별이 있는 언어를 사용하는 사용자를 보다 쉽게 지원할 수 있도록 해줍니다. 예를 들어,
남성형: "Vous êtes abonné à..."
여성형: "Vous êtes abonnée à..."
중성형: "Abonnement à...activé"
문법적 성별은 언어에 고유하며 일부 영어 이외의 언어에서는 쉽게 처리할 수 없습니다. 이 새로운 API를 사용하면 ICU의 SelectFormat을 문자열마다 적용해야 하는 것보다 UI를 보는 사람의 성별(이야기하는 대상이 아니라)을 지원하는 데 필요한 노력이 줄어듭니다.
개인화된 번역을 보여주려면, 영향을 받는 언어의 각 문법적 성별에 맞게 변형된 번역을 추가하고 API를 통합하기만 하면 됩니다.
Runtime receivers
이전에는 앱에서 브로드캐스트 리시버를 매니페스트 파일에 선언해야 했습니다. 이렇게 함으로써 리시버가 명시적으로 등록되고, 런타임에서 동적으로 등록될 수 없으며 이는 잠재적인 보안 위협이 될 수 있습니다. 그러나 일부 경우에는 앱에서 브로드캐스트 리시버를 런타임에서 동적으로 등록해야 하는 경우가 있으며, 이는 Context.registerReceiver() 메소드를 사용하여 수행할 수 있습니다.
이 문제를 해결하기 위해 Android 14부터는, 앱이 동적으로 Context.registerReceiver()를 사용할 경우, "exported" 또는 "unexported"로 처리해야 함을 나타내야 합니다. 이를 통해 브로드캐스트 리시버를 동적으로 등록해야 하는 앱이 안전하고 보안적으로 이를 수행할 수 있으며 잠재적인 보안 위협에 대한 필요한 보호 수준을 제공할 수 있습니다.
Safer implicit intents
Android 14를 타겟팅하는 앱은 패키지를 지정하지 않는 암시적 인텐트를 내부적으로 전송할 수 없습니다. 앱이 패키지를 지정하지 않고 내부적으로 암시적 인텐트를 전송하면, Android는 SecurityException을 발생시켜 악성 앱이 인텐트를 가로채는 것을 방지합니다.
이 제한을 준수하기 위해 개발자는 내부적으로 암시적 인텐트를 전송할 때 패키지를 지정하도록 앱을 수정할 수 있습니다. 이렇게 함으로써 인텐트가 지정된 패키지만 수신되고 다른 앱이 가로챌 수 없도록 보장할 수 있습니다.
Safer dynamic code loading
동적 코드 로딩(DCL)은 다운로드된 실행 파일이 앱에 악성코드를 삽입할 수 있는 가능성이 있기 때문에 Android 앱에서 보안 취약점을 유발할 수 있는 기능입니다. 이 문제를 해결하기 위해 Android 14는 이 버전을 타겟팅하는 앱에서 동적으로 로드된 파일이 읽기 전용으로 표시되도록 요구합니다.
동적으로 로드된 파일을 읽기 전용으로 표시함으로써 Android 14는 다운로드된 후 수정되지 않도록 보장하여 코드 삽입 및 다른 보안 취약점을 방지합니다. 이렇게 함으로써 다운로드된 실행 파일이 의도한 용도로만 사용되고 무단 조치나 민감한 정보에 접근하는 악성코드로 조작되지 않도록 보장합니다.
개발자들은 동적으로 로드된 파일을 다운로드하고 기기에 저장할 때 읽기 전용으로 표시하여 이 요구사항을 준수할 수 있습니다. 이를 위해 앱의 적절한 파일 권한과 접근 제어 메커니즘을 사용할 수 있습니다.
Block installation of apps
Android 14에서 Android 기기의 보안성을 개선하기 위해 targetSdkVersion이 23보다 낮은 앱의 설치를 차단하는 새로운 기능이 도입되었습니다. 이는 악성코드가 종종 더 이전의 Android 버전에서 보안 및 개인 정보 보호 기능을 우회하기 위해 대상 API 수준이 오래된 버전으로 설정되는 경우가 많기 때문입니다.
targetSdkVersion은 앱 매니페스트 파일에서 앱이 테스트 및 최적화된 가장 높은 Android API 수준을 지정하는 속성입니다. Android 14부터는 targetSdkVersion이 23보다 낮은 앱의 설치가 차단됩니다. 이는 일부 악성코드 앱이 2015년 Android 6.0(API 레벨 23)에서 도입된 런타임 권한 모델을 회피하기 위해 targetSdkVersion 22를 사용하는 경우가 있기 때문입니다.
기기가 Android 14로 업그레이드된 경우 targetSdkVersion이 23보다 낮은 모든 앱은 계속 설치된 상태로 유지됩니다. 이 기능은 새로운 앱 설치에만 적용됩니다.
개발자들은 다음 ADB 명령어를 사용하여 이전 API 레벨을 대상으로 하는 앱을 테스트할 수 있습니다.
adb install --bypass-low-target-sdk-block FILENAME.apk
Credential Manager and Passkeys support
Android 14에서는 사용자 인증 프로세스를 간소화하고 패스키 지원으로 보안성을 높이는 새로운 Jetpack API인 "Credential Manager"가 도입되었습니다. 패스키는 비밀번호 및 다른 인증 요소가 해킹이나 도난당할 수 있는 문제를 해결하는 보다 안전한 대안으로, 사용자가 바이오메트릭 스와이프만으로 어떤 장치에서든 안전하게 로그인할 수 있는 더 편리한 방식을 제공합니다.
Credential Manager는 현재 알파 릴리스 상태이며 사용자 자격 증명을 관리하고 저장하는 과정을 개발자가 간단하게 처리할 수 있는 API를 제공합니다. 이 API를 사용하여 개발자는 사용자 자격 증명을 안전하게 저장하고 검색할 수 있으며, 패스키 및 다른 인증 요소도 지원할 수 있습니다.
패스키는 Credential Manager에서 지원하는 새로운 기능이며 사용자가 바이오메트릭 스와이프만으로 안전하게 로그인할 수 있는 보다 안전하고 편리한 방법을 제공합니다. 패스키를 사용하면 사용자는 비밀번호나 다른 인증 요소를 필요로 하지 않고 어떤 장치에서든 안전하게 계정에 로그인할 수 있습니다.
App compatibility
Android 14에서 Google은 앱 호환성을 우선시하여 플랫폼 업데이트가 더욱 빠르고 원활하며, 기존 앱에 어떠한 방해도 최소화하려고 합니다. 이를 위해 Android 14에서 대부분의 앱에서 변경 사항은 옵트인(opt-in)으로 적용되며, 개발자는 자신의 앱에 필요한 변경 사항을 시간을 두고 적용할 수 있습니다.
이러한 옵트인 접근 방식은 개발자가 각 새로운 플랫폼 릴리스마다 즉시 새로운 기능과 API를 적용할 필요 없이 새로운 기능과 API를 채택할 때까지 시간을 두어 개발자가 앱 개발 프로세스를 더욱 제어할 수 있도록 해줍니다.
Google은 안드로이드 스튜디오 및 다른 개발자 도구를 업데이트하고, Android 14에서 변경 사항을 이해하고 앱에 적용하는 방법을 개발자가 이해할 수 있도록 리소스와 문서도 제공합니다.
총적으로 Google은 Android 14에서 앱 호환성에 중점을 둬, 플랫폼 업데이트가 개발자와 최종 사용자에게 최대한 원활하고 무난하게 이루어질 수 있도록 노력하고 있습니다. 앱에서 대부분의 변경 사항을 옵트인으로 만들어 개발자가 Android 14에 대한 준비를 더욱 수월하게 할 수 있도록 하고, 개발자가 필요로 하는 도구와 리소스를 제공하여 플랫폼으로의 전환을 가능한 쉽게 만들고자 합니다.
OpenJDK 17 Support
Android 14에서Google은 300개의 OpenJDK 17 클래스에 대한 액세스를 포함한 OpenJDK 17 지원을 추가했습니다. 또한 레코드 클래스, 멀티라인 문자열 및 instanceof 패턴 매칭과 같은 Java 17의 기능을 사용할 수 있도록 지원할 예정입니다.
Google Play 시스템 업데이트 덕분에, 6억 개 이상의 기기에서 이러한 변경 사항이 포함된 최신 Android Runtime (ART) 업데이트를 수신할 수 있습니다. 이를 통해 앱은 장치 간에 더 일관되고 안전한 환경을 제공받을 수 있으며, 플랫폼 릴리스와는 독립적으로 새로운 기능을 사용자에게 제공할 수 있습니다.
Easier testing and debugging of changes
Android 14에서 앱에 영향을 미칠 수 있는 변경 사항을 개발자가 더 쉽게 테스트하고 디버깅할 수 있도록, Google은 개발자 옵션 또는 adb에서 개별 변경 사항을 강제로 활성화 또는 비활성화할 수 있는 토글 옵션을 재도입합니다.
이러한 토글을 제공함으로써 Google은 개발자가 앱 개발 프로세스를 더욱더 제어할 수 있도록 하고, Android 14에서 변경 사항을 더 쉽게 테스트하고 디버깅할 수 있도록 합니다. 이것은 개발 프로세스를 가속화하고 앱이 최신 플랫폼 변경 사항과 호환되도록 보장하는 데 도움이 될 수 있습니다.
이번 시간을 통해 Android 14에서 변경될 내용들을 알아보았는데요. 저는 개발자여서 그런지 Java 17을 지원 받을 수 있다는 것이 가장 눈에 띄었습니다. 이번 preview내용이 올 가을 공식 Release할때 모두 포함될지 지켜봐야 할 것 같습니다.
참고자료