유니티에서 Gradle 빌드, Multidex 사용하기
Gradle
Gradle은 Groovy를 이용한 빌드 자동화 시스템이다. Groovy와 유사한 도메인 언어를 채용하였으며, 현재 안드로이드 앱을 만드는데 필요한 안드로이드 스튜디오의 공식 빌드 시스템이기도 하다. Java, C/C++, 파이썬 등과 같은 여러 가지 언어를 지원한다. (위키 백과)
Gradle은 빌드 프로세스 수를 자동화하는 Android 빌드 시스템입니다. 이 자동화로 인해 가장 일반적인 빌드 오류가 발생할 확률이 줄어듭니다. 특히 Unity 에디터에서 Gradle을 사용하면 DEX(Dalvik Executable 포맷) 파일의 메서드 레퍼런스 수가 감소하므로 DEX 제한과 관련된 문제가 발생할 가능성이 더 적습니다. 하지만 Gradle과 디폴트 Unity Android 빌드 시스템의 차이점으로 인해 일부 기존 프로젝트를 Gradle로 전환하기 어려울 수 있습니다. (Unity Documentation)
Multidex 앱 및 앱이 참조하는 라이브러리에서 메서드가 65,536개를 초과하면 앱이 Android 빌드 아키텍처의 제한에 도달했음을 알리는 빌드 오류가 발생합니다.
- Unity 버전 : 2019.3.13f
- SDK 환경 : Google Play(GooglePlayGamesPlugin-0.10.09), 외 FireBase 3종
Project Setting -> Player -> Publishing -> Custom Gradle Template,Custom Launcher Gradle Template 활성화
AndroidX 사용 환경
Custom Gradle Template
- 다음 파일에 아래와 같은 코드가 있는경우 참고
([rootProject] + (rootProject.subprojects as List)).each {
ext {
it.setProperty("android.useAndroidX", true)
it.setProperty("android.enableJetifier", true)
}
}
Custom Launcher Gradle Template
- 주석 밑부분 코드 추가
dependencies {
// 추가 : 커스텀 추가
implementation 'androidx.multidex:multidex:2.0.1'
}
defaultConfig {
minSdkVersion **MINSDKVERSION**
targetSdkVersion **TARGETSDKVERSION**
// 추가 : 멀티 덱스 on
multiDexEnabled true
applicationId '**APPLICATIONID**'
ndk {
abiFilters **ABIFILTERS**
}
versionCode **VERSIONCODE**
versionName '**VERSIONNAME**'
}
Android 사용 환경
Custom Gradle Template
- 다음 파일에 아래와 같은 코드가 없는 경우(?), 또는 useAndroidX를 사용하지 않는 환경
([rootProject] + (rootProject.subprojects as List)).each {
ext {
it.setProperty("android.useAndroidX", true)
it.setProperty("android.enableJetifier", true)
}
}
Custom Launcher Gradle Template
- 추석 밑부분 코드 추가
dependencies {
// 추가 : 커스텀 추가
// multidex:1.0.3 이 부분은 사용 환경에 맞는 버전 사용
implementation 'com.android.support:multidex:1.0.3'
}
defaultConfig {
minSdkVersion **MINSDKVERSION**
targetSdkVersion **TARGETSDKVERSION**
// 추가 : 멀티 덱스 on
multiDexEnabled true
applicationId '**APPLICATIONID**'
ndk {
abiFilters **ABIFILTERS**
}
versionCode **VERSIONCODE**
versionName '**VERSIONNAME**'
}
Comments