UnityAndroidIl2cppPatchDemo
UnityAndroidIl2cppPatchDemo copied to clipboard
这是Unity Android APP il2cpp热更完美解决方案的Demo。更新build_demo_apk里的Unity路径,执行即可一键重build Patch和apk。因为文件libunity是没有热更的,如unity版本有变化则热更不适用。
两三个项目碰到了这个问题,Unity版本含2017和2019 堆栈如下图(来自sin,thx)   有几个怀疑的点: 1. 多线程锁的问题,日志中发现在signal处理函数中,std::mutex会失效,全改成了pthread,看起来没问题 2. std::map 和 static link的问题, 把map换成了c版的,hash函数直接cache size取余。 新增了个分支, 做了些改动: https://github.com/noodle1983/UnityAndroidIl2cppPatchDemo-libboostrap/tree/crash_in_map_test 来自sin的反馈,暂时没有崩溃;另外还有加载场景卡死的问题,无日志,原因不明,未深入。 求测。
最近项目支持中遇到的, 日志 ``` il2cpp : [f1431494]shadow apk in fopen: /data/app/com.xxx.xxx-Ky_RNzCxgS6S8Frk2_85IA==/base.apk, fd:0x000000ca, file*: 0xed504108 il2cpp : [f1431494]fseek -> 0xed504108 at 0x00000000 with type 2 il2cpp : [f1431494]ftell -> 0xed504108 at 0x107fc46f...
> 这两部分,libil2cpp和assets目录,必须匹配(即需要在同一次打包中提取,可能有的变了,有的没变,增量方式只提取变化的部分)才能正常工作,不然Unity会在启动时崩溃。 请问为什么和assets不匹配会崩溃?另一种改MetadataLoader.cpp的so热更方案好像没这问题
堆栈:  涉及机型:  如果有朋友能有相关机型测试,或能重现,还望告知, 谢谢!
查看windows使用的压缩工具,能否替换成mac对应的mac zip压缩工具?
使用枚举类型扩展函数会导致E:CSharpException:ArgumentNullException: Value cannot be null 报错. 无法patch的C#代码如下: using UnityEngine; public class Test : MonoBehaviour { void Start() { TestEnum.A.TestFunc(); } } public enum TestEnum { A, B, C } public...
查了资料说是,这种问题,是从Android9开始,操作系统对minSdk进行了限制造成的 解决方法是,在gradle中调高minSdkVersion即可 但有时调高minSdkVersion也解决不了问题,原因是其它原因间接导致了minSdkVersion过低 比如多个模块在资源合并时,发生了错误,造成了minSdkVersion丢失,使得最终的minSdkVersion等于0。 检查了Unity工程本身,应该没有问题,因为直接用unity编辑器打包出来是不存在问题的。 所以想问下,咱们的这个工程里有没有设置 minSdkVersion的地方。我修改一下。 
因为我这里接入的sdk 资源里面会有apk文件 get_apk_path的时候会导致找不到正确的apk名字 虽然说会提示patch成功 但是不是正确的apk目录 这里解决方案是const char* TAIL = ".apk"; 这段改下过滤改成自己需要的那个
大神 我参考您的热更新方案 实现了谷歌强制要求64位后的热更新机制 但是某些机型上(三星 vivo)上更新后崩溃 初步判断是解压后的assets_bin_Data 没有生效 判断依据是 把解压路径下的libil2cpp.so换成包内自带的则不再崩溃 看logcat崩溃像是data与.so文件不匹配 线上项目出的问题 影响面较大 亟待解决 还望能提供解决思路 在此跪谢 我的qq826999910 如果方便 还望能qq联系
希望能够支持 unity 2022