太多的字段参考:70613; 最大是65536

我的项目使用这些插件:

  • OneSignal
  • GooglePlayServices
  • 调整
  • 谷歌分析
  • 统一IAP
  • Facebook的SDK

这些插件几乎用在每个项目中。

但是我已经结束了现场引用计数

这是我的.aar文件列表 名单

我应该怎么做才能减less参考计数?

那么我应该怎么做才能减less参考计数?

你有这么多的插件与许多function/领域。 从Unity的编辑器创build这个限制是有限制的,而且你已经达到了这个限制。

为了减less引用计数,你必须删除一些这些插件,但我相信你需要它们,在这种情况下删除可能不是合适的解决scheme。

实际解决此问题并在此时为Android构build的唯一方法是将项目导出为Android项目,然后使用Android Studio构build项目 。 这删除了Unity编辑器强加的参考限制。


编辑

我忘记提到你必须在导出之后启用multidex。 由于很多人每天都会遇到这个问题,所以我决定给出一个彻底的指导,说明如何通过导出来解决这个问题,以及如何解决这个问题而不导出它

通过出口项目修复

1A。将Unity项目导出为Android项目。

在这里输入图像描述

1B 。导入Android Studio:

在这里输入图像描述

如果您导入Android Studio时出现分级错误,如下所示:

错误:org.gradle.api.internal.tasks.DefaultTaskInputs $ TaskInputUnionFileCollection无法转换为org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection

在这里输入图像描述

build.gradle文件的“buildscript”块中的“dependencies”块中,更改:

classpath 'com.android.tools.build.gradle.2.1.0' 

 classpath 'com.android.tools.build:gradle:2.2.3' 

在这里输入图像描述


如果您导出项目并仍然出现相同的错误,则需要手动启用multidex。 以下是Google的文档中的一个简化步骤,将在错误中显示给您:

android:name="android.support.multidex.MultiDexApplication" >添加到AndroidManifest.xml文件中的应用程序标签。

在这里输入图像描述


3.将 compile 'com.android.support:multidex:1.0.1'build.gradle文件中的“dependencies”块。

在这里输入图像描述


4.将 multiDexEnabled truebuild.gradle文件的“android”块中的“defaultConfig”块中。

在这里输入图像描述

构buildAPK,看看它是否工作。 如果引用计数错误消失,请在此处停止。


5.获取如下所示的GC开销exception?

java.lang.OutOfMemoryError:超出GC开销限制

增加执行dex操作时将使用的堆大小。 从这个解决scheme中 ,将以下内容添加到build.gradle文件中的“android”块中:

 dexOptions { javaMaxHeapSize "4g" } 

在这里输入图像描述

无需出口项目的FIX

必须有Unity 5.5及以上才能做到这一点:

1.转到<UnityInstallationDirecory>\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates ,将mainTemplate.gradle文件复制到您的<ProjectName>Assets\Plugins\Android文件夹中。


2.转到<UnityInstallationDirecory>\Editor\Data\PlaybackEngines\AndroidPlayer\Apk ,将AndroidManifest.xml文件复制到您的<ProjectName>Assets\Plugins\Android


3.打开刚刚用Visual Studio复制的mainTemplate.gradleAndroidManifest.xml文件,然后从上面的FIX BY EXPORTING THE PROJECT指令中进行修改。 跳过/忽略步骤#1A#1B 。 只要做#2#5的步骤。 而已。

这就是最终的mainTemplate.gradle应该看起来像什么, 这是最终的AndroidManifest.xml应该看起来像什么。 这仅供参考。 我build议你不要使用我的 ,而是按照上面的复制步骤来创build你的,因为未来的Unity版本可以带有不同的文件。 你想确保你使用的是最新版本,否则你可能会遇到问题。


4.build立APK,看它是否工作:

在这里输入图像描述

如果引用计数错误消失,请在此停止:

5.获取下面的错误?

构build失败发布构build必须在使用Gradle时进行签名

只需从 生成设置 中的 发布设置”中签署 apk。 您可以创build新的密钥库或使用现有密钥库。

在这里输入图像描述


6.下面的错误是?

错误:避免对debugging模式进行硬编码; 将其留出允许debugging和发布版本自动分配一个[HardcodedDebugMode]

AndroidManifest.xml文件中删除android:debuggable="true">


如果这个非导出解决scheme不适合你,那么你必须使用导出解决scheme。

海事组织,接受的答案是不正确的(或只是部分正确)。 导出一个Android工作室不会“神奇”解决这个问题。 另外,根据我的经验,导出的Android Studio项目并不总是立即生成,在实际构build之前,您必须先解决很多问题。

你正在使用大量的插件,所以你面临一个Android的限制 ,不能引用超过64k的方法。

有几件事你可以尝试解决这个问题:

  1. 如果可能的话,删除其中的一些插件(如已接受的答案中所述)。
  2. 使用multidex 。 在过去这只能通过将项目导出到Android工作室并在那里创build。 从Unity 5.5开始,您可以使用Gradle从Unity开始构build项目。 这意味着您可以创build一个自定义Gradle文件来configuration您的游戏使用Multidex。 这不会减less方法引用计数,但是它通过将原生Java计数拆分为多个dex文件来解决这个问题。
  3. 使用ProGuard – 因为您可以使用来自Unity的Gradle,您还可以定义ProGuard来运行和删除任何未使用的代码。

根据我的经验和解决scheme,只要给所有的AndroidManifest文件提供相同的软件包名称。 这将解决你太多的现场参考问题。 我已经用这种方式解决了我的问题,我也希望你:)