Remove Unnecessary Files

This commit is contained in:
MCDeltaT 2023-09-25 13:51:48 +01:00
parent b7b3dbe241
commit 50a2dee505
27 changed files with 0 additions and 3162 deletions

View File

@ -1,163 +0,0 @@
# Windows 子系统 For AndroidWindows 10 x64Windows_10_WSA_2303.40000.3.0_x64)。
<img src="https://upload.wikimedia.org/wikipedia/commons/0/05/Windows_10_Logo.svg" width=20% height=20%>
![win11downcpre](https://img.shields.io/github/downloads/MustardChef/WSABuilds/Windows_10_2303.40000.3.0/total?label=Downloads&style=for-the-badge)
## Builds Last Updated: 11/04/2023 20:28 GMT </br> (Reason: Initial Release)
---
> **警告**
> #### **在安装之前,请完整阅读[指南](https://github.com/MustardChef/WSABuilds/blob/master/README.md)确保您满足在Windows 11上进行安装的全部[要求](https://github.com/MustardChef/WSABuilds#requirements)。**
> **注意**
>#### **如果您正在更新WSA请在被要求时合并文件夹并替换所有项目的文件**
### 按照以下步骤在Windows 11上安装WSA。
#### 包含Magisk和MindTheGAPPS
> **注意**
> 如果您安装了官方WSA版本则必须[完全卸载](https://github.com/MustardChef/WSABuilds#uninstallation)它才能使用MagiskOnWSA
1. 解压缩zip文件
2. 删除zip文件**建议在安装并正常运行WSA之前保留.zip文件**
3. 将新提取的文件夹移动到适当的位置文档文件夹是一个不错的选择因为您需要将文件夹保留在计算机上才能使用MagiskOnWSA
4. 打开WSA文件夹双击Run.bat
### 注意:
1. 如[要求](https://github.com/MustardChef/WSABuilds#requirements)中所述您只能在NTFS分区上安装WSA不能在exFAT分区上安装。
2. 您不能删除WSA安装文件夹。
`Add-AppxPackage -Register .\AppxManifest.xml`的作用是注册一个带有一些已解压缩文件的appx包所以只要您想要使用WSA就需要保留它们。
请查看https://learn.microsoft.com/en-us/powershell/module/appx/add-appxpackage?view=windowsserver2022-ps获取更多详细信息。
3. 在运行WSA之前您需要注册您的WSA appx包。
对于[WSABuilds]https://github.com/MustardChef/WSABuilds和[MagiskOnWSALocal]https://github.com/LSPosed/MagiskOnWSALocal用户您需要在提取的目录中运行`Run.bat`。
如果脚本失败,您可以采取以下诊断步骤(需要管理员权限):
1. 打开PowerShell窗口并将工作目录更改为您的WSA目录。
2. 在PowerShell中运行`Add-AppxPackage-ForceApplicationShutdown-ForceUpdateFromAnyVersion-Register.\AppxManifest.xml`。
       这应该会失败其中包含一个ActivityID该ActivityID是下一步所需的UUID。
3. 在PowerShell中运行`Get-AppPackageLog-ActivityID<UUID>`。
       这应该会打印失败操作的日志。
4. 检查日志以查找失败原因并修复它。
### 你可能会遇到的问题(可能不适用):
#### 来源:**WSAPatch**
- 在使用 WSA 2209.40000.26.0 时,我可以运行 WSA 中的应用程序,但在启用开发人员模式后,我无法连接到 WSA ADB因为 netstat 显示在端口 58526 上没有进程在侦听。当我升级到 WSA 2210.40000.7.0 时,我可以连接到 WSA ADB。
- WSA 设置窗口没有可拖动的标题,但是如果您在“最小化”按钮附近按住光标左键或按下 Alt+Space然后在上下文菜单中单击“移动”就可以移动 WSA 窗口。https://github.com/cinit/WSAPatch/issues/1 https://github.com/cinit/WSAPatch/issues/2
- 如果您的 WSA 在启动时崩溃(或突然消失),请尝试将 Windows 升级到 Windows 10 22H2 10.0.19045.2311。(有人报告说 WSA 在 22H2 19045.2251 上启动失败,但升级到 19045.2311 后就可以工作。)
## 变更日志
- [Microsoft的官方变更日志](https://blogs.windows.com/windows-insider/2023/04/11/update-to-windows-subsystem-for-android-on-windows-11-april-2023/)
- 增加了对 Windows 10 的支持Credit: WSAPatch)
- 从WSA v2303.40000.2.0 x86_64更新-> WSA v2303.40000.3.0 x86_64
- WSA Android版本Android 13
- MindTheGapps 13.0 x86_64
- Magisk Canary d0c9384226101
- KernelSU v0.5.1
- 已删除Amazon Appstore
## 此版本之间的差异:
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-MindTheGapps-XX.X-RemovedAmazon_Windows_10.zip**
- 只包含 Google Play 商店和服务。
---
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-magisk-XXXXX.XXXX.-canary-MindTheGapps-XX.X-RemovedAmazon_Windows_10.zip**
- 包含 Google Play 商店和服务。
**_和_**
- 包含 Magisk用于 Root 访问)。
---
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-kernelsu-vX.X.X-MindTheGapps-XX.X-RemovedAmazon_Windows_10.zip**
- 包含 Google Play 商店和服务。
**_和_**
- 包含 KernelSU用于 Root 访问)。
---
## 附加信息
- 如果安装了带有Magisk的WSA构建之后Magisk应用程序未出现请从[此处]https://github.com/topjohnwu/Magisk/releases下载并[sideload]https://github.com/MustardChef/WSABuilds/blob/master/Guides/Sideloading.md它到WSA
## 版权:
https://github.com/LSPosed/MagiskOnWSALocal
https://github.com/cinit/WSAPatch
<br/>
<br/>
<br/>
# Windows 子系统 For AndroidWindows 10 x64Windows_10_WSA_2303.40000.2.0_x64)。
<img src="https://upload.wikimedia.org/wikipedia/commons/0/05/Windows_10_Logo.svg" width=20% height=20%>
![win10downcpre](https://img.shields.io/github/downloads/MustardChef/WSABuilds/Windows_10_2303.40000.2.0/total?label=Downloads&style=for-the-badge)
## 最新版本2023年4月6日 12:27 GMT</br>(原因:初始发布)
> **警告**
> #### **在安装之前,请完全阅读[指南](https://github.com/MustardChef/WSABuilds/blob/master/README.md)确保您满足安装Windows 10上WSA的全部[要求](https://github.com/MustardChef/WSABuilds#requirements)。**
> **注意**
>#### **如果您正在更新WSA请在被询问时合并文件夹并替换所有文件**
### 安装WSA时请按照在Windows 11上安装WSA的相同步骤。
#### 包含Magisk和MindTheGAPPS
> **注意**
> 如果您已经安装了官方的WSA则必须[完全卸载](https://github.com/MustardChef/WSABuilds#uninstallation)它才能使用MagiskOnWSA
1. 解压缩zip文件
2. 删除zip文件建议在WSA安装并正常运行之前保留.zip文件
3. 将新提取的文件夹移动到合适的位置文档文件夹是一个很好的选择因为您需要将文件夹保留在您的PC上以使用MagiskOnWSA。
4. 打开WSA文件夹双击Run.bat
### 注意:
1. 根据[要求](https://github.com/MustardChef/WSABuilds#requirements)所述您只能在NTFS分区上安装WSA不能在exFAT分区上安装。
2. 您不能删除WSA安装文件夹。
`Add-AppxPackage -Register .\AppxManifest.xml`所做的是注册一个带有一些现有未打包文件的appx包因此只要想要使用WSA就需要保留它们。
请参阅https://learn.microsoft.com/en-us/powershell/module/appx/add-appxpackage?view=windowsserver2022-ps获取更多详细信息。
3. 您需要在运行 WSA 之前注册您的 WSA appx 包。对于 [WSABuilds](https://github.com/MustardChef/WSABuilds) 和 [MagiskOnWSALocal](https://github.com/LSPosed/MagiskOnWSALocal) 用户,您需要在提取的目录中运行 `Run.bat`。如果脚本失败,您可以采取以下诊断步骤(需要管理员权限):
1. 打开 PowerShell 窗口并将工作目录更改为 WSA 目录。
2. 在 PowerShell 中运行 `Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Register .\AppxManifest.xml`
这应该会失败,并显示一个 ActivityID这是下一步所需的 UUID。
3. 在 PowerShell 中运行 `Get-AppPackageLog -ActivityID <UUID>`
这应该会打印失败操作的日志。
4. 检查日志以查找失败原因并修复它。
### 你可能会遇到的问题(可能不适用):
#### 来源:**WSAPatch**
- 在使用 WSA 2209.40000.26.0 时,我可以运行 WSA 中的应用程序,但在启用开发人员模式后,我无法连接到 WSA ADB因为 netstat 显示在端口 58526 上没有进程在侦听。当我升级到 WSA 2210.40000.7.0 时,我可以连接到 WSA ADB。
- WSA 设置窗口没有可拖动的标题,但是如果您在“最小化”按钮附近按住光标左键或按下 Alt+Space然后在上下文菜单中单击“移动”就可以移动 WSA 窗口。https://github.com/cinit/WSAPatch/issues/1 https://github.com/cinit/WSAPatch/issues/2
- 如果您的 WSA 在启动时崩溃(或突然消失),请尝试将 Windows 升级到 Windows 10 22H2 10.0.19045.2311。(有人报告说 WSA 在 22H2 19045.2251 上启动失败,但升级到 19045.2311 后就可以工作。)
## 更新日志
- [Microsoft 官方更新日志](https://github.com/microsoft/WSA/discussions/277)
- 增加了对 Windows 10 的支持Credit: WSAPatch
- 更新 WSA 版本从 v2302.40000.9.0 x86_64 ----> WSA v2303.40000.2.0 x86_64
- WSA Android 版本Android 13
- MindTheGapps 13.0 x86_64
- Magisk Canary e2545e57 (26001)
- KernelSU v0.5.0
- 删除了亚马逊应用商店
## 此版本之间的差异:
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-MindTheGapps-XX.X-RemovedAmazon_Windows_10.zip**
- 只包含 Google Play 商店和服务。
---
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-magisk-XXXXX.XXXX.-canary-MindTheGapps-XX.X-RemovedAmazon_Windows_10.zip**
- 包含 Google Play 商店和服务。
**_和_**
- 包含 Magisk用于 Root 访问)。
---
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-kernelsu-vX.X.X-MindTheGapps-XX.X-RemovedAmazon_Windows_10.zip**
- 包含 Google Play 商店和服务。
**_和_**
- 包含 KernelSU用于 Root 访问)。
---
## 附加信息
-如果在安装WSA后Magisk应用程序未出现请从[这里](https://github.com/topjohnwu/Magisk/releases)下载并[侧载](https://github.com/MustardChef/WSABuilds/blob/master/Guides/Sideloading.md)到WSA中。
## 鸣谢:
https://github.com/LSPosed/MagiskOnWSALocal
https://github.com/cinit/WSAPatch

View File

@ -1,147 +0,0 @@
# Windows 子系统 for AndroidARM 处理器上的 Windows 11Windows_11_WSA_2303.40000.3.0_arm64
<img src="https://upload.wikimedia.org/wikipedia/commons/e/e6/Windows_11_logo.svg" width=20% height=20%>
![win11downcpre](https://img.shields.io/github/downloads/MustardChef/WSABuilds/Windows_11_2303.40000.3.0_arm64/total?label=Downloads&style=for-the-badge)
## Builds Last Updated: 11/04/2023 20:28 GMT </br> (Reason: Initial Release)
---
> **警告**
> #### **在安装之前,请完整阅读[指南](https://github.com/MustardChef/WSABuilds/blob/master/README.md)确保您满足在Windows 11上进行安装的全部[要求](https://github.com/MustardChef/WSABuilds#requirements)。**
> **注意**
>#### **如果您正在更新WSA请在被要求时合并文件夹并替换所有项目的文件**
### 按照以下步骤在Windows 11上安装WSA。
#### 包含Magisk和MindTheGAPPS
> **注意**
> 如果您安装了官方WSA版本则必须[完全卸载](https://github.com/MustardChef/WSABuilds#uninstallation)它才能使用MagiskOnWSA
1. 解压缩zip文件
2. 删除zip文件**建议在安装并正常运行WSA之前保留.zip文件**
3. 将新提取的文件夹移动到适当的位置文档文件夹是一个不错的选择因为您需要将文件夹保留在计算机上才能使用MagiskOnWSA
4. 打开WSA文件夹双击Run.bat
### 注意:
1. 如[要求](https://github.com/MustardChef/WSABuilds#requirements)中所述您只能在NTFS分区上安装WSA不能在exFAT分区上安装。
2. 您不能删除WSA安装文件夹。
`Add-AppxPackage -Register .\AppxManifest.xml`的作用是注册一个带有一些已解压缩文件的appx包所以只要您想要使用WSA就需要保留它们。
请查看https://learn.microsoft.com/en-us/powershell/module/appx/add-appxpackage?view=windowsserver2022-ps获取更多详细信息。
3. 在运行WSA之前您需要注册您的WSA appx包。
对于[WSABuilds]https://github.com/MustardChef/WSABuilds和[MagiskOnWSALocal]https://github.com/LSPosed/MagiskOnWSALocal用户您需要在提取的目录中运行`Run.bat`。
如果脚本失败,您可以采取以下诊断步骤(需要管理员权限):
1. 打开PowerShell窗口并将工作目录更改为您的WSA目录。
2. 在PowerShell中运行`Add-AppxPackage-ForceApplicationShutdown-ForceUpdateFromAnyVersion-Register.\AppxManifest.xml`。
       这应该会失败其中包含一个ActivityID该ActivityID是下一步所需的UUID。
3. 在PowerShell中运行`Get-AppPackageLog-ActivityID<UUID>`。
       这应该会打印失败操作的日志。
4. 检查日志以查找失败原因并修复它。
## 变更日志
- [Microsoft的官方变更日志](https://blogs.windows.com/windows-insider/2023/04/11/update-to-windows-subsystem-for-android-on-windows-11-april-2023/)
- 从WSA v2303.40000.2.0 arm64更新-> WSA v2303.40000.3.0 arm64
- WSA Android版本Android 13
- MindTheGapps 13.0 arm64
- Magisk Canary d0c9384226101
- KernelSU v0.5.1
- 已删除Amazon Appstore
## 此版本中的版本差异:
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-MindTheGapps-XX.X-RemovedAmazon.zip**
- 仅包含Google Play商店和服务
---
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-magisk-XXXXX.XXXX.-canary-MindTheGapps-XX.X-RemovedAmazon.zip**
- 包含Google Play商店和服务
** _and_ **
- 包含Magisk用于Root访问
---
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-kernelsu-vX.X.X-MindTheGapps-XX.X-RemovedAmazon.zip**
- 包含Google Play商店和服务
** _and_ **
- 包含KernelSU用于Root访问
---
## 附加信息
- 如果安装了带有Magisk的WSA构建之后Magisk应用程序未出现请从[此处]https://github.com/topjohnwu/Magisk/releases下载并[sideload]https://github.com/MustardChef/WSABuilds/blob/master/Guides/Sideloading.md它到WSA
## 版权:
https://github.com/LSPosed/MagiskOnWSALocal
<br/>
<br/>
<br/>
# Windows 子系统 for AndroidARM 处理器上的 Windows 11Windows_11_WSA_2303.40000.2.0_arm64
<img src="https://upload.wikimedia.org/wikipedia/commons/e/e6/Windows_11_logo.svg" width=20% height=20%>
![win11downcpre](https://img.shields.io/github/downloads/MustardChef/WSABuilds/Windows_11_2303.40000.2.0_arm64/total?label=Downloads&style=for-the-badge)
## 最新版本2023年4月6日 12:27 GMT</br>(原因:初始发布)
> **警告**
> #### **在安装之前,请完整阅读[指南](https://github.com/MustardChef/WSABuilds/blob/master/README.md)确保满足在Windows 11上安装的所有[要求](https://github.com/MustardChef/WSABuilds#requirements)。**
> **注意**
> #### **如果您正在更新WSA请在被要求时合并文件夹并替换所有项目的文件**
### 按照以下步骤在Windows 11上安装。
#### 包含Magisk和/或MindTheGAPPS
> **注意:**
> 如果您安装了官方的WSA请[完全卸载](https://github.com/MustardChef/WSABuilds#uninstallation)它以使用MagiskOnWSA
1. 解压缩zip文件
2. 删除zip文件建议在WSA已安装并正常运行之前保留.zip文件
3. 将新提取的文件夹移动到一个适当的位置文档文件夹是一个好选择因为您需要将文件夹保留在计算机上以使用MagiskOnWSA。
4. 打开WSA文件夹并双击Run.bat
### 注意事项:
1. 根据[要求](https://github.com/MustardChef/WSABuilds#requirements)规定您只能在NTFS分区上安装WSA而不能在exFAT分区上安装。
2. 您不能删除WSA安装文件夹。`Add-AppxPackage -Register .\AppxManifest.xml`所做的是注册一个带有一些现有未打包文件的appx包因此只要您想使用WSA就需要保留它们。有关更多详细信息请参见https://learn.microsoft.com/en-us/powershell/module/appx/add-appxpackage?view=windowsserver2022-ps。
3. 在运行 WSA 之前,您需要注册 WSA appx 包。对于 [WSABuilds](https://github.com/MustardChef/WSABuilds) 和 [MagiskOnWSALocal](https://github.com/LSPosed/MagiskOnWSALocal) 用户,您需要在提取的目录中运行 `Run.bat`
如果脚本执行失败,您可以进行以下诊断步骤(需要管理员权限):
1. 打开 PowerShell 窗口并将工作目录更改为 WSA 目录。
2. 在 PowerShell 中运行 `Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Register .\AppxManifest.xml`
这应该会失败并生成一个 ActivityID这是下一步所需的 UUID。
3. 在 PowerShell 中运行 `Get-AppPackageLog -ActivityID <UUID>`
这应该会打印失败操作的日志。
4. 检查日志以查找失败原因并进行修复。
## 更新日志
- [微软官方更新日志](https://github.com/microsoft/WSA/discussions/277)
- 从 WSA v2302.40000.9.0 arm64 更新至 WSA v2303.40000.2.0 arm64
- WSA Android 版本Android 13
- MindTheGapps 13.0 arm64
- Magisk Canary e2545e57 (26001)
- KernelSU v0.5.0
- 移除了亚马逊应用商店
## 此版本与上一版本的差异:
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-MindTheGapps-XX.X-RemovedAmazon.zip**
- 仅包含 Google Play 商店和服务
---
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-magisk-XXXXX.XXXX.-canary-MindTheGapps-XX.X-RemovedAmazon.zip**
- 包含 Google Play 商店和服务
**_以及_**
- 包含 Magisk用于 Root 权限)
---
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-kernelsu-vX.X.X-MindTheGapps-XX.X-RemovedAmazon.zip**
- 包含 Google Play 商店和服务
**_以及_**
- 包含 KernelSU用于 Root 权限)
---
## 附加信息
-如果在安装WSA后Magisk应用程序未出现请从[这里](https://github.com/topjohnwu/Magisk/releases)下载并[侧载](https://github.com/MustardChef/WSABuilds/blob/master/Guides/Sideloading.md)到WSA中。
## 致谢:
https://github.com/LSPosed/MagiskOnWSALocal

View File

@ -1,145 +0,0 @@
# Windows 子系统 For AndroidWindows 11 x64Windows_11_WSA_2303.40000.3.0_x64)。
<img src="https://upload.wikimedia.org/wikipedia/commons/e/e6/Windows_11_logo.svg" width=20% height=20%>
![win11downcpre](https://img.shields.io/github/downloads/MustardChef/WSABuilds/Windows_11_2303.40000.3.0/total?label=Downloads&style=for-the-badge)
## Builds Last Updated: 11/04/2023 20:28 GMT </br> (Reason: Initial Release)
---
> **警告**
> #### **在安装之前,请完整阅读[指南](https://github.com/MustardChef/WSABuilds/blob/master/README.md)确保您满足在Windows 11上进行安装的全部[要求](https://github.com/MustardChef/WSABuilds#requirements)。**
> **注意**
>#### **如果您正在更新WSA请在被要求时合并文件夹并替换所有项目的文件**
### 按照以下步骤在Windows 11上安装WSA。
#### 包含Magisk和MindTheGAPPS
> **注意**
> 如果您安装了官方WSA版本则必须[完全卸载](https://github.com/MustardChef/WSABuilds#uninstallation)它才能使用MagiskOnWSA
1. 解压缩zip文件
2. 删除zip文件**建议在安装并正常运行WSA之前保留.zip文件**
3. 将新提取的文件夹移动到适当的位置文档文件夹是一个不错的选择因为您需要将文件夹保留在计算机上才能使用MagiskOnWSA
4. 打开WSA文件夹双击Run.bat
### 注意:
1. 如[要求](https://github.com/MustardChef/WSABuilds#requirements)中所述您只能在NTFS分区上安装WSA不能在exFAT分区上安装。
2. 您不能删除WSA安装文件夹。
`Add-AppxPackage -Register .\AppxManifest.xml`的作用是注册一个带有一些已解压缩文件的appx包所以只要您想要使用WSA就需要保留它们。
请查看https://learn.microsoft.com/en-us/powershell/module/appx/add-appxpackage?view=windowsserver2022-ps获取更多详细信息。
3. 在运行WSA之前您需要注册您的WSA appx包。
对于[WSABuilds]https://github.com/MustardChef/WSABuilds和[MagiskOnWSALocal]https://github.com/LSPosed/MagiskOnWSALocal用户您需要在提取的目录中运行`Run.bat`。
如果脚本失败,您可以采取以下诊断步骤(需要管理员权限):
1. 打开PowerShell窗口并将工作目录更改为您的WSA目录。
2. 在PowerShell中运行`Add-AppxPackage-ForceApplicationShutdown-ForceUpdateFromAnyVersion-Register.\AppxManifest.xml`。
       这应该会失败其中包含一个ActivityID该ActivityID是下一步所需的UUID。
3. 在PowerShell中运行`Get-AppPackageLog-ActivityID<UUID>`。
       这应该会打印失败操作的日志。
4. 检查日志以查找失败原因并修复它。
## 变更日志
- [Microsoft的官方变更日志](https://blogs.windows.com/windows-insider/2023/04/11/update-to-windows-subsystem-for-android-on-windows-11-april-2023/)
- 从WSA v2303.40000.2.0 x86_64更新-> WSA v2303.40000.3.0 x86_64
- WSA Android版本Android 13
- MindTheGapps 13.0 x86_64
- Magisk Canary d0c9384226101
- KernelSU v0.5.1
- 已删除Amazon Appstore
## 此版本中的版本差异:
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-MindTheGapps-XX.X-RemovedAmazon.zip**
- 仅包含Google Play商店和服务
---
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-magisk-XXXXX.XXXX.-canary-MindTheGapps-XX.X-RemovedAmazon.zip**
- 包含Google Play商店和服务
** _and_ **
- 包含Magisk用于Root访问
---
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-kernelsu-vX.X.X-MindTheGapps-XX.X-RemovedAmazon.zip**
- 包含Google Play商店和服务
** _and_ **
- 包含KernelSU用于Root访问
---
## 附加信息
- 如果安装了带有Magisk的WSA构建之后Magisk应用程序未出现请从[此处]https://github.com/topjohnwu/Magisk/releases下载并[sideload]https://github.com/MustardChef/WSABuilds/blob/master/Guides/Sideloading.md它到WSA
## 版权:
https://github.com/LSPosed/MagiskOnWSALocal
<br/>
<br/>
<br/>
# Windows 子系统 For AndroidWindows 11 x64Windows_11_WSA_2303.40000.2.0_x64)。
![win11downcpre](https://img.shields.io/github/downloads/MustardChef/WSABuilds/Windows_11_2303.40000.2.0_arm64/total?label=Downloads&style=for-the-badge)
## 最新版本2023年4月6日 12:27 GMT</br>(原因:初始发布)
> **警告**
> #### **在安装之前,请完整阅读[指南](https://github.com/MustardChef/WSABuilds/blob/master/README.md)确保满足在Windows 11上安装的所有[要求](https://github.com/MustardChef/WSABuilds#requirements)。**
> **注意**
> #### **如果您正在更新WSA请在被要求时合并文件夹并替换所有项目的文件**
### 按照以下步骤在Windows 11上安装。
#### 包含Magisk和/或MindTheGAPPS
> **注意:**
> 如果您安装了官方的WSA请[完全卸载](https://github.com/MustardChef/WSABuilds#uninstallation)它以使用MagiskOnWSA
1. 解压缩zip文件
2. 删除zip文件建议在WSA已安装并正常运行之前保留.zip文件
3. 将新提取的文件夹移动到一个适当的位置文档文件夹是一个好选择因为您需要将文件夹保留在计算机上以使用MagiskOnWSA。
4. 打开WSA文件夹并双击Run.bat
### 注意事项:
1. 根据[要求](https://github.com/MustardChef/WSABuilds#requirements)规定您只能在NTFS分区上安装WSA而不能在exFAT分区上安装。
2. 您不能删除WSA安装文件夹。`Add-AppxPackage -Register .\AppxManifest.xml`所做的是注册一个带有一些现有未打包文件的appx包因此只要您想使用WSA就需要保留它们。有关更多详细信息请参见https://learn.microsoft.com/en-us/powershell/module/appx/add-appxpackage?view=windowsserver2022-ps。
3. 在运行 WSA 之前,您需要注册 WSA appx 包。对于 [WSABuilds](https://github.com/MustardChef/WSABuilds) 和 [MagiskOnWSALocal](https://github.com/LSPosed/MagiskOnWSALocal) 用户,您需要在提取的目录中运行 `Run.bat`
如果脚本执行失败,您可以进行以下诊断步骤(需要管理员权限):
1. 打开 PowerShell 窗口并将工作目录更改为 WSA 目录。
2. 在 PowerShell 中运行 `Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Register .\AppxManifest.xml`
这应该会失败并生成一个 ActivityID这是下一步所需的 UUID。
3. 在 PowerShell 中运行 `Get-AppPackageLog -ActivityID <UUID>`
这应该会打印失败操作的日志。
4. 检查日志以查找失败原因并进行修复。
## 更新日志
- [微软官方更新日志](https://github.com/microsoft/WSA/discussions/277)
- 从 WSA v2302.40000.9.0 x86_64 更新至 WSA v2303.40000.2.0 x86_64
- WSA Android 版本Android 13
- MindTheGapps 13.0 x86_64
- Magisk Canary e2545e57 (26001)
- KernelSU v0.5.0
- 移除了亚马逊应用商店
## 此版本与上一版本的差异:
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-MindTheGapps-XX.X-RemovedAmazon.zip**
- 仅包含 Google Play 商店和服务
---
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-magisk-XXXXX.XXXX.-canary-MindTheGapps-XX.X-RemovedAmazon.zip**
- 包含 Google Play 商店和服务
**_以及_**
- 包含 Magisk用于 Root 权限)
---
- **WSA_XXXX.X0000.X.0_XXXX_Release-Nightly-kernelsu-vX.X.X-MindTheGapps-XX.X-RemovedAmazon.zip**
- 包含 Google Play 商店和服务
**_以及_**
- 包含 KernelSU用于 Root 权限)
---
## 附加信息
-如果在安装WSA后Magisk应用程序未出现请从[这里](https://github.com/topjohnwu/Magisk/releases)下载并[侧载](https://github.com/MustardChef/WSABuilds/blob/master/Guides/Sideloading.md)到WSA中。
## 致谢:
https://github.com/LSPosed/MagiskOnWSALocal

View File

@ -1,70 +0,0 @@
# WSABuilds &nbsp; &nbsp; <img src="https://img.shields.io/github/downloads/MustardChef/WSABuilds/total?label=Total%20Downloads&style=for-the-badge"/> &nbsp; [<img src="https://img.shields.io/badge/XDA%20Developers-WSABuilds-EA7100?style=for-the-badge&logoColor=white&logo=XDA-Developers" />](https://forum.xda-developers.com/t/wsabuilds-latest-windows-subsystem-for-android-wsa-builds-for-windows-10-and-11-with-magisk-and-google-play-store.4545087/)
### MagiskOnWSA (For Windows™ 10 and 11) [<img align="right" src="https://invidget.switchblade.xyz/2thee7zzHZ" style="width: 400px;"/>](https://discord.gg/2thee7zzHZ)
#### Windows Subsystem For Android™ (WSA) with Google Play Services and (or) Magisk
</br>
</br>
## Installation
> **Note** :
> If you have the official Windows Subsystem For Android™ installed, you must [completely uninstall](#uninstallation) it to use MagiskOnWSA.
> In case you want to preserve your data from the previous installation (official or MagiskOnWSA), you can backup %LOCALAPPDATA%\Packages\MicrosoftCorporationII.WindowsSubsystemForAndroid_8wekyb3d8bbwe\LocalCache\userdata.vhdx before uninstallation and restore it after installation.
1. Go to the [Releases page](https://github.com/MustardChef/WSABuilds/releases/latest)
2. In the latest release, go to the Assets section and download the Windows Subsystem For Android™ version of your choosing (do not download "Source code")
3. Extract the zip file
4. Delete the zip file
5. Move the newly extracted folder to a suitable location (Documents folder is a good choice), as you will need to keep the folder on your PC to use MagiskOnWSA
> **Note** :
> If you're updating WSA, merge the folders and replace the files for all items when asked
6. Open the Windows Subsystem For Android™ folder: Search for and double-click `Run.bat`
- If you previously have a MagiskOnWSA installation, it will automatically uninstall the previous one while preserving all user data and install the new one, so don't worry about your data.
- If the popup windows disappear without asking administrative permission and Windows Subsystem For Android™ is not installed successfully, you should manually run Install.ps1 as administrator:
- Press Win+x and select Windows™ Terminal (Admin)
- Input the command below and press enter, replacing {X:\path\to\your\extracted\folder} including the {} with the path of the extracted folder
```Powershell
cd "{X:\path\to\your\extracted\folder}"
```
- Input the command below and press enter
```Powershell
PowerShell.exe -ExecutionPolicy Bypass -File .\Install.ps1
```
- The script will run and Windows Subsystem For Android™ will be installed
- If this workaround does not work, your PC is not supported for WSA
7. Once the installation process completes, Windows Subsystem For Android™ will launch (if this is a first-time install, a window asking for consent to diagnositic information will be shown instead. Sometimes two identical windows will show, this is fine and nothing bad happens if you click OK in both windows)
8. Click on the PowerShell window, then press any key on the keyboard, the PowerShell window should close
9. Close File Explorer
10. **Enjoy**
&nbsp;
### Notice (Applicable for both Windows 10 and 11):
1. You can NOT delete the Windows Subsystem For Android™ installation folder.
What `Add-AppxPackage -Register .\AppxManifest.xml` does is to register an appx package with some existing unpackaged files,
so you need to keep them as long as you want to use Windows Subsystem For Android™.
Check https://learn.microsoft.com/en-us/powershell/module/appx/add-appxpackage?view=windowsserver2022-ps for more details.
2. You need to register your Windows Subsystem For Android™ appx package before you can run Windows Subsystem For Android™.
For [WSABuilds](https://github.com/MustardChef/WSABuilds) and [MagiskOnWSALocal](https://github.com/LSPosed/MagiskOnWSALocal) users, you need to run `Run.bat` in the extracted dir.
If the script fails, you can take the following steps for diagnosis (admin privilege required):
1. Open a PowerShell window and change working directory to your Windows Subsystem For Android™ directory.
2. Run the command below in PowerShell. This should fail with an ActivityID, which is a UUID required for the next step.
```Powershell
Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Register .\AppxManifest.xml
```
3. Run the command below in PowerShell. This should print the log of the failed operation.
```Powershell
Get-AppPackageLog -ActivityID <UUID>
```
4. Check the log for the reason of failure and fix it.

Binary file not shown.

Binary file not shown.

View File

@ -1,949 +0,0 @@
#!/bin/bash
#
# This file is part of MagiskOnWSALocal.
#
# MagiskOnWSALocal is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# MagiskOnWSALocal is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see <https://www.gnu.org/licenses/>.
#
# Copyright (C) 2022 LSPosed Contributors
#
if [ ! "$BASH_VERSION" ]; then
echo "Please do not use sh to run this script, just execute it directly" 1>&2
exit 1
fi
HOST_ARCH=$(uname -m)
if [ "$HOST_ARCH" != "x86_64" ] && [ "$HOST_ARCH" != "aarch64" ]; then
echo "Unsupported architectures: $HOST_ARCH"
exit 1
fi
cd "$(dirname "$0")" || exit 1
trap umount_clean EXIT
# export TMPDIR=$(dirname "$PWD")/WORK_DIR_
if [ "$TMPDIR" ] && [ ! -d "$TMPDIR" ]; then
mkdir -p "$TMPDIR"
fi
WORK_DIR=$(mktemp -d -t wsa-build-XXXXXXXXXX_) || exit 1
DOWNLOAD_DIR=../download
DOWNLOAD_CONF_NAME=download.list
OUTPUT_DIR=../output
MOUNT_DIR="$WORK_DIR"/system
SUDO="$(which sudo 2>/dev/null)"
if [ -z "$SUDO" ]; then
unset SUDO
fi
WSA_WORK_ENV="${WORK_DIR:?}"/ENV
if [ -f "$WSA_WORK_ENV" ]; then rm -f "${WSA_WORK_ENV:?}"; fi
touch "$WSA_WORK_ENV"
export WSA_WORK_ENV
umount_clean() {
if [ -d "$MOUNT_DIR" ]; then
echo "Cleanup Work Directory"
if [ -d "$MOUNT_DIR/vendor" ]; then
$SUDO umount "$MOUNT_DIR"/vendor
fi
if [ -d "$MOUNT_DIR/product" ]; then
$SUDO umount "$MOUNT_DIR"/product
fi
if [ -d "$MOUNT_DIR/system_ext" ]; then
$SUDO umount "$MOUNT_DIR"/system_ext
fi
$SUDO umount "$MOUNT_DIR"
$SUDO rm -rf "${WORK_DIR:?}"
else
rm -rf "${WORK_DIR:?}"
fi
if [ "$TMPDIR" ] && [ -d "$TMPDIR" ]; then
rm -rf "${TMPDIR:?}"
unset TMPDIR
fi
}
clean_download() {
if [ -d "$DOWNLOAD_DIR" ]; then
echo "Cleanup Download Directory"
if [ "$CLEAN_DOWNLOAD_WSA" ]; then
rm -f "${WSA_ZIP_PATH:?}"
fi
if [ "$CLEAN_DOWNLOAD_MAGISK" ]; then
rm -f "${MAGISK_PATH:?}"
fi
if [ "$CLEAN_DOWNLOAD_GAPPS" ]; then
rm -f "${GAPPS_PATH:?}"
fi
fi
}
abort() {
echo "Build: an error has occurred, exit"
if [ -d "$WORK_DIR" ]; then
umount_clean
fi
clean_download
exit 1
}
trap abort INT TERM
Gen_Rand_Str() {
head /dev/urandom | tr -dc A-Za-z0-9 | head -c"$1"
}
default() {
ARCH=x64
RELEASE_TYPE=retail
MAGISK_VER=stable
GAPPS_BRAND=MindTheGapps
GAPPS_VARIANT=pico
ROOT_SOL=magisk
}
exit_with_message() {
echo "ERROR: $1"
usage
exit 1
}
ARCH_MAP=(
"x64"
"arm64"
)
RELEASE_TYPE_MAP=(
"retail"
"RP"
"WIS"
"WIF"
)
MAGISK_VER_MAP=(
"stable"
"beta"
"canary"
"debug"
"release"
)
GAPPS_BRAND_MAP=(
"OpenGApps"
"MindTheGapps"
"none"
)
GAPPS_VARIANT_MAP=(
"super"
"stock"
"full"
"mini"
"micro"
"nano"
"pico"
"tvstock"
"tvmini"
)
ROOT_SOL_MAP=(
"magisk"
"none"
)
COMPRESS_FORMAT_MAP=(
"7z"
"xz"
"zip"
)
ARR_TO_STR() {
local arr=("$@")
local joined
printf -v joined "%s, " "${arr[@]}"
echo "${joined%, }"
}
GAPPS_PROPS_MSG1="\033[0;31mWARNING: Services such as the Play Store may stop working properly."
GAPPS_PROPS_MSG2="We are not responsible for any problems caused by this!\033[0m"
GAPPS_PROPS_MSG3="Info: https://support.google.com/android/answer/10248227"
usage() {
default
echo -e "
Usage:
--arch Architecture of WSA.
Possible values: $(ARR_TO_STR "${ARCH_MAP[@]}")
Default: $ARCH
--release-type Release type of WSA.
RP means Release Preview, WIS means Insider Slow, WIF means Insider Fast.
Possible values: $(ARR_TO_STR "${RELEASE_TYPE_MAP[@]}")
Default: $RELEASE_TYPE
--magisk-ver Magisk version.
Possible values: $(ARR_TO_STR "${MAGISK_VER_MAP[@]}")
Default: $MAGISK_VER
--gapps-brand GApps brand.
\"none\" for no integration of GApps
Possible values: $(ARR_TO_STR "${GAPPS_BRAND_MAP[@]}")
Default: $GAPPS_BRAND
--gapps-variant GApps variant.
Possible values: $(ARR_TO_STR "${GAPPS_VARIANT_MAP[@]}")
Default: $GAPPS_VARIANT
--root-sol Root solution.
\"none\" means no root.
Possible values: $(ARR_TO_STR "${ROOT_SOL_MAP[@]}")
Default: $ROOT_SOL
--compress-format
Compress format of output file.
If this option is not specified and --compress is not specified, the generated file will not be compressed
Possible values: $(ARR_TO_STR "${COMPRESS_FORMAT_MAP[@]}")
Additional Options:
--remove-amazon Remove Amazon Appstore from the system
--compress Compress the WSA, The default format is 7z, you can use the format specified by --compress-format
--offline Build WSA offline
--magisk-custom Install custom Magisk
--skip-download-wsa Skip download WSA
--debug Debug build mode
--help Show this help message and exit
--nofix-props No fix \"build.prop\"
$GAPPS_PROPS_MSG1
$GAPPS_PROPS_MSG2
$GAPPS_PROPS_MSG3
Example:
./build.sh --release-type RP --magisk-ver beta --gapps-variant pico --remove-amazon
./build.sh --arch arm64 --release-type WIF --gapps-brand OpenGApps --nofix-props
./build.sh --release-type WIS --gapps-brand none
./build.sh --offline --gapps-variant pico --magisk-custom
"
}
ARGUMENT_LIST=(
"arch:"
"release-type:"
"magisk-ver:"
"gapps-brand:"
"gapps-variant:"
"nofix-props"
"root-sol:"
"compress-format:"
"remove-amazon"
"compress"
"offline"
"magisk-custom"
"debug"
"help"
"skip-download-wsa"
)
default
opts=$(
getopt \
--longoptions "$(printf "%s," "${ARGUMENT_LIST[@]}")" \
--name "$(basename "$0")" \
--options "" \
-- "$@"
) || exit_with_message "Failed to parse options, please check your input"
eval set --"$opts"
while [[ $# -gt 0 ]]; do
case "$1" in
--arch ) ARCH="$2"; shift 2 ;;
--release-type ) RELEASE_TYPE="$2"; shift 2 ;;
--gapps-brand ) GAPPS_BRAND="$2"; shift 2 ;;
--gapps-variant ) GAPPS_VARIANT="$2"; shift 2 ;;
--nofix-props ) NOFIX_PROPS="yes"; shift ;;
--root-sol ) ROOT_SOL="$2"; shift 2 ;;
--compress-format ) COMPRESS_FORMAT="$2"; shift 2 ;;
--remove-amazon ) REMOVE_AMAZON="yes"; shift ;;
--compress ) COMPRESS_OUTPUT="yes"; shift ;;
--offline ) OFFLINE="on"; shift ;;
--magisk-custom ) CUSTOM_MAGISK="debug"; shift ;;
--magisk-ver ) MAGISK_VER="$2"; shift 2 ;;
--debug ) DEBUG="on"; shift ;;
--skip-download-wsa ) DOWN_WSA="no"; shift ;;
--help ) usage; exit 0 ;;
-- ) shift; break;;
esac
done
if [ "$CUSTOM_MAGISK" ]; then
if [ -z "$MAGISK_VER" ]; then
MAGISK_VER=$CUSTOM_MAGISK
fi
fi
check_list() {
local input=$1
if [ -n "$input" ]; then
local name=$2
shift
local arr=("$@")
local list_count=${#arr[@]}
for i in "${arr[@]}"; do
if [ "$input" == "$i" ]; then
echo "INFO: $name: $input"
break
fi
((list_count--))
if (("$list_count" <= 0)); then
exit_with_message "Invalid $name: $input"
fi
done
fi
}
check_list "$ARCH" "Architecture" "${ARCH_MAP[@]}"
check_list "$RELEASE_TYPE" "Release Type" "${RELEASE_TYPE_MAP[@]}"
check_list "$MAGISK_VER" "Magisk Version" "${MAGISK_VER_MAP[@]}"
check_list "$GAPPS_BRAND" "GApps Brand" "${GAPPS_BRAND_MAP[@]}"
check_list "$GAPPS_VARIANT" "GApps Variant" "${GAPPS_VARIANT_MAP[@]}"
check_list "$ROOT_SOL" "Root Solution" "${ROOT_SOL_MAP[@]}"
check_list "$COMPRESS_FORMAT" "Compress Format" "${COMPRESS_FORMAT_MAP[@]}"
if [ "$DEBUG" ]; then
set -x
fi
require_su() {
if test "$(whoami)" != "root"; then
if [ -z "$SUDO" ] || [ "$($SUDO whoami)" != "root" ]; then
echo "ROOT/SUDO is required to run this script"
abort
fi
fi
}
declare -A RELEASE_NAME_MAP=(["retail"]="Retail" ["RP"]="Release Preview" ["WIS"]="Insider Slow" ["WIF"]="Insider Fast")
declare -A ANDROID_API_MAP=(["30"]="11.0" ["32"]="12.1" ["33"]="13.0")
RELEASE_NAME=${RELEASE_NAME_MAP[$RELEASE_TYPE]} || abort
echo -e "Build: RELEASE_TYPE=$RELEASE_NAME"
WSA_ZIP_PATH=$DOWNLOAD_DIR/wsa-$RELEASE_TYPE.zip
vclibs_PATH=$DOWNLOAD_DIR/Microsoft.VCLibs."$ARCH".14.00.Desktop.appx
xaml_PATH=$DOWNLOAD_DIR/Microsoft.UI.Xaml_"$ARCH".appx
MAGISK_ZIP=magisk-$MAGISK_VER.zip
MAGISK_PATH=$DOWNLOAD_DIR/$MAGISK_ZIP
if [ "$CUSTOM_MAGISK" ]; then
if [ ! -f "$MAGISK_PATH" ]; then
echo "Custom Magisk $MAGISK_ZIP not found"
MAGISK_ZIP=app-$MAGISK_VER.apk
echo "Fallback to $MAGISK_ZIP"
MAGISK_PATH=$DOWNLOAD_DIR/$MAGISK_ZIP
if [ ! -f "$MAGISK_PATH" ]; then
echo -e "Custom Magisk $MAGISK_ZIP not found\nPlease put custom Magisk in $DOWNLOAD_DIR"
abort
fi
fi
fi
ANDROID_API=32
update_gapps_zip_name() {
if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
# TODO: keep it 11.0 since official opengapps does not support 12+ yet
# As soon as opengapps is available for 12+, we need to get the sdk/release from build.prop and download the corresponding version
ANDROID_API=30
GAPPS_ZIP_NAME="$GAPPS_BRAND-$ARCH-${ANDROID_API_MAP[$ANDROID_API]}-$GAPPS_VARIANT".zip
else
GAPPS_ZIP_NAME="$GAPPS_BRAND-$ARCH-${ANDROID_API_MAP[$ANDROID_API]}".zip
fi
GAPPS_PATH=$DOWNLOAD_DIR/$GAPPS_ZIP_NAME
}
update_gapps_zip_name
if [ -z "${OFFLINE+x}" ]; then
trap 'rm -f -- "${DOWNLOAD_DIR:?}/${DOWNLOAD_CONF_NAME}"' EXIT
require_su
if [ "${DOWN_WSA}" != "no" ]; then
echo "Generate Download Links"
python3 generateWSALinks.py "$ARCH" "$RELEASE_TYPE" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" || abort
# shellcheck disable=SC1091
source "${WORK_DIR:?}/ENV" || abort
else
DOWN_WSA_MAIN_VERSION=2211
fi
if [[ "$DOWN_WSA_MAIN_VERSION" -ge 2211 ]]; then
ANDROID_API=33
update_gapps_zip_name
fi
if [ -z "${CUSTOM_MAGISK+x}" ]; then
python3 generateMagiskLink.py "$MAGISK_VER" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" || abort
fi
if [ "$GAPPS_BRAND" != "none" ]; then
python3 generateGappsLink.py "$ARCH" "$GAPPS_BRAND" "$GAPPS_VARIANT" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME" "$ANDROID_API" "$GAPPS_ZIP_NAME" || abort
fi
echo "Download Artifacts"
if ! aria2c --no-conf --log-level=info --log="$DOWNLOAD_DIR/aria2_download.log" -x16 -s16 -j5 -c -R -m0 --async-dns=false --check-integrity=true --continue=true --allow-overwrite=true --conditional-get=true -d"$DOWNLOAD_DIR" -i"$DOWNLOAD_DIR"/"$DOWNLOAD_CONF_NAME"; then
echo "We have encountered an error while downloading files."
exit 1
fi
else
declare -A FILES_CHECK_LIST=([WSA_ZIP_PATH]="$WSA_ZIP_PATH" [xaml_PATH]="$xaml_PATH" [vclibs_PATH]="$vclibs_PATH" [MAGISK_PATH]="$MAGISK_PATH")
for i in "${FILES_CHECK_LIST[@]}"; do
if [ ! -f "$i" ]; then
echo "Offline mode: missing [$i]."
OFFLINE_ERR="1"
fi
done
if [ "$GAPPS_BRAND" != 'none' ]; then
if [ ! -f "$GAPPS_PATH" ]; then
echo "Offline mode: missing [$GAPPS_PATH]."
OFFLINE_ERR="1"
fi
fi
if [ "$OFFLINE_ERR" ]; then
echo "Offline mode: Some files are missing, please disable offline mode."
exit 1
fi
require_su
fi
echo "Extract WSA"
if [ -f "$WSA_ZIP_PATH" ]; then
if ! python3 extractWSA.py "$ARCH" "$WSA_ZIP_PATH" "$WORK_DIR"; then
echo "Unzip WSA failed, is the download incomplete?"
CLEAN_DOWNLOAD_WSA=1
abort
fi
echo -e "Extract done\n"
# shellcheck disable=SC1091
source "${WORK_DIR:?}/ENV" || abort
if [[ "$WSA_MAIN_VER" -ge 2211 ]]; then
ANDROID_API=33
update_gapps_zip_name
fi
else
echo "The WSA zip package does not exist, is the download incomplete?"
exit 1
fi
echo "Extract Magisk"
if [ -f "$MAGISK_PATH" ]; then
version=""
versionCode=0
if ! python3 extractMagisk.py "$ARCH" "$MAGISK_PATH" "$WORK_DIR"; then
echo "Unzip Magisk failed, is the download incomplete?"
CLEAN_DOWNLOAD_MAGISK=1
abort
fi
# shellcheck disable=SC1091
source "${WORK_DIR:?}/ENV" || abort
$SUDO patchelf --replace-needed libc.so "../linker/$HOST_ARCH/libc.so" "$WORK_DIR"/magisk/magiskpolicy || abort
$SUDO patchelf --replace-needed libm.so "../linker/$HOST_ARCH/libm.so" "$WORK_DIR"/magisk/magiskpolicy || abort
$SUDO patchelf --replace-needed libdl.so "../linker/$HOST_ARCH/libdl.so" "$WORK_DIR"/magisk/magiskpolicy || abort
chmod +x "../linker/$HOST_ARCH/linker64" || abort
$SUDO patchelf --set-interpreter "../linker/$HOST_ARCH/linker64" "$WORK_DIR"/magisk/magiskpolicy || abort
chmod +x "$WORK_DIR"/magisk/magiskpolicy || abort
elif [ -z "${CUSTOM_MAGISK+x}" ]; then
echo "The Magisk zip package does not exist, is the download incomplete?"
exit 1
else
echo "The Magisk zip package does not exist, rename it to magisk-debug.zip and put it in the download folder."
exit 1
fi
echo -e "done\n"
if [ "$GAPPS_BRAND" != 'none' ]; then
echo "Extract $GAPPS_BRAND"
mkdir -p "$WORK_DIR"/gapps || abort
if [ -f "$GAPPS_PATH" ]; then
if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
if ! unzip -p "$GAPPS_PATH" {Core,GApps}/'*.lz' | tar --lzip -C "$WORK_DIR"/gapps -xf - -i --strip-components=2 --exclude='setupwizardtablet-x86_64' --exclude='packageinstallergoogle-all' --exclude='speech-common' --exclude='markup-lib-arm' --exclude='markup-lib-arm64' --exclude='markup-all' --exclude='setupwizarddefault-x86_64' --exclude='pixellauncher-all' --exclude='pixellauncher-common'; then
echo "Unzip OpenGApps failed, is the download incomplete?"
CLEAN_DOWNLOAD_GAPPS=1
abort
fi
else
if ! unzip "$GAPPS_PATH" "system/*" -x "system/addon.d/*" "system/system_ext/priv-app/SetupWizard/*" -d "$WORK_DIR"/gapps; then
echo "Unzip MindTheGapps failed, package is corrupted?"
CLEAN_DOWNLOAD_GAPPS=1
abort
fi
mv "$WORK_DIR"/gapps/system/* "$WORK_DIR"/gapps || abort
rm -rf "${WORK_DIR:?}"/gapps/system || abort
fi
cp -r ../"$ARCH"/gapps/* "$WORK_DIR"/gapps || abort
else
echo "The $GAPPS_BRAND zip package does not exist."
abort
fi
echo -e "Extract done\n"
fi
echo "Expand images"
if [ ! -f /etc/mtab ]; then $SUDO ln -s /proc/self/mounts /etc/mtab; fi
e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system_ext.img || abort
SYSTEM_EXT_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/system_ext.img | cut -f1) + 20000))
if [ -d "$WORK_DIR"/gapps/system_ext ]; then
SYSTEM_EXT_SIZE=$(( SYSTEM_EXT_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps/system_ext | cut -f1) ))
fi
resize2fs "$WORK_DIR"/wsa/"$ARCH"/system_ext.img "$SYSTEM_EXT_SIZE"s || abort
e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/product.img || abort
PRODUCT_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/product.img | cut -f1) + 20000))
if [ -d "$WORK_DIR"/gapps/product ]; then
PRODUCT_SIZE=$(( PRODUCT_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps/product | cut -f1) ))
fi
resize2fs "$WORK_DIR"/wsa/"$ARCH"/product.img "$PRODUCT_SIZE"s || abort
e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system.img || abort
SYSTEM_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/system.img | cut -f1) + 20000))
if [ -d "$WORK_DIR"/gapps ]; then
SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/gapps | cut -f1) - $(du --apparent-size -sB512 "$WORK_DIR"/gapps/product | cut -f1) ))
if [ -d "$WORK_DIR"/gapps/system_ext ]; then
SYSTEM_SIZE=$(( SYSTEM_SIZE - $(du --apparent-size -sB512 "$WORK_DIR"/gapps/system_ext | cut -f1) ))
fi
fi
if [ -d "$WORK_DIR"/magisk ]; then
SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$WORK_DIR"/magisk/magisk | cut -f1) ))
fi
if [ -f "$MAGISK_PATH" ]; then
SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "$MAGISK_PATH" | cut -f1) ))
fi
if [ -d "../$ARCH/system" ]; then
SYSTEM_SIZE=$(( SYSTEM_SIZE + $(du --apparent-size -sB512 "../$ARCH/system" | cut -f1) ))
fi
resize2fs "$WORK_DIR"/wsa/"$ARCH"/system.img "$SYSTEM_SIZE"s || abort
e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/vendor.img || abort
VENDOR_SIZE=$(($(du --apparent-size -sB512 "$WORK_DIR"/wsa/"$ARCH"/vendor.img | cut -f1) + 20000))
resize2fs "$WORK_DIR"/wsa/"$ARCH"/vendor.img "$VENDOR_SIZE"s || abort
echo -e "Expand images done\n"
echo "Mount images"
$SUDO mkdir "$MOUNT_DIR" || abort
$SUDO mount -o loop "$WORK_DIR"/wsa/"$ARCH"/system.img "$MOUNT_DIR" || abort
$SUDO mount -o loop "$WORK_DIR"/wsa/"$ARCH"/vendor.img "$MOUNT_DIR"/vendor || abort
$SUDO mount -o loop "$WORK_DIR"/wsa/"$ARCH"/product.img "$MOUNT_DIR"/product || abort
$SUDO mount -o loop "$WORK_DIR"/wsa/"$ARCH"/system_ext.img "$MOUNT_DIR"/system_ext || abort
echo -e "done\n"
if [ "$REMOVE_AMAZON" ]; then
echo "Remove Amazon Appstore"
find "${MOUNT_DIR:?}"/product/{etc/permissions,etc/sysconfig,framework,priv-app} | grep -e amazon -e venezia | $SUDO xargs rm -rf
find "${MOUNT_DIR:?}"/system_ext/{etc/*permissions,framework,priv-app} | grep -e amazon -e venezia | $SUDO xargs rm -rf
echo -e "done\n"
fi
echo "Add device administration features"
$SUDO sed -i -e '/cts/a \ \ \ \ <feature name="android.software.device_admin" />' -e '/print/i \ \ \ \ <feature name="android.software.managed_users" />' "$MOUNT_DIR"/vendor/etc/permissions/windows.permissions.xml
$SUDO setfattr -n security.selinux -v "u:object_r:vendor_configs_file:s0" "$MOUNT_DIR"/vendor/etc/permissions/windows.permissions.xml || abort
echo -e "done\n"
if [ "$ROOT_SOL" = 'magisk' ] || [ "$ROOT_SOL" = '' ]; then
echo "Integrate Magisk"
$SUDO mkdir "$MOUNT_DIR"/sbin
$SUDO setfattr -n security.selinux -v "u:object_r:rootfs:s0" "$MOUNT_DIR"/sbin || abort
$SUDO chown root:root "$MOUNT_DIR"/sbin
$SUDO chmod 0700 "$MOUNT_DIR"/sbin
$SUDO cp "$WORK_DIR"/magisk/magisk/* "$MOUNT_DIR"/sbin/
$SUDO cp "$MAGISK_PATH" "$MOUNT_DIR"/sbin/magisk.apk
$SUDO tee -a "$MOUNT_DIR"/sbin/loadpolicy.sh <<EOF
#!/system/bin/sh
mkdir -p /data/adb/magisk
cp /sbin/* /data/adb/magisk/
sync
chmod -R 755 /data/adb/magisk
restorecon -R /data/adb/magisk
for module in \$(ls /data/adb/modules); do
if ! [ -f "/data/adb/modules/\$module/disable" ] && [ -f "/data/adb/modules/\$module/sepolicy.rule" ]; then
/sbin/magiskpolicy --live --apply "/data/adb/modules/\$module/sepolicy.rule"
fi
done
EOF
$SUDO find "$MOUNT_DIR"/sbin -type f -exec chmod 0755 {} \;
$SUDO find "$MOUNT_DIR"/sbin -type f -exec chown root:root {} \;
$SUDO find "$MOUNT_DIR"/sbin -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
TMP_PATH=$(Gen_Rand_Str 8)
echo "/dev/$TMP_PATH(/.*)? u:object_r:magisk_file:s0" | $SUDO tee -a "$MOUNT_DIR"/vendor/etc/selinux/vendor_file_contexts
echo '/data/adb/magisk(/.*)? u:object_r:magisk_file:s0' | $SUDO tee -a "$MOUNT_DIR"/vendor/etc/selinux/vendor_file_contexts
$SUDO "$WORK_DIR"/magisk/magiskpolicy --load "$MOUNT_DIR"/vendor/etc/selinux/precompiled_sepolicy --save "$MOUNT_DIR"/vendor/etc/selinux/precompiled_sepolicy --magisk "allow * magisk_file lnk_file *" || abort
SERVER_NAME1=$(Gen_Rand_Str 12)
SERVER_NAME2=$(Gen_Rand_Str 12)
SERVER_NAME3=$(Gen_Rand_Str 12)
SERVER_NAME4=$(Gen_Rand_Str 12)
$SUDO tee -a "$MOUNT_DIR"/system/etc/init/hw/init.rc <<EOF
on post-fs-data
start adbd
mkdir /dev/$TMP_PATH
mount tmpfs tmpfs /dev/$TMP_PATH mode=0755
copy /sbin/magisk64 /dev/$TMP_PATH/magisk64
chmod 0755 /dev/$TMP_PATH/magisk64
symlink ./magisk64 /dev/$TMP_PATH/magisk
symlink ./magisk64 /dev/$TMP_PATH/su
symlink ./magisk64 /dev/$TMP_PATH/resetprop
copy /sbin/magisk32 /dev/$TMP_PATH/magisk32
chmod 0755 /dev/$TMP_PATH/magisk32
copy /sbin/magiskinit /dev/$TMP_PATH/magiskinit
chmod 0755 /dev/$TMP_PATH/magiskinit
copy /sbin/magiskpolicy /dev/$TMP_PATH/magiskpolicy
chmod 0755 /dev/$TMP_PATH/magiskpolicy
mkdir /dev/$TMP_PATH/.magisk 700
mkdir /dev/$TMP_PATH/.magisk/mirror 700
mkdir /dev/$TMP_PATH/.magisk/block 700
copy /sbin/magisk.apk /dev/$TMP_PATH/stub.apk
chmod 0644 /dev/$TMP_PATH/stub.apk
rm /dev/.magisk_unblock
exec_start $SERVER_NAME1
start $SERVER_NAME2
wait /dev/.magisk_unblock 40
rm /dev/.magisk_unblock
service $SERVER_NAME1 /system/bin/sh /sbin/loadpolicy.sh
user root
seclabel u:r:magisk:s0
oneshot
service $SERVER_NAME2 /dev/$TMP_PATH/magisk --post-fs-data
user root
seclabel u:r:magisk:s0
oneshot
service $SERVER_NAME3 /dev/$TMP_PATH/magisk --service
class late_start
user root
seclabel u:r:magisk:s0
oneshot
on property:sys.boot_completed=1
mkdir /data/adb/magisk 755
copy /sbin/magisk.apk /data/adb/magisk/magisk.apk
start $SERVER_NAME4
service $SERVER_NAME4 /dev/$TMP_PATH/magisk --boot-complete
user root
seclabel u:r:magisk:s0
oneshot
EOF
echo -e "Integrate Magisk done\n"
fi
echo "Merge Language Resources"
cp "$WORK_DIR"/wsa/"$ARCH"/resources.pri "$WORK_DIR"/wsa/pri/en-us.pri \
&& cp "$WORK_DIR"/wsa/"$ARCH"/AppxManifest.xml "$WORK_DIR"/wsa/xml/en-us.xml && {
tee "$WORK_DIR"/wsa/priconfig.xml <<EOF
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resources targetOsVersion="10.0.0" majorVersion="1">
<index root="\" startIndexAt="\">
<indexer-config type="folder" foldernameAsQualifier="true" filenameAsQualifier="true" qualifierDelimiter="."/>
<indexer-config type="PRI"/>
</index>
</resources>
EOF
wine64 ../wine/"$HOST_ARCH"/makepri.exe new /pr "$WORK_DIR"/wsa/pri /in MicrosoftCorporationII.WindowsSubsystemForAndroid /cf "$WORK_DIR"/wsa/priconfig.xml /of "$WORK_DIR"/wsa/"$ARCH"/resources.pri /o
sed -i -zE "s/<Resources.*Resources>/<Resources>\n$(cat "$WORK_DIR"/wsa/xml/* | grep -Po '<Resource [^>]*/>' | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/\$/\\$/g' | sed 's/\//\\\//g')\n<\/Resources>/g" "$WORK_DIR"/wsa/"$ARCH"/AppxManifest.xml
echo -e "Merge Language Resources done\n"
} || echo -e "Merge Language Resources failed\n"
echo "Add extra packages"
$SUDO cp -r ../"$ARCH"/system/* "$MOUNT_DIR" || abort
find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -type d -exec chmod 0755 {} \;
find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -type f -exec chmod 0644 {} \;
find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -exec chown root:root {} \;
find ../"$ARCH"/system/system/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
echo -e "Add extra packages done\n"
if [ "$GAPPS_BRAND" != 'none' ]; then
echo "Integrate $GAPPS_BRAND"
find "$WORK_DIR/gapps/" -mindepth 1 -type d -exec $SUDO chmod 0755 {} \;
find "$WORK_DIR/gapps/" -mindepth 1 -type d -exec $SUDO chown root:root {} \;
file_list="$(find "$WORK_DIR/gapps/" -mindepth 1 -type f | cut -d/ -f5-)"
for file in $file_list; do
$SUDO chown root:root "$WORK_DIR/gapps/${file}"
$SUDO chmod 0644 "$WORK_DIR/gapps/${file}"
done
if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
find "$WORK_DIR"/gapps/ -maxdepth 1 -mindepth 1 -type d -not -path '*product' -exec $SUDO cp --preserve=all -r {} "$MOUNT_DIR"/system \; || abort
elif [ "$GAPPS_BRAND" = "MindTheGapps" ]; then
$SUDO cp --preserve=all -r "$WORK_DIR"/gapps/system_ext/* "$MOUNT_DIR"/system_ext/ || abort
if [ -e "$MOUNT_DIR"/system_ext/priv-app/SetupWizard ]; then
rm -rf "${MOUNT_DIR:?}/system_ext/priv-app/Provision"
fi
fi
$SUDO cp --preserve=all -r "$WORK_DIR"/gapps/product/* "$MOUNT_DIR"/product || abort
find "$WORK_DIR"/gapps/product/overlay -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/overlay/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:vendor_overlay_file:s0" {} \; || abort
if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
find "$WORK_DIR"/gapps/app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/app/placeholder -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/framework/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/framework/placeholder -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/app/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/framework/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/framework/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/priv-app/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/etc/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/etc/placeholder -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/etc/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system/etc/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
else
find "$WORK_DIR"/gapps/product/app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/app/placeholder -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/product/etc/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/etc/placeholder -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/product/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/priv-app/placeholder -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/product/framework/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/framework/placeholder -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/product/app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/app/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/product/etc/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/etc/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/product/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/priv-app/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/product/framework/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/framework/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/system_ext/etc/permissions/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system_ext/etc/permissions/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
$SUDO setfattr -n security.selinux -v "u:object_r:system_lib_file:s0" "$MOUNT_DIR"/product/lib || abort
find "$WORK_DIR"/gapps/product/lib/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/lib/placeholder -exec setfattr -n security.selinux -v "u:object_r:system_lib_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/product/lib64/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/product/lib64/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_lib_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/system_ext/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system_ext/priv-app/placeholder -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/system_ext/etc/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system_ext/etc/placeholder -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR"/gapps/system_ext/priv-app/ -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder $SUDO find "$MOUNT_DIR"/system_ext/priv-app/placeholder -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
fi
$SUDO "$WORK_DIR"/magisk/magiskpolicy --load "$MOUNT_DIR"/vendor/etc/selinux/precompiled_sepolicy --save "$MOUNT_DIR"/vendor/etc/selinux/precompiled_sepolicy "allow gmscore_app gmscore_app vsock_socket { create connect write read }" "allow gmscore_app device_config_runtime_native_boot_prop file read" "allow gmscore_app system_server_tmpfs dir search" "allow gmscore_app system_server_tmpfs file open" "allow gmscore_app system_server_tmpfs filesystem getattr" "allow gmscore_app gpu_device dir search" || abort
echo -e "Integrate $GAPPS_BRAND done\n"
fi
if [ "$GAPPS_BRAND" != 'none' ]; then
if [ "$NOFIX_PROPS" ]; then
echo -e "Skip fix $GAPPS_BRAND prop!\n$GAPPS_PROPS_MSG1\n$GAPPS_PROPS_MSG2\n$GAPPS_PROPS_MSG3\n"
else
echo "Fix $GAPPS_BRAND prop"
$SUDO python3 fixGappsProp.py "$MOUNT_DIR" || abort
echo -e "done\n"
fi
fi
echo "Umount images"
$SUDO find "$MOUNT_DIR" -exec touch -hamt 200901010000.00 {} \;
$SUDO umount "$MOUNT_DIR"/vendor
$SUDO umount "$MOUNT_DIR"/product
$SUDO umount "$MOUNT_DIR"/system_ext
$SUDO umount "$MOUNT_DIR"
echo -e "done\n"
echo "Shrink images"
e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system.img || abort
resize2fs -M "$WORK_DIR"/wsa/"$ARCH"/system.img || abort
e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/vendor.img || abort
resize2fs -M "$WORK_DIR"/wsa/"$ARCH"/vendor.img || abort
e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/product.img || abort
resize2fs -M "$WORK_DIR"/wsa/"$ARCH"/product.img || abort
e2fsck -pf "$WORK_DIR"/wsa/"$ARCH"/system_ext.img || abort
resize2fs -M "$WORK_DIR"/wsa/"$ARCH"/system_ext.img || abort
echo -e "Shrink images done\n"
echo "Remove signature and add scripts"
$SUDO rm -rf "${WORK_DIR:?}"/wsa/"$ARCH"/\[Content_Types\].xml "$WORK_DIR"/wsa/"$ARCH"/AppxBlockMap.xml "$WORK_DIR"/wsa/"$ARCH"/AppxSignature.p7x "$WORK_DIR"/wsa/"$ARCH"/AppxMetadata || abort
cp "$vclibs_PATH" "$xaml_PATH" "$WORK_DIR"/wsa/"$ARCH" || abort
tee "$WORK_DIR"/wsa/"$ARCH"/Install.ps1 <<EOF
# Automated Install script by Midonei
\$Host.UI.RawUI.WindowTitle = "Installing MagiskOnWSA..."
function Test-Administrator {
[OutputType([bool])]
param()
process {
[Security.Principal.WindowsPrincipal]\$user = [Security.Principal.WindowsIdentity]::GetCurrent();
return \$user.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator);
}
}
function Get-InstalledDependencyVersion {
param (
[string]\$Name,
[string]\$ProcessorArchitecture
)
process {
return Get-AppxPackage -Name \$Name | ForEach-Object { if (\$_.Architecture -eq \$ProcessorArchitecture) { \$_ } } | Sort-Object -Property Version | Select-Object -ExpandProperty Version -Last 1;
}
}
function Finish {
Clear-Host
Start-Process "wsa://com.topjohnwu.magisk"
Start-Process "wsa://com.android.vending"
}
If (-Not (Test-Administrator)) {
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force
\$proc = Start-Process -PassThru -WindowStyle Hidden -Verb RunAs ConHost.exe -Args "powershell -ExecutionPolicy Bypass -Command Set-Location '\$PSScriptRoot'; &'\$PSCommandPath' EVAL"
\$proc.WaitForExit()
If (\$proc.ExitCode -Ne 0) {
Clear-Host
Write-Warning "Failed to launch start as Administrator\`r\`nPress any key to exit"
\$null = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');
}
exit
}
ElseIf ((\$args.Count -Eq 1) -And (\$args[0] -Eq "EVAL")) {
Start-Process ConHost.exe -Args "powershell -ExecutionPolicy Bypass -Command Set-Location '\$PSScriptRoot'; &'\$PSCommandPath'"
exit
}
If (((Test-Path -Path $(find "$WORK_DIR"/wsa/"$ARCH" -maxdepth 1 -mindepth 1 -printf "\"%P\"\n" | paste -sd "," -)) -Eq \$false).Count) {
Write-Error "Some files are missing in the folder. Please try to build again. Press any key to exist"
\$null = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
exit 1
}
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1"
If (\$(Get-WindowsOptionalFeature -Online -FeatureName 'VirtualMachinePlatform').State -Ne "Enabled") {
Enable-WindowsOptionalFeature -Online -NoRestart -FeatureName 'VirtualMachinePlatform'
Clear-Host
Write-Warning "Need restart to enable virtual machine platform\`r\`nPress y to restart or press any key to exit"
\$key = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
If ("y" -Eq \$key.Character) {
Restart-Computer -Confirm
}
Else {
exit 1
}
}
[xml]\$Xml = Get-Content ".\AppxManifest.xml";
\$Name = \$Xml.Package.Identity.Name;
\$ProcessorArchitecture = \$Xml.Package.Identity.ProcessorArchitecture;
\$Dependencies = \$Xml.Package.Dependencies.PackageDependency;
\$Dependencies | ForEach-Object {
If (\$_.Name -Eq "Microsoft.VCLibs.140.00.UWPDesktop") {
\$HighestInstalledVCLibsVersion = Get-InstalledDependencyVersion -Name \$_.Name -ProcessorArchitecture \$ProcessorArchitecture;
If ( \$HighestInstalledVCLibsVersion -Lt \$_.MinVersion ) {
Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Path "Microsoft.VCLibs.\$ProcessorArchitecture.14.00.Desktop.appx"
}
}
ElseIf (\$_.Name -Match "Microsoft.UI.Xaml") {
\$HighestInstalledXamlVersion = Get-InstalledDependencyVersion -Name \$_.Name -ProcessorArchitecture \$ProcessorArchitecture;
If ( \$HighestInstalledXamlVersion -Lt \$_.MinVersion ) {
Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Path "Microsoft.UI.Xaml_\$ProcessorArchitecture.appx"
}
}
}
\$Installed = \$null
\$Installed = Get-AppxPackage -Name \$Name
If ((\$null -Ne \$Installed) -And (-Not (\$Installed.IsDevelopmentMode))) {
Clear-Host
Write-Warning "There is already one installed WSA. Please uninstall it first.\`r\`nPress y to uninstall existing WSA or press any key to exit"
\$key = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
If ("y" -Eq \$key.Character) {
Remove-AppxPackage -Package \$Installed.PackageFullName
}
Else {
exit 1
}
}
Clear-Host
Write-Host "Installing MagiskOnWSA..."
Stop-Process -Name "WsaClient" -ErrorAction SilentlyContinue
Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Register .\AppxManifest.xml
If (\$?) {
Finish
}
ElseIf (\$null -Ne \$Installed) {
Clear-Host
Write-Host "Failed to update, try to uninstall existing installation while preserving userdata..."
Remove-AppxPackage -PreserveApplicationData -Package \$Installed.PackageFullName
Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Register .\AppxManifest.xml
If (\$?) {
Finish
}
}
Write-Host "All Done!\`r\`nPress any key to exit"
\$null = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
EOF
tee "$WORK_DIR"/wsa/"$ARCH"/Run.bat <<EOF
:: Automated Install batch script by Syuugo
@echo off
if not exist Install.ps1 (
echo "Install.ps1" is not found.
echo Press any key to exit
pause>nul
exit 1
) else (
start powershell.exe -ExecutionPolicy Bypass -File .\Install.ps1
exit
)
EOF
echo -e "Remove signature and add scripts done\n"
echo "Generate info"
if [[ "$ROOT_SOL" = "none" ]]; then
name1=""
elif [ "$ROOT_SOL" = "" ] || [ "$ROOT_SOL" = "magisk" ]; then
name1="-with-magisk-$version($versionCode)-$MAGISK_VER"
else
name1="-with-$ROOT_SOL-$MAGISK_VER"
fi
if [ "$GAPPS_BRAND" = "none" ]; then
name2="-NoGApps"
else
if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
name2="-$GAPPS_BRAND-${ANDROID_API_MAP[$ANDROID_API]}-${GAPPS_VARIANT}"
else
name2="-$GAPPS_BRAND-${ANDROID_API_MAP[$ANDROID_API]}"
fi
if [ "$GAPPS_BRAND" = "OpenGApps" ] && [ "$DEBUG" ]; then
echo ":warning: Since OpenGApps doesn't officially support Android 12.1 yet, lock the variant to pico!"
fi
fi
artifact_name="WSA"
echo -e "\nFinishing building...."
if [ -f "$OUTPUT_DIR" ]; then
$SUDO rm -rf "${OUTPUT_DIR:?}"
fi
if [ ! -d "$OUTPUT_DIR" ]; then
mkdir -p "$OUTPUT_DIR"
fi
OUTPUT_PATH="${OUTPUT_DIR:?}/$artifact_name"
if [ "$COMPRESS_OUTPUT" ] || [ -n "$COMPRESS_FORMAT" ]; then
mv "$WORK_DIR/wsa/$ARCH" "$WORK_DIR/wsa/$artifact_name"
if [ -z "$COMPRESS_FORMAT" ]; then
COMPRESS_FORMAT="7z"
fi
if [ -n "$COMPRESS_FORMAT" ]; then
FILE_EXT=".$COMPRESS_FORMAT"
if [ "$FILE_EXT" = ".xz" ]; then
FILE_EXT=".tar$FILE_EXT"
fi
OUTPUT_PATH="$OUTPUT_PATH$FILE_EXT"
fi
rm -f "${OUTPUT_PATH:?}" || abort
if [ "$COMPRESS_FORMAT" = "7z" ]; then
echo "Compressing with 7z..."
7z a "${OUTPUT_PATH:?}" "$WORK_DIR/wsa/$artifact_name" || abort
elif [ "$COMPRESS_FORMAT" = "xz" ]; then
echo "Compressing with tar xz..."
if ! (tar -cP -I 'xz -9 -T0' -f "${OUTPUT_PATH:?}" "$WORK_DIR/wsa/$artifact_name"); then
echo "Out of memory? Trying again with single threads..."
tar -cPJvf "${OUTPUT_PATH:?}" "$WORK_DIR/wsa/$artifact_name" || abort
fi
elif [ "$COMPRESS_FORMAT" = "zip" ]; then
echo "Compressing with zip..."
7z -tzip a "${OUTPUT_PATH:?}" "$WORK_DIR/wsa/$artifact_name" || abort
fi
else
rm -rf "${OUTPUT_PATH:?}" || abort
cp -r "$WORK_DIR"/wsa/"$ARCH" "$OUTPUT_PATH" || abort
fi
echo -e "done\n"
echo "Cleanup Work Directory"
$SUDO rm -rf "${WORK_DIR:?}"
echo "done"

View File

@ -1,78 +0,0 @@
#!/usr/bin/python3
#
# This file is part of MagiskOnWSALocal.
#
# MagiskOnWSALocal is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# MagiskOnWSALocal is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see <https://www.gnu.org/licenses/>.
#
# Copyright (C) 2022 LSPosed Contributors
#
import sys
import zipfile
from pathlib import Path
import platform
import os
is_x86_64 = platform.machine() in ("AMD64", "x86_64")
host_abi = "x64" if is_x86_64 else "arm64"
arch = sys.argv[1]
magisk_zip = sys.argv[2]
workdir = Path(sys.argv[3]) / "magisk"
if not Path(workdir).is_dir():
workdir.mkdir()
abi_map = {"x64": ["x86_64", "x86"], "arm64": ["arm64-v8a", "armeabi-v7a"]}
def extract_as(zip, name, as_name, dir):
info = zip.getinfo(name)
info.filename = as_name
zip.extract(info, workdir / dir)
with zipfile.ZipFile(magisk_zip) as zip:
comment = zip.comment.decode('utf-8')
with open(os.environ['WSA_WORK_ENV'], 'a') as environ_file:
environ_file.write(f'{comment}\n')
print(f'{comment}', flush=True)
extract_as(
zip, f"lib/{ abi_map[arch][0] }/libmagisk64.so", "magisk64", "magisk")
extract_as(
zip, f"lib/{ abi_map[arch][1] }/libmagisk32.so", "magisk32", "magisk")
standalone_policy = False
try:
zip.getinfo(f"lib/{ abi_map[arch][0] }/libmagiskpolicy.so")
standalone_policy = True
except:
pass
extract_as(
zip, f"lib/{ abi_map[arch][0] }/libmagiskinit.so", "magiskinit", "magisk")
if standalone_policy:
extract_as(
zip, f"lib/{ abi_map[arch][0] }/libmagiskpolicy.so", "magiskpolicy", "magisk")
else:
extract_as(
zip, f"lib/{ abi_map[arch][0] }/libmagiskinit.so", "magiskpolicy", "magisk")
extract_as(
zip, f"lib/{ abi_map[arch][0] }/libmagiskboot.so", "magiskboot", "magisk")
extract_as(
zip, f"lib/{ abi_map[arch][0] }/libbusybox.so", "busybox", "magisk")
if standalone_policy:
extract_as(
zip, f"lib/{ abi_map[host_abi][0] }/libmagiskpolicy.so", "magiskpolicy", ".")
else:
extract_as(
zip, f"lib/{ abi_map[host_abi][0] }/libmagiskinit.so", "magiskpolicy", ".")
extract_as(zip, f"assets/boot_patch.sh", "boot_patch.sh", "magisk")
extract_as(zip, f"assets/util_functions.sh",
"util_functions.sh", "magisk")

View File

@ -1,72 +0,0 @@
#!/usr/bin/python3
#
# This file is part of MagiskOnWSALocal.
#
# MagiskOnWSALocal is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# MagiskOnWSALocal is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see <https://www.gnu.org/licenses/>.
#
# Copyright (C) 2022 LSPosed Contributors
#
import sys
import warnings
import zipfile
import os
from pathlib import Path
warnings.filterwarnings("ignore")
arch = sys.argv[1]
zip_name = ""
wsa_zip_path= Path(sys.argv[2]).resolve()
workdir = Path(sys.argv[3]) / "wsa"
if not Path(workdir).is_dir():
workdir.mkdir()
with zipfile.ZipFile(wsa_zip_path) as zip:
for f in zip.filelist:
if arch in f.filename.lower():
zip_name = f.filename
output_name = zip_name[11:-5]
if not Path(workdir / zip_name).is_file():
zip_path = workdir / zip_name
print(f"unzipping to {workdir}", flush=True)
zip.extract(f, workdir)
ver_no = zip_name.split("_")
long_ver = ver_no[1]
ver = long_ver.split(".")
main_ver = ver[0]
rel = ver_no[3].split(".")
rel_long = str(rel[0])
with open(os.environ['WSA_WORK_ENV'], 'a') as environ_file:
environ_file.write(f'WSA_VER={long_ver}\n')
environ_file.write(f'WSA_MAIN_VER={main_ver}\n')
environ_file.write(f'WSA_REL={rel_long}\n')
with open(os.environ['GITHUB_ENV'], 'a') as environ_file:
environ_file.write(f'WSA_VER={long_ver}\n')
if 'language' in f.filename.lower() or 'scale' in f.filename.lower():
name = f.filename.split("-", 1)[1].split(".")[0]
zip.extract(f, workdir)
with zipfile.ZipFile(workdir / f.filename) as l:
for g in l.filelist:
if g.filename == 'resources.pri':
g.filename = f'{name}.pri'
l.extract(g, workdir / 'pri')
elif g.filename == 'AppxManifest.xml':
g.filename = f'{name}.xml'
l.extract(g, workdir / 'xml')
with zipfile.ZipFile(zip_path) as zip:
if not Path(workdir / arch).is_dir():
print(f"unzipping from {zip_path}", flush=True)
zip.extractall(workdir / arch)

View File

@ -1,93 +0,0 @@
#!/usr/bin/python3
#
# This file is part of MagiskOnWSALocal.
#
# MagiskOnWSALocal is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# MagiskOnWSALocal is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see <https://www.gnu.org/licenses/>.
#
# Copyright (C) 2022 LSPosed Contributors
#
from __future__ import annotations
from io import TextIOWrapper
from typing import OrderedDict
from pathlib import Path
import sys
class Prop(OrderedDict):
def __init__(self, file: TextIOWrapper) -> None:
super().__init__()
for i, line in enumerate(file.read().splitlines(False)):
if '=' in line:
k, v = line.split('=', 2)
self[k] = v
else:
self[f".{i}"] = line
def __str__(self) -> str:
return '\n'.join([v if k.startswith('.') else f"{k}={v}" for k, v in self.items()])
def __iadd__(self, other: str) -> Prop:
self[f".{len(self)}"] = other
return self
new_props = {
("product", "brand"): "google",
("product", "manufacturer"): "Google",
("build", "product"): "redfin",
("product", "name"): "redfin",
("product", "device"): "redfin",
("product", "model"): "Pixel 5",
("build", "flavor"): "redfin-user"
}
def description(sec: str, p: Prop) -> str:
return f"{p[f'ro.{sec}.build.flavor']} {p[f'ro.{sec}.build.version.release_or_codename']} {p[f'ro.{sec}.build.id']} {p[f'ro.{sec}.build.version.incremental']} {p[f'ro.{sec}.build.tags']}"
def fingerprint(sec: str, p: Prop) -> str:
return f"""{p[f"ro.product.{sec}.brand"]}/{p[f"ro.product.{sec}.name"]}/{p[f"ro.product.{sec}.device"]}:{p[f"ro.{sec}.build.version.release"]}/{p[f"ro.{sec}.build.id"]}/{p[f"ro.{sec}.build.version.incremental"]}:{p[f"ro.{sec}.build.type"]}/{p[f"ro.{sec}.build.tags"]}"""
def fix_prop(sec, prop):
if not Path(prop).is_file():
return
print(f"fixing {prop}", flush=True)
with open(prop, 'r') as f:
p = Prop(f)
p += "# extra prop added by MagiskOnWSA"
for k, v in new_props.items():
p[f"ro.{k[0]}.{k[1]}"] = v
if k[0] == "build":
p[f"ro.{sec}.{k[0]}.{k[1]}"] = v
elif k[0] == "product":
p[f"ro.{k[0]}.{sec}.{k[1]}"] = v
p["ro.build.description"] = description(sec, p)
p[f"ro.build.fingerprint"] = fingerprint(sec, p)
p[f"ro.{sec}.build.description"] = description(sec, p)
p[f"ro.{sec}.build.fingerprint"] = fingerprint(sec, p)
p[f"ro.bootimage.build.fingerprint"] = fingerprint(sec, p)
with open(prop, 'w') as f:
f.write(str(p))
sys_path = sys.argv[1]
for sec, prop in {"system": sys_path+"/system/build.prop", "product": sys_path+"/product/build.prop", "system_ext": sys_path+"/system_ext/build.prop", "vendor": sys_path+"/vendor/build.prop", "odm": sys_path+"/vendor/odm/etc/build.prop"}.items():
fix_prop(sec, prop)

View File

@ -1,74 +0,0 @@
#!/usr/bin/python3
#
# This file is part of MagiskOnWSALocal.
#
# MagiskOnWSALocal is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# MagiskOnWSALocal is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see <https://www.gnu.org/licenses/>.
#
# Copyright (C) 2022 LSPosed Contributors
#
import sys
import requests
import json
import re
from pathlib import Path
arch = sys.argv[1]
brand = sys.argv[2]
variant = sys.argv[3]
download_dir = Path.cwd().parent / \
"download" if sys.argv[4] == "" else Path(sys.argv[4]).resolve()
tempScript = sys.argv[5]
android_api = sys.argv[6]
file_name = sys.argv[7]
print(
f"Generating {brand} download link: arch={arch} variant={variant}", flush=True)
abi_map = {"x64": "x86_64", "arm64": "arm64"}
android_api_map = {"30": "11.0", "32": "12.1", "33": "13.0"}
release = android_api_map[android_api]
if brand == "OpenGApps":
# Use Android 12.1 build of OpenGApps (also supports more variants like Full)
if arch == "x64" and variant == "pico":
link = "http://peternjeim.ddns.net:8081/ipfs/QmPDiAyqUvZHo9QU7WfoEE9XMqC8ppGyUsSwKQY7chfwHX"
elif arch == "x64" and variant == "full":
link = "http://peternjeim.ddns.net:8081/ipfs/QmULfSMwWuukQR7r9KEvwD2XzsChHTvpswmNqJyEU64jwM"
# Use official Android 11.0 build of OpenGApps (since I didn't build all variants)
else:
try:
res = requests.get(f"https://api.opengapps.org/list")
j = json.loads(res.content)
link = {i["name"]: i for i in j["archs"][abi_map[arch]]
["apis"][release]["variants"]}[variant]["zip"]
# print(f"JSON={j}", flush=True)
DATE=j["archs"][abi_map[arch]]["date"]
print(f"DATE={DATE}", flush=True)
except Exception:
print("Failed to fetch from OpenGApps API, fallbacking to SourceForge RSS...")
res = requests.get(
f'https://sourceforge.net/projects/opengapps/rss?path=/{abi_map[arch]}&limit=100')
link = re.search(f'https://.*{abi_map[arch]}/.*{release}.*{variant}.*\.zip/download', res.text).group().replace(
'.zip/download', '.zip').replace('sourceforge.net/projects/opengapps/files', 'downloads.sourceforge.net/project/opengapps')
elif brand == "MindTheGapps":
res = requests.get(
f'https://sourceforge.net/projects/wsa-mtg/rss?path=/{abi_map[arch]}&limit=100')
link = re.search(f'https://.*{release}.*{abi_map[arch]}.*\.zip/download', res.text).group().replace(
'.zip/download', '.zip').replace('sourceforge.net/projects/wsa-mtg/files', 'downloads.sourceforge.net/project/wsa-mtg')
print(f"download link: {link}", flush=True)
with open(download_dir/tempScript, 'a') as f:
f.writelines(f'{link}\n')
f.writelines(f' dir={download_dir}\n')
f.writelines(f' out={file_name}\n')

View File

@ -1,55 +0,0 @@
#!/usr/bin/python3
#
# This file is part of MagiskOnWSALocal.
#
# MagiskOnWSALocal is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# MagiskOnWSALocal is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see <https://www.gnu.org/licenses/>.
#
# Copyright (C) 2022 LSPosed Contributors
#
import os
import sys
import json
import requests
from pathlib import Path
magisk_ver = sys.argv[1]
download_dir = Path.cwd().parent / "download" if sys.argv[2] == "" else Path(sys.argv[2]).resolve()
tempScript = sys.argv[3]
print(f"Generating Magisk download link: release type={magisk_ver}", flush=True)
if not magisk_ver:
magisk_ver = "stable"
if magisk_ver == "stable" or magisk_ver == "beta" or magisk_ver == "canary" or magisk_ver == "debug":
try:
magisk_link = json.loads(requests.get(
f"https://github.com/topjohnwu/magisk-files/raw/master/{magisk_ver}.json").content)['magisk']['link']
magisk_version = json.loads(requests.get(
f"https://github.com/topjohnwu/magisk-files/raw/master/{magisk_ver}.json").content)['magisk']['version']
with open(os.environ['GITHUB_ENV'], 'a') as environ_file:
environ_file.write(f'MAGISK_VERSION={magisk_version}\n')
except Exception:
print("Failed to fetch from GitHub API, fallbacking to jsdelivr...")
magisk_link = json.loads(requests.get(
f"https://fastly.jsdelivr.net/gh/topjohnwu/magisk-files@master/{magisk_ver}.json").content)['magisk']['link']
magisk_version = json.loads(requests.get(
f"https://fastly.jsdelivr.net/gh/topjohnwu/magisk-files@master/{magisk_ver}.json").content)['magisk']['version']
with open(os.environ['GITHUB_ENV'], 'a') as environ_file:
environ_file.write(f'MAGISK_VERSION={magisk_version}\n')
print(f"download link: {magisk_link}", flush=True)
with open(download_dir/tempScript, 'a') as f:
f.writelines(f'{magisk_link}\n')
f.writelines(f' dir={download_dir}\n')
f.writelines(f' out=magisk-{magisk_ver}.zip\n')

View File

@ -1,121 +0,0 @@
#!/usr/bin/python3
#
# This file is part of MagiskOnWSALocal.
#
# MagiskOnWSALocal is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# MagiskOnWSALocal is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see <https://www.gnu.org/licenses/>.
#
# Copyright (C) 2022 LSPosed Contributors
#
import sys
import requests
from xml.dom import minidom
import html
import warnings
import re
from pathlib import Path
import os
warnings.filterwarnings("ignore")
arch = sys.argv[1]
release_name_map = {"retail": "Retail", "RP": "Release Preview",
"WIS": "Insider Slow", "WIF": "Insider Fast"}
release_type = sys.argv[2] if sys.argv[2] != "" else "Retail"
release_name = release_name_map[release_type]
download_dir = Path.cwd().parent / "download" if sys.argv[3] == "" else Path(sys.argv[3]).resolve()
tempScript = sys.argv[4]
cat_id = '858014f3-3934-4abe-8078-4aa193e74ca8'
print(f"Generating WSA download link: arch={arch} release_type={release_name}", flush=True)
with open(Path.cwd().parent / ("xml/GetCookie.xml"), "r") as f:
cookie_content = f.read()
out = requests.post(
'https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx',
data=cookie_content,
headers={'Content-Type': 'application/soap+xml; charset=utf-8'},
verify=False
)
doc = minidom.parseString(out.text)
cookie = doc.getElementsByTagName('EncryptedData')[0].firstChild.nodeValue
with open(Path.cwd().parent / "xml/WUIDRequest.xml", "r") as f:
cat_id_content = f.read().format(cookie, cat_id, release_type)
out = requests.post(
'https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx',
data=cat_id_content,
headers={'Content-Type': 'application/soap+xml; charset=utf-8'},
verify=False
)
doc = minidom.parseString(html.unescape(out.text))
filenames = {}
for node in doc.getElementsByTagName('Files'):
filenames[node.parentNode.parentNode.getElementsByTagName(
'ID')[0].firstChild.nodeValue] = f"{node.firstChild.attributes['InstallerSpecificIdentifier'].value}_{node.firstChild.attributes['FileName'].value}"
pass
identities = []
for node in doc.getElementsByTagName('SecuredFragment'):
filename = filenames[node.parentNode.parentNode.parentNode.getElementsByTagName('ID')[
0].firstChild.nodeValue]
update_identity = node.parentNode.parentNode.firstChild
identities += [(update_identity.attributes['UpdateID'].value,
update_identity.attributes['RevisionNumber'].value, filename)]
with open(Path.cwd().parent / "xml/FE3FileUrl.xml", "r") as f:
file_content = f.read()
if not download_dir.is_dir():
download_dir.mkdir()
tmpdownlist = open(download_dir/tempScript, 'a')
for i, v, f in identities:
if re.match(f"Microsoft\.UI\.Xaml\..*_{arch}_.*\.appx", f):
out_file_name = f"Microsoft.UI.Xaml_{arch}.appx"
out_file = download_dir / out_file_name
# elif re.match(f"Microsoft\.VCLibs\..+\.UWPDesktop_.*_{arch}_.*\.appx", f):
# out_file_name = f"Microsoft.VCLibs.140.00.UWPDesktop_{arch}.appx"
# out_file = download_dir / out_file_name
elif re.match(f"MicrosoftCorporationII\.WindowsSubsystemForAndroid_.*\.msixbundle", f):
wsa_long_ver = re.search(u'\d{4}.\d{5}.\d{1,}.\d{1,}', f).group()
print(f'WSA Version={wsa_long_ver}\n')
main_ver = wsa_long_ver.split(".")[0]
with open(os.environ['WSA_WORK_ENV'], 'a') as environ_file:
environ_file.write(f"DOWN_WSA_VERSION={wsa_long_ver}\n")
environ_file.write(f"DOWN_WSA_MAIN_VERSION={main_ver}\n")
out_file_name = f"wsa-{release_type}.zip"
out_file = download_dir / out_file_name
else:
continue
out = requests.post(
'https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx/secured',
data=file_content.format(i, v, release_type),
headers={'Content-Type': 'application/soap+xml; charset=utf-8'},
verify=False
)
doc = minidom.parseString(out.text)
for l in doc.getElementsByTagName("FileLocation"):
url = l.getElementsByTagName("Url")[0].firstChild.nodeValue
if len(url) != 99:
print(f"download link: {url} to {out_file}", flush=True)
tmpdownlist.writelines(url + '\n')
tmpdownlist.writelines(f' dir={download_dir}\n')
tmpdownlist.writelines(f' out={out_file_name}\n')
tmpdownlist.writelines(f'https://aka.ms/Microsoft.VCLibs.{arch}.14.00.Desktop.appx\n')
tmpdownlist.writelines(f' dir={download_dir}\n')
tmpdownlist.close()

View File

@ -1,106 +0,0 @@
name: Android 13 Build
on:
workflow_dispatch:
inputs:
arch:
type: choice
description: Architecture of WSA.
required: true
options: [x64, arm64]
default: x64
release-type:
type: choice
description: Release type of WSA. RP means Release Preview, WIS means Insider Slow, WIF means Insider Fas
required: true
options: ["retail","RP","WIS","WIF"]
default: "WIF"
magisk-ver:
type: choice
description: Magisk version.
required: true
options: ["delta"]
default: "delta"
gapps-brand:
type: choice
description: GApps brand. none for no integration of GApps
required: true
options: ["OpenGApps","MindTheGapps","none"]
default: "OpenGApps"
gapps-variant:
type: choice
description: GApps variant.
required: true
options: ["super","stock","full","mini","micro","nano","pico","tvstock","tvmini"]
default: "pico"
root-sol:
type: choice
description: Root solution. none means no root.
required: true
options: ["magisk","none"]
default: "magisk"
# remove-amazon:
# description: Remove Amazon Appstore from the system
# required: true
# type: boolean
# default: true
compress-format:
type: choice
description: Compress format.
required: true
options: ["zip","7z","xz"]
default: "zip"
jobs:
custbuild:
name: Build WSA
runs-on: ubuntu-latest
steps:
- name: Checkout ♻️
uses: actions/checkout@v3
- name: Install Dependencies 🧑‍🏭
run: |
sudo dpkg --add-architecture i386
sudo mkdir -pm755 /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources
sudo apt-get update -y
sudo apt-get install --install-recommends winehq-staging
sudo apt-get install -y whiptail setools lzip patchelf e2fsprogs python3-pip aria2 p7zip-full attr xz-utils unzip cabextract
sudo wget -P /usr/local/bin/ https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
sudo chmod +x /usr/local/bin/winetricks
wget -P /home/runner/.cache/winetricks/msxml6/ https://raw.githubusercontent.com/${GITHUB_REPOSITORY}/${GITHUB_REF_NAME}/wine/.cache/winetricks/msxml6/msxml6-KB973686-enu-amd64.exe
mkdir -p download >/dev/null 2>&1
wget -P ./download/ https://download.microsoft.com/download/4/7/c/47c6134b-d61f-4024-83bd-b9c9ea951c25/appx/Microsoft.VCLibs.x64.14.00.Desktop.appx
wget -P ./download/ https://cdn.glitch.global/5649a8d3-cad1-41a6-a507-798f8c4f8bb2/Microsoft.UI.Xaml_x64.appx
pip list --disable-pip-version-check | grep -E "^requests " >/dev/null 2>&1 || python3 -m pip install requests
winetricks list-installed | grep -E "^msxml6" >/dev/null 2>&1 || winetricks msxml6 || abort
- name: Retrieve the user_code for WSA Preview Program, if exists
env:
USER_CODE: ${{ secrets.USER_CODE }}
if: env.USER_CODE != null
run: echo "user_code=$USER_CODE" > ./download/.ms_account
- name: Manually download the latest build from WSA Preview Program
env:
USER_CODE: ${{ secrets.USER_CODE }}
if: env.USER_CODE == null
run: |
wget -P ./download/ https://github.com/Howard20181/WSA-bundle/releases/download/v2211.40000.10.0/MicrosoftCorporationII.WindowsSubsystemForAndroid_2211.40000.10.0_neutral___8wekyb3d8bbwe.7z
cd ./download/
7z x MicrosoftCorporationII.WindowsSubsystemForAndroid_2211.40000.10.0_neutral___8wekyb3d8bbwe.7z
mv MicrosoftCorporationII.WindowsSubsystemForAndroid_2211.40000.10.0_neutral___8wekyb3d8bbwe.Msixbundle wsa-WIF.zip
rm MicrosoftCorporationII.WindowsSubsystemForAndroid_2211.40000.10.0_neutral___8wekyb3d8bbwe.7z
- name: Grant exec permission to script 👑
run: chmod +x ./scripts/build.sh
- name: Build WSA 🏗️
id: wsa
run: ./scripts/build.sh --arch ${{ inputs.arch }} --release-type ${{ inputs.release-type }} --magisk-ver ${{ inputs.magisk-ver }} --gapps-brand ${{ inputs.gapps-brand }} --gapps-variant ${{ inputs.gapps-variant }} --root-sol ${{ inputs.root-sol }} --remove-amazon --skip-download-wsa --compress-format ${{ inputs.compress-format }}
- name: Upload Artifact 🤌
uses: actions/upload-artifact@v3
with:
name: ${{ steps.wsa.outputs.artifact }}
path: ./output/${{ steps.wsa.outputs.artifact }}.${{ inputs.compress-format }}

View File

@ -1,288 +0,0 @@
name: Build MagiskOnWSA
on:
workflow_dispatch:
inputs:
arch:
description: "WSA Architecture"
required: true
default: "x86_64"
type: choice
options:
- x86_64
- ARM64
release_type:
description: "WSA Release Channel"
required: true
default: "Dev Channel"
type: choice
options:
- General Availability Channel
- Release Preview Channel
- Beta Channel
- Dev Channel
magisk_ver:
description: "Magisk Version"
required: true
default: "Stable"
type: choice
options:
- None
- Stable
- Beta
- Canary
- Debug
- Custom
magisk_url:
description: "Custom Magisk APK/ZIP URL"
required: false
type: string
gapps_var:
description: "GApps Variant"
required: true
default: "MindTheGapps"
type: choice
options:
- None
- Pico
- Full
- MindTheGapps
- Custom (OpenGApps)
- Custom (MindTheGapps)
gapps_url:
description: "Custom GApps ZIP URL"
required: false
type: string
remove_amazon:
description: "Remove Amazon AppStore"
required: true
default: true
type: boolean
# nofix_props:
# description: Props Remain Unfixed
# required: true
# default: false
# type: boolean
# skip_download_wsa:
# description: Skip WSA Download
# required: true
# default: false
# type: boolean
compression:
description: "Compression Algorithm"
required: true
default: "ZIP"
type: choice
options:
- ZIP
- 7-Zip
- XZ
tag:
description: "Release Tag Name"
required: true
default: "WSA"
type: string
prerelease:
description: "Release as Prerelease"
required: false
default: false
type: boolean
permissions:
contents: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Dependencies
working-directory: ./scripts
run: |
sudo apt update && sudo apt -y install setools lzip wine winetricks patchelf e2fsprogs python3-pip aria2 p7zip-full attr xz-utils unzip
python3 -m pip install requests
cp -r ../wine/.cache/* ~/.cache
winetricks msxml6
- name: Build MagiskOnWSA
working-directory: ./scripts
run: |
DOWNLOAD_DIR=../download
DOWNLOAD_CONF_NAME=download.list
mkdir -p "$DOWNLOAD_DIR"
declare -A opts=( ["ARCH,x86_64"]="x64" ["ARCH,ARM64"]="arm64" ["RELEASE_TYPE,General Availability Channel"]="retail" ["RELEASE_TYPE,Release Preview Channel"]="RP" ["RELEASE_TYPE,Beta Channel"]="WIS" ["RELEASE_TYPE,Dev Channel"]="WIF" ["MAGISK_VER,Stable"]="stable" ["MAGISK_VER,Beta"]="beta" ["MAGISK_VER,Canary"]="canary" ["MAGISK_VER,Debug"]="debug" ["MAGISK_VER,Custom"]="--magisk-custom" ["GAPPS_VAR,None"]="none" ["GAPPS_VAR,Pico"]="pico" ["GAPPS_VAR,Full"]="full" ["REMOVE_AMAZON,true"]="--remove-amazon" ["NOFIX_PROPS,true"]="--nofix-props" ["SKIP_DOWNLOAD_WSA,true"]="--skip-download-wsa" ["COMPRESSION,ZIP"]="zip" ["COMPRESSION,7-Zip"]="7z" ["COMPRESSION,XZ"]="xz" )
ARCH="${opts[ARCH,${{ inputs.arch }}]}"
RELEASE_TYPE="${opts[RELEASE_TYPE,${{ inputs.release_type }}]}"
if [[ "${{ inputs.magisk_ver }}" != "None" ]]; then
ROOT_SOL="magisk"
if [[ "${{ inputs.magisk_ver }}" != "Custom" ]]; then
MAGISK_VER="${opts[MAGISK_VER,${{ inputs.magisk_ver }}]}"
else
echo -e "${{ inputs.magisk_url }}\n out=magisk-debug.zip" > "$DOWNLOAD_DIR"/"$DOWNLOAD_CONF_NAME"
if ! aria2c --no-conf --log-level=info --log="$DOWNLOAD_DIR/aria2_custom_magisk_download.log" -x16 -s16 -j5 -c -R -m0 --async-dns=false --check-integrity --continue --allow-overwrite --conditional-get -d"$DOWNLOAD_DIR" -i"$DOWNLOAD_DIR"/"$DOWNLOAD_CONF_NAME"; then
echo "Magisk download error!"
exit 1
fi
CUSTOM_MAGISK="${opts[MAGISK_VER,Custom]}"
MAGISK_VER="${opts[MAGISK_VER,Debug]}"
fi
else
ROOT_SOL="none"
MAGISK_VER="${opts[MAGISK_VER,Stable]}"
fi
if [[ "${{ inputs.arch }}" == "x86_64" ]]; then
GAPPS_VAR="${opts[GAPPS_VAR,${{ inputs.gapps_var }}]}"
else
# TODO: keep it 11.0 since official opengapps does not support 12+ yet
# As soon as opengapps is available for 12+, we need to get the sdk/release from build.prop and download the corresponding version
if [[ "${{ inputs.gapps_var }}" != "None" ]]; then
GAPPS_VAR="${opts[GAPPS_VAR,Pico]}"
else
GAPPS_VAR="${opts[GAPPS_VAR,${{ inputs.gapps_var }}]}"
fi
fi
if [[ "${{ inputs.gapps_var }}" != "None" ]]; then
if [[ "${{ inputs.gapps_var }}" != *"MindTheGapps"* ]]; then
GAPPS_BRAND="OpenGApps"
if [[ "${{ inputs.gapps_var }}" == "Custom (OpenGApps)" ]]; then
if [[ -z "${${{ inputs.gapps_url }}+x}" ]]; then
GAPPS_VARIANT_MAP=(
"super"
"stock"
"full"
"mini"
"micro"
"nano"
"pico"
"tvstock"
"tvmini"
)
for file in "$DOWNLOAD_DIR"/OpenGApps-"$ARCH"-*.zip; do
GAPPS_VAR=${file%%\.*}
GAPPS_VAR=${GAPPS_VAR##*-}
list_count=${#GAPPS_VARIANT_MAP[@]}
for i in "${GAPPS_VARIANT_MAP[@]}"; do
if [[ "$GAPPS_VAR" == "$i" ]]; then
echo "INFO: GApps Variant: $GAPPS_VAR"
valid_gapps_var="true"
break
fi
((list_count--))
if (("$list_count" <= 0)); then
echo "Invalid GApps Variant: $GAPPS_VAR"
fi
done
if [[ "$valid_gapps_var" == "true" ]]; then
break
fi
done
if [[ "$valid_gapps_var" != "true" ]]; then
echo "Missing OpenGApps file!"
exit 1
fi
echo "opengapps_var=${GAPPS_VAR^}" >> $GITHUB_ENV
else
GAPPS_VAR="pico"
echo -e "${{ inputs.gapps_url }}\n out=OpenGApps-"$ARCH"-"$GAPPS_VAR".zip" > -i"$DOWNLOAD_DIR"/"$DOWNLOAD_CONF_NAME"
if ! aria2c --no-conf --log-level=info --log="$DOWNLOAD_DIR/aria2_gapps_download.log" -x16 -s16 -j5 -c -R -m0 --async-dns=false --check-integrity --continue --allow-overwrite --conditional-get -d"$DOWNLOAD_DIR" -i"$DOWNLOAD_DIR"/"$DOWNLOAD_CONF_NAME"; then
echo "OpenGApps download error!"
exit 1
fi
echo "opengapps_var=custom" >> $GITHUB_ENV
fi
fi
else
GAPPS_VAR="pico"
GAPPS_BRAND="MindTheGapps"
if [[ "${{ inputs.gapps_var }}" == "Custom (MindTheGapps)" ]]; then
if [[ -n "${${{ inputs.gapps_url }}+x}" ]]; then
echo -e "${{ inputs.gapps_url }}\n out=MindTheGapps-"$ARCH".zip" > -i"$DOWNLOAD_DIR"/"$DOWNLOAD_CONF_NAME"
if ! aria2c --no-conf --log-level=info --log="$DOWNLOAD_DIR/aria2_gapps_download.log" -x16 -s16 -j5 -c -R -m0 --async-dns=false --check-integrity --continue --allow-overwrite --conditional-get -d"$DOWNLOAD_DIR" -i"$DOWNLOAD_DIR"/"$DOWNLOAD_CONF_NAME"; then
echo "MindTheGapps download error!"
exit 1
fi
fi
fi
fi
else
GAPPS_VAR="pico"
GAPPS_BRAND="none"
fi
REMOVE_AMAZON="${opts[REMOVE_AMAZON,${{ inputs.remove_amazon }}]}"
NOFIX_PROPS="${opts[NOFIX_PROPS,${{ inputs.nofix_props }}]}"
SKIP_DOWNLOAD_WSA="${opts[SKIP_DOWNLOAD_WSA,${{ inputs.skip_download_wsa }}]}"
COMPRESSION="--compress --compress-format ${opts[COMPRESSION,${{ inputs.compression }}]}"
if [[ "${{ inputs.gapps_var }}" == "Custom"* ]]; then
echo "Generate Download Links"
python3 generateWSALinks.py "$ARCH" "$RELEASE_TYPE" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME"
if [[ "${{ inputs.magisk_ver }}" != "Custom" ]]; then
python3 generateMagiskLink.py "$MAGISK_VER" "$DOWNLOAD_DIR" "$DOWNLOAD_CONF_NAME"
fi
echo "Download Artifacts"
if ! aria2c --no-conf --log-level=info --log="$DOWNLOAD_DIR/aria2_download.log" -x16 -s16 -j5 -c -R -m0 --async-dns=false --check-integrity --continue --allow-overwrite --conditional-get -d"$DOWNLOAD_DIR" -i"$DOWNLOAD_DIR"/"$DOWNLOAD_CONF_NAME"; then
echo "Artifact download error!"
exit 1
fi
OFFLINE="--offline"
fi
COMMAND_LINE=(--arch "$ARCH" --release-type "$RELEASE_TYPE" --root-sol "$ROOT_SOL" --magisk-ver "$MAGISK_VER" "$CUSTOM_MAGISK" --gapps-brand "$GAPPS_BRAND" --gapps-variant "$GAPPS_VAR" "$COMPRESSION" "$REMOVE_AMAZON" "$NOFIX_PROPS" "$SKIP_DOWNLOAD_WSA" "$OFFLINE")
echo "COMMAND_LINE=${COMMAND_LINE[*]}"
chmod +x ./build.sh
./build.sh $(echo "${COMMAND_LINE[@]}")
- name: Generate Release Asset Name
working-directory: ./output
run: |
declare -A magisk_vers=( ["Stable"]="stable" ["Beta"]="beta" ["Canary"]="canary" ["Debug"]="debug" )
if [[ "${{ inputs.magisk_ver }}" == "None" ]]; then
magiskVer=""
elif [[ "${{ inputs.magisk_ver }}" == "Custom" ]]; then
magiskVer="_Magisk-Custom"
else
magiskVer="_Magisk-${{ env.MAGISK_VERSION }}"
fi
export magiskVer
if [[ "${{ inputs.gapps_var }}" == "None" ]]; then
gappsVar=""
elif [[ "${{ inputs.gapps_var }}" == *"MindTheGapps"* ]]; then
gappsVar="_MindTheGapps"
elif [[ "${{ inputs.gapps_var }}" == "Custom (OpenGApps)" ]]; then
gappsVar="_OpenGApps-${{ env.opengapps_var }}"
else
gappsVar="_OpenGApps-${{ inputs.gapps_var }}"
fi
export gappsVar
if [[ "${{ inputs.remove_amazon }}" == "true" ]]; then
amazon=""
else
amazon="_Amazon-AppStore"
fi
export amazon
echo "release_asset_name=WSA_${{ env.WSA_VER }}_${{ inputs.arch }}$magiskVer$gappsVar${amazon}" >> $GITHUB_ENV
find . -maxdepth 1 -type f -name 'WSA.*' -exec bash -c 'mv "$1" "WSA_${{ env.WSA_VER }}_${{ inputs.arch }}${magiskVer}${gappsVar}${amazon}${1##*WSA}"' _ {} \;
- name: Upload Asset
uses: softprops/action-gh-release@v1
with:
files: ./output/${{ env.release_asset_name }}.*
name: WSA
tag_name: ${{ inputs.tag }}
prerelease: ${{ inputs.prerelease }}

View File

@ -1,54 +0,0 @@
name: Update MagiskOnWSA
on:
schedule:
- cron: "0 0 * * 4"
workflow_dispatch:
permissions:
actions: write
contents: write
jobs:
update:
runs-on: ubuntu-latest
steps:
- name: Rename tag
run: |
URL="$(curl -s -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/releases/tags/latest | jq -r .url)"
curl -s -X PATCH -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" $URL -d '{"tag_name":"outdated"}' > /dev/null
- name: Delete tag
run: |
curl -s -X DELETE -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/git/refs/tags/latest
- name: Update MagiskOnWSA
run: |
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"x86_64","magisk_ver":"None","gapps_var":"None","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"x86_64","magisk_ver":"None","gapps_var":"Pico","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"x86_64","magisk_ver":"None","gapps_var":"Full","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"x86_64","magisk_ver":"None","gapps_var":"MindTheGapps","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"x86_64","magisk_ver":"Stable","gapps_var":"None","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"x86_64","magisk_ver":"Stable","gapps_var":"Pico","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"x86_64","magisk_ver":"Stable","gapps_var":"Full","tag":"latest","prerelease":"false"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"x86_64","magisk_ver":"Stable","gapps_var":"MindTheGapps","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"x86_64","magisk_ver":"Canary","gapps_var":"None","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"x86_64","magisk_ver":"Canary","gapps_var":"Pico","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"x86_64","magisk_ver":"Canary","gapps_var":"Full","tag":"latest","prerelease":"false"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"x86_64","magisk_ver":"Canary","gapps_var":"MindTheGapps","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"ARM64","magisk_ver":"None","gapps_var":"None","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"ARM64","magisk_ver":"None","gapps_var":"Pico","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"ARM64","magisk_ver":"None","gapps_var":"MindTheGapps","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"ARM64","magisk_ver":"Stable","gapps_var":"None","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"ARM64","magisk_ver":"Stable","gapps_var":"Pico","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"ARM64","magisk_ver":"Stable","gapps_var":"MindTheGapps","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"ARM64","magisk_ver":"Canary","gapps_var":"None","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"ARM64","magisk_ver":"Canary","gapps_var":"Pico","tag":"latest","prerelease":"true"}}'
curl -s -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/actions/workflows/build.yaml/dispatches -d '{"ref":"master","inputs":{"arch":"ARM64","magisk_ver":"Canary","gapps_var":"MindTheGapps","tag":"latest","prerelease":"true"}}'
sleep 20m
- name: Publish release
run: |
URL="$(curl -s -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/releases/tags/latest | jq -r .url)"
curl -s -X PATCH -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" $URL -d '{"prerelease":false}' > /dev/null
- name: Delete release
run: |
ID="$(curl -s -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/releases/tags/outdated | jq -r .id)"
curl -s -X DELETE -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/releases/$ID
curl -s -X DELETE -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/git/refs/tags/outdated

View File

@ -1,40 +0,0 @@
<s:Envelope
xmlns:a="http://www.w3.org/2005/08/addressing"
xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header>
<a:Action s:mustUnderstand="1">http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/GetExtendedUpdateInfo2</a:Action>
<a:MessageID>urn:uuid:2cc99c2e-3b3e-4fb1-9e31-0cd30e6f43a0</a:MessageID>
<a:To s:mustUnderstand="1">https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx/secured</a:To>
<o:Security s:mustUnderstand="1"
xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<Timestamp
xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<Created>2017-08-01T00:29:01.868Z</Created>
<Expires>2017-08-01T00:34:01.868Z</Expires>
</Timestamp>
<wuws:WindowsUpdateTicketsToken wsu:id="ClientMSA"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wuws="http://schemas.microsoft.com/msus/2014/10/WindowsUpdateAuthorization">
<TicketType Name="MSA" Version="1.0" Policy="MBI_SSL">
<Device>dAA9AEUAdwBBAHcAQQBzAE4AMwBCAEEAQQBVADEAYgB5AHMAZQBtAGIAZQBEAFYAQwArADMAZgBtADcAbwBXAHkASAA3AGIAbgBnAEcAWQBtAEEAQQBMAGoAbQBqAFYAVQB2AFEAYwA0AEsAVwBFAC8AYwBDAEwANQBYAGUANABnAHYAWABkAGkAegBHAGwAZABjADEAZAAvAFcAeQAvAHgASgBQAG4AVwBRAGUAYwBtAHYAbwBjAGkAZwA5AGoAZABwAE4AawBIAG0AYQBzAHAAVABKAEwARAArAFAAYwBBAFgAbQAvAFQAcAA3AEgAagBzAEYANAA0AEgAdABsAC8AMQBtAHUAcgAwAFMAdQBtAG8AMABZAGEAdgBqAFIANwArADQAcABoAC8AcwA4ADEANgBFAFkANQBNAFIAbQBnAFIAQwA2ADMAQwBSAEoAQQBVAHYAZgBzADQAaQB2AHgAYwB5AEwAbAA2AHoAOABlAHgAMABrAFgAOQBPAHcAYQB0ADEAdQBwAFMAOAAxAEgANgA4AEEASABzAEoAegBnAFQAQQBMAG8AbgBBADIAWQBBAEEAQQBpAGcANQBJADMAUQAvAFYASABLAHcANABBAEIAcQA5AFMAcQBhADEAQgA4AGsAVQAxAGEAbwBLAEEAdQA0AHYAbABWAG4AdwBWADMAUQB6AHMATgBtAEQAaQBqAGgANQBkAEcAcgBpADgAQQBlAEUARQBWAEcAbQBXAGgASQBCAE0AUAAyAEQAVwA0ADMAZABWAGkARABUAHoAVQB0AHQARQBMAEgAaABSAGYAcgBhAGIAWgBsAHQAQQBUAEUATABmAHMARQBGAFUAYQBRAFMASgB4ADUAeQBRADgAagBaAEUAZQAyAHgANABCADMAMQB2AEIAMgBqAC8AUgBLAGEAWQAvAHEAeQB0AHoANwBUAHYAdAB3AHQAagBzADYAUQBYAEIAZQA4AHMAZwBJAG8AOQBiADUAQQBCADcAOAAxAHMANgAvAGQAUwBFAHgATgBEAEQAYQBRAHoAQQBYAFAAWABCAFkAdQBYAFEARQBzAE8AegA4AHQAcgBpAGUATQBiAEIAZQBUAFkAOQBiAG8AQgBOAE8AaQBVADcATgBSAEYAOQAzAG8AVgArAFYAQQBiAGgAcAAwAHAAUgBQAFMAZQBmAEcARwBPAHEAdwBTAGcANwA3AHMAaAA5AEoASABNAHAARABNAFMAbgBrAHEAcgAyAGYARgBpAEMAUABrAHcAVgBvAHgANgBuAG4AeABGAEQAbwBXAC8AYQAxAHQAYQBaAHcAegB5AGwATABMADEAMgB3AHUAYgBtADUAdQBtAHAAcQB5AFcAYwBLAFIAagB5AGgAMgBKAFQARgBKAFcANQBnAFgARQBJADUAcAA4ADAARwB1ADIAbgB4AEwAUgBOAHcAaQB3AHIANwBXAE0AUgBBAFYASwBGAFcATQBlAFIAegBsADkAVQBxAGcALwBwAFgALwB2AGUATAB3AFMAawAyAFMAUwBIAGYAYQBLADYAagBhAG8AWQB1AG4AUgBHAHIAOABtAGIARQBvAEgAbABGADYASgBDAGEAYQBUAEIAWABCAGMAdgB1AGUAQwBKAG8AOQA4AGgAUgBBAHIARwB3ADQAKwBQAEgAZQBUAGIATgBTAEUAWABYAHoAdgBaADYAdQBXADUARQBBAGYAZABaAG0AUwA4ADgAVgBKAGMAWgBhAEYASwA3AHgAeABnADAAdwBvAG4ANwBoADAAeABDADYAWgBCADAAYwBZAGoATAByAC8ARwBlAE8AegA5AEcANABRAFUASAA5AEUAawB5ADAAZAB5AEYALwByAGUAVQAxAEkAeQBpAGEAcABwAGgATwBQADgAUwAyAHQANABCAHIAUABaAFgAVAB2AEMAMABQADcAegBPACsAZgBHAGsAeABWAG0AKwBVAGYAWgBiAFEANQA1AHMAdwBFAD0AJgBwAD0A</Device>
</TicketType>
</wuws:WindowsUpdateTicketsToken>
</o:Security>
</s:Header>
<s:Body>
<GetExtendedUpdateInfo2
xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService">
<updateIDs>
<UpdateIdentity>
<UpdateID>{}</UpdateID>
<RevisionNumber>{}</RevisionNumber>
</UpdateIdentity>
</updateIDs>
<infoTypes>
<XmlUpdateFragmentType>FileUrl</XmlUpdateFragmentType>
<XmlUpdateFragmentType>FileDecryption</XmlUpdateFragmentType>
</infoTypes>
<deviceAttributes>BranchReadinessLevel=CB;CurrentBranch=rs_prerelease;OEMModel=Virtual Machine;FlightRing={};AttrDataVer=21;SystemManufacturer=Microsoft Corporation;InstallLanguage=en-US;OSUILocale=en-US;InstallationType=Client;FlightingBranchName=external;FirmwareVersion=Hyper-V UEFI Release v2.5;SystemProductName=Virtual Machine;OSSkuId=48;FlightContent=Branch;App=WU;OEMName_Uncleaned=Microsoft Corporation;AppVer=10.0.22621.900;OSArchitecture=AMD64;SystemSKU=None;UpdateManagementGroup=2;IsFlightingEnabled=1;IsDeviceRetailDemo=0;TelemetryLevel=3;OSVersion=10.0.22621.900;DeviceFamily=Windows.Desktop;</deviceAttributes>
</GetExtendedUpdateInfo2>
</s:Body>
</s:Envelope>

View File

@ -1,27 +0,0 @@
<Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2003/05/soap-envelope">
<Header>
<Action d3p1:mustUnderstand="1" xmlns:d3p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/GetCookie</Action>
<MessageID xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:b9b43757-2247-4d7b-ae8f-a71ba8a22386</MessageID>
<To d3p1:mustUnderstand="1" xmlns:d3p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.w3.org/2005/08/addressing">https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx</To>
<Security d3p1:mustUnderstand="1" xmlns:d3p1="http://www.w3.org/2003/05/soap-envelope" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<Timestamp xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<Created>2017-12-02T00:16:15.210Z</Created>
<Expires>2017-12-29T06:25:43.943Z</Expires>
</Timestamp>
<WindowsUpdateTicketsToken d4p1:id="ClientMSA" xmlns:d4p1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns="http://schemas.microsoft.com/msus/2014/10/WindowsUpdateAuthorization">
<TicketType Name="MSA" Version="1.0" Policy="MBI_SSL">
<User />
</TicketType>
</WindowsUpdateTicketsToken>
</Security>
</Header>
<Body>
<GetCookie xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService">
<oldCookie>
</oldCookie>
<lastChange>2015-10-21T17:01:07.1472913Z</lastChange>
<currentTime>2017-12-02T00:16:15.217Z</currentTime>
<protocolVersion>1.40</protocolVersion>
</GetCookie>
</Body>
</Envelope>

View File

@ -1,680 +0,0 @@
<s:Envelope
xmlns:a="http://www.w3.org/2005/08/addressing"
xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header>
<a:Action s:mustUnderstand="1">http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/SyncUpdates</a:Action>
<a:MessageID>urn:uuid:175df68c-4b91-41ee-b70b-f2208c65438e</a:MessageID>
<a:To s:mustUnderstand="1">https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx</a:To>
<o:Security s:mustUnderstand="1"
xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<Timestamp
xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<Created>2017-08-05T02:03:05.038Z</Created>
<Expires>2017-08-05T02:08:05.038Z</Expires>
</Timestamp>
<wuws:WindowsUpdateTicketsToken wsu:id="ClientMSA"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wuws="http://schemas.microsoft.com/msus/2014/10/WindowsUpdateAuthorization">
<TicketType Name="MSA" Version="1.0" Policy="MBI_SSL">
<Device>dAA9AEUAdwBBAHcAQQBzAE4AMwBCAEEAQQBVADEAYgB5AHMAZQBtAGIAZQBEAFYAQwArADMAZgBtADcAbwBXAHkASAA3AGIAbgBnAEcAWQBtAEEAQQBMAGoAbQBqAFYAVQB2AFEAYwA0AEsAVwBFAC8AYwBDAEwANQBYAGUANABnAHYAWABkAGkAegBHAGwAZABjADEAZAAvAFcAeQAvAHgASgBQAG4AVwBRAGUAYwBtAHYAbwBjAGkAZwA5AGoAZABwAE4AawBIAG0AYQBzAHAAVABKAEwARAArAFAAYwBBAFgAbQAvAFQAcAA3AEgAagBzAEYANAA0AEgAdABsAC8AMQBtAHUAcgAwAFMAdQBtAG8AMABZAGEAdgBqAFIANwArADQAcABoAC8AcwA4ADEANgBFAFkANQBNAFIAbQBnAFIAQwA2ADMAQwBSAEoAQQBVAHYAZgBzADQAaQB2AHgAYwB5AEwAbAA2AHoAOABlAHgAMABrAFgAOQBPAHcAYQB0ADEAdQBwAFMAOAAxAEgANgA4AEEASABzAEoAegBnAFQAQQBMAG8AbgBBADIAWQBBAEEAQQBpAGcANQBJADMAUQAvAFYASABLAHcANABBAEIAcQA5AFMAcQBhADEAQgA4AGsAVQAxAGEAbwBLAEEAdQA0AHYAbABWAG4AdwBWADMAUQB6AHMATgBtAEQAaQBqAGgANQBkAEcAcgBpADgAQQBlAEUARQBWAEcAbQBXAGgASQBCAE0AUAAyAEQAVwA0ADMAZABWAGkARABUAHoAVQB0AHQARQBMAEgAaABSAGYAcgBhAGIAWgBsAHQAQQBUAEUATABmAHMARQBGAFUAYQBRAFMASgB4ADUAeQBRADgAagBaAEUAZQAyAHgANABCADMAMQB2AEIAMgBqAC8AUgBLAGEAWQAvAHEAeQB0AHoANwBUAHYAdAB3AHQAagBzADYAUQBYAEIAZQA4AHMAZwBJAG8AOQBiADUAQQBCADcAOAAxAHMANgAvAGQAUwBFAHgATgBEAEQAYQBRAHoAQQBYAFAAWABCAFkAdQBYAFEARQBzAE8AegA4AHQAcgBpAGUATQBiAEIAZQBUAFkAOQBiAG8AQgBOAE8AaQBVADcATgBSAEYAOQAzAG8AVgArAFYAQQBiAGgAcAAwAHAAUgBQAFMAZQBmAEcARwBPAHEAdwBTAGcANwA3AHMAaAA5AEoASABNAHAARABNAFMAbgBrAHEAcgAyAGYARgBpAEMAUABrAHcAVgBvAHgANgBuAG4AeABGAEQAbwBXAC8AYQAxAHQAYQBaAHcAegB5AGwATABMADEAMgB3AHUAYgBtADUAdQBtAHAAcQB5AFcAYwBLAFIAagB5AGgAMgBKAFQARgBKAFcANQBnAFgARQBJADUAcAA4ADAARwB1ADIAbgB4AEwAUgBOAHcAaQB3AHIANwBXAE0AUgBBAFYASwBGAFcATQBlAFIAegBsADkAVQBxAGcALwBwAFgALwB2AGUATAB3AFMAawAyAFMAUwBIAGYAYQBLADYAagBhAG8AWQB1AG4AUgBHAHIAOABtAGIARQBvAEgAbABGADYASgBDAGEAYQBUAEIAWABCAGMAdgB1AGUAQwBKAG8AOQA4AGgAUgBBAHIARwB3ADQAKwBQAEgAZQBUAGIATgBTAEUAWABYAHoAdgBaADYAdQBXADUARQBBAGYAZABaAG0AUwA4ADgAVgBKAGMAWgBhAEYASwA3AHgAeABnADAAdwBvAG4ANwBoADAAeABDADYAWgBCADAAYwBZAGoATAByAC8ARwBlAE8AegA5AEcANABRAFUASAA5AEUAawB5ADAAZAB5AEYALwByAGUAVQAxAEkAeQBpAGEAcABwAGgATwBQADgAUwAyAHQANABCAHIAUABaAFgAVAB2AEMAMABQADcAegBPACsAZgBHAGsAeABWAG0AKwBVAGYAWgBiAFEANQA1AHMAdwBFAD0AJgBwAD0A</Device>
</TicketType>
</wuws:WindowsUpdateTicketsToken>
</o:Security>
</s:Header>
<s:Body>
<SyncUpdates
xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService">
<cookie>
<Expiration>2045-03-11T02:02:48Z</Expiration>
<EncryptedData>{}</EncryptedData>
</cookie>
<parameters>
<ExpressQuery>false</ExpressQuery>
<InstalledNonLeafUpdateIDs>
<int>1</int>
<int>2</int>
<int>3</int>
<int>11</int>
<int>19</int>
<int>544</int>
<int>549</int>
<int>2359974</int>
<int>2359977</int>
<int>5169044</int>
<int>8788830</int>
<int>23110993</int>
<int>23110994</int>
<int>54341900</int>
<int>54343656</int>
<int>59830006</int>
<int>59830007</int>
<int>59830008</int>
<int>60484010</int>
<int>62450018</int>
<int>62450019</int>
<int>62450020</int>
<int>66027979</int>
<int>66053150</int>
<int>97657898</int>
<int>98822896</int>
<int>98959022</int>
<int>98959023</int>
<int>98959024</int>
<int>98959025</int>
<int>98959026</int>
<int>104433538</int>
<int>104900364</int>
<int>105489019</int>
<int>117765322</int>
<int>129905029</int>
<int>130040031</int>
<int>132387090</int>
<int>132393049</int>
<int>133399034</int>
<int>138537048</int>
<int>140377312</int>
<int>143747671</int>
<int>158941041</int>
<int>158941042</int>
<int>158941043</int>
<int>158941044</int>
<int>159123858</int>
<int>159130928</int>
<int>164836897</int>
<int>164847386</int>
<int>164848327</int>
<int>164852241</int>
<int>164852246</int>
<int>164852252</int>
<int>164852253</int>
</InstalledNonLeafUpdateIDs>
<OtherCachedUpdateIDs>
<int>10</int>
<int>17</int>
<int>2359977</int>
<int>5143990</int>
<int>5169043</int>
<int>5169047</int>
<int>8806526</int>
<int>9125350</int>
<int>9154769</int>
<int>10809856</int>
<int>23110995</int>
<int>23110996</int>
<int>23110999</int>
<int>23111000</int>
<int>23111001</int>
<int>23111002</int>
<int>23111003</int>
<int>23111004</int>
<int>24513870</int>
<int>28880263</int>
<int>30077688</int>
<int>30486944</int>
<int>30526991</int>
<int>30528442</int>
<int>30530496</int>
<int>30530501</int>
<int>30530504</int>
<int>30530962</int>
<int>30535326</int>
<int>30536242</int>
<int>30539913</int>
<int>30545142</int>
<int>30545145</int>
<int>30545488</int>
<int>30546212</int>
<int>30547779</int>
<int>30548797</int>
<int>30548860</int>
<int>30549262</int>
<int>30551160</int>
<int>30551161</int>
<int>30551164</int>
<int>30553016</int>
<int>30553744</int>
<int>30554014</int>
<int>30559008</int>
<int>30559011</int>
<int>30560006</int>
<int>30560011</int>
<int>30561006</int>
<int>30563261</int>
<int>30565215</int>
<int>30578059</int>
<int>30664998</int>
<int>30677904</int>
<int>30681618</int>
<int>30682195</int>
<int>30685055</int>
<int>30702579</int>
<int>30708772</int>
<int>30709591</int>
<int>30711304</int>
<int>30715418</int>
<int>30720106</int>
<int>30720273</int>
<int>30732075</int>
<int>30866952</int>
<int>30866964</int>
<int>30870749</int>
<int>30877852</int>
<int>30878437</int>
<int>30890151</int>
<int>30892149</int>
<int>30990917</int>
<int>31049444</int>
<int>31190936</int>
<int>31196961</int>
<int>31197811</int>
<int>31198836</int>
<int>31202713</int>
<int>31203522</int>
<int>31205442</int>
<int>31205557</int>
<int>31207585</int>
<int>31208440</int>
<int>31208451</int>
<int>31209591</int>
<int>31210536</int>
<int>31211625</int>
<int>31212713</int>
<int>31213588</int>
<int>31218518</int>
<int>31219420</int>
<int>31220279</int>
<int>31220302</int>
<int>31222086</int>
<int>31227080</int>
<int>31229030</int>
<int>31238236</int>
<int>31254198</int>
<int>31258008</int>
<int>36436779</int>
<int>36437850</int>
<int>36464012</int>
<int>41916569</int>
<int>47249982</int>
<int>47283134</int>
<int>58577027</int>
<int>58578040</int>
<int>58578041</int>
<int>58628920</int>
<int>59107045</int>
<int>59125697</int>
<int>59142249</int>
<int>60466586</int>
<int>60478936</int>
<int>66450441</int>
<int>66467021</int>
<int>66479051</int>
<int>75202978</int>
<int>77436021</int>
<int>77449129</int>
<int>85159569</int>
<int>90199702</int>
<int>90212090</int>
<int>96911147</int>
<int>97110308</int>
<int>98528428</int>
<int>98665206</int>
<int>98837995</int>
<int>98842922</int>
<int>98842977</int>
<int>98846632</int>
<int>98866485</int>
<int>98874250</int>
<int>98879075</int>
<int>98904649</int>
<int>98918872</int>
<int>98945691</int>
<int>98959458</int>
<int>98984707</int>
<int>100220125</int>
<int>100238731</int>
<int>100662329</int>
<int>100795834</int>
<int>100862457</int>
<int>103124811</int>
<int>103348671</int>
<int>104369981</int>
<int>104372472</int>
<int>104385324</int>
<int>104465831</int>
<int>104465834</int>
<int>104467697</int>
<int>104473368</int>
<int>104482267</int>
<int>104505005</int>
<int>104523840</int>
<int>104550085</int>
<int>104558084</int>
<int>104659441</int>
<int>104659675</int>
<int>104664678</int>
<int>104668274</int>
<int>104671092</int>
<int>104673242</int>
<int>104674239</int>
<int>104679268</int>
<int>104686047</int>
<int>104698649</int>
<int>104751469</int>
<int>104752478</int>
<int>104755145</int>
<int>104761158</int>
<int>104762266</int>
<int>104786484</int>
<int>104853747</int>
<int>104873258</int>
<int>104983051</int>
<int>105063056</int>
<int>105116588</int>
<int>105178523</int>
<int>105318602</int>
<int>105362613</int>
<int>105364552</int>
<int>105368563</int>
<int>105369591</int>
<int>105370746</int>
<int>105373503</int>
<int>105373615</int>
<int>105376634</int>
<int>105377546</int>
<int>105378752</int>
<int>105379574</int>
<int>105381626</int>
<int>105382587</int>
<int>105425313</int>
<int>105495146</int>
<int>105862607</int>
<int>105939029</int>
<int>105995585</int>
<int>106017178</int>
<int>106129726</int>
<int>106768485</int>
<int>107825194</int>
<int>111906429</int>
<int>115121473</int>
<int>115578654</int>
<int>116630363</int>
<int>117835105</int>
<int>117850671</int>
<int>118638500</int>
<int>118662027</int>
<int>118872681</int>
<int>118873829</int>
<int>118879289</int>
<int>118889092</int>
<int>119501720</int>
<int>119551648</int>
<int>119569538</int>
<int>119640702</int>
<int>119667998</int>
<int>119674103</int>
<int>119697201</int>
<int>119706266</int>
<int>119744627</int>
<int>119773746</int>
<int>120072697</int>
<int>120144309</int>
<int>120214154</int>
<int>120357027</int>
<int>120392612</int>
<int>120399120</int>
<int>120553945</int>
<int>120783545</int>
<int>120797092</int>
<int>120881676</int>
<int>120889689</int>
<int>120999554</int>
<int>121168608</int>
<int>121268830</int>
<int>121341838</int>
<int>121729951</int>
<int>121803677</int>
<int>122165810</int>
<int>125408034</int>
<int>127293130</int>
<int>127566683</int>
<int>127762067</int>
<int>127861893</int>
<int>128571722</int>
<int>128647535</int>
<int>128698922</int>
<int>128701748</int>
<int>128771507</int>
<int>129037212</int>
<int>129079800</int>
<int>129175415</int>
<int>129317272</int>
<int>129319665</int>
<int>129365668</int>
<int>129378095</int>
<int>129424803</int>
<int>129590730</int>
<int>129603714</int>
<int>129625954</int>
<int>129692391</int>
<int>129714980</int>
<int>129721097</int>
<int>129886397</int>
<int>129968371</int>
<int>129972243</int>
<int>130009862</int>
<int>130033651</int>
<int>130040030</int>
<int>130040032</int>
<int>130040033</int>
<int>130091954</int>
<int>130100640</int>
<int>130131267</int>
<int>130131921</int>
<int>130144837</int>
<int>130171030</int>
<int>130172071</int>
<int>130197218</int>
<int>130212435</int>
<int>130291076</int>
<int>130402427</int>
<int>130405166</int>
<int>130676169</int>
<int>130698471</int>
<int>130713390</int>
<int>130785217</int>
<int>131396908</int>
<int>131455115</int>
<int>131682095</int>
<int>131689473</int>
<int>131701956</int>
<int>132142800</int>
<int>132525441</int>
<int>132765492</int>
<int>132801275</int>
<int>133399034</int>
<int>134522926</int>
<int>134524022</int>
<int>134528994</int>
<int>134532942</int>
<int>134536993</int>
<int>134538001</int>
<int>134547533</int>
<int>134549216</int>
<int>134549317</int>
<int>134550159</int>
<int>134550214</int>
<int>134550232</int>
<int>134551154</int>
<int>134551207</int>
<int>134551390</int>
<int>134553171</int>
<int>134553237</int>
<int>134554199</int>
<int>134554227</int>
<int>134555229</int>
<int>134555240</int>
<int>134556118</int>
<int>134557078</int>
<int>134560099</int>
<int>134560287</int>
<int>134562084</int>
<int>134562180</int>
<int>134563287</int>
<int>134565083</int>
<int>134566130</int>
<int>134568111</int>
<int>134624737</int>
<int>134666461</int>
<int>134672998</int>
<int>134684008</int>
<int>134916523</int>
<int>135100527</int>
<int>135219410</int>
<int>135222083</int>
<int>135306997</int>
<int>135463054</int>
<int>135779456</int>
<int>135812968</int>
<int>136097030</int>
<int>136131333</int>
<int>136146907</int>
<int>136157556</int>
<int>136320962</int>
<int>136450641</int>
<int>136466000</int>
<int>136745792</int>
<int>136761546</int>
<int>136840245</int>
<int>138160034</int>
<int>138181244</int>
<int>138210071</int>
<int>138210107</int>
<int>138232200</int>
<int>138237088</int>
<int>138277547</int>
<int>138287133</int>
<int>138306991</int>
<int>138324625</int>
<int>138341916</int>
<int>138372035</int>
<int>138372036</int>
<int>138375118</int>
<int>138378071</int>
<int>138380128</int>
<int>138380194</int>
<int>138534411</int>
<int>138618294</int>
<int>138931764</int>
<int>139536037</int>
<int>139536038</int>
<int>139536039</int>
<int>139536040</int>
<int>140367832</int>
<int>140406050</int>
<int>140421668</int>
<int>140422973</int>
<int>140423713</int>
<int>140436348</int>
<int>140483470</int>
<int>140615715</int>
<int>140802803</int>
<int>140896470</int>
<int>141189437</int>
<int>141192744</int>
<int>141382548</int>
<int>141461680</int>
<int>141624996</int>
<int>141627135</int>
<int>141659139</int>
<int>141872038</int>
<int>141993721</int>
<int>142006413</int>
<int>142045136</int>
<int>142095667</int>
<int>142227273</int>
<int>142250480</int>
<int>142518788</int>
<int>142544931</int>
<int>142546314</int>
<int>142555433</int>
<int>142653044</int>
<int>143191852</int>
<int>143258496</int>
<int>143299722</int>
<int>143331253</int>
<int>143432462</int>
<int>143632431</int>
<int>143695326</int>
<int>144219522</int>
<int>144590916</int>
<int>145410436</int>
<int>146720405</int>
<int>150810438</int>
<int>151258773</int>
<int>151315554</int>
<int>151400090</int>
<int>151429441</int>
<int>151439617</int>
<int>151453617</int>
<int>151466296</int>
<int>151511132</int>
<int>151636561</int>
<int>151823192</int>
<int>151827116</int>
<int>151850642</int>
<int>152016572</int>
<int>153111675</int>
<int>153114652</int>
<int>153123147</int>
<int>153267108</int>
<int>153389799</int>
<int>153395366</int>
<int>153718608</int>
<int>154171028</int>
<int>154315227</int>
<int>154559688</int>
<int>154978771</int>
<int>154979742</int>
<int>154985773</int>
<int>154989370</int>
<int>155044852</int>
<int>155065458</int>
<int>155578573</int>
<int>156403304</int>
<int>159085959</int>
<int>159776047</int>
<int>159816630</int>
<int>160733048</int>
<int>160733049</int>
<int>160733050</int>
<int>160733051</int>
<int>160733056</int>
<int>164824922</int>
<int>164824924</int>
<int>164824926</int>
<int>164824930</int>
<int>164831646</int>
<int>164831647</int>
<int>164831648</int>
<int>164831650</int>
<int>164835050</int>
<int>164835051</int>
<int>164835052</int>
<int>164835056</int>
<int>164835057</int>
<int>164835059</int>
<int>164836898</int>
<int>164836899</int>
<int>164836900</int>
<int>164845333</int>
<int>164845334</int>
<int>164845336</int>
<int>164845337</int>
<int>164845341</int>
<int>164845342</int>
<int>164845345</int>
<int>164845346</int>
<int>164845349</int>
<int>164845350</int>
<int>164845353</int>
<int>164845355</int>
<int>164845358</int>
<int>164845361</int>
<int>164845364</int>
<int>164847387</int>
<int>164847388</int>
<int>164847389</int>
<int>164847390</int>
<int>164848328</int>
<int>164848329</int>
<int>164848330</int>
<int>164849448</int>
<int>164849449</int>
<int>164849451</int>
<int>164849452</int>
<int>164849454</int>
<int>164849455</int>
<int>164849457</int>
<int>164849461</int>
<int>164850219</int>
<int>164850220</int>
<int>164850222</int>
<int>164850223</int>
<int>164850224</int>
<int>164850226</int>
<int>164850227</int>
<int>164850228</int>
<int>164850229</int>
<int>164850231</int>
<int>164850236</int>
<int>164850237</int>
<int>164850240</int>
<int>164850242</int>
<int>164850243</int>
<int>164852242</int>
<int>164852243</int>
<int>164852244</int>
<int>164852247</int>
<int>164852248</int>
<int>164852249</int>
<int>164852250</int>
<int>164852251</int>
<int>164852254</int>
<int>164852256</int>
<int>164852257</int>
<int>164852258</int>
<int>164852259</int>
<int>164852260</int>
<int>164852261</int>
<int>164852262</int>
<int>164853061</int>
<int>164853063</int>
<int>164853071</int>
<int>164853072</int>
<int>164853075</int>
<int>168118980</int>
<int>168118981</int>
<int>168118983</int>
<int>168118984</int>
<int>168180375</int>
<int>168180376</int>
<int>168180378</int>
<int>168180379</int>
<int>168270830</int>
<int>168270831</int>
<int>168270833</int>
<int>168270834</int>
<int>168270835</int>
</OtherCachedUpdateIDs>
<SkipSoftwareSync>false</SkipSoftwareSync>
<NeedTwoGroupOutOfScopeUpdates>true</NeedTwoGroupOutOfScopeUpdates>
<FilterAppCategoryIds>
<CategoryIdentifier>
<Id>{}</Id>
</CategoryIdentifier>
</FilterAppCategoryIds>
<TreatAppCategoryIdsAsInstalled>true</TreatAppCategoryIdsAsInstalled>
<AlsoPerformRegularSync>false</AlsoPerformRegularSync>
<ComputerSpec/>
<ExtendedUpdateInfoParameters>
<XmlUpdateFragmentTypes>
<XmlUpdateFragmentType>Extended</XmlUpdateFragmentType>
</XmlUpdateFragmentTypes>
<Locales>
<string>en-US</string>
<string>en</string>
</Locales>
</ExtendedUpdateInfoParameters>
<ClientPreferredLanguages>
<string>en-US</string>
</ClientPreferredLanguages>
<ProductsParameters>
<SyncCurrentVersionOnly>false</SyncCurrentVersionOnly>
<DeviceAttributes>BranchReadinessLevel=CB;CurrentBranch=rs_prerelease;OEMModel=Virtual Machine;FlightRing={};AttrDataVer=21;SystemManufacturer=Microsoft Corporation;InstallLanguage=en-US;OSUILocale=en-US;InstallationType=Client;FlightingBranchName=external;FirmwareVersion=Hyper-V UEFI Release v2.5;SystemProductName=Virtual Machine;OSSkuId=48;FlightContent=Branch;App=WU;OEMName_Uncleaned=Microsoft Corporation;AppVer=10.0.22621.900;OSArchitecture=AMD64;SystemSKU=None;UpdateManagementGroup=2;IsFlightingEnabled=1;IsDeviceRetailDemo=0;TelemetryLevel=3;OSVersion=10.0.22621.900;DeviceFamily=Windows.Desktop;</DeviceAttributes>
<CallerAttributes>Interactive=1;IsSeeker=0;</CallerAttributes>
<Products/>
</ProductsParameters>
</parameters>
</SyncUpdates>
</s:Body>
</s:Envelope>