Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

在Xbox的开发者模式下将UWP安装后无法启动 #221

Open
LonelyWindG opened this issue Nov 4, 2023 · 23 comments
Open

在Xbox的开发者模式下将UWP安装后无法启动 #221

LonelyWindG opened this issue Nov 4, 2023 · 23 comments

Comments

@LonelyWindG
Copy link

LonelyWindG commented Nov 4, 2023

错误状况:如题,启动直接弹回桌面,也没有任何系统提示(在Xbox的Crash data内也没看到有Crash dumps产生)
版本:1.2.0

我没怎么了解过misx或appx应用构建流程,个人猜测是否跟签名证书有关,谷歌查找后发现Xbox应该是无法安装根证书;
相比Win下安装前会要求安装有发布者的根证书,Xbox开发者模式下并没有这样的限制,可直接安装,并且也成功安装;

此外,我也尝试了下安装云之幻大佬开发的另一个UWP的B站应用Bili.Uwp,Release内下载的压缩包内的msixbundle(在Win下需要安装其附带的cer证书才能安装的)以及上架商店的零售应用哔哩(不需要安装证书),两个均可正常安装并运行。

@zeromake
Copy link
Collaborator

zeromake commented Nov 4, 2023

@LonelyWindG 感觉可能 云之幻 打包的用的cer证书是开发者账号给的证书,上传到商店后还得再次通过商店签名才是正式版,开发者账号给的证书应该是开发者认证了,wiliwili 整的证书只是我拿 vs 自动生成的自签证书

@LonelyWindG
Copy link
Author

@LonelyWindG 感觉可能 云之幻 打包的用的cer证书是开发者账号给的证书,上传到商店后还得再次通过商店签名才是正式版,开发者账号给的证书应该是开发者认证了,wiliwili 整的证书只是我拿 vs 自动生成的自签证书

感觉有可能是这样,开发者证书应该是从微软这边申请的,应用能通过系统认证;这样的话只能有空了我看下怎么申请一个开发者证书自己构建一个包试试了;不过我之前也没尝试过uwp开发和cmake构建流程,还是挺麻烦的。

@xfangfang
Copy link
Owner

@LonelyWindG README中的 wiliwili构建流程写的是 Windows下exe可执行文件的构建流程。

wiliwili 的uwp 构建使用的是 zeromake 写的 xmake 脚本,可以参考:

build-win-uwp:
needs: [ version ]
runs-on: windows-2022
steps:
- name: Setup Windows 10 SDK
uses: GuillaumeFalourd/setup-windows10-sdk-action@v1.11
with:
sdk-version: 19041
- name: Install NSIS
shell: powershell
run: |
Invoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -UseBasicParsing).Content
- uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
- name: Cache xmake packages
uses: actions/cache@v3
with:
key: ${{ runner.os }}-build
path: |
${{ runner.temp }}/.xmake/packages
- name: build
shell: powershell
env:
VERSION: ${{ needs.version.outputs.VERSION }}
run: |
$env:path+=";$env:USERPROFILE\xmake"
$env:XMAKE_GLOBALDIR="${{ runner.temp }}"
xmake f -c -y --sw=y --winrt=y --window=sdl --driver=d3d11
xmake b -y wiliwili
cp winrt/key.pfx build/
cp winrt/docs/key.pdf build/key.pdf
- uses: actions/upload-artifact@v3
with:
name: ${{ needs.version.outputs.DIST_UWP }}
path: |
build/wiliwili.msix
build/key.pfx
build/key.pdf

@zeromake
Copy link
Collaborator

zeromake commented Nov 4, 2023

@LonelyWindG
主要就是这个 key.pfx 替换后即可。
签名命令在 lua 脚本里 uwp.lua
我猜测直接手动执行 signtool sign /fd SHA256 /a /f key.pfx wiliwili.msix 就能替换签名

@LonelyWindG
Copy link
Author

LonelyWindG commented Nov 6, 2023

@xfangfang @zeromake 我查看了下云之幻发布的侧载包签名证书,也是自签名的测试证书,提交到商店的签名证书的颁发者才是微软;

我构建出来用自己生成的自签名证书和他的测试证书都测试了也是一样的无法启动;
我把他的包用makeappx工具unpack再重新pack,用自己的证书重新签,侧载之后也是能正常安装启动的,所以应该不是签名问题;

