Unity打包报错OBSOLETE - Providing Android resources in Assets/Plugins/Android/res is deprecated, please
2022.11.17更新
修改aar方式代价有点大,最近发现一个新方法能更方便解决这个问题。原理就是监听打包事件,在打包快结束的时候把res目录手动拷过去一起打包出apk。因为unity的流程是先打包出Gradle工程,然后会搜索实现了IPostGenerateGradleAndroidProject接口的类进行调用,再进行出包。
详细流程如下:
using System;
using System.IO;
using UnityEditor.Android;
using UnityEngine;
class ResPostGenerateGradleAndroidProject : IPostGenerateGradleAndroidProject
{
//这个是res所在的目录
private string sourceFolder = Application.dataPath.Replace("/Assets", "") + "/PlatformSources/";
public int callbackOrder { get; }
public void OnPostGenerateGradleAndroidProject(string path)
{
CopyFolder (sourceFolder, path+"/");
}
public void CopyFolder(string from, string to)
{
if (!Directory.Exists(to))
Directory.CreateDirectory(to);
// 子文件夹
foreach (string sub in Directory.GetDirectories(from))
CopyFolder(sub + "/", to + Path.GetFileName(sub) + "/");
// 文件
foreach (string file in Directory.GetFiles(from)){
try {
File.Copy(file, to + Path.GetFileName(file), true);
} catch (Exception ex) {
Debug.LogWarning ("拷贝失败:" + ex.Message);
}
}
}
}
如果有问题,说明拷贝到的目标目录不对,打包后可以在此处查看到Gradle工程,拷贝后的目录结构是这样就没问题。
————————————————————————————————————
将项目从2021.1升级到2021.2的时候,收到一些错误,解决后打包Android包,之前没问题的突然报错了:
OBSOLETE - Providing Android resources in Assets/Plugins/Android/res is deprecated, please move your resources to an AAR or an Android Library. See "AAR plug-ins and Android Libraries" section of the Manual for more details.
原来2021.2已经不允许把res文件直接放Plugins/Android/目录下了,取而代之要用aar实现,这么坑,太不方便了。
这是官方写的链接:Unity - Manual: Upgrading to Unity 2021.2
但是aar这种方式太麻烦了,我们又不是专门的Android程序员,所以我就在探索有没有更快的解决方案。
这是我现在的目录结构:
- 直接把libs、res和AndroidManifest文件打成压缩包,改成.aar,同样报错。
- libs里的jar挪出来,jar、res、Manfiest文件打包成.aar,报错
- libs、AndroidManifest保留,res直接打包成res.aar,报错
- libs、AndroidManifest保留,res打包成.rar(打算骗Unity),报错
总结:
试了几种方式,都不行,看来还是只能补下aar的知识了,最后重新做了aar放unity成功了。
因为aar很多人不知道怎么操作,所以我特地写了个文章详细说下,请前往查看
更多推荐
所有评论(0)