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个数量级)


【图片上传看不到,大家可以自己实际测试一下看效果】

相关内容

    暂无相关文章