Answers:
这个答案在很大程度上依赖于Android的官方文档(特别是引用的部分)。
如何为Unity项目设置Multidex支持
什么是Multidex:
Android应用程序(APK)文件包含Dalvik可执行(DEX)文件形式的可执行字节码文件,其中包含用于运行您的应用程序的已编译代码。Dalvik Executable规范将单个DEX文件中可引用的方法总数限制为65,536,包括Android框架方法,库方法和您自己代码中的方法。超过此限制要求您将应用程序构建过程配置为生成多个DEX文件,称为多dex配置。
当我们使用Multidex时:
当我们超出单个DEX文件中可引用的方法总数到65,536(包括Android框架方法,库方法和您自己的代码中的方法)时。
避免64K限制
在配置您的应用程序以允许使用64K或更多方法引用之前,您应采取步骤减少应用程序代码调用的引用总数,包括应用程序代码或包含的库定义的方法。以下策略可以帮助您避免达到DEX参考限制:
查看应用程序的直接和传递依赖关系 -确保以任何方式使用您包含在应用程序中的任何大型库依赖关系,而这些依赖关系要超过添加到应用程序中的代码量。常见的反模式是包括一个非常大的库,因为一些实用程序方法很有用。减少应用程序代码依赖性通常可以帮助您避免DEX参考限制。
使用ProGuard删除未使用的代码 - 启用代码收缩功能以为您的发行版运行ProGuard。启用缩小功能可确保您不会随APK一起发送未使用的代码。
除了这些官方技巧外,在构建Unity项目时,执行以下步骤将进一步帮助您:
设置您的应用程序项目以使用多dex配置需要您进行以下修改。
如果您的minSdkVersion设置为21或更高,则
multiDexEnabled
只需true
在模块级build.gradle文件中将其设置为,如下所示:
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
但是,如果您
minSdkVersion
将其设置为20或更低,则必须使用multidex支持库,如下所示:3.1。修改模块级别的build.gradle文件以启用multidex并将multidex库添加为依赖项,如下所示:
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)以启用multidex:
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
检查其他插件清单中的错误并清理项目。然后再次执行sysc。
如果您的项目中存在任何依赖性问题,请在Android Terminal中运行此命令
% Gradle clean App."App name"
将这些依赖项复制到Application Gradle中的依赖项下:
compile fileTree(include: ['*.jar'], dir: 'bin')
compile fileTree(include: ['*.jar'], dir: 'libs')
在主项目Gradle中添加signingConfig。
或通过手动将“签名”模式设置为“调试”模式,转到“文件”->“项目结构”->“模块”下,单击您的项目,然后在“构建类型”下选择“调试”->“选择签名配置”->“调试”
现在,同步您的Gradle并构建项目。
我建议您通过此链接,该链接将帮助您直接通过统一来创建支持Multidex的游戏。
https://medium.com/@abhpatidar/solving-unity-dex-issue-538e134c8809
注意:这只会启用统一的multidex(并应解决multidex问题)。它不会解决gradle相关的问题。