使用decompress-assemblies解压后能否将Xamarin程序集压缩为assemblies.blob
结论
可以重新生成可被Xamarin.Android运行时正常识别加载的assemblies.blob文件,但无法通过通用压缩工具完成该操作,必须匹配Xamarin.Android自定义的程序集存储格式要求。
具体说明
decompress-assemblies是Xamarin.Android构建工具链的内置组件,作用是解包APK内以自定义LZ4格式存储的程序集压缩包,解包输出独立dll文件的过程本身是可逆的,官方工具链本身就提供了配对的压缩逻辑。- 官方配套的重打包工具是同工具集下的
compress-assemblies命令行程序,和你用来解压的decompress-assemblies来自同个Xamarin.Android构建版本目录,执行命令参考如下:
执行完成后会在输出目录生成两个必须配套使用的文件:compress-assemblies -i <存放解压后所有dll文件的目录路径> -o <生成新blob文件的输出目录路径>assemblies.blob(压缩后的程序集内容块)、assemblies.manifest(存储每个程序集在blob内的偏移位置、长度、校验值的索引文件)。
注意事项
- 禁止使用7-Zip、WinRAR等通用压缩工具将dll打包为zip后改后缀生成
assemblies.blob,Xamarin.Android运行时不识别通用压缩格式,加载时会直接抛出格式错误。 - 替换APK内文件时必须同时替换成对生成的
assemblies.blob和assemblies.manifest,单独替换其中一个会因为索引不匹配、校验失败导致应用启动闪退。 - 重打包时要保证输入目录包含原APK内所有的程序集文件,不要遗漏;如果修改/替换了部分dll,要保证dll版本和当前APK内嵌的Xamarin运行时版本兼容,否则会出现运行时加载异常。
- 完成文件替换后,需要对APK整体重新签名才能正常安装到设备上。
内容的提问来源于stack exchange,提问作者paddle.code
相关产品推荐
相关产品推荐

