달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
728x90
반응형

Multiple APK Support

이 포스트는 구글 개발자 사이트의 내용을 기반으로 작성되었습니다.


배경 이야기

안드로이드 에코 시스템 상에서 하나의 APK 는 하나의 어플리케이션을 뜻 합니다. 그리고 각각의 APK 는 서로 다른 패키지 이름을 갖곤 하지요. 그런데, 이 단순한 원칙이 가끔은 문제를 일으킬 수도 있습니다. 바로 안드로이드 에코 시스템의 만연한;;; 단편화 현상 때문입니다.


안드로이드 생태계 내에는 스크린 사이즈, 플랫폼 버전 별로, 다양한 디바이스 플랫폼이 존재합니다. 따라서 기본적으로 하나의 APK 는 단 한 종류의 타겟 디바이스만 지원해서 되는 것이 아니며, 최대한 다양한 종류의 디바이스를 지원할 필요가 있습니다. (이는 안드로이드 개발팀의 권장 사항이기도 합니다.)


이를 위하여, 여벌의 레이아웃을 준비하거나, 코드를 수정하기도 해야하며, 때에 따라서는 완전히 다른 리소스 셋을 구비해야할 필요가 있을 수도 있습니다. 어떤 어플리케이션은 비교적 수월하게 수정이 가능하지만, 어떤 경우는 굉장히 험난한 길을 헤매야 되는 경우도 있으며, 최악의 경우 도저히 하나의 APK 를 통해 다양한 플랫폼을 지원할 수 없는 경우도 있습니다. 단적인 예로, 현재 마켓에 등록가능한 APK 파일의 크기는 50MB 로 제한되어 있기 때문에, 화면 해상도에 따른 여러 셋의 리소스를 한 APK 에 포함할 수 없는 경우가 발생할 수 있습니다.


멀티플 APK 지원 사용하기

2011년에 열린 구글 I/O 행사에서, 안드로이드 개발팀은 어플리케이션 개발자들의 이러한 어려움을 해결하기 위하여, 하나 이상의 APK 파일을 동일한 이름을 갖은 하나의 어플리케이션으로 등록할 수 있도록 지원한다고 발표하였습니다. 그리고 2011년 7월 21일, 안드로이드 마켓에서 멀티플 APK 가 공식적으로 지원되었습니다.


방법은 아주 단순합니다. 어플리케이션 개발자는 하나의 앱에 대하여, 타겟이 되는 디바이스 특성에 따라 별도의 APK 를 마련하여, 동일한 이름을 사용하여 안드로이드 마켓에 퍼블리쉬 할 수 있습니다. 새롭게 업그레이드된 개발자 콘솔 고급 모드로 진입해 보시면, 하나의 어플리케이션에 대하여 다음과 같이 여러 APK 를 중복해서 활성화 / 비활성화 할 수 있도록 변경되어있는 것을 확인 하실 수 있습니다.


멀티플 APK 지원을 위한 조건

그렇다면 멀티플 APK 는 어떤식으로 분리가 가능할 까요? 간단히 정리해 보겠습니다. 멀티플 APK 로 구분할 수 있는 디바이스 특성은 모두 메니페스트 상에 마켓 필터 형태로 표현되는데, 현재 다음 세 가지 종류의 필터를 지원합니다.

  • OpenGL 텍스처 압축 포맷: 안드로이드 메니페스트 파일 상에서 <supports-gl-texture> 표현됩니다. 일반적으로 디바이스의 GPU 에 따라서 지원하는 텍스처 압축 포맷 형식이 달라질 수 있습니다.
  • Screen Configuration (화면 크기 및 화면 밀도): 가장 일반적으로 활용되는 필터겠네요. <supports-screens> 혹은 <compatible-screens> 요소로 표현됩니다. 타블렛용과 폰용으로 별개의 APK 를 제공한다고 하면 이 필터를 활용하시면 됩니다.
  • 플랫폼 버전 (API Level): <uses-sdk> 요소로 표현됩니다. 최신 플랫폼에서 제공하는 API 를 사용하면서 하위 호환성을 유지하기 위해서는, 안드로이드에서 제공해주는 호환성 패키지를 활용하거나, 자바 Reflection 패키지를 이용해야합니다. 어느쪽이던 간단한 일은 아니지요. 지원 버전에 따라 서로 다른 APK 를 구성하는 것은 나름대로 괜찮은 전략이 될 수 있습니다. (이전 버전에 대한 지원은 최소화하는 식으로...)