然后我用Win SDK的Windows App Cert Kit(C:\Program Files (x86)\Windows Kits\10\App Certification Kit\appcertui.exe)跑了下测试,并没有通过,其中“支持的 API 测试”和“应用清单资源测试”两项测试没有通过,不确定是不是这两个原因导致的无法启动;

测试结果还有从https://store.rg-adguard.net/下载下来的哔哩零售包导出的证书如下(因为不能上传所以扩展名加了txt):

win_app_cert_kit_test_result.xml.txt
Windows 应用认证工具包 - 测试结果.html.txt
richasy_bili_store_cert.p7b.txt

@xfangfang
Copy link
Owner

看起来现在的uwp版本还不是很兼容xbox哈

@zeromake
Copy link
Collaborator

zeromake commented Nov 7, 2023

@xfangfang 全是 win32 和 libc 函数依赖,应该是 Microsoft Store Windows SDK 不支持很多 win32 函数,我可以尝试找一下看看有没人做c#的预编译版主要是 libmpv 和 sdl2 依赖了一把东西(大概率是不行,上回也找过一次都是只支持 win32 的 uwp),应用清单资源测试到是好处理,应该就是 resources.pri 里有资源没放好。

@LonelyWindG
Copy link
Author

@zeromake 有一个其他问题, 为什么UWP版的搜索输入框不支持输入中文, 而且也没法粘贴进来文本

@zeromake
Copy link
Collaborator

zeromake commented Nov 7, 2023

@LonelyWindG
uwp 用的 sdl 的输入,我上次只做了 win32 的测试,uwp 还真没测试,粘贴复制,由于 wiliwili 用的框架问题根本不能绑定键盘,上次做了一版代码太烂效果也不好就没做粘贴复制

@dragonflylee
Copy link
Contributor

dragonflylee commented Nov 9, 2023

@zeromake
Copy link
Collaborator

@xfangfang @LonelyWindG
今天翻了一下代码发现 sdl 并没有做 winrt 的输入法支持(只是尝试调起了虚拟键盘),之前做 sdl 输入法的时候用的是 win32 的去测试的……

@ikas-mc
Copy link

ikas-mc commented Dec 26, 2023

现在编译的uwp不是传统意义的uwp,只是使用了winrt的win32打包应用,xbox目前不支持这种类型的包。

不支持的win32 api也需要换掉,主要是mpv,
我尝试将libmpv编译到uwp没有成功,所以直接使用winrt的MediaPlayer代替目前的mpv,然后打包为传统uwp,在xbox测试播放成功

目前用mediaPlayer简单实现MPVCore,视频也是拷贝了几次. 感觉完全没有必要了,商店也很难发布,现在也就xbox特殊了

20231229
我把uwp编译的相关cmake配置放上来了,使用cmake.vs2022生成uwp项目来编译,希望有人可以搞试试,我自己不熟悉c++与cmake
ikas-mc/wiliwili-uwp-poc

@xfangfang
Copy link
Owner

@ikas-mc 感谢更新代码,在设计之初没有考虑到切换不同的播放器,直接用MPV做的播放器,可能有一些应用的行为是比较依赖MPV内部的状态变化的,如果有兴趣继续完善的话倒是也可以把播放器核心单独抽象出来,或许未来可以让这个应用支持到 vlc 或者其他播放器。

@ikas-mc
Copy link

ikas-mc commented Dec 31, 2023

目前是编译了一个可以用跑的xbox版本了..播放器确实是最难弄的,其它一些适配改动不多.
目前一些播放的接口,如果要支持多种播放器,需要一些改动,比如seturl,若要原生dash播放(如使用winrt MediaPlayer),需要更多的参数(如indexRange...)

看了下之前用过的一些播放器内核,基本不支持uwp(非win32+winrt)了,所以目前感觉不太值得搞了

--
xbox下可以尝试这个包
wiliwili-uwp-poc/actions中下载最新的

@thedavidweng
Copy link

thedavidweng commented Jan 6, 2024

目前是编译了一个可以用跑的xbox版本了..播放器确实是最难弄的,其它一些适配改动不多. 目前一些播放的接口,如果要支持多种播放器,需要一些改动,比如seturl,若要原生dash播放(如使用winrt MediaPlayer),需要更多的参数(如indexRange...)

