项目接入了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);
}
}