exagear吧 关注:186,352贴子:543,493

【教程】给apk添加多版本wine支持

只看楼主收藏回复

因为不同游戏可能用到不同wine4,wine6,wine7,而现在的共存方法都是修改apk包名,所以搞了一个只需要单个apk也能多版本wine共存。
教程和演示视频请看博客原文:https://ewt45.github.io/blogs/2022/autumn/exagearMultiWine/




IP属地:辽宁1楼2022-10-11 18:31回复
    方法从使用绝对路径调用wine改为添加环境变量了,然而环境变量由于$PATH不被识别只能手动添加上那些默认值,所以其实办法还不是很好。
    看视频演示中,在拥有一个已改好的apk的情况下,向数据包中添加wine非常简单了。
    已改好的apk等静思大佬改好鲁大师版的再发,大概会发到这层的楼中楼里。
    我这只有一个老老老ed302,现在那些功能都不支持就不发出来了(吐槽一下,上次发的wine7源码居然有25个人保存,哪有人用得上)


    IP属地:辽宁2楼2022-10-11 18:51
    收起回复
      坐等链接


      IP属地:江苏来自Android客户端3楼2022-10-11 19:50
      回复
        一些高版本wine上出现的故障的分界点信息:
        wine65,这个版本开始高版本不再出现无盘符的问题。稳定版从602开始。
        wine66,winetricks d3dx9下的程序等等,无法再像以前那样成功安装。(解决方法俺知道,不难解决,主要是要编译wine)。
        wine618,发送桌面图标失灵,winemenubuilder.exe出现故障,并且刚打开tfm时,程序图标变成全是小电脑。并且从此版本开始,wine的d3d开始不够稳定,易出现黑屏有声或渲染花屏类故障。(未能锁定具体原因)
        wine622,出现桌面左下角的控制面板无法打开的故障。(未能锁定具体原因)
        wine75,能够打开一些之前黑屏无响应的游戏。
        wine713,放三国志12等的视频不会卡死。一些以前需要跳op存档的游戏用这个版本,不需要跳op。
        wine716,在搭配gst方面开始出现有些故障。故障延续到718,仍不是很正常。
        除了wine66那个,都没有锁定具体原因,只锁定了wine版本,故障基本上都是需要回退源码才能解决的,有兴趣,可以研究研究,俺受手机所限,无法再深入了。


        IP属地:广东来自Android客户端4楼2022-10-16 21:06
        收起回复
          太厉害了


          IP属地:山东来自Android客户端5楼2022-10-18 18:39
          收起回复
            诺,这个2021年10月19号的更新是直接导致仙剑五,三国志11等等,用32色,播放视频出现黑屏有声或白屏有声或播放时报错,卡死的直接原因(16色用vo009是可以正常放311视频的额。仙剑五,16色直接不能启动游戏。)。但解决方法会较复杂一些。(相对于三国志12的出征卡死问题)。除了需要部分回退以外,需要对近一年内的virglrenderer的变化有有较为熟悉的掌握,因为近一年内的,大概有五六条更新是直接会产生错误的,如果不清楚这些问题,是不具备将virglrenderer弄至最新版本的能力的。如2022年8月10号的virgl: add support for hardware video acceleration(此次更新导致直接编译的vtest服务无法连接客户端,不需要全部回退,只需调整两处后即可连接。)。又如2022后6月28号的shader: Change the internal uniforms to uniform blocks(此次更新直接导致vtest_zink_DLC01的茶壶黑屏,不需要全部回退,只需将部分被删除的代码重新加回,即可解决茶壶黑屏问题。)。
            而如果没有将virglrenderer升至最新,一些新版本上已解决了的问题,旧版本上就会存在。
            问题参照:
            vtest_zink_DLC01。除了有很多问题类似t+z以外(正常渲染能力和帧数都不及t+z,胜在几乎任何手机都能用),与vo也是有一定程度相似(都用vtest服务转接,一些产生于vtest服务的问题,是相同的)。


            IP属地:广东来自Android客户端6楼2022-10-22 18:13
            收起回复
              8月11号的,记错了。8月11号的(直接导致v服务无法连接)和6月28号(vtest_zink_DLC01这个渲染,更了6月28号的后,会茶壶黑屏)更新都会产生致命错误。图中10月19号的是直接导致32色放视频甚至渲染其它出黑屏故障的原因(部分黑屏现象的直接原因,不是所有黑屏都是这个原因)。还有其它两三个的更新,产生不是很重要的错误,基本可忽略。
              2021年10月19号是virglrenderer的分界线。在此之前,只需按照指令直接编译即可。之后的,如果不清楚问题,只按指令直接编译就会有一些故障。
              而2022年8月11号和6月28号的两次更新产生的就是类似mesa在2022年4月7号后,t+z突然炸了的问题一样。好在改动不多,要修正的难度不大。


              IP属地:广东来自Android客户端7楼2022-10-23 11:12
              回复
                服务端和客户端都在4pda。如果你想在bo86上用vo,肯定要有a大神改过的客户端源码文件。想提前解决一些vo的问题,肯定要也有整过的服务端源码。10月19号产生的问题,其实我是相当有把握的。你可以在vtest_llvmpipe,vtest_zink_DLC01,vtest_zink_turnip。总之就是用vtest转的渲染方式上,先感受下10月19号的故障。v服务082,090,091等等都是ok的。vo同样也是virgl,它的服务端也是vtest服务。
                vo009源码相关:
                10月19号的原样,更了,未改动任何一处。(此次更新,导致32色放视频出黑屏有声的故障,验证过vtest_llvmpipe和vtest_zink_DLC01。vo009有待验证。不出意外,和前两个问题一样,解决方法一样。也就是说回退,会解决更新带来的问题。也就是用vo玩仙剑五黑屏有声问题,极大可能就是在这里出的问题。)
                6月28号的原样(此次更新导致vtest_zink_DLC01茶壶黑屏。参照高版本wine7的自带d3d,vtest_zink_DLC01用,茶壶黑屏,而llvmpipe,vo没有茶壶黑屏,但是会现渲染故障。也就是说,回退此次更新,可以减少渲染故障。更了此次更新,vtest_zink_DLC01这个渲染方式会直接茶壶黑屏,无法用。)。
                8月11号的(非原样,回退了源码此次更新中的两三处解决了更新后v服务无法连接的问题。想知道具体的,对着此次更新,查看vo009的源码即可。此次更新改动较多,并不是源码全部回退。)。
                前两个更新是vo009没有任何改动的地方。改动并不大,可全部回退或部分回退。(部分回退要掌握的较多,需要能大概看懂更新后的改动部分)。
                以上三处是有致命错误的更新。
                还有一处更新vo008就已注意到了,check gl error,这个可以在vo源码中看到,g站有提到。
                综上,也就是说,virgl在近一年内的五六次有明确问题的大故障的更新中,vo009有两次的是只字未动的,肯定会导致基本相同的故障。


                IP属地:广东来自Android客户端8楼2022-10-24 20:52
                回复
                  链接: https://pan.baidu.com/s/1CDW3fciQzaQnMQ-qVAERtA?pwd=bpi8 提取码: bpi8。1至9汇总。


                  IP属地:广东来自Android客户端9楼2022-10-24 21:54
                  回复
                    解决8月11号问题的方法。加六个斜杠,搞定。






                    IP属地:广东来自Android客户端10楼2022-10-24 22:58
                    收起回复
                      virglrenderer 0.10.3最新版本,解决8月11号的无法连接问题后就是这样的,vtest_zink_DLC01黑屏,而vtest_llvmpipe以及vo009等是没有茶壶黑屏的。8月11号所导致的无法连接问题是一致的,解决方法是通用的。
                      茶壶黑屏问题是6月28号那个更新导致的。



                      IP属地:广东来自Android客户端11楼2022-10-24 23:11
                      回复
                        又有一大段被吞了,截图留存一下


                        IP属地:辽宁12楼2022-10-25 11:54
                        回复
                          大佬弄个常心大佬那样内置那个什么vo,这样就不用另外安装了,谢谢


                          IP属地:广东来自Android客户端13楼2022-10-25 21:17
                          收起回复
                            J大还是常心傻傻分不清


                            IP属地:广东14楼2022-10-27 18:04
                            回复
                              六合一的含义:
                              六合一,是将模拟器已知的六种渲染方式合体在一个apk中,通过选择渲染方式,由apk自动完成渲染方式切换的一个魔改apk。
                              六合一前身是三合一。
                              常心魔改的那个apk,可以看成是,渲染方式二合一。
                              六合一主要问题:
                              那个mcat服务,只能开服务,在退出模拟器前,不能正常关闭。导致vtest_llvmpipe与vtest_zink_turnip互切时,是需要选好渲染方式后,关闭一下apk才能完成切换的。
                              次要问题:
                              只改了4次,还有一些其它不明显的问题。
                              六合一的优势:
                              apk肯定会按这个方式走(事实也是如此)。尤其是完成了多wine切换(实现了不需要频繁更换不同wine版本的数据包,但不需要集成过多wine版本,有主要特征的是w30(即模拟器前官方整过的wine3.0-gl-dsound。需要懂编译wine,改一下原安装路径,不然和现在多wine共存的方式有冲突。),w6(602到604稳定版为佳),和w7(713到715为佳),自定义分辨率(作用不大,悬浮窗全屏主要用的就是高720或1080的分辨率。加上804,624,有主要作用的就是原来基础上加五个。能自定义会更好些)。
                              免设置pulse客户端(如11楼所示,选一下即可完成设置)。
                              免设置VTEST_WIN=1(如11楼所示,选一下即可完成设置)。
                              数据包:能够和具有上述功能的魔改apk搭配的数据包,完善的,并不会特别大。是能够结束版本众多混乱(其实是数据包众多,并不是有很多版本,主要是出现t+z,使得数据包出现了分类,选错数据包会什么也打不开,llvmpipe也用不了。),完成大一统的apk。和其搭配完善的数据包,在后面会占主流,直到模拟器玩完。
                              已知的六类渲染方式解释:
                              先说一下,一些名词的含义。
                              i386:模拟器模拟底层系统是u18,u16,u14之类的i386的ubuntu系统。
                              llvmpipe:一种用到了llvm的软渲染方式,在llvm的帮助下,其帧数远大于softpipe。是软渲染方式中的主流方式。
                              vtest:virgl_test_server的简称。是virgl的服务端服务。
                              virgl:virtual opengl的简称。全virtual OpenGL renderer,简称virglrenderer,和virgl同一个意思。
                              virtio gpu:virglrenderer的客户端。所有vtest转接的渲染方式,它的客户端都是virtio gpu。
                              zink:一个mesa的驱动编译参数,能够将opengl转化为vulkan。
                              turnip:mesa上面的一个高通驱动项目名称。目前仅支持部分高通gpu六。
                              mesa:一个由保罗最先发起的民间组织,专门逆推高通,mtk等的驱动,上面有大量逆推出来的非官方源码。
                              没有以上基础,是不能理解六合一合的是什么的。
                              第一个,
                              基于i386系统上的llvmpipe。有mesa1739,2034,等经典版本。
                              第二个
                              vtest_llvmpipe。意即通过vtest服务转接的llvmpipe软渲染,简称vtest_llvmpipe。最早起于Grima04的apk,其服务端是aarch64的linux系统,mesa可以是自带的或编译成的llvmpipe。因为它的服务端系统是aarch64,没有系统造成的帧数损失,虽然仍然是llvmpipe软渲染,相对于前面的i386系统上的llvmpipe却有较大幅度的帧数提升。茶壶的立体贴图帧数稳定是原来i386的两倍,球面贴图则16色才有两倍提升,32色只有15%到20%左右。
                              第三个
                              vtest_zink_turnip。意即通过vtest服务转接,用到了zink和turnip的一种渲染方式。因为turnip只支持部分高通gpu6的手机,所以这个渲染方式不是什么手机都能用的。
                              第四个
                              xlib_zink_turnip。mesa的glx参数更改为xlib,直接在i386系统上,通过zink和turnip调用手机gpu的一种渲染方式,简称xlib_zink_turnip。始于Grima04的mesa-zink-xlib。由alexrovxx解决了一些问题后,成功在xlib上弄出了可以被wine调用的zink_turnip。最初参数是gallium_xlib。在2021年12月03号,gallium_xlib与xlib合并,之后gallium_xlib参数消失,取而代之的是xlib。和第三个渲染方式,同为t+z,都支持部分高通gpu6的手机。直接在i386上调动gpu,少了一层转接,有着更高的帧数。但是因为xlib的驱动有一些无法解决的问题(参考gfoxsh的1739生成说明和llvmpipe),vtest_zink_turnip有时候还是需要用到的。


                              IP属地:广东来自Android客户端15楼2022-10-27 19:20
                              回复