개발자는 이 세 가지 카테고리의 마켓 필터를 활용하여, 타겟 디바이스를 서로 구분지을 수 있습니다. (예를 들어, 안드로이드 프로요 이전 버전을 위한 하나의 APK / 프로요 이 후 버전이면서 화면 크기가 normal 이하인 APK / 프로요 이 후 버전이면서 large 이상인 APK 이런식으로 세 가지 APK 를 마련할 수 있겠지요.) 각기 다른 버전 코드 값(android:versionCode)을 갖는 동일한 이름의 APK 를 생성하여 마켓에 업로드 하고, 하나 이상의 APK 를 활성화 시켜주면 됩니다.


사용자 경험

자.. 그렇다면 한 가지 의문이 남게됩니다. 여러 APK 가 활성화 되어 있는 어플리케이션은 사용자에게 어떻게 표시될까요? 혹시라도, 흉칙하게 여러버전의 APK 가 리스트 형식으로 표시되는 것은 아닐까요? 아니요. 걱정하실 필요없습니다. 안드로이드 마켓을 통해 여러분의 어플리케이션에 접근하는 사용자에게는 해당 사용자 디바이스 환경에 가장 적합한 오직 하나의 APK 만 표시됩니다. 그리고 만일, 사용자의 디바이스 조건을 만족하는 APK 가 하나 이상 존재한다면, 그 중 가장 버전 코드 값이 높은 어플리케이션이 APK 파일이 표시될 것 입니다.


또 한가지, 멋진 기능은, 사용자가 사용하는 디바이스가 업그레이드되어(ex>프로요 -> 진저로), 지원하는 API Level 이 변경하는 등의 일이 발생하여, 기존 APK 가 아닌 다른 APK 가 보다 적당한 순간이 온다면, 안드로이드 마켓이 자동적으로 해당 사실을 감지하고, 어플리케이션을 업데이트 받으라는 정보를 사용자아게 알려줄 것 입니다.


마지막으로, 그렇다면 사용자 피드백 및 어플리케이션 정보는 어떻게 표현될까요? 비록 다 수의 APK 로 구성되어 있다고 하더라도, 동일한 어플리케이션으로 취급되는 만큼, 별점이라던가 사용자 리뷰는 모두 단일한 어플리케이션으로 관리됩니다. 한 가지 아쉬움은, 개발자가 오직 한 종류의 어플리케이션 상세 설명 페이지 만을 구성할 수 있다는 점 입니다. 따라서, 타겟 디바이스에 따라 스크린 레이아웃이나 기능에 차이가 있는 경우, 어플리케이션에 관한 정보를 기술하는데 주의를 기울일 필요가 있겠습니다.


결론

하나의 어플리케이션을 여러 APK 로 분리하여 배포하는 것은 절대로 권장되는 사항은 아닙니다. 글 서두에 이야기한 것처럼 용량 한계와 같은 문제라던가, 아니면 이른바 어른의 사정 - 다른 스크린 크기에 대응하는 어플리케이션을 서로 다른 부서 혹은 외주 업체에서 제작한다던가;;; 이 아닌 경우라면, 우선적으로 하나의 APK 를 이용하여 다양한 디바이스를 지원할 수 있도록 시도하는편이 좋습니다. 하나의 APK 는 배포 과정도 단순하고, 코드 유지 보수에도 장점을 갖습니다. 하지만 그럼에도, 세상일은 알 수 없는 법. 하나의 어플리케이션에 대하여 다양한 버전의 APK 를 배포할 수 있다는 점을 한번쯤 기억해 두시면 좋을 것 같습니다. 아! 그리고 보다 상세한 정보는 구글 개발자 사이트를 참고하시 길 바랍니다. (안드로이드 개발팀에서 권장하는 어플리케이션 버전 코드 생성 방법 등 상세한 내용을 담고 있습니다.)

728x90
반응형
:
Posted by mapagilove