欢迎光临散文网 会员登陆 & 注册

(在那老虎山上)提供:virgl overlay与exagear合体教程v2

2022-03-20 10:13 作者:霸者一方  | 我要投稿
如果不想知道教程,直接跳到278行看使用说明。使用说明,若不看,则不会用额。

需要准备的工具有
apktool_m用于反编回编签名apk。手机不能使用apktool_m的,自个想其它办法,如上电脑用电脑上工具,能正常反编回编的即可。
mt管理器用于修改反编出来后的smali等文件,易操作。
termux用于修改recipe.zip。
需要准备的素材有:
virgl overlay 0.0.7版本的apk一个。
exagear模拟器的apk一个。教程用到的apk是virGLOverlay_suhang2040.apk,共享用户名为com.suhang.test。其它安兔兔版本和原版模拟器的apk,想合体就依样画胡。

下面是教程。
首先,将virgl overlay 和exagear分别反编。需反编译全部,即将反编译资源和classes.dex两个选项都点上。点上反编译classes.dex,反编译后才会生成smali目录。点上反编译资源,反编译后才会有values目录。在这个教程中动不到资源,可以不反编资源,仅仅是个人习惯。在本教程中classes.dex是一定要反编出来的。
将exagear的apk反编译后生成的smali目录重命名为smali_classes2
将virgloverlay的apk反编译后生成的smali目录整个移进exagear的apk反编后生成的目录下,即与smali_classes2目录处于同一个目录下。即/storage/emulated/0/BaiduNetdisk/我的资源/virGLOverlay_suhang2040_src目录下。名字保持smali不变。

然后将virgl-overlay-rebuild-v.0.0.7-gen_signed_src/lib/armeabi-v7a/目录下的libepoxy-lib.so和libvirgl-lib.so两个virgl overlay 0.0.7的so移到virGLOverlay_suhang2040_src/lib/armeabi-v7a/目录下。

移好smali目录和那两个so后,virgl overlay 与exagear合体需要改动的文件有:
一,清单文件AndroidManifest.xml。
二,virGLOverlay_suhang2040_src/smali_classes2/com/eltechs/axs/configuration/目录下的UBTLaunchConfiguration.smali。
三,virGLOverlay_suhang2040_src/smali_classes2/com/ludashi/benchmark/activities/目录下的EDMainActivity.smali。
四,virGLOverlay_suhang2040_src/smali/com/mittorn/virgloverlay/common/目录下的overlay.smali。
五,virGLOverlay_suhang2040_src/assets/目录下的recipe.zip。

关于清单文件AndroidManifest.xml的修改:
修改前:
                <action
                    android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>
        <service
            android:name="com.eltechs.axs.environmentService.AXSEnvironmentService">
修改后:
                <action
                    android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>
        <service
            android:name="com.mittorn.virgloverlay.process.p1"
            android:exported="true"
            android:process=":p1" />
        <service
            android:name="com.eltechs.axs.environmentService.AXSEnvironmentService">
即在这里插入了virgloverlay那几行,这几行来自virgl overlay的清单文件。搜索com.eltechs.axs.environmentService.AXSEnvironmentService能快速定位到此行。


