안드로이드에는 PAD(Play Asset Delivery)라는 기능이 있습니다. 링크에도 잘 설명되어있지만, 간단히 요약하자면 PAD를 사용하면 추가 다운로드를 위한 assetPack
이라는 번들을 aab 파일에 따로 구성할 수 있습니다. 저는 지금 개발중인 게임에 이 기능을 적용해보려고 하는 중이었습니다.
유니티에 적용하는 것은 꽤나 단순합니다. 여러 개의 애셋 팩을 만들기 위해서는 그에 맞는 디렉토리 구조를 만들어 주기만 하면 됩니다. 하지만 순조로운 개발 중에 이상한 현상을 마주했습니다. 마지막 gradle 빌드 단계에서 에러를 토해내는 것이었습니다.
에러 내용은 경로 문자열이 잘못되었다는 내용입니다. 부랴부랴 유니티 문서를 다시 찾아봅니다. 문서에는 애셋 팩이 고유한 이름을 가져야 하며, 유사한 이름인 경우 빌드 실패를 유발한다고 쓰여 있습니다. '유사한' 이라는 단어가 굉장히 거슬리지만, 이름을 확실히 구분되도록 수정했더니 오류가 수정되었습니다.
제가 가진 애셋 팩 이름은 실제로 비슷한 경우도 있지만 완전히 같은 이름을 가지고 있는 경우는 없습니다. 하지만 왜 빌드가 실패할까요? 궁금증을 해결하기 위해 소스코드를 까보기 시작했습니다. 실제 :launcher:assetPackDebugPreBundleTask
에 해당하는 코드를 살펴보았고 문제가 되는 부분은 이렇게 생겼습니다.
'유사한' 이름이 문제가 되던 부분은 이곳으로 판정이 되었습니다. 어떤 애셋 팩 이름이 다른 애셋 팩 이름의 일부인 경우 문제가 되는 것입니다. 조금 더 정리해보면 이렇습니다.
- 문제 없는 경우: 이름이 완전히 다름
- foo
- bar
- 문제 없는 경우: 이름이 비슷하지만 포함되지는 않음
- foobar
- bazbar
- 문제 없는 경우: 이름이 앞에 포함되는 경우
- foo
- foobar
- 문제 있는 경우: 이름이 뒤에 포함되는 경우
- bar
- foobar
제 경우는 4번 케이스가 해당되었기 때문에 에러가 발생했습니다. 유니티만의 문제라고 보기는 어려운 부분이어서 검색을 좀 더 해보았지만 비슷한 케이스를 거의 찾을 수 없었습니다. 안드로이드 문서에 해당 부분은 언급조차 없고 코드 수정이 있지도 않은 걸 보니 다들 아예 모르거나, 알면서도 피해가는 느낌이지 않나 싶습니다.
'Programming' 카테고리의 다른 글
Math.Round의 함정? (1) | 2024.08.26 |
---|---|
Crashlytics로 NDK 크래시 보기 (0) | 2015.05.26 |
Go언어 프로그램 프로파일링하기 (2) | 2015.04.07 |
graphite 설치중 막히는 것들 (0) | 2014.10.25 |
특정 안드로이드 기기에서 '패키지 파일이 올바르지 않습니다' 에러 (1) | 2014.06.27 |