mirror of
https://github.com/MustardChef/WSABuilds.git
synced 2025-01-24 08:51:12 +01:00
Remove Unnecessary Files
This commit is contained in:
parent
b7b3dbe241
commit
50a2dee505
@ -1,163 +0,0 @@
|
|||||||
# Windows 子系统 For Android:Windows 10 x64(Windows_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 d0c93842(26101)
|
|
||||||
- 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 Android:Windows 10 x64(Windows_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
|
|
@ -1,147 +0,0 @@
|
|||||||
# Windows 子系统 for Android:ARM 处理器上的 Windows 11(Windows_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 d0c93842(26101)
|
|
||||||
- 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 Android:ARM 处理器上的 Windows 11(Windows_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
|
|
||||||
|
|
@ -1,145 +0,0 @@
|
|||||||
# Windows 子系统 For Android:Windows 11 x64(Windows_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 d0c93842(26101)
|
|
||||||
- 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 Android:Windows 11 x64(Windows_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
|
|
@ -1,70 +0,0 @@
|
|||||||
# WSABuilds <img src="https://img.shields.io/github/downloads/MustardChef/WSABuilds/total?label=Total%20Downloads&style=for-the-badge"/> [<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**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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"
|
|
@ -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")
|
|
@ -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)
|
|
@ -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)
|
|
@ -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')
|
|
@ -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')
|
|
@ -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()
|
|
Binary file not shown.
Binary file not shown.
@ -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 }}
|
|
@ -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 }}
|
|
@ -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
|
|
Binary file not shown.
Binary file not shown.
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
Loading…
x
Reference in New Issue
Block a user