关于UBTLaunchConfiguration.smali的修改:
修改前:
    invoke-interface {v3, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 138
修改后:
    invoke-interface {v3, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    iget-object v3, p0, Lcom/eltechs/axs/configuration/UBTLaunchConfiguration;->guestEnvironmentVariables:Ljava/util/List;

    const-string v4, "VTEST_SOCK="

    invoke-interface {v3, v4}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 138
即在line 138前面增加了三行,三行如上所示。修改UBTLaunchConfiguration.smali的目的在于免除要先发送图标到桌面,然后加VTEST_SOCK=来使用virgl overlay的步骤。
搜line 138能快速定位到此行。


关于EDMainActivity.smali的修改:
修改前:
    .line 76
    invoke-super {p0, p1}, Lcom/eltechs/axs/activities/FrameworkActivity;->onCreate(Landroid/os/Bundle;)V

    const v0, 0x7f0b0035

    .line 78
修改后:
    .line 76
    invoke-super {p0, p1}, Lcom/eltechs/axs/activities/FrameworkActivity;->onCreate(Landroid/os/Bundle;)V

    new-instance v0, Landroid/content/Intent;

    invoke-direct {v0}, Landroid/content/Intent;-><init>()V

    const-string v1, "com.mittorn.virgloverlay.process.p1"

    invoke-virtual {v0, p0, v1}, Landroid/content/Intent;->setClassName(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent;

    move-result-object v0

    invoke-virtual {p0, v0}, Lcom/mittorn/virgloverlay/MainActivity;->startService(Landroid/content/Intent;)Landroid/content/ComponentName;

    const v0, 0x7f0b0035

    .line 78
即增加了virgl overlay 的p1进程。搜line 76能快速定位到此行。此处是打开模拟器即启动virgl服务,若要与turnip版本合体,就不要修改此处。最后在# virtual methods
的后面加上virgl服务的开启和关闭,EDMainActivity.smali就修改完成。增加的内容如下:
.method public onClickClean(Landroid/view/View;)V
    .locals 3

    new-instance v0, Landroid/content/Intent;

    invoke-direct {v0}, Landroid/content/Intent;-><init>()V

    const-string v1, "com.mittorn.virgloverlay.process.p1"

    invoke-virtual {v0, p0, v1}, Landroid/content/Intent;->setClassName(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent;

    move-result-object v0

    invoke-virtual {p0, v0}, Lcom/ludashi/benchmark/activities/EDMainActivity;->stopService(Landroid/content/Intent;)Z

    return-void
.end method

.method public onClickStart(Landroid/view/View;)V
    .locals 11

    new-instance v0, Landroid/content/Intent;

    invoke-direct {v0}, Landroid/content/Intent;-><init>()V

    const-string v1, "com.mittorn.virgloverlay.process.p1"

    invoke-virtual {v0, p0, v1}, Landroid/content/Intent;->setClassName(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent;

    move-result-object v0

    invoke-virtual {p0, v0}, Lcom/ludashi/benchmark/activities/EDMainActivity;->startService(Landroid/content/Intent;)Landroid/content/ComponentName;

    return-void
.end method


关于overlay.smali的修改:
overlay.smali这个文件,需要修改三处。
用mt管理器搜索settings,能找到这三处的具体位置。
第一处
修改前:
    move-result-object v0

    const-string v1, "/layout_settings"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
修改后:
    move-result-object v0

    const-string v1, "/image/opt/recipe/layout_settings"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

第二处
修改前:
    move-result-object p0

    const-string v0, "/settings"

    invoke-virtual {p0, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
修改后:
    move-result-object p0

    const-string v0, "/image/opt/recipe/settings"

    invoke-virtual {p0, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

第三处
修改前:
    move-result-object v0

    const-string v1, "/hack_settings"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
修改后:
    move-result-object v0

    const-string v1, "/image/opt/virgl/hack_settings"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
即将搜索settings搜到的/layout_settings,/settings,/hack_settings,前面都加上/image/opt/recipe。/hack_settings,前面加上/image/opt/virgl。


关于recipe.zip的修改:
打开termux。pkg update换源国内源之类的基本使用就不讲了。
pkg install zip unzip nano -y。需要用unzip和zip命令对recipe.zip进行解压和打包。需要用nano进行修改。
将recipe.zip放到手机存储根目录。
termux需要在手机设置里给存储权限。
在termux的~目录,随意新建个目录如ok。
cd ~
mkdir ok
cd ok
unzip /sdcard/recipe.zip
nano layout_settings
填入数字1,保存。
nano settings
填入数字20,保存。
nano hack_settings
填入数字0 0 0 0 0 ,保存。
nano hack_settings_dxtn
填入数字0 0 0 0 1 ,保存。数字之间用空格隔开,4个0,1后面还有一个空格。
nano ed.conf
填入:
pulse=0
hud=0
dxtn=0
保存ed.conf
nano run/simple.sh
填入:
#!/bin/bash

. /opt/recipe/util/progress.sh

if [ "$(locale -a | grep $LC_ALL)" != "$LC_ALL" ]; then
    progress "-1" "Generating locale..."
    locale-gen --no-archive $LC_ALL
fi

progress "-1" "Launching application..."
export PATH
export TERM
export LD_PRELOAD=/opt/recipe/run/hardlink_to_symlink.so
/opt/recipe/run/sshd &

ed=/storage/emulated/0/Exagear/ed
virgl=/opt/virgl

if [ ! -f $ed/ed.conf ]; then
mkdir -p $ed
cp /opt/recipe/ed.conf $ed/ed.conf
fi

if [ ! -f $virgl/hack_settings ]; then
mkdir -p $virgl
cp /opt/recipe/hack_settings $virgl/hack_settings
fi

. $ed/ed.conf



if [ "${pulse}" = "1" ]; then
export PULSE_SERVER="tcp:127.0.0.1"
fi

if [ "${hud}" = "1" ]; then
export GALLIUM_HUD="simple,fps"
fi

if [ "${dxtn}" = "0" ]; then
cp /opt/recipe/hack_settings $virgl/hack_settings
fi

if [ "${dxtn}" = "1" ]; then
cp /opt/recipe/hack_settings_dxtn $virgl/hack_settings
fi

progress "-1" "Pulse=${pulse}/Hud=${hud}/DXTn=${dxtn}"

eval "$@"
保存run/simple.sh。注意改的是run目录下的simple.sh。
chmod 777 -R *
给所有文件加上777的权限。
rm /sdcard/recipe.zip
删除放在手机存储根目录的recipe.zip。
zip --symlinks -r /sdcard/recipe.zip .
zip命令打包修改好的recipe.zip。注意上面的打包命令recipe.zip后面接一个空格然后是一个英文的符号点。生成的新recipe.zip即在手机存储根目录。
将改好的recipe.zip放入virGLOverlay_suhang2040_src/assets/目录下。
然后apktool_m回编,合体完成。

其它:将virgl overlay 0.0.7与exagear合体。
跟将virgl overlay 0.0.1与exagear合体的主要不同之处在于:
virgl overlay 0.0.1的so只有一个libnative-lib.so。0.0.7版本有两个。
0.0.7的overlay.smali有三处地方需要修改,多一个/hack_settings需要修改。
overlay.smali用aktool_m转成java模式,可以看出与0.0.1的差异。
0.0.7的overlay.smali不仅加载的so变了,还多了一个/hack_settings判断语句。recipe.zip处也要多加一个hack_settings的文件,并写入0 0 0 0 1 。
以上差异就是是否能够成功将virgl overlay 0.0.7与exagear合体的主要要点。
用0.0.1合体的方法原封不变则会合体失败。需要稍微调整下。

virgl overlay 0.0.7与exagear合体的教程v2完。
virGLOverlay_suhang2040_007_v2.apk为合体好后的apk。

v2版使用说明:
手机存储根目录/Exagear/ed/ed.conf这个文件中,0是关,1是开。
pulse=1#打开pulseaudio。pulseaudio服务端要用termux的。如上面的教程所示,export PULSE_SERVER="tcp:127.0.0.1"。写的是127.0.0.1。xdsdl是用export PULSE_SERVER="tcp:127.0.0.1:4713"的。
hud=1#打开mesa的帧数显示。但是,经测试,virgl overlay 0.0.7不能正常开hud,会导致茶壶不会动,游戏黑屏有声等问题,要保持hud关闭,即设为0。
dxtn=1#打开virgl overlay 0.0.7版本的DXTn选项。
只有apk,没有数据包,自备即可,建议使用前官方eltechs的wine30,mesa用GFOXSH的1830。

v2版更新说明:
v2版本可以在不关闭模拟器的情况下,开启和关闭virgl服务。
可以通过ed.conf开关DXTn。
你在开启和关闭virgl服务的上面看到的那些设置选项是没用的。只是添加上了菜单,因为一些java冲突的问题,尚不可用。

最后:
若未能解决添加的那些设置选项无效的问题。则不再更新。
如何添加的这些菜单,未写在上面的教程中,因为写起来会教程较长,且尚未成功。
virgl-overlay-rebuild-v.0.0.7-gen_signed.apk为A大神发布的原版apk,共享用户名为com.test.test。
virgl-overlay-rebuild-v.0.0.7-gen_signed_mcat.apk共享用户名为com.mact。
virgl-overlay-rebuild-v.0.0.7-gen_signed_suhang.apk共享用户名为com.suhang.test。
均为默认的apk签名。
分别搭配同共享用户名和同应用签名的模拟器的apk使用。


(在那老虎山上)提供:virgl overlay与exagear合体教程v2的评论 (共 条)

分享到微博请遵守国家法律