(在那老虎山上)提供: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的目的在于免除要先發(fā)送圖標到桌面,然后加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換源國內(nèi)源之類的基本使用就不講了。
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
填入數(shù)字1,保存。
nano settings
填入數(shù)字20,保存。
nano hack_settings
填入數(shù)字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轉(zhuǎn)成java模式,可以看出與0.0.1的差異。
0.0.7的overlay.smali不僅加載的so變了,還多了一個/hack_settings判斷語句。recipe.zip處也要多加一個hack_settings的文件,并寫入數(shù)字1。
以上差異就是是否能夠成功將virgl overlay 0.0.7與exagear合體的主要要點。
用0.0.1合體的方法原封不變則會合體失敗。需要稍微調(diào)整下。
virgl overlay 0.0.7與exagear合體的教程完。
virGLOverlay_suhang2040_007.apk為合體好后的apk。