Skip to main content
Version: 2022.1

资产加密

xasset 2022.1 团队版提供了新的资产加密更新机制和单元测试。所有资产全部提供加密支持,加密后的资产只要 Unity 打包输出的 AssetBundle 的 Hash 不变,不用更新,并且,可以进行强校验。

加密对比

不少人使用流加密,而实际上,在 Android 上,使用流加密在 App 启动的时候要把资产 Copy 到 jar 安装包的外部读写目录,这不仅要占用额外的存储空间,而且需要用户更多的等待时间。

不过可以放心的是,xasset 使用了独特的加密技术,不仅可以防止安装包的资产被 AssetStudio 之类的工具轻易破解,而且在测试的 Android 设备上,还能提升 IO 加载性能。

另外,更不需要把资产从 jar 安装包 Copy 到外部的读写目录。怎么做到的就不细说了,不过可以确信的是,这种加密机制是一种相对安全,但最高效,最省空间和时间的机制。

要使用资产加密功能,仅需在 Settings 中勾选 encryption 就可以开启这个功能。以下是加载同一个资产加密前后的 CPU 耗时和 GC 的真机 Profiler 采样数据:

CPU(MS)GC(KB)
加密30.152.5
未加密33.122.7

注:测试设备为 Song XZs,Android 8.0。

测试记录

加密版本的 Profiler 采样截图如下:

profiler-binary

未加密版本的 Profiler 采样截图如下:

profiler-bundle

测试代码

以下是测试时使用的代码片段:

public void Load()
{
const string assetPath = "Logo";
var assetType = typeof(Sprite);
Profiler.BeginSample("LoadAsset:Async2Sync");
_assets.Add(Asset.LoadAsync(assetPath, assetType));
var asset = Asset.Load(assetPath, assetType);
image.sprite = asset.Get<Sprite>();
Profiler.EndSample();
image.SetNativeSize();
_assets.Add(asset);
}

声明

需要注意的是,安装包加密功能在不同的平台可能有不同的标准,这里的结果仅供参考。