对商店APPX进行重打包以在Windows Phone 8.1上部署

仅供学习与研究使用


请尊重应用程序作者的知识产权,请勿反编译通过本文提供的方式得到的APPX包。
请勿将通过本文提供的方式得到的APPX包用于商业及盈利目的。

控制 · 收容 · 保护

本文指导您将从Windows应用商店获取的APPX包重新打包为可通过Application Deployment (8.1)部署的APPX包。

您需要事先安装Windows Phone SDK 8.1。此处假设该工具包被安装到C分区。

您可以通过Microsoft Store Generation Project或FFU固件包获取应用商店型APPX包。

接下来,您可以通过常用的压缩文件包管理工具解压缩APPX包。

完成解压后,请删除得到的解压缩目录中的以下文件及目录:

MDILFileList.xml
AppxSignature.p7x
AppxMetadata

随后,请导览到C:\Program Files (x86)\Windows Kits\8.1\bin\x86目录,在该路径下启动命令提示符(或PowerShell),并输入以下指令:

MakeAppx pack /v /d APPX_INPUT_DIRECTORY /p APPX_OUTPUT_PATH /l

请将APPX_INPUT_DIRECTORY替换为解压缩得到的APPX文件目录,将APPX_OUTPUT_PATH替换为重新打包的APPX文件的输出路径。为了避免部署过程中出现错误,建议将APPX输出到一个空目录中。

例如,您将商店APPX包解压缩到D:\Appx\ContosoApp目录,希望将APPX包输出到D:\Appx\Repack\ContosoApp.appx,请执行:

MakeAppx pack /v /d D:\Appx\ContosoApp /p D:\Appx\Repack\ContosoApp.appx /l

如果调整对象为AppxBundle捆绑包,则对每个内含的APPX包进行重打包后,请将所有完成重打包的APPX包置于同一目录下(建议新建一个目录),并在命令提示符(或PowerShell)中运行APPX捆绑指令:

MakeAppx bundle /v /d APPX_INPUT_DIRECTORY /p APPXBUNDLE_OUTPUT_PATH

请将APPX_INPUT_DIRECTORY替换为存放已完成重打包的APPX文件所在的目录,将APPXBUNDLE_OUTPUT_PATH替换为重新打包的APPXBUNDLE文件的输出路径。为了避免部署过程中出现错误,建议将APPXBUNDLE输出到一个空目录中。

如果APPX部署时出现“部署优化失败(Deployment optimization failed)”错误提示,说明包中部分程序集因被强签名导致无法被部署工具优化,此时应进行强签名的移除的替换。

首先,请下载SNRemove命令行工具,并解压缩。

请打开SNRemove工具所在的目录,在该路径下启动命令提示符(或PowerShell),并输入以下指令:

SNRemove -d APPX_INPUT_DIRECTORY\*.dll
SNRemove -d APPX_INPUT_DIRECTORY\*.winmd

请将APPX_INPUT_DIRECTORY替换为解压缩APPX得到的目录。

存在强签名的程序集会在命令窗口中显示其文件名及以十六进制方式显示的信息,请记录这些程序集及其版本号。

随后,请运行下列命令,移除强签名:

SNRemove -r APPX_INPUT_DIRECTORY\*.dll
SNRemove -r APPX_INPUT_DIRECTORY\*.winmd

请将APPX_INPUT_DIRECTORY替换为解压缩APPX得到的目录。

完成这些操作后,请通过NuGet或其他方式获取这些程序集的同版本文件,并替换原始文件。

完成所有工作后,请重新打包APPX。

参考资料:
https://forum.xda-developers.com/windows-phone-8/development/wp8-1-creating-deploying-appx-packages-t2807743
https://docs.microsoft.com/zh-cn/windows/msix/package/create-app-package-with-makeappx-tool

除非特别注明,本页内容采用以下授权方式: Creative Commons Attribution-ShareAlike 3.0 License