Android 9, 파이(API 28)부터 Non-SDK 호출은 제한이 됩니다.
사실 그 이전에는 Reflection을 사용하거나, Custom SDK를 만들어 @hide
API를 사용할 수 있었습니다.
하지만 앱 안정성의 문제로 구글은 Android 9부터 이런 동작을 제한한다고 합니다.
일부 앱들은 이미 @hide
API를 사용하고 있기 때문에 준비기간을 주기 위해 단계적으로 제한을 하려고 합니다.
Greylist, Blacklist 등을 두어 규제의 속도를 늦추고 있습니다.
구글은 안드로이드의 모든 API를 4개의 리스트로 분류하였고, 리스트의 종류와 의미는 다음과 같습니다.
- whitelist: Android에서 제공하는 SDK를 의미하며, 호출해도 문제가 없는 API들입니다.
- blacklist: 절대 호출 불가능한 Non SDK(@hide API)를 의미합니다. 호출하면 Exception이 발생합니다.
- light-greylist: Non SDK를 의미하며, API28에서 호출은 가능하지만 다음 안드로이드 버전에서 제한될 수 있기 때문에 다른 API로 변경을 권장하는 리스트입니다.
- dark-greylist: 앱의 target sdk가 API28 이상이면 blacklist와 동일하게 취급되어 호출이 불가능합니다.
하지만 target sdk가 API28 미만이면 호출이 가능합니다.
blacklist의 경우 호출을 하면 Exception이 발생되고, greylist의 경우 warning log가 출력된다고 합니다. 이런 제한된 리스트들은 안드로이드 플랫폼 안에 있기 때문에 안드로이드를 생산하는 제조사마다 리스트가 조금 다를 수 있습니다. 하지만 구글이 정한 API 리스트는 변하지 않고, CTS 및 CDD를 통해 구글이 선정한 API를 변경하지 못하도록 하고 있습니다.
3rd party 앱이 Target SDK를 API27로 유지한다면, 이런 제약을 피해갈 수 있겠지만 API29에서 구글이 제한을 강화할 수 있기 때문에 greylist의 api를 빨리 변경하는 것이 좋을 것 같습니다.(또한 Public API로 개발하는 것이 더 좋기도 하구요)
구글은 개발자가 자신의 앱이 greylist의 API를 사용하는지 테스트할 수 있는 방법을 제공하고 있습니다. 자세한 방법은 Developers를 참고바랍니다.
참고
Related Posts
- Android 14 - 사진/동영상 파일, 일부 접근 권한 소개
- Android - adb push, pull로 파일 복사, 다운로드
- Android 14 - 암시적 인텐트 변경사항 및 문제 해결
- Jetpack Compose - Row와 Column
- Android 13, AOSP 오픈소스 다운로드 및 빌드
- Android 13 - 세분화된 미디어 파일 권한
- Android 13에서 Notification 권한 요청, 알림 띄우기
- Android 13에서 'Access blocked: ComponentInfo' 에러 해결
- 에러 해결: android gradle plugin requires java 11 to run. you are currently using java 1.8.
- 안드로이드 - 코루틴과 Retrofit으로 비동기 통신 예제
- 안드로이드 - 코루틴으로 URL 이미지 불러오기
- Android - 진동, Vibrator, VibrationEffect 예제
- Some problems were found with the configuration of task 에러 수정
- Query method parameters should either be a type that can be converted into a database column or a List
- 우분투에서 Android 12 오픈소스 다운로드 및 빌드
- Android - ViewModel을 생성하는 방법
- Android - Transformations.map(), switchMap() 차이점
- Android - Transformations.distinctUntilChanged() 소개
- Android - TabLayout 구현 방법 (+ ViewPager2)
- Android - 휴대폰 전화번호 가져오는 방법
- Android 12 - Splash Screens 알아보기
- Android 12 - Incremental Install (Play as you Download) 소개
- Android - adb 명령어로 bugreport 로그 파일 추출
- Android - adb 명령어로 App 데이터 삭제
- Android - adb 명령어로 앱 비활성화, 활성화
- Android - adb 명령어로 특정 패키지의 PID 찾기
- Android - adb 명령어로 퍼미션 Grant 또는 Revoke
- Android - adb 명령어로 apk 설치, 삭제
- Android - adb 명령어로 특정 패키지의 프로세스 종료
- Android - adb 명령어로 screen capture 저장
- Android - adb 명령어로 System 앱 삭제, 설치
- Android - adb 명령어로 settings value 확인, 변경
- Android 12 - IntentFilter의 exported 명시적 선언
- Android - adb 명령어로 공장초기화(Factory reset)
- Android - adb logcat 명령어로 로그 출력