diff --git a/app/src/main/assets/app_rules.json b/app/src/main/assets/app_rules.json index 677cb00..d1f2117 100644 --- a/app/src/main/assets/app_rules.json +++ b/app/src/main/assets/app_rules.json @@ -400,8 +400,23 @@ "remarks": "" } ] + }, + { + "packageName": "com.netease.cloudmusic.lite", + "name": "网易云音乐极速版", + "rules": [ + { + "startVersionCode": 0, + "endVersionCode": 2147483647, + "excludeVersions": [], + "apiVersion": 0, + "useApi": false, + "getLyricType": 2, + "remarks": "" + } + ] } ], - "appRulesVersion": 4, + "appRulesVersion": 5, "version": 3 } diff --git a/app/src/main/java/cn/lyric/getter/hook/MainHook.kt b/app/src/main/java/cn/lyric/getter/hook/MainHook.kt index f910f20..55dd47d 100644 --- a/app/src/main/java/cn/lyric/getter/hook/MainHook.kt +++ b/app/src/main/java/cn/lyric/getter/hook/MainHook.kt @@ -13,6 +13,7 @@ import cn.lyric.getter.hook.app.Meizu import cn.lyric.getter.hook.app.MiPlayer import cn.lyric.getter.hook.app.MobileMusic import cn.lyric.getter.hook.app.Netease +import cn.lyric.getter.hook.app.NeteaseLite import cn.lyric.getter.hook.app.QQMusic import cn.lyric.getter.hook.app.Qinalt import cn.lyric.getter.hook.app.RPlayer @@ -36,6 +37,7 @@ class MainHook : IXposedHookLoadPackage, IXposedHookZygoteInit { "com.tencent.qqmusic" -> initHooks(QQMusic) "com.miui.player" -> initHooks(MiPlayer) "com.netease.cloudmusic" -> initHooks(Netease) + "com.netease.cloudmusic.lite" -> initHooks(NeteaseLite) "com.kugou.android", "com.kugou.android.lite" -> initHooks(Kugou) "cn.kuwo.player" -> initHooks(Kuwo) "remix.myplayer" -> initHooks(APlayer) diff --git a/app/src/main/java/cn/lyric/getter/hook/app/Netease.kt b/app/src/main/java/cn/lyric/getter/hook/app/Netease.kt index 2a163e5..c38bc7d 100644 --- a/app/src/main/java/cn/lyric/getter/hook/app/Netease.kt +++ b/app/src/main/java/cn/lyric/getter/hook/app/Netease.kt @@ -1,7 +1,6 @@ package cn.lyric.getter.hook.app import android.annotation.SuppressLint -import android.content.Context import cn.lyric.getter.hook.BaseHook import cn.lyric.getter.tool.HookTools import cn.lyric.getter.tool.HookTools.MockFlyme @@ -17,25 +16,27 @@ import org.luckypray.dexkit.DexKitBridge @SuppressLint("StaticFieldLeak") object Netease : BaseHook() { + init { + System.loadLibrary("dexkit") + } + override fun init() { super.init() MockFlyme().mock() fuckTinker() HookTools.getApplication { - System.loadLibrary("dexkit") val verCode = it.packageManager?.getPackageInfo(it.packageName, 0)?.versionCode ?: 0 - verCode.log() if (verCode >= 8000041 || it.packageName == "com.hihonor.cloudmusic") { DexKitBridge.create(it.classLoader, false).use { use -> use.apply { - val result = findMethod { + val result = findClass { matcher { addEqString("StatusBarLyricController") - returnType = Void::class.java.name - paramTypes(Context::class.java) +// returnType = Void::class.java.name +// paramTypes(Context::class.java) } - }.single() - loadClass(result.declaredClassName).methodFinder().filterByParamCount(0).filterByReturnType(String::class.java).first().createHook { + }.log()!!.single() + loadClass(result.name).methodFinder().filterByParamCount(0).filterByReturnType(String::class.java).first().createHook { after { hookParam -> eventTools.sendLyric(hookParam.result as String) } diff --git a/app/src/main/java/cn/lyric/getter/hook/app/NeteaseLite.kt b/app/src/main/java/cn/lyric/getter/hook/app/NeteaseLite.kt new file mode 100644 index 0000000..ec4a148 --- /dev/null +++ b/app/src/main/java/cn/lyric/getter/hook/app/NeteaseLite.kt @@ -0,0 +1,47 @@ +package cn.lyric.getter.hook.app + +import android.view.View +import cn.lyric.getter.hook.BaseHook +import cn.lyric.getter.tool.HookTools +import cn.xiaowine.xkt.LogTool.log +import cn.xiaowine.xkt.Tool +import com.github.kyuubiran.ezxhelper.ClassUtils.loadClass +import com.github.kyuubiran.ezxhelper.HookFactory.`-Static`.createHook +import com.github.kyuubiran.ezxhelper.finders.ConstructorFinder.`-Static`.constructorFinder +import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinder +import org.luckypray.dexkit.DexKitBridge + +object NeteaseLite : BaseHook() { + init { + System.loadLibrary("dexkit") + } + + var lyric: String by Tool.observableChange("") { _, _, newValue -> + HookTools.eventTools.sendLyric(newValue) + } + + override fun init() { + super.init() + loadClass("com.netease.cloudmusic.meta.LyricLine").methodFinder().filterByName("getContent").first().createHook { + after { + lyric = it.result.toString() + } + } + HookTools.getApplication { application -> + DexKitBridge.create(application.classLoader, false).use { dexKitBridge -> + dexKitBridge.apply { + val single = findClass { + matcher { + addEqString("JwsARRhTXw==") + } + }.log()!!.single() + loadClass(single.name).constructorFinder().first().createHook { + after { + (it.thisObject as View).visibility = View.GONE + } + } + } + } + } + } +} diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 057e832..7b4772d 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -24,5 +24,6 @@ com.xuncorp.qinalt.music statusbar.finder com.hihonor.cloudmusic + com.netease.cloudmusic.lite