문제 원인
Unity 2021.2 버전부터 안드로이드 빌드 시 Assets/Plugins/Android/res 디렉토리를 이용하여 리소스를 관리하는 방식이 제거 되었습니다. (공식 문서 링크)
문제 발생 상황
Assets/Plugins/Android/res 디렉토리 내에 국가별로 values 디렉토리를 만들어서 앱 이름에 대해 localization을 했고 Assets/Plugins/Android/assets 디렉토리 내에 게임의 설정을 관리하는 파일이 있는 상황입니다.
해결 방법
1. 가장 빠르고 쉬운 방법은 Unity를 2020 버전으로 내리는 것입니다. 2021 버전의 기능이 필요한게 아니라면 2020 버전으로 내리는 것을 고려해보세요. 무식하다고 생각할 수 있겠지만 가장 빠르고 확실한 방법입니다.
2. Unity 2020 버전을 사용할 수 없다면 안드로이드 라이브러리 파일인 aar을 만드는 방식을 사용해야 합니다. 다음 단계를 통해 res 디렉토리와 assets 디렉토리 내의 파일들을 aar로 만들어서 Unity에 추가해주세요.
💡 참고
res 디렉토리와 assets 디렉토리 중 하나만 있는 상황에서도 아래의 방법을 사용할 수 있습니다.
res, assets 디렉토리의 파일을 aar 파일로 만드는 방법
1. 안드로이드 스튜디오를 다운로드 받아 설치합니다.
2. 새 프로젝트를 생성합니다. 라이브러리 파일이기 때문에 Activity가 필요하지 않습니다. No Activity로 생성해줍니다.
3. 프로젝트 설정값을 입력합니다. 사이드 이펙트를 막기 위해 Minumum SDK 레벨은 Unity 프로젝트에서 지원하는 Minumum API Level과 일치 시키도록 합니다.
4. 프로젝트를 생성하면 최초로 프로젝트를 구성하는 시간이 소요됩니다. 프로젝트 구성이 완료된 이후 'Gradle Scripts' 하위의 build.gradle (Module: app) 파일을 열어서 다음 내용들을 수정합니다.
- plugins의 com.android.application을 com.android.library로 변경
- defaultConfig의 applicationId 삭제
5. 수정이 완료되면 우측 상단의 'Sync Now'를 클릭합니다.
6. 기존의 res 디렉토리 컨텐츠를 참고하는 부분을 삭제해야합니다. app 항목을 확장하여 manifests 디렉토리 하위의 AndroidManifest.xml 파일을 확인할 수 있습니다. 이 파일의 application 부분을 전부 삭제합니다.
7. assets 디렉토리도 추가를 해줍니다. Finder(탐색기)에서 직접 assets 디렉토리를 추가한 다음 Unity 프로젝트에 포함되어 있던 assets 디렉토리 내의 파일들을 복사합니다.
8. aar 파일을 생성할 기본 설정이 끝났습니다. 이제 기존의 Unity 프로젝트에 있었던 res 디렉토리를 복사해줍니다. app 항목을 확장하면 res 디렉토리가 있는 것을 확인할 수 있습니다. Android Studio의 res 디렉토리 내의 모든 파일들을 Unity 프로젝트의 res 디렉토리로 교체해줍니다.
9. 이제 aar 파일을 빌드해줍니다. 다음과 같은 순서를 통해 프로젝트를 aar 파일로 빌드하는 task를 실행해줍니다.
10. 이제 aar 빌드가 완료 됐습니다. '${AndroidStudio프로젝트경로}/app/build/outputs/aar' 경로에 빌드한 aar 파일이 생성되어 있는 것을 확인할 수 있습니다.
11. 완성이 된 aar 파일의 이름을 적당하게 변경하고 Unity 프로젝트에 복사합니다. 복사가 완료된 이후에는 기존의 res 디렉토리와 assets 디렉토리를 삭제해줍니다. Unity 공식 문서에 따르면 aar 파일은 프로젝트 아무곳에나 배치를 해도 상관이 없다고 하지만 깔끔한 정리를 위해 관습적으로 사용하는 Plugins/Android 디렉토리의 하위에 배치합니다.
11. 모든 과정이 끝났습니다. 이제 정상적으로 프로젝트를 빌드할 수 있습니다.
'Unity > Trouble Shooting' 카테고리의 다른 글
[Unity] Internal build system error. Backend exited with code 2 (0) | 2022.10.01 |
---|---|
[Unity] AmbiguousMatchException: Ambiguous match found 에러 (0) | 2022.10.01 |