写点什么

Unity 报错之 接入 YomboTGSDK 后打包报错:mainTemplate.gradle needs to be updated(property ‘unityStreamingAssets‘)

作者:陈言必行
  • 2023-04-18
    辽宁
  • 本文字数:2286 字

    阅读完需:约 8 分钟

一,遇到问题

1.1 问题背景

产生问题:Unity2021.x 版本接入 YomboTGSDK,SDK 版本 1.9.4,导入 SDK 后打安卓包遇到报错。

解决过程:一开始以为解决给报错不是简简单单,况且我之前还在 Unity2019 版本接入过 1.9.0 版本的 SDK。万万没想到,我周日用了一下午的时间也没有解决这个问题。

求助大佬:最后还是到公司求助大佬,在大佬的帮助下得以解决。以此文记录一下解决过程,致敬大佬。


1.2 报错日志

报错如下:

报错日志:

mainTemplate.gradle needs to be updated!

We've detected that your custom mainTemplate.gradle file is using the old android application format and needs to be upgraded to function as an android library. We can try to do this automatically, your current mainTemplate.gradle file will be backed up. Continue?

翻译:

我们已经检测到您的自定义主模板。Gradle 文件使用的是旧的 android 应用程序格式,需要升级为 android 库的功能。我们可以尝试自动做到这一点,你当前的主模板。Gradle 文件将被备份。继续吗?


二,尝试解决

2.1 自动修复

我觉得看到 1.2 上面弹窗提示的第一反应是点:“Yes”,让编辑器为我们自动修复,结果大概率是不行的,我这边选择“Yes”后,打包失败,得到的报错:



2.2 取消勾选

把报错相关的 Gradle 在 Player 面上取消勾选。

尝试后,解决失败。

PS:后知后觉接入 SDK 是需要修改自定义这个 Gradle 的,所以根本就不能以这种方式进行解决。


三,解决问题

3.1 步骤一:

此步骤是在网上搜到的大多数的解决方案,此部分参考自:Unity打Android包,报.gradle needs to be updated,old aaptOptions noCompress,需要更新unityStreamingAssets的错误

提示 mainTemplate.gradle 需要更新。这里我们把: Assets/Plugins/Android 'mainTemplate.gradle

aaptOptions {      noCompress = ['.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**]      ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"    }**SIGN**
复制代码

修改为

aaptOptions {      noCompress = ['.ress', '.resource', '.obb'] + unityStreamingAssets.tokenize(', ')      ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"    }**SIGN**
复制代码

'launcherTemplate.gradle' 也同样将里面的

noCompress = ['.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**]
复制代码

替换为

noCompress = ['.ress', '.resource', '.obb'] + unityStreamingAssets.tokenize(', ')
复制代码

替换完成即可尝试重新打包,若打包还未成功,收到如下报错:


请在此基础上,继续往下看 3.2 步骤二。


3.2 步骤二:

在第二条报错中可以看到:

报错代码在:Build file '/Users/czhenya/Projects/TGSDK/Library/Bee/Android/Prj/IL2CPP/Gradle/launcher/build.gradle' line: 30

打开文件一看:

这个就是 3.1 步骤一中修改的配置。

后面报错:无法为 com.android.build.gradle.internal.dsl.AaptOptions 的对象获得未知属性'unityStreamingAssets'。

看到这里我还是不知道该怎么去修改,直到看到安卓工程中的 gradle 文件:


我想起来 SDK 有一个打包配置脚本,在脚本中添加了writer.WriteLine("unityStreamingAssets=.unity3d,.bundle"); 。 然后就打包成功了。

配置脚本完整代码如下:

using UnityEditor;using UnityEditor.Android;using UnityEngine;using System.IO;
public class TGSDKAndroidBuildProcessor : IPostGenerateGradleAndroidProject{    public int callbackOrder    {     // 同种插件的优先级        get { return 999; }    }    public void OnPostGenerateGradleAndroidProject(string path)    {        Debug.Log("Bulid path : " + path);#if UNITY_2019_3_OR_NEWER        string gradlePropertiesFile = path + "/../gradle.properties";#else        string gradlePropertiesFile = path + "/gradle.properties";#endif        if (File.Exists(gradlePropertiesFile))        {            File.Delete(gradlePropertiesFile);        }        StreamWriter writer = File.CreateText(gradlePropertiesFile);        writer.WriteLine("org.gradle.jvmargs=-Xmx4096M");        writer.WriteLine("android.useAndroidX=true");        writer.WriteLine("android.enableJetifier=true");        writer.WriteLine("unityStreamingAssets=.unity3d,.bundle");        writer.Flush();        writer.Close();    }}
复制代码

解决方法:首先按照 3.1 中,修改两个 Gradle 中的配置。然后在找到(没有可以创建一个)安卓打包配置脚本,添加unityStreamingAssets这项。


四,小结

  1. 遇到问题的原因:Unity 升级导致打安卓包的设置变了。若你同时打包过 2019 版本和 2021 版本,你会发现两个版本的 Unity 导出的安卓工程目录都是不一样的:


  1. 解决问题的方法:大家都知道需要按照报错提示去解决,重点是要找到报错关键所在,这样才能更快更准的解决问题。比如:在 3.1 步骤中的报错,我首先关注的是下图选中的这一行,其实报错关键点在下面 Gradle build faled 这个错误信息里。

  1. 这也是我花费了大量时间,还没有解决问题的主要原因。

希望本篇文章可以帮助你解决问题的同时,也能给你带来一些解决方案的提示。

发布于: 刚刚阅读数: 4
用户头像

陈言必行

关注

公号:开发同学留步 2019-03-12 加入

我是一个从事Unity游戏开发攻城狮,InfoQ&阿里云签约博主,CSDN博客专家,U3D论坛版主,6年开发经验,助你日常不加班。⽂章皆为从零到⼀的⼊⻔级教程,也有很多⼯作中遇到的问题解析。

评论

发布
暂无评论
Unity 报错之 接入YomboTGSDK后打包报错:mainTemplate.gradle needs to be updated(property ‘unityStreamingAssets‘)_Unity_陈言必行_InfoQ写作社区