对商店UWP应用进行重打包以在Windows 10 Mobile上部署

仅供学习与研究使用


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

控制 · 收容 · 保护

本文指导您将从Windows应用商店获取的UWP应用包(包括APPX和APPXBUNDLE)包重新打包为可部署的应用包。

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

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

接下来,您可以通过常用的压缩文件包管理工具解压缩UWP应用包。对于APPXBUNDLE格式的包,请逐个解包其中的APPX包。

您也可以从已经安装了相应应用的设备中直接提取应用的安装目录和对应的资产目录,此时您可以直接得到已经解包的应用目录,但是可能丢失一部分的资产包(包括语言资产和面向不同DPI缩放比率的图像资产)。

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

AppxSignature.p7x
AppxMetadata

如果您需要修改包的部署目标(例如,降低包的目标操作系统版本),请编辑所有解包APPX包得到的目录中的AppxManifest.xml文件的<Dependencies>节,并添加或修改<TargetDeviceFamily>行。对于Windows 10 Mobile部署,请添加或修改下列行及其中的MinVersion属性的值:

<TargetDeviceFamily Name="Windows.Mobile" MinVersion="10.0.15063.0" MaxVersionTested="10.0.17101.0" />

其它可能的<TargetDeviceFamily>节中Name属性的值包括Windows.MobileWindows.DesktopWindows.TeamWindows.HolographicWindows.Universal等,全部遵循上述的格式编写。

如果您需要修改包的部署目标的处理器体系架构,请修改<Identity>节中ProcessorArchitecture属性的值。可以接受的值包括x86x64arm等。

随后,请导览到C:\Program Files (x86)\Windows Kits\10\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输出到一个空目录中。

随后,您需要对生成的包进行签名以在设备上部署。请启动PowerShell,并执行:

New-SelfSignedCertificate -Type Custom -Subject "PUBLISHER_SUBJECT_STRING" -KeyUsage DigitalSignature -FriendlyName "CERT_NAME" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")

其中,PUBLISHER_SUBJECT_STRING是解包APPX包得到的目录中的AppxManifest.xml文件的<Identity>节中Publisher属性的值1CERT_NAME为证书的自定义名称。

指令执行完毕后,PowerShell会显示执行结果,请复制“Thumbprint”给出的字符串备用,下记为CERT_THUMBPRINT

随后,您需要导出PFX文件以进行签名和在设备上安装,请继续在PowerShell中执行:

$password = ConvertTo-SecureString -String PFX_PASSWORD -Force -AsPlainText 
Export-PfxCertificate -cert "Cert:\CurrentUser\My\CERT_THUMBPRINT" -FilePath PFX_EXPORT_PATH -Password $password

其中,PFX_PASSWORD为自定义的密码,CERT_THUMBPRINT为前面记录的“Thumbprint”字符串值,PFX_EXPORT_PATH为PFX文件的导出路径。

完成后,请将PFX文件复制到您的目标设备上进行安装。安装过程中需要输入PFX_PASSWORD定义的密码。

随后,请对生成的UWP应用程序包进行签名,请重新导览到C:\Program Files (x86)\Windows Kits\10\bin\x86目录,在该路径下启动命令提示符(或PowerShell),并输入以下指令:

SignTool sign /fd SHA256 /a /f PFX_EXPORT_PATH /p PFX_PASSWORD UWP_APPX_PATH

其中,PFX_PASSWORD为前述的自定义密码,PFX_EXPORT_PATH为前述的PFX文件的导出路径,UWP_APPX_PATH为需要被签名的UWP应用包(APPX或APPXBUNDLE)所在的路径。

至此,打包和签名过程完成,您可以将UWP应用包以及相应的依赖包复制到设备中以进行安装。

参考资料:
https://docs.microsoft.com/zh-cn/windows/msix/package/create-app-package-with-makeappx-tool
https://learn.microsoft.com/zh-cn/windows/msix/package/create-certificate-package-signing
https://learn.microsoft.com/zh-cn/windows/msix/package/sign-app-package-using-signtool

致谢:
栗子酱(又称:西木 / 西米 / Ritsu):Idea,技术论证,审稿。
秀:Idea,技术论证,主催。

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