Android 字段引用过多:70613;马克斯是65536

Android 字段引用过多:70613;马克斯是65536,android,unity3d,android-multidex,Android,Unity3d,Android Multidex,我的项目使用以下插件: 一个信号 谷歌游戏服务 调整 谷歌分析 统一IAP Facebook SDK 几乎每个项目都使用这些插件 但我已经超过了现场参考人数 这是我的.aar文件列表 我应该如何减少引用计数 那么我应该怎么做来减少引用计数呢 你有这么多插件和许多函数/字段。在Unity的编辑器中构建此文件时有一个限制,您已经达到了该限制 为了减少引用数量,您必须删除一些插件,但我确信您需要它们,在这种情况下,删除可能不是合适的解决方案 目前真正解决这个问题并为Android构建的唯一方法是

我的项目使用以下插件:

  • 一个信号
  • 谷歌游戏服务
  • 调整
  • 谷歌分析
  • 统一IAP
  • Facebook SDK
几乎每个项目都使用这些插件

但我已经超过了现场参考人数

这是我的.aar文件列表

我应该如何减少引用计数

那么我应该怎么做来减少引用计数呢

你有这么多插件和许多函数/字段。在Unity的编辑器中构建此文件时有一个限制,您已经达到了该限制

为了减少引用数量,您必须删除一些插件,但我确信您需要它们,在这种情况下,删除可能不是合适的解决方案

目前真正解决这个问题并为Android构建的唯一方法是将项目作为Android项目,然后使用Android Studio构建它。这消除了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'


如果导出项目后仍出现相同错误,则需要手动启用multidex。以下是谷歌的简化步骤,将在错误中显示:

2。将
android:name=“android.support.multidex.MultiDexApplication”>
添加到 AndroidManifest.xml文件中的应用程序标记


3。将
编译'com.android.support:multidex:1.0.1'
添加到build.gradle文件中的“依赖项”块


4。将
multiDexEnabled true
添加到build.gradle文件中“android”块中的“defaultConfig”块中

建立APK,看看它是否有效。如果引用计数错误消失,请在此处停止


5。是否获得如下所示的GC开销异常

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

增加执行dex操作时将使用的堆大小。在此基础上,将以下内容添加到build.gradle文件中的“android”块中:

修复而不导出项目 必须具有Unity 5.5及以上版本才能执行此操作:

1。进入
\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradeletemplates
,将
mainTemplate.gradle
文件复制到
Assets\Plugins\Android
文件夹中


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


3。打开刚刚用Visual Studio复制的
mainTemplate.gradle
AndroidManifest.xml
文件,然后通过导出上面的项目指令,从修复程序中进行修改。跳过/忽略步骤1A和1B。只需执行从#2#5的步骤。就这样

是决赛的样子,也是决赛的样子。这仅供参考。我建议你不要使用我的
,而是按照上面的复制步骤来创建你的,因为未来的Unity版本可能会附带不同的文件。您希望确保使用最新版本,否则在构建时可能会遇到问题


4。构建APK并查看其是否有效:

--

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

5。是否得到如下错误

使用Gradle时,必须签署生成失败版本

只需从生成设置中的发布设置中选择apk。您可以创建新密钥库或使用现有密钥库


6。下面是另一个错误吗

错误:避免硬编码调试模式;省略它可以进行调试 并发布构建以自动分配一个[HardcodedDebugMode]

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


如果此非导出解决方案不适用于您,则您必须
使用导出解决方案。

IMO,接受的答案不正确(或仅部分正确)。导出Android studio不会“神奇地”解决此问题。另外,根据我的经验,导出的Android studio项目并不总是立即构建,在实际构建之前,您必须修复很多东西

您正在使用大量插件,因此面临无法引用超过64k方法的问题

您可以尝试解决以下几个问题:

  • 如果可能的话,删除其中一些插件(正如已接受的答案中所建议的那样)
  • 使用。在过去,只有将项目导出到androidstudio并在那里构建它,这才是可能的。从Unity 5.5开始,您可以使用Unity的Gradle right构建您的项目。这意味着您可以创建一个自定义gradle文件,将您的游戏配置为使用Multidex。这并没有减少方法引用计数,但它在aro中起作用
    classpath 'com.android.tools.build:gradle:2.2.3'
    
    dexOptions {
        javaMaxHeapSize "4g"
    }