Unity-Android 打包报错

目录

报错:

分析:

1.代码剔除等级设置

2.什么方式会被剔除

3.解决办法


报错:

FileNotFoundException: Could not load file or assembly 'XXX' or one of its dependencies

           at System.AppDomain.Load (System.String assemblyString, System.Security.Policy.Evidence assemblySecurity, System.Boolean refonly) [0x00016] in <9c7b91d55b9d48c5bd518984f8999ef6>:0 
           at System.AppDomain.Load (System.String assemblyString) [0x00000] in <9c7b91d55b9d48c5bd518984f8999ef6>:0 
           at (wrapper remoting-invoke-with-check) System.AppDomain.Load(string)
           at System.Reflection.Assembly.Load (System.String assemblyString) [0x00005] in <9c7b91d55b9d48c5bd518984f8999ef6>:0 

报错原因:unity的代码剔除打开后把我用到的dll剔除了 运行时找不到脚本自然就报错了

分析:

1.代码剔除等级设置

在playersetting->othersetting->managed stripping level 分为三个等级 低中高

Low: 剥离的代码非常少,对于包的大小作用很小。这是unity的il2cpp的默认剥离级别.
Medium:在Low和High中取得平衡,即没有Low那么谨慎,也不会像High那么极端
High: 优先考虑的是包的大小,而不是可用性。对于可用性,是通过辅助的link.xml来进行人为保留需要的库里面的命名空间或者制定的类. 

2.什么方式会被剔除

High的剔除等级下:

        目前个人测试,如果有明确的引用的dll不会被剔除 

        通过反射使用的dll会被剔除掉

3.解决办法

在 工程 Assets 目录下创建link.xml文件把不需要剔除的dll手动加上去 

怎么加

就这样加:

<linker>
       <assembly fullname="dll名字">
            <type fullname="*" preserve="all" /> 
       </assembly>
</linker>

猜你喜欢

转载自blog.csdn.net/SmillCool/article/details/130688863