개발자를 위한 안드로이드 Q #1
이 포스트는 안드로이드 Q 베타 1 버전 기준으로 작성되었습니다. 이후, 정식 버전에서는 기능 및 API가 변경될 수 있으며, 기능에 관한 소감이나 의견은 개인적인 의견으로 회사의 공식 의견과는 다를 수 있습니다.
2019년 3월 14일 (미서부 현지 시간 13일) 안드로이드 Q 첫 번째 베타 버전이 공개되었습니다. 폴더블 폰 지원이나 ART 런타임 최적화등 여러 변경 사항이 있지만, 개인적으로 가장 눈에 띄는 점은 사용자 정보 보안을 위한 플랫폼 동작 변경 사항입니다. 안드로이드 개발자 사이트 내용을 살펴보면 위치 정보, 저장 장치, 고유 식별자 등 몇 가지 영역에 걸쳐 추가된 플랫폼 제약 조건 및 새롭게 추가된 API와 기능들이 자세히 설명되어 있습니다. 얼핏 살펴보아도 기존 앱 및 신규 앱 동작에 매우 큰 영향을 줄 것 같네요. 다양한 변경 사항을 파악하고, 수정하기 위해 우리에게 시간이 얼마나 남아있을까요?
안드로이드 베타 페이지에 공개된 Q 타임라인을 살펴보면, 전체 일정은 이전 P 버전과 비슷해 보입니다. 올해 Q3에 정식 출시 예정이네요. 플랫폼 배포도 P 버전과 유사하다면, 아마 해당 시점에는 구글 픽셀을 포함 몇몇 한정된 디바이스에서만 Q를 사용할 수 있을 테고, 연말이나 내년 초쯤 본격적으로 사용자들이 Q 버전을 사용하게 될 것 같습니다. 추가로 내년(2020년) 8월이 되면 Google Play 정책상 모든 신규 앱 및 기존 앱 업데이트는 타깃 버전을 Q에 맞춰야 할 것으로 예상됩니다. 정리하자면 Q 마이그레이션은 원칙적으로 올해 연말까지는 대부분 수정이 진행되고, 늦어도 내년 8월까지는 작업이 완료되어야 할 것으로 보입니다. 아직 꽃샘추위가 한창인 3월이니 여유가 있다고 생각할 수 있지만... 예고된 변경 사항이 만만치 않아서, 빠른 시점에 내용 확인 및 앱 호환성 테스트가 필요할 것으로 보입니다.
안드로이드 Q 베타 출시에 관한 공식 개발자 블로그 포스트에 잘 정리되어 있긴 하지만, 개발자 입장에서는 '개인 정보 보호 관련 동작 변경 사항'이 바로 체감하게 될 변경점이 될 것 같습니다. 이와 관련 주요 변경 사항이 체크리스트 형태로 정리되어 있습니다.
이해를 돕기 위해 관련 내용을 간단히 정리 및 번역해보았습니다.
Target SDK 버전과 관계없이 안드로이드 Q에서 동작하는 모든 앱에 적용됩니다. Target SDK 버전이 Q 이상인 경우나 앱이 명시적으로 opt-in한 경우에만 적용됩니다 (4월 25일 안드로이드 개발자 블로그에서 업데이트) Download 폴더 및 음악, 비디오, 사진 등 미디어 폴더를 읽고 쓰기 위한 새로운 권한 및 API가 추가됩니다. 이를 제외하고, 개별 앱은 더 이상 공용 폴더에 접근하거나 파일을 추가할 수 없습니다. 공용 저장소에 접근하거나 이를 통해 파일을 공유하는 앱은 이 변경 사항에 영향을 받을 수 있습니다. 앱 동작에 필요한 모든 파일은 새롭게 추가된 샌드박스 형식의 앱 별 독립 저장 공간(isolated storage)을 이용해 저장 및 관리되어야 합니다. 보다 자세한 내용은 다음 링크를 참고하시기 바랍니다.
Target SDK 버전과 관계없이 안드로이드 Q에서 동작하는 모든 앱에 적용됩니다. 앱이 포그라운드에서 동작하는 경우에만 위치 정보를 확인할 수 있는 새로운 사용자 권한이 추가됩니다. 사용자는 원하는 경우, 특정 앱이 포그라운드에서 동작 중에만 위치 정보를 확인할 수 있도록 허용할 수 있습니다. 백그라운드에서 사용자 위치 정보를 사용하는 모든 앱이 영향을 받을 수 있습니다. 반드시 백그라운드 상에서 사용자 위치 정보 확인이 필요하다면, 사용자에게 새롭게 추가된 권한을 요청하는 UX를 제공해야 합니다. 보다 자세한 내용은 다음 링크를 참고하시기 바랍니다.
Target SDK 버전과 관계없이 안드로이드 Q에서 동작하는 모든 앱에 적용됩니다. 백그라운드에서 동작하는 앱은 새로운 액티비티를 시작할 수 없습니다. 이 제약은 포그라운드 서비스에도 적용됩니다. 따라서, 리시버에서 특정 인텐트를 받아 액티비티를 시작하거나, 서비스(백그라운드와 포그라운드 서비스 모두 포함)에서 액티비티를 시작하는 앱은 이 변경 사항에 영향을 받을 수 있습니다. 전화 수신 표시 등, 반드시 백그라운드에서 액티비티를 실행시켜야 하는 경우, 직접 액티비티를 시작하는 대신 노티피케이션의 FullScreenIntent 기능을 활용할 수 있습니다. 보다 자세한 내용은 다음 링크를 참고하시기 바랍니다.
Target SDK 버전과 관계없이 안드로이드 Q에서 동작하는 모든 앱에 적용됩니다. 안드로이드 Q 플랫폼은 사용자가 리셋할 수 없는 디바이스 식별자를 제공하지 않습니다. 안드로이드 Q 플랫폼에서 해당 값을 확인하는 경우 NULL 값을 반환하거나 보안 예외가 발생할 수 있습니다. SERIAL 혹은 IMEI 값 등 디바이스 식별자를 사용하는 모든 앱이나 서비스가 이 변경 사항에 영향을 받을 수 있습니다. 리셋할 수 없는 디바이스 식별자를 사용하는 모든 앱과 서비스는 그 용도에 따라 Advertisement ID, Instance ID 등 다른 식별자를 사용하도록 마이그레이션 되어야 합니다. 보다 자세한 내용은 다음 링크를 참고하시기 바랍니다.
Target SDK 버전이 Q 이상인 경우에만 적용됩니다. Wi-Fi 및 Bluetooth 스캐닝 등 사용자 위치를 추적하는 데 사용할 수 있는 몇몇 API를 사용하기 위해서는, ACCESS_FINE_LOCATION 권한이 필요합니다. 기존에 ACCESS_COARSE_LOCATION 권한만 갖고 해당 API를 사용하던 앱은 ACCESS_FINE_LOCATION 권한을 요청하고 권한 사용 허가를 받아야 합니다. 보다 자세한 내용은 다음 링크를 참고하시기 바랍니다.
현재 안드로이드 Q 베타는 시스템 이미지는 픽셀 1,2,3 디바이스와 에뮬레이터 용이 제공되고 있고, Q 버전 SDK 설정 및 테스트 환경 설정에 관한 자세한 가이드가 제공되고 있습니다. 사안에 따라, Q 마이그레이션에 생각보다 오랜 시간이 소요될 수도 있는 만큼, 플랫폼 주요 변경 사항을 살펴보시고 빠른 시일 내에 앱 호환성 테스트를 진행해보시길 권장드립니다.
개발자 주의가 예상되는 안드로이드 Q의 변경 사항을 정리해 '개발자를 위한 안드로이드 Q 정리'라는 브런치 매거진으로 발행하고 있습니다. 우선적으로 베타 1 버전에는 개발자들의 주의가 필요한 (그래서 무서운) 동작 변경 사항에 관해 주로 다루었지만, 이후 베타 2 버전이 공개되면, 개발자 입장에서 재밌고 새롭게 적용해볼 만한 신기능에 관해서도 다루어 볼 예정입니다 (그런 게 있겠죠?). 그런 만큼, 안드로이드 Q 버전이 정식 출시될 때까지, '개발자를 위한 안드로이드 Q 정리 매거진'에 많은 관심 부탁드립니다 : )