Как стать автором
Обновить

Клонируем UWP-приложения – проще чем кажется

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.1K

Предисловие

Ни для кого не секрет, что на смартфонах под управлением операционной системы Android можно клонировать приложения. Иногда этот функционал даже встроен в систему. Один из примеров тому – (не) всеми любимая MIUI, которая, начиная с двенадцатой версии, уже умела создавать дубликаты приложений.

Однако если речь идёт о Windows 10/11, то я не встречал решений для клонирования UWP-приложений. Давайте попробуем это исправить!

Подготовка

Итак, что же нам понадобится:

  • Прямые руки, немного терпения

  • Устройство под управлением Windows 10/11

  • Пакет SDK для Windows (доступен для загрузки здесь)

Если вы уверены, что всё, перечисленное выше, у вас имеется – можно двигаться дальше.

Приступим к действиям

Первым делом нам необходимо выбрать приложение, которые мы будем клонировать. В качестве подопытного я выбрал Unigram – клиент для мессенджера Telegram. Дальнейшие действия буду показывать на этом примере.

Открываем PowerShell от имени администратора. Вводим следующую команду:

Get-AppxPackage

Эта команда покажет нам список всех установленных приложений. Среди всего списка находим то, которое мы собираемся клонировать. Выглядит это примерно следующим образом:

Name              : 38833FF26BA1D.UnigramPreview
Publisher         : CN=D89C87B4-2758-402A-8F40-3571D00882AB
Architecture      : X64
ResourceId        :
Version           : 11.3.3.0
PackageFullName   : 38833FF26BA1D.UnigramPreview_11.3.3.0_x64__g9c9v27vpyspw
InstallLocation   : C:\Program Files\WindowsApps\38833FF26BA1D.UnigramPreview_11.3.3.0_x64__g9c9v27vpyspw
IsFramework       : False
PackageFamilyName : 38833FF26BA1D.UnigramPreview_g9c9v27vpyspw
PublisherId       : g9c9v27vpyspw
IsResourcePackage : False
IsBundle          : False
IsDevelopmentMode : False
NonRemovable      : False
Dependencies      : {Microsoft.UI.Xaml.2.8_8.2310.30001.0_x64__8wekyb3d8bbwe, Microsoft.NET.Native.Framework.2.2_2.2.29
                    512.0_x64__8wekyb3d8bbwe, Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x64__8wekyb3d8bbwe, Microsof
                    t.VCLibs.140.00_14.0.33519.0_x64__8wekyb3d8bbwe...}
IsPartiallyStaged : False
SignatureKind     : Store
Status            : Ok

Из всей этой кучи нам пригодится параметр Name. Запоминаем его.

Теперь экспортируем его куда-нибудь:

Get-AppxPackage -Name "ИМЯ_ПРИЛОЖЕНИЯ" | ForEach-Object {
 Copy-Item -Path $_.InstallLocation -Recurse -Destination "ПУТЬ\$($_.Name)"
}

Имя приложения – это то самый параметр Name. Также необходимо указать путь, куда именно будет происходить экспорт.

В итоге у нас должно получиться что-то подобное:

Куча файлов, о назначении которых нам знать не обязательно
Куча файлов, о назначении которых нам знать не обязательно

Среди этой кучи файлов должен быть AppxManifest.xml. Нам необходимо немного его отредактировать. Открываем его и находим строчку Identity. Меняем значение Name и Publisher на свои. Вот как это получилось у меня:

<Identity Name="CLONE_Unigram" Publisher="CN=WHO_AM_I" Version="11.3.3.0" ProcessorArchitecture="x64" />

Теперь приступим к сборке appx-пакета. Открываем Developer Command Prompt for Visual Studio. Вводим следующее:

MakeAppx pack /d "ПУТЬ_ДО_ФАЙЛОВ_ЭКСПОРТА" /p "ПУТЬ_ГДЕ_БУДЕТ_ЛЕЖАТЬ_ПАКЕТ\Clone.appx"

Убеждаемся, что пакет успешно собрался:

И что, это всё? О нет, если вы попробуете установить его – вы столкнётесь с проблемой. Для UWP приложения по-хорошему нужен сертификат. Ну ладно - слепим его сами! В консоли PowerShell вводим следующее:

New-SelfSignedCertificate -Type Custom -Subject "CN=WHO_AM_I" -KeyUsage DigitalSignature -FriendlyName "MyAppCertificate" -CertStoreLocation "Cert:\CurrentUser\My" -KeyLength 2048

Теперь необходимо экспортировать полученный сертификат в формате .pfx. Для этого открываем certmgr.msc. Идём в Личное > Сертификаты и находим наш сертификат. Нажимаем на него правой кнопкой мыши, затем Все задачи > Экспорт.

Выбираем "Экспортировать закрытый ключ". В процессе нужно будет ввести пароль. Вводим его и запоминаем. Далее по подсказкам. Сохраняем сертификат туда, где он не потеряется.

Сертификат на месте? Отлично! Подпишем пакет нашим сертификатом в консоли Developer Command Prompt for Visual Studio:

SignTool sign /fd SHA256 /a /f "ПУТЬ_К_СЕРТИФИКАТУ.pfx" /p "ПАРОЛЬ_СЕРТИФИКАТА" "ПУТЬ_ДО_APPX"

Далее – немного хитрости. ПКМ по нашему файлу appx > Цифровые подписи > В списке подписей выбираем нашу подпись > Сведения > Просмотр сертификата > Установить сертификат > Локальный компьютер > Поместить в следующее хранилище > Обзор > Устанавливаем его в Доверенные лица.

Открываем APPX. Нажимаем установить...

Ошибка об отсутствии сертификата ушла и приложение успешно установилось. Мы счастливы. Открываем меню Пуск и в списке приложений нас встречают два приложения:

И да, наш клон успешно открывается и функционирует:

Что ещё?

Об этом я забыл упомянуть. Наверное по хорошему в манифесте можно поменять его имя. И вообще в ресурсах поменять иконку чтобы различать оригинал и копию. Я надеюсь, это не будет проблемой для вас.

Теги:
Хабы:
Всего голосов 1: ↑1 и ↓0+1
Комментарии1

Публикации

Работа

Ближайшие события