-
Notifications
You must be signed in to change notification settings - Fork 418
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【实现建议】不用IDMAP,只使用IDTagAttribute。 #34
Comments
dll变小,是指clr程序集么? |
是clr程序集变小了,因为里面没有IDMAP了。il2cpp后的代码到没有关注。 il2cpp对字段数量的限制是32767,这个应该是Unity的bug,应该是上限是65535,我把unity安装包里的dll反编译修改后,就可以了打出ios包了。 |
ipa包体增加6M多,还可以接受。 il2cpp虽然会生成创建Attribute的函数,但是应该是每次GetCustomAttribute时调用一下,只多了些内存。 |
“IDMAP里的枚举字符串”是反射信息的一种。应该是用文件来存储。 |
还有每个attitude也是要有反射信息的 |
6M多不能和1.31G的包体比,应该和代码段比。而且苹果对应用的代码段是有大小限制的。 |
我们这个项目特别情况,解决编译问题得三选一
代码段大小对我们项目不是问题了,ios 9.0 以上是400M,所以选择了第2个。 |
有的项目还是挺case那几M代码段大小的。 |
嗯,跑成功了。很小的改动,增加了个XIDAttribute。 改Unity的dll也成功了,但有些不放心,算是做个两手准备。 |
请问官方有解决方案了吗?我们也遇到这个问题了, Unity 2018.4.7 IL2CPP error for type 'IFix.IDMAP' in assembly '/xxx.../Data/Managed/Assembly-CSharp.dll' |
可以先参考我的实现,改下,在我fork的库里的local分支上的最近一次提交。 |
@treert 我把你的local代码下载下来,重新编译,放到工程里,生成的patch有问题 |
是个bug,修复了。注释掉两个文件,各一行代码,就好了。 |
@chexiongsheng 我们也遇到函数个数太大,IDMAP过大问题,如果能保证生成Patch时,工程和原注入的dll只有修复的函数会变化,那么是否能保证patch时函数的id和原函数的id的一致的?如果一致的话,是不是可以直接把id写进patch里,而不需要用函数签名的方式来查找IDMAP的对应域来找id,这样感觉可以去掉IDMAP? |
1、总不能需要用户保证函数的不增不减; treert的方式是对代码段大小有一定的影响,很多项目对这还是比较在乎的。 不过按理说,如果去掉一些第三方库,一般自己写的代码没那么多吧? |
@chexiongsheng 非常感谢解答,我们的项目由于5+年,函数有10W+了,即便筛掉一些感觉不容易出错的,也还是有8 - 9W,单个IDMAP不能了,除非是实现分段IDMAP0~n,比如每1w个值存放在一个;目前只好用用XIDAttribute方式,代码段的话,估计IDMAP也要占用的吧(每个函数签名不短,估计跟XIDAttribute的占用差不多了),另外,““IDMAP里的枚举字符串”是反射信息的一种。应该是用文件来存储,不常驻内存” 这个很难说,访问过搞不好就一直在内存了(这个我没实测); |
treert测试过了, 他们项目多了6M,不是内存,是代码段。 |
@treert 我打算修改这问题,加下我QQ讨论下? |
你QQ号是啥 |
@wpdever @joywater @Magneto235 |
老项目的dll,注入了3万5千多个函数,生成IDMAP在ios的il2cpp阶段出错了。
Unity 5.6.7f1的il2cpp对字段数量的限制是32767【这应该是Unity.IL2CPP的bug】。
看了下iFix实现,如果直接用IDTag来标识函数唯一int索引,应该也没有问题。
现在IDTag主要为了重载函数准备的。
自己尝试建了个XIDAtrribute,使用有效,生成的dll还变小了。
感觉没必要使用IDMAP,直接用IDTag来标记不是挺好的。有什么特殊考虑吗?
The text was updated successfully, but these errors were encountered: