太多的字段参考: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 true
到build.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.gradle
和AndroidManifest.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的方法。
有几件事你可以尝试解决这个问题:
- 如果可能的话,删除其中的一些插件(如已接受的答案中所述)。
- 使用multidex 。 在过去这只能通过将项目导出到Android工作室并在那里创build。 从Unity 5.5开始,您可以使用Gradle从Unity开始构build项目。 这意味着您可以创build一个自定义Gradle文件来configuration您的游戏使用Multidex。 这不会减less方法引用计数,但是它通过将原生Java计数拆分为多个dex文件来解决这个问题。
- 使用ProGuard – 因为您可以使用来自Unity的Gradle,您还可以定义ProGuard来运行和删除任何未使用的代码。
根据我的经验和解决scheme,只要给所有的AndroidManifest文件提供相同的软件包名称。 这将解决你太多的现场参考问题。 我已经用这种方式解决了我的问题,我也希望你:)