Unity 2019 Managed缓存机制

游戏加固 同时被 2 个专栏收录
19 篇文章 0 订阅
16 篇文章 0 订阅

在 il2cpp 模式下,对比 unity3d 2018 与 2019 版本,我们发现了一个有意思的小变化,分享给大家。

0. 起始

      Unity3d app 运行时,会把 apk 包中的 assets/bin/Data/Managed 目录释放到 Application.persistentDataPath 下的 il2cpp 目录,根据 apk 权限 / 是否有 sdcard 等因素,该目录可能在外部存储上 /storage/emulated/0/Android/data/com.packagname.xxx/files, 也有可能在内部存储上 /data/data/com.packagename.xxx/files。

apk 中:

apk 运行后释放:

1. Unity3d 2018

      在 unity3d 2018 中会直接释放,不会判断游戏是否已经运行过。即使游戏上一次运行已经释放过,第二次运行仍然会释放覆盖。逻辑在 libunity.so 中的 UnityInitApplication 函数:

3.png

2. Unity3d 2019

      在 unity3d 2019 中会判断是否已经释放过,如果没有释放过,则执行释放; 如果已经释放过,会再判断版本信息是否一致,若一致,则不再释放,若不一致,则执行释放。

4.png

      用于判断版本信息是否一致的这个 s_BuildData 来自哪里呢? 它主要来自 libunity.so 中的 BootConfig 类:

5.png

      而 BootConfig 类中的初始化数据来自 assets/bin/Data/boot.config 文件:

6.png

       boot.config 文件内容:

7.png

      Unity3d 2019 在导出 apk 时,会生成一个 buildDate 字段放到 boot.config 文件; 运行时, 使用此字段来判断是否需要释放 il2cpp 资源覆盖磁盘上的 il2cpp 资源内容。

3. 小结

   1). Unity3d 2018 会直接释放 il2cpp 资源到 Application.persistentDataPath 目录。

   2). Unity3d 2019 在释放 il2cpp 资源时,则会先判断是否已经释放过,如果 buildDate  一致,则使用缓存,如果不一致,则执行释放。

4. FairGuard 专注于 Unity 加密以及反外挂,为 Unity 提供全方位的保护方案

   我们可以对 il2cpp 资源做全方面的加密处理,保护 il2cpp 资源。

  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值