xLua添加白名单,xLua添加名单
xLua添加白名单,xLua添加名单
这里说明一下,在用ulua项目开发的后期,遇到一个很严重的情况:
ios对可执行文件的可执行文件 size进行了限制,大小为60M(ios下面的1M=1000kb = 1000*1000b),在后面某个版本发版本的时候发现这个size超出了这个限制,虽然只超出了2M,但是影响了发版本。
针对这种情况,对项目的ulua进行了wrap导出优化;
不管是ulua或者是xLua,都是有黑名单。但是黑名单存在一个问题,比如Camera这个类,我们lua里面实际用到的只有下面这几个(人懒,直接贴代码)
//白名单
[WhiteList]
public static List<KeyValuePair<string, List<string>>> WhiteList = new List<KeyValuePair<string, List<string>>>() {
new KeyValuePair<string,List<string>>("UnityEngine.Camera", new List<string>()
{
"WorldToViewportPoint",
"WorldToScreenPoint" ,
"ViewportToWorldPoint",
"ViewportToScreenPoint",
"ScreenToViewportPoint",
"ScreenToWorldPoint",
"fieldOfView",
"current",
"mainCamera"
}),
};
如果要添加黑名单,那这个路就走得有点远了。
我采用的优化方案是添加白名单,但是这个白名单不影响上面列表列出之外的类型和接口,话不多说直接贴代码,下面的xLua上面的代码,我就只贴增加的白名单代码
//黑名单
public static List<List<string>> BlackList = null;
//白名单
public static List<KeyValuePair<string,List<string>>> WhiteList = null;
BlackList = new List<List<string>>()
{
};
WhiteList = new List<KeyValuePair<string, List<string>>>()
{
};
if (test.IsDefined(typeof(BlackListAttribute), false)
&& (typeof(List<List<string>>)).IsAssignableFrom(cfg_type))
{
BlackList.AddRange(get_cfg() as List<List<string>>);
}
if (test.IsDefined(typeof(WhiteListAttribute), false)
&& (typeof(List<KeyValuePair<string, List<string>>>)).IsAssignableFrom(cfg_type))
{
WhiteList.AddRange(get_cfg() as List<KeyValuePair<string,List<string>>>);
}
static bool isObsolete(MemberInfo mb)
{
if (mb == null) return false;
//whitelist select
if (!IsMemberEnabledToExport(mb))
return true;
return mb.IsDefined(typeof(System.ObsoleteAttribute), false);
}
public static bool IsMemberEnabledToExport(MemberInfo mi)
{
//基类是没有这个的
if (mi.DeclaringType == null)
return true;
string className = mi.DeclaringType.Name;
Type type = mi.DeclaringType;
for (int i = 0; i < WhiteList.Count; i++)
{
if (type.IsGenericType)
{
if (className.Contains(WhiteList[i].Key) && (mi.MemberType == MemberTypes.Method))
{
return WhiteList[i].Value.Contains(mi.Name);
}
}
else
{
if (WhiteList[i].Key == type.Name || WhiteList[i].Key.Contains(type.Name))
{
return WhiteList[i].Value.Contains(mi.Name);
}
}
}
return true;
}
xLua的Generator文件实际比较大,如果要完整文件就到这里去下
http://download.csdn.net/download/q725922/10025797
下图为实际导出的wrap文件大小,可以去掉这个白名单实际测试一下,比较一下这两种情况下的文件行数(差了2个数量级)
【图片上传看不到,大家可以自己实际测试一下看效果】
评论暂时关闭