看了下之前用过的一些播放器内核,基本不支持uwp(非win32+winrt)了,所以目前感觉不太值得搞了

-- xbox下可以尝试这个包 https://github.com/ikas-mc/wiliwili-uwp-poc/releases/download/v0.2/wiliwili-uwp_1.2.3.0_x64_Test.zip xss截图: 293519123-ab82124b-2ac6-4f28-b5ed-255f65b2a3e3.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MDQ1NjY5MjAsIm5iZiI6MTcwNDU2NjYyMCwicGF0aCI6Ii82NTg5NTQyOC8yOTM1MTkxMjMtYWI4MjEyNGItMmFjNi00ZjI4LWI1ZWQtMjU1ZjY1YjJhM2UzLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAxMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMTA2VDE4NDM0MFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI5NTk4ODU1MzZmOWUwZDk1ZDVjN2MxYjQzMWNiNzU4ODQ0MTQ2NDkwZDkwOGJiODA2Y2YzOWVkZDA5MTY2YWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.ayL-dQtFd6ru90P8mh4hBbmoCQa2rNfe8yokHS90PFk

牛批,有计划上架商店吗

@wisdomhxz
Copy link

一直默默看各位大佬。
希望有那么一天可以通过微软商店下到Xbox的Wiliwili

@ikas-mc
Copy link

ikas-mc commented Jan 14, 2024

经过一些摸索与修改,终于编译出了可以通过uwp api检测的mpv.
这样只需要修改有限的几个uwp限制api即可正常编译uwp版本了.
目前支持d3d11硬件解码,软件渲染,还需要对mpv修改以支持显卡渲染.
想测试的可以去我的github action里面下载新编译包,我在xss中正常使用..


对mpv与libplacebo源码的修改目前还在整理中( 看来uwp已经没有人关心了,mpv中的uwp支持没人维护了,libplacebo则完全没考虑uwp ~~)
工具链使用https://github.com/mstorsjo/llvm-mingw
主要是参考了vlc的uwp编译脚本
编译过程的一些配置,还有编译后的文件,有兴趣的可以参考:
wiliwili-uwp-poc/blob/main/libs/sources/build.md
另外ffmpeg的依赖openssl编译不好搞,目前是链接到了msvc编译的动态dll

@dragonflylee
Copy link
Contributor

@ikas-mc d3d11的硬件渲染可以参考这个https://github.com/dragonflylee/mingw-packages/blob/0.36.0/mpv/0001-d3d11-render.patch

toolchain的话 msys2下的clang64环境是不是也可以?

@ikas-mc
Copy link

ikas-mc commented Jan 14, 2024

@dragonflylee
应该是可以,需要手动在项目中加入uwp相关的参数,这个工具链只是内置了https://github.com/mstorsjo/llvm-mingw/blob/master/wrappers/clang-target-wrapper.c [built-in options]

我之前也是直接用的msys2 clang,然后在meson的交叉编译的配置中指定相关参数
https://github.com/ikas-mc/wiliwili-uwp-poc/blob/main/libs/sources/x86_64-w64-mingw32uwp.txt
不过就是麻烦,都需要修改项目的配置


这些编译链还有工具我基本都不熟悉,都是直接尝试的,可能还有更简单的方法吧

我去合并这个补丁搞试试

@ikas-mc
Copy link

ikas-mc commented Jan 18, 2024

@dragonflylee 合并了补丁,重新编译了shaderc依赖(uwp相关参数),桌面端的uwp已经可以正常gpu渲染


但是xbox无法使用,播放后直接出错, 错误是D3D11On12相关的dll(没想到xbox现在不是原生dx11),没有任何有用的debug信息

@ikas-mc
Copy link

ikas-mc commented Jan 18, 2024

屏幕截图 2024-01-18 184922

测试版本:
https://github.com/ikas-mc/wiliwili-uwp-poc/releases/download/0.4/wiliwili-uwp_1.3.2.0_x64.zip

@775852123
Copy link

可以开发安卓TV版和Apple TV版吗

@PandaFiredoge
Copy link

云之幻的商店版哔哩可以在Xbox上用了?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants