介绍

SharpZipLib 是一个 C# 原生的 Zip 库,License 以前是 GPL,后来修改为 MIT,便于商业使用。

bsdiff.net 是一个 C# 原生的二进制差异补丁工具,但是依赖 SharpZipLib。

问题

Unity 项目中可以使用 SharpZipLib 来解压 apk 文件中的内容。但是 SharpZipLib 最新的正式版本 Release 0.86.0.518 · icsharpcode/SharpZipLib 并不支持高版本的 zip 压缩文件,在解压时会提示异常:

1
ZipException: Version required to extract this entry not supported (778)

因为 Android 版本需要经过加固处理,经过 腾讯御安全 - APP加固|安卓加固 处理后运行 apk 发现此问题。

尝试

尝试将 SharpZipLib 中使用的 C# 6.0 语法降级为 C# 3.0 语法。经过降级后发现其实依赖的语法糖较少,主要是 nameof(x) 这种有 200+ 个,并没有替换成对应的变量类型名,而是简单地替换为 "nameof(x)"

其次去除了项目在 Unity 下的编译警告。

解决方案

修改的版本已发布到 GitHub,方便下载使用

Release SharpZipLib for Unity 20180520 · networm/SharpZipLib

发布策略

增加 readme 分支简要介绍目标。

针对 SharpZipLib 的后续更新,会根据需要建立以时间命名的分支,然后在原版的基础上处理代码,使之对 Unity 兼容。

最终就是每一个发布一个单独的分支。