抱歉,Xposed真的能夠隨心所欲——2.改成OV機型流暢玩耍高幀率王者農藥

一句話歸納本文java

只需20行代碼,利用Xposed Hook掉王者農藥王者獲取手機系統機型的方法, 改爲OV系的系統,以此達到流暢玩耍高幀率的目的。python


引言android

王者農藥的新賽季又到了,原本這篇是昨晚應該擼出來的,後來由於改機型 後玩得太嗨,都沒怎麼寫,慚愧:git

其實關於該機型優化已經不是什麼新鮮事了,不過前幾天在知乎上看到過話題: 如何看待 360 手機爲「優化」騰訊遊戲體驗,在遊戲模式中把本身的型號改爲了 vivo? 而後呢,你應該會好奇爲何360要這麼作,看到答題區的這幾個圖你應該就懂了:github

這個中什麼PY交易我不關心,我只知道把系統改爲Oppo或者Vivo機型的,就能夠 有多核優化和高幀率模式。而後呢,若是你手機Root了的話,直接打開 system/build.prop,修改系統相關的信息,品牌,機型,系統版本等:bash

而後呢,記得先備份,並且改了的話,有些改完手機是會GG的,好比攝像頭 用不了的等,因此並非最優方案,這個時候idea來了,若是Hook掉王者榮耀 獲取手機機型的方法,直接讓該方法返回ov系列的機型信息不就能夠了? 還記得xposed裏有個setResult()設置返回值的方法吧。套路就這樣 接下來就是一頓推敲了。ide


1.胡亂分析

分析下怎麼得到設備品牌與版本號的方法,這個谷歌或者百度一搜就有了, 都是經過android.os.Build.xxx得到:學習

點進去Build類的源碼看看:優化

嗯,都是static修飾的靜態成員,最簡單的就是直接經過Xposed提供的setStaticObjectField 直接修改爲咱們想要的值,咱們能夠把Build裏的靜態成員都打印出來,看下哪些是須要 咱們自行修改的:ui

輸出結果:(依次爲魅藍E2和Oppo R9s)

對比得出須要修改以下字段:

  • MANUFACTURERBRAND ==> OPPO
  • PRODUCTDEVICE ==> R9s
  • MODEL ==> OPPO R9s

若是要修改系統版本號:對應RELEASESDKSDK_INT字段 知道幹什麼了,接着就能夠開始寫代碼了,代碼很是簡單:

運行重啓一波,打開咱們本身的模塊,看看打印的Log:

能夠,修改爲功,打開酷(基)安看看,依次點擊我->更多->個人機型,(¯﹃¯)

滑稽,接着打開手機QQ,隨便發送一條說說,看下帶的後綴是什麼機型:


2.打開王者農藥驗證

接着就到咱們的王者榮耀了,把畫質調到最高,高幀率模式打開:

先不改機型,用魅藍色試試

這是真的感人,最高幀50,常常掉到30幀左右,特別打團的時候,最低跌到27幀, 還提示畫質下降,我也是服...接着改爲Oppo r11 plus試試?

實測,場景不怎麼複雜的時候60幀,平時基本處於50幀以上,打團的時候 也穩定在40幀以上,沒有出現過畫質下降的提示~

So,改改機型就能夠爽翻天,裏面的PY交易,你我都心知肚明


3.有個問題

通常呢,普通的APP到上面就完了,若是開發者皮一下,不是直接調Build.MODEL 這種獲取方法,而是經過反射呢?好比這樣的代碼:

這個時候拿到的仍是原來的機型:

咱們的設置就不會生效了,因而乎咱們還須要Hook掉這個getString方法

此時拿到的就是修改後的機型了

固然我是不會知足的,在源碼裏看到:

我對繼續點進去,看下**get()**方法

再跟下去:

這裏的native關鍵字說明其修飾的方法是一個原生態方法,方法對應的實現不是在 當前文件,而是在用其餘語言(如C和C++)實現的文件中。若是是改的話須要經過 JNI了,顯然咱們到了這裏就夠了,直接hook這個**native_get()**方法,而後返回品牌 或者機型。

再修改下xposed裏的代碼:

運行重啓:

能夠很穩,Hook到這裏就差很少了,接着加上包名判斷,若是打開的 是王者榮耀纔去改機型,這裏加上酷安的包名,後續真的拿來玩農藥 的話再自行去掉吧。

分別打開酷安和設置裏的關於手機

OK,沒毛病。


4.小結

代碼很是簡單,20行左右的代碼就能夠暢玩王者農藥了,在此過程當中有遇到 兩個問題,要說明下:

  • 1.低版本,hook方法不必定生效,因此仍是須要靜態設置那部分的代碼
  • 2.有時重啓後代碼並無生效,xposed Installer那裏建議關下插件再開,而後再重啓

我只是研究技術細節怎麼實現的,並不會去完善這個項目,有興趣的自行擴展, 好比加上應用和機型選擇等,在擼這一篇的時候大部分參考的是這個開源項目: github.com/kingsollyu/… 他有個更完善的開源項目(應用變量Xposed插件): github.com/kingsollyu/… 感謝開源做者的開源精神~


附:最終代碼(均可以在:github.com/coder-pig/C… 找到):

class XposedInit : IXposedHookLoadPackage {
    @SuppressLint("PrivateApi")
    override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
        when(lpparam.packageName) {
            "com.tencent.tmgp.sgame","com.coolapk.market" -> {
                //兼容低版本
                setStaticObjectField(Build::class.java, Constant.MANUFACTURER, "OPPO")
                setStaticObjectField(Build::class.java, Constant.BRAND, "OPPO")
                setStaticObjectField(Build::class.java, Constant.PRODUCT, "R11 Plus")
                setStaticObjectField(Build::class.java, Constant.DEVICE, "R11 Plus")
                setStaticObjectField(Build::class.java, Constant.MODEL, "OPPO R11 Plus")
                //應對反射獲取機型的狀況
                val c = Class.forName("android.os.SystemProperties")
                val m = c.getDeclaredMethod("native_get", String::class.java, String::class.java)
                m.isAccessible = true
                XposedBridge.hookMethod(m, object : XC_MethodHook() {
                    override fun afterHookedMethod(param: MethodHookParam) {
                        when (param.args[0].toString()) {
                            "ro.product.manufacturer", "ro.product.brand" -> param.result = "OPPO"
                            "ro.product.name", "ro.product.device" -> param.result = "R11 Plus"
                            "ro.product.model" -> param.result = "OPPO R11 Plus"
                        }
                    }
                })
            }
        }
    }
}
複製代碼

來啊,Py交易啊

想加羣一塊兒學習Py的能夠加下,智障機器人小Pig,驗證信息裏包含: PythonpythonpyPy加羣交易屁眼 中的一個關鍵詞便可經過;

驗證經過後回覆 加羣 便可得到加羣連接(不要把機器人玩壞了!!!)~~~ 歡迎各類像我同樣的Py初學者,Py大神加入,一塊兒愉快地交流學♂習,van♂轉py。

相關文章
相關標籤/搜索