Android 14 디바이스에서 Target SDK API(targetSdkVersion) 22 이하로 빌드된 Apk는 설치할 수 없도록 변경되었습니다.

만약 설치하려고 시도하면, 아래와 같은 에러가 발생하며 설치가 실패합니다. 왜 이렇게 변경되었는지, 자세히 알아보겠습니다.

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7

App의 최소 SDK API 제한

Android 13 이하에서는 App의 Target SDK API와 관련 없이 모든 Apk가 설치되었습니다. 하지만, Android 14에서는 App의 Target SDK API가 22 이하일 때 설치가 안되도록 변경되었습니다.

이렇게 변경된 이유는, API 22 이하 앱이 보안 측면에서 취약하기 때문입니다.

API 22 이하 앱의 경우는, 설치 후 처음 실행할 때 경고 같은 팝업이 뜨고, 앱 실행 시 권한을 앱에 부여할 것인지 물어봅니다. 그 이유는, API 23에서 Runtime permission이 도입되었기 때문으로, API 22 이하에서는 Runtime permission이 없었고, 모두 Install permission이기 때문입니다.

여기서 Install permission은 앱이 설치될 때 앱에게 자동으로 부여되는 것으로, 사용자가 앱을 사용할 때 동적으로 물어보고 권한을 부여해주는 Runtime permission과 다릅니다. 이런 이유로, Target API 22 이하 앱은 설치되는 즉시 모든 권한을 받을 수 있기 때문에, 설치 후 실행 전에 사용자에게 권한을 부여하는게 맞는지 물어본 뒤에 권한을 부여하게 됩니다.

Android 14에서 API 22 이하 앱은 설치할 수 없도록 변경된 것은 위의 API 22의 권한 팝업과 관련이 있습니다. API 22 이하 앱이 디바이스에 설치되고, 사용자가 인지하지 못하고 동의를 했을 때 모든 권한이 앱에 부여되면서, 보안 측면에서 악용될 가능성이 있습니다.

특히나 보이스 피싱이나, Malware 앱들은 대부분 API 22 이하로 만들어집니다. 보이스 피싱 등으로 발생하는 피해를 최소화하기 위해, API 22 이하 앱은 설치되지 않도록 변경되었습니다.

API 22 이하 앱 설치 실패 확인

내 앱이 Android 14 디바이스에서 설치가 안될 때, 이 변경사항으로 설치가 안되는 것인지 확인하고 싶을 때,

  • adb로 apk를 설치할 때 아래와 같이 INSTALL_FAILED_DEPRECATED_SDK_VERSION 에러가 발생합니다.
  • ADB 뿐만 아니라, 로그캣에서도 INSTALL_FAILED_DEPRECATED_SDK_VERSION 에러를 검색하여 찾을 수 있습니다.
$ adb install your_package.apk
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 22

예외로 API 22 이하 앱 설치하기

디버깅이나 테스트 목적으로 예외적으로 API 22 이하 앱을 설치해야할 때는, adb install 명령어에 --bypass-low-target-sdk-block 옵션을 추가하면 설치시킬 수 있습니다.

$ adb install --bypass-low-target-sdk-block your_package.apk

참고