답변:
이 답변은 안드로이드의 공식 문서 (특히 인용 부분) 에 크게 의존합니다 .
Unity 프로젝트에 대한 멀티 덱스 지원을 설정하는 방법
멀티 덱스 란?
Android 애플리케이션 (APK) 파일에는 앱을 실행하는 데 사용되는 컴파일 된 코드가 포함 된 DEX (Dalvik Executable) 파일 형식의 실행 가능 바이트 코드 파일이 포함되어 있습니다. Dalvik Executable 스펙은 단일 DEX 파일 내에서 참조 할 수있는 총 메소드 수를 Android 프레임 워크 메소드, 라이브러리 메소드 및 사용자 고유 코드의 메소드를 포함하여 65,536으로 제한합니다. 이 제한을 초과하려면 멀티 덱스 구성이라고하는 둘 이상의 DEX 파일을 생성하도록 앱 빌드 프로세스를 구성해야합니다.
Multidex를 사용할 때 :
단일 DEX 파일 내에서 참조 할 수있는 총 메서드 수를 Android 프레임 워크 메서드, 라이브러리 메서드 및 사용자 코드의 메서드를 포함하여 65,536-까지 초과하는 경우.
64K 제한을 피하십시오
64K 이상의 메서드 참조를 사용하도록 앱을 구성하기 전에 앱 코드 또는 포함 된 라이브러리에서 정의한 메서드를 포함하여 앱 코드에서 호출하는 총 참조 수를 줄이는 단계를 수행해야합니다. 다음 전략은 DEX 기준 한계에 도달하지 않도록 도와줍니다.
앱의 직접적 및 전 이적 종속성 검토 -앱에 포함하는 큰 라이브러리 종속성이 앱에 추가되는 코드의 양보다 큰 방식으로 사용되는지 확인하십시오. 일반적인 안티 패턴은 몇 가지 유틸리티 방법이 유용했기 때문에 매우 큰 라이브러리를 포함하는 것입니다. 앱 코드 종속성을 줄이면 DEX 참조 제한을 피하는 데 도움이 될 수 있습니다.
ProGuard로 사용하지 않는 코드 제거 - 릴리스 빌드에 대해 ProGuard를 실행하려면 코드 축소 를 활성화하십시오 . 축소를 사용하면 APK와 함께 사용하지 않는 코드를 제공하지 않습니다.
이 공식 팁 외에도 Unity 프로젝트를 빌드 할 때 다음 단계를 수행하면 추가 도움이됩니다.
멀티 덱스 구성을 사용하도록 앱 프로젝트를 설정하려면 다음을 수정해야합니다.
minSdkVersion이 21 이상으로 설정 되면 다음과 같이 모듈 수준 build.gradle 파일에서 설정
multiDexEnabled
하면true
됩니다.
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
그러나
minSdkVersion
20 이하로 설정되어 있으면 다음과 같이 멀티 덱스 지원 라이브러리를 사용해야합니다.3.1. 다음과 같이 모듈 수준 build.gradle 파일을 수정하여 멀티 덱스를 활성화하고 멀티 덱스 라이브러리를 종속성으로 추가하십시오.
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
3.2. Application 클래스를 대체하는지 여부에 따라 다음 중 하나를 수행하십시오.
Application
클래스를 재정의하지 않으면 다음과 같이 매니페스트 파일을 편집하여 태그 에 설정android:name
하십시오<application>
.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
</manifest>
Application
클래스를 재정의하는 경우 다음과 같이 MultiDexApplication을 확장하도록 변경하십시오 (가능한 경우).
public class MyApplication extends MultiDexApplication { ... }
- 또는 Application 클래스를 재정의하지만 기본 클래스를 변경할 수없는 경우 대신 attachBaseContext () 메서드를 재정의하고 MultiDex.install (this)를 호출하여 멀티 덱스를 활성화 할 수 있습니다.
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
다른 플러그인 매니페스트에서 오류를 확인하고 프로젝트를 정리하고 sysc를 다시 청소하십시오.
프로젝트에 종속성 문제가있는 경우 Android 터미널에서이 명령을 실행하십시오.
% Gradle clean App."App name"
다음 종속성을 Application Gradle의 종속성 아래에 복사하십시오.
compile fileTree(include: ['*.jar'], dir: 'bin')
compile fileTree(include: ['*.jar'], dir: 'libs')
기본 프로젝트 Gradle에 signingConfig를 추가하십시오.
또는 수동으로 서명 모드를 디버그 모드로 설정하십시오. 파일-> 프로젝트 구조-> 모듈에서 프로젝트를 클릭하고 빌드 유형에서 디버그-> 서명 구성 선택-> 디버그를 선택하십시오.
이제 Gradle을 동기화하고 프로젝트를 빌드하십시오.
이 링크를 통해 유니 덱스를 통해 멀티 덱스 지원 게임을 직접 만들 수 있습니다.
https://medium.com/@abhpatidar/solving-unity-dex-issue-538e134c8809
참고 : 이렇게하면 멀티 덱스 자체 만 가능하며 멀티 덱스 문제를 해결해야합니다. gradle 관련 문제는 해결되지 않습니다.