Unity原生开发:Unity编译Android超过65536的解决方法

Android开发中有对APK的方法数量做限制,不能超过65536.如果超过了该数目,会遇到如下异常:
Conversion to Dalvikformat failed:Unable toexecute dex: method ID not in [0, 0xffff]: 65536,而网上能查到的解决方法都是针对Android的,经过各种资料结合终于把问题解决了。

解决方案如下:

1、在Android工程的build.gradle中启用MultiDex并包含MultiDex支持

1
2
3
4
5
6
7
8
9
defaultConfig 
{
multiDexEnabled true
}

dependencies
{
compile 'com.android.support:multidex:1.0.1'
}

然后执行一下 Sync Now,目的是让配置生效 。

2、在Android工程的application中重写一下attachBaseContext

1
2
3
4
5
6
@Overrideprotected   
void attachBaseContext(Context base)
{
super.attachBaseContext(base);
MultiDex.install(this);
}

3、在Unity的Android打包设置(File->Build Settings->Player Settings)中勾选Custom Gradle Template这时候会在Plugins/Android文件夹下出现mainTemplate.gradle在下面这些地方添加代码

1
2
3
4
5
6
7
8
9
10
11
defaultConfig 
{
multiDexEnabled true
target SdkVersion
**TARGETSDKVERSION**
}

dependencies
{
compile 'com.android.support:multidex:1.0.1'
}

在构建流程中出现这种问题,根据提示我们大概明白这是方法数过大导致的,而这些方法是存在于编译后的.class文件中的,而.class最后要存在于dex文件中,单个dex的方法或者字段数量不能超过65536所以会报错。完成以上配置重新打包生成的jar包就不会放在一个.class文件里面了,而是分成很多个.class文件根据生成的清单进行引用。