当前位置: 首页 > 知识库问答 >
问题:

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

呼延哲
2023-03-14

我的项目使用以下插件:

  • OneSignal
  • Google PlayServices
  • 调整
  • 谷歌分析
  • 统一IAP
  • Facebook SDK

几乎每个项目都使用这些插件。

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

我应该如何减少引用计数?

共有2个答案

湛宝
2023-03-14

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

您正在使用大量插件,因此您面临Android限制,无法引用超过64k的方法。

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

  1. 如果可能的话,删除其中一些插件(正如已接受的答案中所建议的那样)
  2. 使用多重索引。在过去,只有将项目导出到androidstudio并在那里构建它,这才是可能的。从Unity 5.5开始,您可以使用Unity的Gradle right构建您的项目。这意味着您可以创建一个自定义gradle文件,将您的游戏配置为使用Multidex。这并没有减少方法ref计数,但它通过将本机Java计数拆分为多个dex文件来解决这个问题
  3. 使用ProGuard-因为您可以使用Unity中的Gradle,所以还可以定义ProGuard来运行和删除任何未使用的代码
洪博艺
2023-03-14

那么我应该做些什么来减少引用计数呢?

你有这么多功能/字段的插件。当从Unity的编辑器构建它时有一个限制,并且您已经达到了这个限制。

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

目前唯一能真正绕过这个问题并为Android构建的方法是将该项目导出为Android项目,然后使用Android Studio构建它。这消除了Unity编辑器施加的引用限制。

编辑

我忘了提到导出后必须启用multidex。由于很多人每天都会遇到这个问题,我决定添加一个完整的说明,说明如何通过导出来解决这个问题,以及如何在不导出的情况下解决这个问题。

将Unity项目导出为Android项目。

1B。导入Android Studio:

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

错误:org。格拉德尔。应用程序编程接口。内部的任务。无法将DefaultTaskInputs$TaskInputUnionFileCollection强制转换为组织。格拉德尔。应用程序编程接口。内部的文件收藏。DefaultConfigurableFileCollection

在构建中的“buildscript”块中的“dependencies”块中。渐变文件,更改:

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

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

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

2.添加android:name=“android.support.multidex.MultiDexApplication”

3.将编译com.android.support: Multidex: 1.0.1添加到build.gradle文件中的依赖块。

4.在build.gradle文件的android块中的defaultConfig块中添加MultiDexEn的true

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

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

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

增加执行dex操作时将使用的堆大小。在此解决方案中,将以下内容添加到构建中的“android”块中。渐变文件:

dexOptions {
    javaMaxHeapSize "4g"
}

必须具有Unity 5.5及以上版本才能执行此操作:

1.转到

2.转到

3.打开刚刚用Visual Studio复制的main Template.gradleAndroidManifest.xml文件,然后从上面的FIX BY导出PROJECT指令进行修改。跳过/忽略步骤#1A和#1B。只要做从#2到#5的步骤。就这样了。

这就是最终的main模板。gradle应该是这样的,这就是最终的AndroidManifest。xml应该是这样的。这仅供参考。我建议您不要使用我的,而是按照上面的复制步骤创建您的,因为未来的Unity版本可能会附带不同的文件。您希望确保使用最新版本,否则在构建时可能会遇到问题。

4.构建APK,看看它是否工作:

--

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

5.得到如下错误?

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

只需在生成设置中的发布设置中对apk进行签名。您可以创建新密钥库或使用现有密钥库。

6.像下面这样的另一个错误?

错误:避免硬编码调试模式;省略它允许调试和发布版本自动分配一个[HardcodedDebugMode]

删除android:debuggable=“true”

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

 类似资料:
  • 我正在使用cmake Gui构建开罗。当我点击“配置”时,Cmake显示以下错误: 找不到PIXMAN,尝试在系统变量PIXMAN中设置PIXMAN根文件夹的路径(缺少:PIXMAN_LIBRARIESPIXMAN_INCLUDE_DIRS) 找不到ZLIB(缺少:ZLIB_LIBRARYZLIB_INCLUDE_DIR) C:/cmake-3.7.0-rc1-win32-x86/share/cm

  • 我有一个数据帧,看起来像: 我希望按周分组,然后汇总总数。此外,我需要找到一周的最早日期和最晚日期。第一部分相当简单: 我试图找到最小/最大日期,但没有成功: 如何找到出现的最早/最晚日期?

  • 所以,我有这段代码: 我在Windows上运行。有趣的是: > 如果我们使用calloc,程序会分配大约2 GB的内存,然后停止(此处照片= (奇怪的测试):如果我们同时使用这两者,它将使用最大值(~400MB~2GB)/2= 然而,如果我在Linux上运行相同的代码,分配会一直持续下去(在600k分配和使用了许多GB之后,它仍然会继续,直到最终被杀死),并且使用的内存量大致相同。 所以我的问题是

  • 我正在使用Pax考试(3.5.0)进行OSGi单元测试。我已经创建了一个测试,但是当我运行它时,我得到了这个堆栈跟踪: 我已经配置了在选项中,我看到了。 但我还是有例外。有人知道我做错了什么吗? 干杯

  • 我正在用Strapi CMS后端和使用composition API的NuxtJS前端建立一个社区网站。 除了正常的注册和使用电子邮件和用户名登录(有效!),我希望用户能够使用GitHub登录。 我正在使用@nuxtjs/auth模块进行授权。 我已经使用ngrok“部署”了我的Strapi后端。这显然是使OAuth工作所必需的。 我已经设置了我的GitHub应用程序,使用 where? nuxt

  • 剑指ChatGPT,马斯克称要研发“真相GPT”