본문 바로가기

Unity

[Unity] Android에서의 고해상도 AppIcon 관련

현상

개발이 완료되고, 출시를 앞 둔 구글 서브미션에서 다음과 같은 답변이 왔다.
 
"고밀도 디스플레이 단말기를 지원하기 위해 xxxhdpi(192x192) 실행 아이콘이 있어야 합니다.
실행 아이콘은 /res/mipmap-[density]/ 폴더에 위치해야 하며,
manifest 파일 내 설정을 android:icon="@mipmap/app_icon"으로 변경해 주시기 바랍니다.
보다 자세한 내용을 위해 아래의 링크 페이지를 참조해 주시기 바랍니다.
 
오잉? 이게 무슨 소리야 하며...
지금까지 기본적으로 유니티의 android-PlayerSetting에서 아이콘을 설정해 왔는데...
크게 뭐 문제된 적이 없었던 것 같은데... 적어도 개발환경에서는... 이라며...
 
위의 링크를 타고 들어가 보았더니, 해당 내용은 Android OS 3.2부터 지원한 아주 오래된 내용이었고,
안드로이드 앱 개발자가 지켜야 할 내용이었다.
 

Android Image DPI 관련

우선, 개발자 가이드 링크에 나온 안드로이드 DPI별 내용을 살펴보면 다음과 같다.
 

Density 및 한정자 규격

~120 dpi : ldpi
~160 dpi : mdpi
~240 dpi : hdpi
~320 dpi : xhdpi
~480 dpi : xxhdpi
~640 dpi : xxxhdpi
 
이 한정자 규칙을 적용시키면 drawable 폴더와 mipmap 폴더는 다음과 같이 명명되어 나열될 것이다.
 
drawable/ (기본 폴더)
drawable-ldpi/ (~120 dpi 폴더)
drawable-hdpi/ (~160 dpi 폴더)
...
 
mipmap/ (기본 폴더)
mipmap-ldpi/ (~120 dpi 폴더)
mipmap-hdpi/ (~160 dpi 폴더)
...
 
위 규칙에 맞추어 리소스가 포함되어 있으면, Android OS가 단말기 dpi에 매칭되는 이미지 리소스를 불러들인다.
 

drawable / mipmap

drawble과 mipmap 폴더는 모두 이미지 리소스를 담을 수 있는 폴더이다.
그런데, 정확하게 무슨 차이가 있는 것인가?
 
구글이 보내온 링크를 가 보면 drawable 폴더와 mipmap 폴더에 대해 다음과 같이 정리할 수 있다.
 

1. res/drawable

이미지 리소스를 담는 폴더라고 생각하면 된다.
이 폴더에 이미지 리소스를 dpi 규칙에 맞추어 넣어두면, 단말기의 dpi 에 적합한 이미지를 디스플레이한다.
 

2. res/mipmap

런처 아이콘 이미지 리소스만을 위한 폴더라고 한다.
기본적인 동작은 drawable 폴더와 같지만, mipmap 폴더엔 앱 아이콘만 넣어야 한다.
 
차이가 있다면, 단말기의 dpi에만 의존하는 drawable 폴더와 다르게, 
mipmap 폴더의 앱 아이콘은 런처 앱의 홈 스크린에 적합한 이미지를 디스플레이한다.
 
대부분의 런처 앱은 아이콘 배열에 대한 셋팅 기능을 제공한다. (4x3, 5x4 등등...)
그리고, 이 배열 설정에 따라 같은 단말기라 해도 앱 아이콘의 크기가 변경된다.
즉, 가장 적합한 앱 아이콘 크기가 다르다는 얘기이다.
drawable 폴더에 앱 아이콘을 넣어둘 경우 단말기 dpi에만 의존하기에, 런처 앱이 앱 아이콘을 하나만 그린다고 해 버릴 경우 엄청나게 크게 앱 아이콘을 그릴려고 할 것이기에, 단말기 dpi 보다 큰 아이콘을 꺼내 그리는 것이 아니라, 단말기 dpi에 해당하는 아이콘을 늘려서 그릴 것이다.
유저의 다양한 홈 스크린의 앱 아이콘 배열에 대한 셋팅에 유동성있게 대응하려면, 그것이 지원되는 mipmap 폴더에 앱 아이콘을 넣어 두라는 것이다.
 

유니티 5.2

사용중인 유니티 5.2 버전에서 PlayerSetting-Icon을 통해 앱 아이콘을 등록할 경우 유니티는 이를 /res/drawable/ 폴더 밑에만 해상도 별로 위치시킨다.
 
이후 버전에서는 어떨지 아직 테스트를 안해봐서 모르겠지만, /res/mipmap/에 대한 처리가 없다.
따라서, PlayerSetting이 아닌, 다른 방법으로 이를 처리해 주어야만 했다.
 

해결

프로젝트 디렉토리의 Assets/Plugins/Android/res/ 폴더에 다음과 같이 mipmap 폴더를 쭈욱 생성시키고, 넣으려는 앱 아이콘들을 dpi 에 맞추어서 모두 넣었다.
 
Assets/Plugins/Android/res 폴더의 내용은 그대로 APK의 res 폴더로 만들어지기에,위 폴더에 mipmap 폴더를 생성시키고 빌드를 하면 일단 mipmap 폴더는 생긴거다.
단지 이렇게만 해서 끝나는 것은 아니고, manifest 파일을 수정해 앱아이콘을 어느 폴더에서 불러와야 하는지 지정해 주어야 한다.