Android - Non-SDK 인터페이스는 제한 정책

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를 참고바랍니다.

참고

Loading script...

Related Posts

codechachaCopyright ©2019 codechacha