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);
    }
}

### 集成Unity到Android项目 为了将Unity项目作为库嵌入原生Kotlin Android应用程序,需遵循一系列特定操作流程[^1]。这不仅涉及创建简单的Unity应用并将其嵌入至Android环境中,还涵盖了实现双向通信机制。 #### 创建与配置Unity工程 在准备阶段,构建一个基础的Unity场景是必要的起点。完成开发后,转向导出过程: - **切换平台**:前往`File -> Build Settings...`选择Android作为目标平台。 - **发布设置调整**:进入`ProjectSettings → Android → Publish Settings`,找到最底部选项`Split Application Binary`并启用该功能[^2]。此设定有助于优化最终APK文件结构及其性能表现。 #### 导出源码包 当上述准备工作完成后,则可执行实际的导出动作——即把整个Unity项目转换为适用于集成进其他安卓项目的资源形式。具体而言,在Build Settings窗口点击`Export Project`按钮来生成所需材料;这些素材随后会被用来增强或扩展现有的移动设备软件解决方案。 #### 嵌入至现有Android Studio工程 获取由Unity产生的压缩档案之后,解压并将其中的内容移植到既定位置下(通常是app模块内的libs目录)。接着修改build.gradle文件以确保能够识别新增加的部分,并按照官方文档指示添加依赖项声明语句以便顺利完成编译工作。 ```gradle dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) } ``` 对于assets和res等静态资源文件夹里的组件同样要妥善处理好路径映射关系,从而保障运行时刻正常加载显示图像音频视频等各种多媒体资料。 #### 实现跨平台交互逻辑 为了让两个框架之间可以互相传递消息数据,有必要建立一套有效的通讯协议接口定义。一方面是在C#端编写相应API函数供Java/Kotlin调用;另一方面则利用插件体系架构反向控制宿主环境中的UI控件属性状态变化等情况。 通过以上步骤即可达成预期效果,使基于不同技术栈打造出来的作品无缝衔接在一起形成更加丰富多彩的应用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值