From d0993ef56a387c8ff5cc4dff69e9858bf7bfc26a Mon Sep 17 00:00:00 2001 From: GangJust Date: Mon, 8 Jul 2024 16:26:49 +0800 Subject: [PATCH] optimize --- .../ugc/aweme/video/simplayer/ISimPlayer.java | 5 ++ .../fplus/core/helper/SpeedPlayHelper.kt | 64 +++++++++++++++++++ .../github/fplus/core/hook/HCrashTolerance.kt | 14 +--- 3 files changed, 71 insertions(+), 12 deletions(-) create mode 100644 aweme/src/main/java/com/ss/android/ugc/aweme/video/simplayer/ISimPlayer.java create mode 100644 core/src/main/java/io/github/fplus/core/helper/SpeedPlayHelper.kt diff --git a/aweme/src/main/java/com/ss/android/ugc/aweme/video/simplayer/ISimPlayer.java b/aweme/src/main/java/com/ss/android/ugc/aweme/video/simplayer/ISimPlayer.java new file mode 100644 index 0000000..a3c9162 --- /dev/null +++ b/aweme/src/main/java/com/ss/android/ugc/aweme/video/simplayer/ISimPlayer.java @@ -0,0 +1,5 @@ +package com.ss.android.ugc.aweme.video.simplayer; + +public interface ISimPlayer { + void setSpeed(float speed); +} diff --git a/core/src/main/java/io/github/fplus/core/helper/SpeedPlayHelper.kt b/core/src/main/java/io/github/fplus/core/helper/SpeedPlayHelper.kt new file mode 100644 index 0000000..476f8bf --- /dev/null +++ b/core/src/main/java/io/github/fplus/core/helper/SpeedPlayHelper.kt @@ -0,0 +1,64 @@ +package io.github.fplus.core.helper + +import android.app.Activity +import android.content.Context +import com.freegang.extension.findFieldGetValue +import com.freegang.extension.findMethodInvoke +import com.ss.android.ugc.aweme.video.simplayer.ISimPlayer +import io.github.xpler.core.findClass +import io.github.xpler.core.log.XplerLog +import io.github.xpler.core.lpparam +import io.github.xpler.loader.hostClassloader + +// 暂存 +@ExperimentalStdlibApi +object SpeedPlayHelper { + + // 30.5.0_300501 + @ExperimentalStdlibApi + fun setSpeed(speed: Float) { + runCatching { + val helperClazz = lpparam.findClass("X.0BRk") // future + val helper = helperClazz.findFieldGetValue { type(helperClazz) } + val simPlayer = helper?.findMethodInvoke { returnType(ISimPlayer::class.java) } + simPlayer?.setSpeed(speed) + }.onFailure { + XplerLog.e(it) + } + } + + // 30.5.0_300501 + @ExperimentalStdlibApi + fun setSpeed(context: Context, aid: String, fragmentTag: String, speed: Float) { + XplerLog.i("aid: $aid", "fragmentTag: $fragmentTag", "speed: $speed") + + val speedViewModelClazz = lpparam.findClass("X.0BUf", hostClassloader) // future + val activityUtilClazz = lpparam.findClass("com.bytedance.bdp.bdpbase.util.ActivityUtil", hostClassloader) + val tripleClazz = lpparam.findClass("kotlin.Triple", hostClassloader) + + val activityIfNecessary = activityUtilClazz.findMethodInvoke(context) { name("getActivityIfNecessary") } + if (activityIfNecessary != null) { + val viewModel = getViewModel(activityIfNecessary, speedViewModelClazz) + val liveData = viewModel?.findFieldGetValue { name("LIZ") } // future + + val triple = tripleClazz + .getConstructor(Any::class.java, Any::class.java, Any::class.java) + .newInstance(aid, fragmentTag, speed) + + liveData?.findMethodInvoke(triple) { name("setValue") } + } else { + XplerLog.e("speed ViewModel not found!") + } + } + + // activity must be extends FragmentActivity + private fun getViewModel(activity: Activity, vm: Class<*>): Any? { + val viewModelProvidersClazz = lpparam.findClass("androidx.lifecycle.ViewModelProviders", hostClassloader) + val fragmentActivityClazz = lpparam.findClass("androidx.fragment.app.FragmentActivity", hostClassloader) + val viewModelProvider = viewModelProvidersClazz.findMethodInvoke(activity) { + name("of") + parameterTypes(listOf(fragmentActivityClazz)) + } + return viewModelProvider?.findMethodInvoke(vm) { name("get") } + } +} \ No newline at end of file diff --git a/core/src/main/java/io/github/fplus/core/hook/HCrashTolerance.kt b/core/src/main/java/io/github/fplus/core/hook/HCrashTolerance.kt index a71d0e3..275710c 100644 --- a/core/src/main/java/io/github/fplus/core/hook/HCrashTolerance.kt +++ b/core/src/main/java/io/github/fplus/core/hook/HCrashTolerance.kt @@ -1,35 +1,25 @@ package io.github.fplus.core.hook -import com.freegang.ktutils.app.KAppUtils -import com.freegang.ktutils.app.KToastUtils import com.ss.android.ugc.aweme.feed.model.VideoItemParams import com.ss.android.ugc.aweme.kiwi.model.QModel import de.robv.android.xposed.XC_MethodHook import io.github.fplus.core.base.BaseHook import io.github.fplus.core.config.ConfigV1 import io.github.fplus.core.helper.DexkitBuilder -import io.github.xpler.core.entity.EmptyHook import io.github.xpler.core.entity.NoneHook import io.github.xpler.core.entity.OnAfter import io.github.xpler.core.hookBlockRunning import io.github.xpler.core.wrapper.CallMethods /// 崩溃容错,处理官方可能造成的系列崩溃问题 -class HCrashTolerance : BaseHook() { +class HCrashTolerance { companion object { const val TAG = "HCrashTolerance" } val config get() = ConfigV1.get() - override fun setTargetClass(): Class<*> { - return EmptyHook::class.java - } - - override fun onInit() { - // if (!config.isCrashTolerance) - // return - + init { HPoiFeed() HLivePhoto() HTabLanding()