Unity打包DIR_UNITYPROJECT值为空的解决办法

 

项目接入了Firebase,其中mainTemplate.gradle会添加两句

        def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/")
        maven {url (unityProjectPath + "/Assets/GeneratedLocalRepo/Firebase/m2repository")}

打包时发现,google仓库也没有firebase的包,阿里云上也没有firebase的包,然而sdk里是有jar包的,那么说明gradle打包时需要使用本地的包,打包时报错会说url找不到,其中有一个url是:"/file:///Assets/GeneratedLocalRepo/Firebase/m2repository",根据分析应该是DIR_UNITYPROJECT值为空的。所以google上搜了以下,发现了解决办法:重写unity的IPostGenerateGradleAndroidProject的OnPostGenerateGradleAndroidProject接口。

Github上关于DIR_UNITYPROJECT的解决办法

注意:升级到Gradle7.5.1打包时,maven路径是settings.gradle中有效,代码如下:

using UnityEditor.Android;
using UnityEngine;
using System.IO;

class GradleBuildHax : IPostGenerateGradleAndroidProject
{
    private const string ToReplace = "def unityProjectPath = $/file:$.replace(\"\\\\\", \"/\")";

    public int callbackOrder { get { return 0; } }
    public void OnPostGenerateGradleAndroidProject(string path)
    {
        Debug.Log("GradleBuildHax at path " + path);
        char splistChar = Path.DirectorySeparatorChar;
        int index = path.LastIndexOf(splistChar + "unityLibrary");
        path = path.Substring(0, index);
        var projectPath = Path.GetFullPath(Path.Combine(Application.dataPath, "..")).Replace("\\", "/");

        Debug.Log("GradleBuildHax projectPath " + projectPath);

        var gradlePath = Path.Combine(path, "settings.gradle");

        var targetValue = "def unityProjectPath = \"file:///" + projectPath + "\"";

        var text = File.ReadAllText(gradlePath);
        text = text.Replace(ToReplace, targetValue);
        File.WriteAllText(gradlePath, text);
        Debug.Log(gradlePath);
        Debug.Log("GradleBuildHax gradle:\n" + text);
    }
}

Gradle6.1.1打包时,maven路径是build.gradle中有效,代码如下:

using UnityEditor.Android;
using UnityEngine;
using System.IO;

class GradleBuildHax : IPostGenerateGradleAndroidProject
{
	private const string ToReplace = "def unityProjectPath = $/file:$.replace(\"\\\\\", \"/\")";
	
    public int callbackOrder { get { return 0; } }
    public void OnPostGenerateGradleAndroidProject(string path)
    {
        Debug.Log("GradleBuildHax at path " + path);
		
		var projectPath = Path.GetFullPath(Path.Combine(Application.dataPath, "..")).Replace("\\", "/");
		
		Debug.Log("GradleBuildHax projectPath " + projectPath);
        
        var gradlePath = Path.Combine(path, "build.gradle");
		
		var targetValue = "def unityProjectPath = \"file:///" + projectPath + "\"";
        
        var text = File.ReadAllText(gradlePath);
        text = text.Replace(ToReplace, targetValue);
        File.WriteAllText(gradlePath, text);
		
		Debug.Log("GradleBuildHax gradle:\n" + text);
    }
}

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值