(在那老虎山上)提供:exagear与overlay合并教程
需要准备的工具有
apktool_m用于反编回编签名apk。手机不能使用apktool_m的,自个想其它办法,如上电脑用电脑上工具,能正常反编回编的即可。
mt管理器用于修改反编出来后的smali等文件,易操作。
termux用于修改recipe.zip。
需要准备的素材有:
virgl overlay 0.0.7版本的apk一个。
exagear模拟器的apk一个。教程用到的apk是virGLOverlay_suhang2040.apk。其它安兔兔和原版模拟器的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.mittorn.virgloverlay.process.p2"
android:exported="true"
android:process=":p2" />
<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能快速定位到此行。
关于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/recipe/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。
关于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
填入数字1,保存。
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的文件,并写入数字1。
以上差异就是是否能够成功将virgl overlay 0.0.7与exagear合体的主要要点。
用0.0.1合体的方法原封不变则会合体失败。需要稍微调整下。
virgl overlay 0.0.7与exagear合体的教程完。
virGLOverlay_suhang2040_007.apk为合体好后的apk。