본문 바로가기

Development/Android

MultiDex와 Play Service SDK에 관한 고찰.

Android Studio로 이전하는 것과 관련한 이야기를 해주신 사항을 바탕으로 개인적으로 한번 다시 살펴봐야 겠다 싶어 관련 내용을 정리 및 공유드립니다. 두서가 좀 없지만 차후 Multidex관련 이슈시 읽어보면 도움이 될듯 합니다.

1. MultiDex

기존의 DEX(Dalvik Executable files) 의 경우 single dex파일이 65535이상의 method를 reference하지 못하는 이슈를 해결하기 위한 방법으로 여러개의 dex파일로 쪼개는 방법으로 처리를 하도록 Multidex Support Library를 제공했습니다. 이 방법으로 통해 처리를 하고 apk는 classes.dex파일은 반드시 포함하고 있으며 classes2.dex, classes3.dex의 형태로 apk에 포함되어 있습니다.(MultiDex class install method를 통해 지원)

muiti dex support library에는 별도의 minSdk버전을 찾을 수는 없지만, 
MultiDex Reference상에서는 4부터 20까지 호환성을가지며 21이상의 버전은 OS자체적으로(ART가)처리를 하는 형태로 여겨집니다.
https://developer.android.com/…/supp…/multidex/MultiDex.html

Multidex를 적용하는 방법은 간단하며 아래의 문서의 내용을 통해 Gradle환경에서 가능합니다. jar파일 형태로 존재하지만 Ant빌드환경에서의 동작여부는 명확치않으며, 안되는 것이 아닐까 하는 생각이 드네요..
https://developer.android.com/tools/building/multidex.html…

몇가지 제약사항들이 기록되어 있는데 data파티션이 복잡하며 두번째 덱스파일이 큰경우는 ANR이 발생할 수 있으며, linearAlloc bug로 API Level 14이전버전에서는 앱실행이 안될수 있고, Dalvik linearAlloc limit에 따라 매우큰 메모리 할당으로 인해 앱이 크래쉬될 수 있다고 정리되어 있습니다(거의 이정도면 쓰지말란 얘기 같습니다만;;)

최대한 줄일 수 있는 방법을 가이드하고 있는 것으로 봐서 왠만하면 multidex를 활용하지 않는 것이 정신 건강에 이로울 듯 합니다만, Google Play Service를 활용하면서 minSdk버전이 낮은 앱의 경우는 갖을 고초(?)를 이겨내야 할 것 같네요@_@;;

http://android-developers.blogspot.kr/…/google-play-service…


2. Play Service SDK

위의 Multidex관련 이슈를 양산하는 데 가장 큰 공을 가진 라이브러리가 Play Service SDK라는 사실은 모두 아실테고, 대부분의 서비스들이 GA,GCM,결제등의 환경을 연동하기 위해 Play Service를 사용하고 있습니다. Eclipse에서는 이를 전체 패키지로 Library Project로 활용해야 하지만 Gradle환경에서는 각 세부 API기능별로 로딩 할 수 있도록 지원하고 있습니다.

https://developers.google.com/android/guides/setup

이렇게 분할된 형태로 사용하기 위해서는 Android 2.3이상 호환이 되기에 API Level 8 버전을 호환하기 위해서는 전체로 로딩하는 형태만 가능한 제약사항이 있으며(Play Service APK설치가 가능한 버전부터 지원이 되는 듯 합니다.) 글을 읽어보니 4.2.2이상의 GoogleAPI에뮬의 경우도 정상동작을 하는 모양이네요.

여튼 이런저러한 이유로 API 8버전은 제외하는 것이 좋겠으나 기존에 서비스가 되고 있는 앱의경우는 고민이 될만한 부분이라 여겨집니다. 개발과정에서는 multidex환경에서 개발이 되더라도 proguard를 적용하여 배포시 하나의 dex파일만 생성될 수 있도록 노력이 필요하겠네요^^;


'Development > Android' 카테고리의 다른 글

Firebase ML Kit 검토  (0) 2018.09.13
Android Oreo로 타겟을 변경할때 겪었던 이슈들..  (0) 2018.09.13