Android 빌드 64K 참조 제한 해결 방법에 대해 정리한다.(Unity 2018.1)
발생 원인은 아래 링크 참고
https://developer.android.com/studio/build/multidex
두 오류 모두 공통 숫자인 65,536을 표시합니다. 이 숫자는 단일 DEX(Dalvik Executable) 바이트코드 파일 내에서 코드가 호출할 수 있는 참조의 총 개수를 나타냅니다. 이 페이지에서는 multidex라는 앱 구성을 활성화하여 이 제한을 넘는 방법을 설명합니다. multidex는 앱이 다중 DEX 파일을 빌드하고 읽을 수 있게 해줍니다.
64K 에러 메시지들
Conversion to Dalvik format failed:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
trouble writing output:
Too many field references: 131000; max is 65536.
You may try using --multi-dex option.
Error:The number of method references in a .dex file cannot exceed 64K.
Error:Execution failed for task ':app:transformClassesWithDexForRelease'.
해결 방법
64K 참조 제한의 해결 방법 아래 두가지가 있다
- Project Export 후 Android Stdio에서 빌드
- mainTemplate.gradle
mainTemplate.gradle을 이용한 방법
참고자료
Custom Gradle template 사용하여 해결
- Build System -> Gradle 선택
- mainTemplate.gradle 파일 설정
PlayerSettings -> Publishing Settings -> Build / Custom Gradle Template 체크
Custom Gradle Template 체크하면 Plugins/Android폴더 아래 파일이 생긴다.
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
buildscript {
repositories {
jcenter()
maven { url "https://maven.google.com/"}
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0' // Unity 2018.1 : Gradle version 4.0.1 //classpath 'com.android.tools.build:gradle:3.0.1' // Unity 2018.2 : Gradle version 4.2.1
}
}
buildscript {
repositories {
jcenter()
maven { url "https://maven.google.com/"}
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0' // Unity 2018.1 : Gradle version 4.0.1 //classpath 'com.android.tools.build:gradle:3.0.1' // Unity 2018.2 : Gradle version 4.2.1
}
}
allprojects {
repositories {
jcenter()
maven { url 'https://maven.google.com'}
flatDir {
dirs 'libs'
}
}
}
repositories {
jcenter()
maven { url 'https://maven.google.com'}
flatDir {
dirs 'libs'
}
}
}
apply plugin: 'com.android.application'
dependencies {
// PC에 설치 되어있는 버전을 사용(하단 그림)
compile 'com.android.support:multidex:1.0.1'
compile fileTree(dir: 'libs', include: ['*.jar'])
**DEPS**}
android {
compileSdkVersion **APIVERSION**
buildToolsVersion '**BUILDTOOLS**'
defaultConfig {
minSdkVersion **MINSDKVERSION**
targetSdkVersion **TARGETSDKVERSION**
applicationId '**APPLICATIONID**'
multiDexEnabled true
ndk {
abiFilters **ABIFILTERS**
}
versionCode **VERSIONCODE**
versionName '**VERSIONNAME**'
}
dexOptions {
javaMaxHeapSize "4g"
}
lintOptions {
abortOnError false
}
aaptOptions {
noCompress '.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**
}
**SIGN**
buildTypes {
debug {
minifyEnabled **MINIFY_DEBUG**
// 삭제 하지 않으면 에러 발생
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD**
jniDebuggable true
}
release {
minifyEnabled **MINIFY_RELEASE**
// 삭제 하지 않으면 에러 발생
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD**
**SIGNCONFIG**
}
}
**PACKAGING_OPTIONS**
}
**SOURCE_BUILD_SETUP**
필요 하다면 자신의 multidex 버전 확인
C:\Users\User\AppData\Local\Android\Sdk\extras\android\m2repository\com\android\support\multidex
- AndoidManidest.xml파일에 MultiDexApplication추가
android:name="android.support.multidex.MultiDexApplication"
<application android:allowBackup="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:theme="@style/UnityThemeSelector" android:debuggable="false" android:isGame="false"
android: -
추가 - 2019.07.25
- -https://today7e.blogspot.com/2019/07/unity-android-comandroidbuildapitransfo.html
Android Resolver 1.2.122 사용시
mainTemplate.gradle이 아래와 같이 android.useAndroidX" true값이 들어가 있으면 빌드시 에러가 발생한다.
// Android Resolver Repos Start
([rootProject] + (rootProject.subprojects as List)).each {
ext {
it.setProperty("android.useAndroidX", true)
it.setProperty("android.enableJetifier", true)
}
}
그럴 경우 AndoidManidest.xml파일에 MultiDexApplication추가
android:name="androidx.multidex.MultiDexApplication"
작성자가 댓글을 삭제했습니다.
답글삭제확인은 한번더 해야하지만 아래처럼 알고 있습니다.
삭제2017.1 and 2017.2 use
Android plugin version 2.1.0
Gradle version 2.14
2017.4 and 2018.1 use
Android plugin version 2.3.0
Gradle version 4.0.1
2018.2 uses
Android plugin version 3.0.1
Gradle version 4.2.1
유니티가 깔려있는 아래 폴더를 확인해 보세요~
삭제Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib
제가 질문을 잘 못 한거 같아 삭제했는데 그 사이 답을 달아주셨네요 감사합니다. 다시 확인해 보겠습니다.
삭제안녕하세요.
답글삭제제가 유니티 5.4.5를 사용하다가 2018로 버전업을 하였고,
이후 빌드를 하는 중에 에러가 발생을 하였습니다.
발생한 에러는 CommandWithNoStdoutInvokationFailure: Gradle prewarm failed. 입니다.
그래들 빌드 관련해서 이슈인 것 같은데,
어디서 부터 봐야 할지 난감하네요.
도움이 될만한 것이 있을까요?
2018버전이 몇인가요? 아래 링크한번 확인해보세요
삭제https://forum.unity.com/threads/gradle-prewarm-failed-in-unity-2018-3-3f1.620206/