当前Unity版本
Unity2021.3.15f1
需要处理的不满足对齐的文件
libil2cpp.so
libunity.so
libmain.so
处理libil2cpp.so
libil2cpp.so是由Unity的IL2CPP脚本后端技术生成的动态链接库,包含了游戏的逻辑代码。
可以通过编辑器脚本将链接参数传递给NDK,来保证libil2cpp.so满足16kb对齐。
需要设置的参数为-Wl,-z,max-page-size=16384,-Wl,-z,common-page-size=16384
具体步骤如下:
- 创建编辑器脚本(在Editor目录中)。
- 脚本从IPreprocessBuildWithReport继承,通过PlayerSettings.SetAdditionalIl2CppArgs函数设置参数。
using UnityEditor; using UnityEditor.Build; using UnityEditor.Build.Reporting; public class IL2CPPPageAlignmentSetter : IPreprocessBuildWithReport { public int callbackOrder { get { return 0; } } public void OnPreprocessBuild(BuildReport report) { if (report.summary.platform == BuildTarget.Android) { PlayerSettings.SetAdditionalIl2CppArgs("--linker-flags=\"-Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384\""); } else { PlayerSettings.SetAdditionalIl2CppArgs(""); } UnityEngine.Debug.Log("[IL2CPPPageAlignmentSetter]" + PlayerSettings.GetAdditionalIl2CppArgs()); } } - 脚本运行过一次后,设置的参数会保留在ProjectSettings.asset中,直到再次设置。
处理libunity.so
libunity.so是Unity的核心原生库,主要包含渲染、物理、音频、资源管理等底层引擎核心功能。
可以通过修改Unity的link.rsp来加入链接参数。
具体步骤如下:
-
找到不同架构下的link.rsp
link.rsp位于Unity安装目录下
Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\StaticLibs中。根据架构放在不同的子文件夹中。

-
在其中加入
-Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384
-
如果包含了多个架构,需要对每个架构的link.rsp单独修改。
处理libmain.so
libmain.so是Unity已经编译好的,无法通过链接参数修改。但是可以从高版本满足16kb对齐的的Unity中复制一个替换。
libmain.so位于Unity安装目录下Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Libs中。
根据架构放在不同的子文件夹中。替换时注意架构的对应。

参考资料
https://www.163.com/dy/article/KAIL7JMN0511L9VL.html
https://blog.csdn.net/weixin_55201233/article/details/149090402
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/h492899250/article/details/154127568



