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

Posted 陈言必行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 报错之 接入YomboTGSDK后打包报错:mainTemplate.gradle needs to be updated(property ‘unityStreamingAssets‘)相关的知识,希望对你有一定的参考价值。

Unity 报错之 接入YomboTGSDK后打包报错:mainTemplate.gradle needs to be updated!

一,遇到问题

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导出的安卓工程目录都是不一样的:

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

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

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

以上是关于Unity 报错之 接入YomboTGSDK后打包报错:mainTemplate.gradle needs to be updated(property ‘unityStreamingAssets‘)的主要内容,如果未能解决你的问题,请参考以下文章

Unity 报错之 打包安卓闪退 Could not allocate memory: System out of memory

Unity 报错之 打包安卓闪退 Could not allocate memory: System out of memory

Unity报错之UnityException: Texture ‘XXX‘ is not readable

Unity报错之UnityException: Texture ‘XXX‘ is not readable

Unity报错之 No Sprite Editor Window registered. Please download 2D Sprite package from Package Manager.

Unity 报错之 Scope was not disposed, You should use the ‘using‘ keyword or manually call Dispose.