优化代码

This commit is contained in:
2022-01-25 04:58:19 +08:00
parent bacff6b275
commit b14b9e02e2
2 changed files with 114 additions and 114 deletions

View File

@@ -239,41 +239,30 @@ class HookMain : IXposedHookLoadPackage {
} }
}) })
} }
/** Hook CoreService 全部方法 */ /** Hook CoreService 指定方法 */
if (lpparam.packageName == TIM_PACKAGE_NAME) if (lpparam.packageName == QQ_PACKAGE_NAME)
runWithoutError("CoreServiceAllMethods") { runWithoutError("CoreServiceKnownMethods") {
if (XPrefUtils.getBoolean(HookMedium.ENABLE_QQTIM_CORESERVICE_BAN)) { if (XPrefUtils.getBoolean(HookMedium.ENABLE_QQTIM_CORESERVICE_BAN)) {
lpparam.classLoader.loadClass("$QQ_PACKAGE_NAME.app.CoreService") XposedHelpers.findAndHookMethod(
.methods.forEach { "$QQ_PACKAGE_NAME.app.CoreService",
if (it.name != "onCreate" && it.name != "onDestroy" && it.name != "onBind") lpparam.classLoader, "startTempService", replaceToNull
XposedBridge.hookMethod(it, replaceToNull) )
} XposedHelpers.findAndHookMethod(
"$QQ_PACKAGE_NAME.app.CoreService",
lpparam.classLoader, "startCoreService", Boolean::class.java, replaceToNull
)
XposedHelpers.findAndHookMethod(
"$QQ_PACKAGE_NAME.app.CoreService",
lpparam.classLoader,
"onStartCommand",
Intent::class.java, Int::class.java, Int::class.java,
object : XC_MethodReplacement() {
override fun replaceHookedMethod(param: MethodHookParam?) = 2
})
logD("hook CoreService OK!") logD("hook CoreService OK!")
} }
} }
/** Hook CoreService 指定方法 */
else runWithoutError("CoreServiceKnownMethods") {
if (XPrefUtils.getBoolean(HookMedium.ENABLE_QQTIM_CORESERVICE_BAN)) {
XposedHelpers.findAndHookMethod(
"$QQ_PACKAGE_NAME.app.CoreService",
lpparam.classLoader, "startTempService", replaceToNull
)
XposedHelpers.findAndHookMethod(
"$QQ_PACKAGE_NAME.app.CoreService",
lpparam.classLoader, "startCoreService", Boolean::class.java, replaceToNull
)
XposedHelpers.findAndHookMethod(
"$QQ_PACKAGE_NAME.app.CoreService",
lpparam.classLoader,
"onStartCommand",
Intent::class.java, Int::class.java, Int::class.java,
object : XC_MethodReplacement() {
override fun replaceHookedMethod(param: MethodHookParam?) = 2
})
logD("hook CoreService OK!")
}
}
/** Hook CoreService 启动方法 */ /** Hook CoreService 启动方法 */
runWithoutError("CoreService") { runWithoutError("CoreService") {
if (XPrefUtils.getBoolean(HookMedium.ENABLE_QQTIM_CORESERVICE_BAN)) { if (XPrefUtils.getBoolean(HookMedium.ENABLE_QQTIM_CORESERVICE_BAN)) {
@@ -287,11 +276,12 @@ class HookMain : IXposedHookLoadPackage {
runWithoutError("StopCoreService") { runWithoutError("StopCoreService") {
stopForeground(true) stopForeground(true)
stopService(Intent(applicationContext, javaClass)) stopService(Intent(applicationContext, javaClass))
logD("Shutdown CoreService OK!")
} }
} }
} }
}) })
logD("Shutdown CoreService OK!") logD("hook CoreService [onCreate] OK!")
} }
} }
/** Hook CoreService$KernelService 启动方法 */ /** Hook CoreService$KernelService 启动方法 */
@@ -307,6 +297,7 @@ class HookMain : IXposedHookLoadPackage {
runWithoutError("StopKernelService") { runWithoutError("StopKernelService") {
stopForeground(true) stopForeground(true)
stopService(Intent(applicationContext, javaClass)) stopService(Intent(applicationContext, javaClass))
logD("Shutdown CoreService\$KernelService OK!")
} }
} }
} }
@@ -320,7 +311,7 @@ class HookMain : IXposedHookLoadPackage {
override fun replaceHookedMethod(param: MethodHookParam?) = 2 override fun replaceHookedMethod(param: MethodHookParam?) = 2
}) })
logD("Shutdown CoreService\$KernelService OK!") logD("hook CoreService\$KernelService [onCreate] OK!")
} }
} }
/** 关闭保守模式后不再仅仅作用于系统电源锁 */ /** 关闭保守模式后不再仅仅作用于系统电源锁 */
@@ -351,12 +342,13 @@ class HookMain : IXposedHookLoadPackage {
* 一个不知道是什么作用的电源锁 * 一个不知道是什么作用的电源锁
* 同样直接干掉 * 同样直接干掉
*/ */
XposedHelpers.findAndHookMethod( if (lpparam.packageName == QQ_PACKAGE_NAME)
"com.tencent.mars.ilink.comm.WakerLock", XposedHelpers.findAndHookMethod(
lpparam.classLoader, "com.tencent.mars.ilink.comm.WakerLock",
"lock", Long::class.java, lpparam.classLoader,
replaceToNull "lock", Long::class.java,
) replaceToNull
)
} }
runWithoutError("QQLSActivity") { runWithoutError("QQLSActivity") {
/** /**
@@ -400,12 +392,13 @@ class HookMain : IXposedHookLoadPackage {
* 讯哥的程序员真的有你的 * 讯哥的程序员真的有你的
* 2022/1/25 后期查证:锁屏界面消息快速回复窗口 * 2022/1/25 后期查证:锁屏界面消息快速回复窗口
*/ */
XposedHelpers.findAndHookMethod( if (lpparam.packageName == QQ_PACKAGE_NAME)
"$QQ_PACKAGE_NAME.activity.QQLSActivity\$14", XposedHelpers.findAndHookMethod(
lpparam.classLoader, "$QQ_PACKAGE_NAME.activity.QQLSActivity\$14",
"run", lpparam.classLoader,
replaceToNull "run",
) replaceToNull
)
} }
runWithoutError("WakerLockMonitor") { runWithoutError("WakerLockMonitor") {
/** /**
@@ -416,71 +409,72 @@ class HookMain : IXposedHookLoadPackage {
* 里面有各种使用 Handler 和 Timer 的各种耗时常驻后台耗电办法持续接收消息 * 里面有各种使用 Handler 和 Timer 的各种耗时常驻后台耗电办法持续接收消息
* 直接循环全部方法全部干掉 * 直接循环全部方法全部干掉
*/ */
lpparam.classLoader.loadClass("com.tencent.qapmsdk.qqbattery.monitor.WakeLockMonitor") if (lpparam.packageName == QQ_PACKAGE_NAME)
.apply { lpparam.classLoader.loadClass("com.tencent.qapmsdk.qqbattery.monitor.WakeLockMonitor")
val lockClazz = .apply {
lpparam.classLoader.loadClass("com.tencent.qapmsdk.qqbattery.monitor.WakeLockMonitor\$WakeLockEntity") val lockClazz =
val hookClazz = lpparam.classLoader.loadClass("com.tencent.qapmsdk.qqbattery.monitor.WakeLockMonitor\$WakeLockEntity")
lpparam.classLoader.loadClass("com.tencent.qapmsdk.qqbattery.monitor.MethodHookParam") val hookClazz =
val onHook = getDeclaredMethod( lpparam.classLoader.loadClass("com.tencent.qapmsdk.qqbattery.monitor.MethodHookParam")
"onHook", val onHook = getDeclaredMethod(
String::class.java, "onHook",
Any::class.java, String::class.java,
java.lang.reflect.Array.newInstance(
Any::class.java, Any::class.java,
0 java.lang.reflect.Array.newInstance(
).javaClass, Any::class.java,
Any::class.java 0
).apply { isAccessible = true } ).javaClass,
val doReport = Any::class.java
getDeclaredMethod(
"doReport",
lockClazz,
Int::class.java
).apply {
isAccessible = true
}
val afterHookedMethod =
getDeclaredMethod(
"afterHookedMethod",
hookClazz
).apply { isAccessible = true } ).apply { isAccessible = true }
val beforeHookedMethod = val doReport =
getDeclaredMethod("beforeHookedMethod", hookClazz).apply { getDeclaredMethod(
isAccessible = true "doReport",
} lockClazz,
val onAppBackground = Int::class.java
getDeclaredMethod("onAppBackground").apply { ).apply {
isAccessible = true isAccessible = true
} }
val onOtherProcReport = val afterHookedMethod =
getDeclaredMethod( getDeclaredMethod(
"onOtherProcReport", "afterHookedMethod",
Bundle::class.java hookClazz
).apply { isAccessible = true } ).apply { isAccessible = true }
val onProcessRun30Min = val beforeHookedMethod =
getDeclaredMethod("onProcessRun30Min").apply { getDeclaredMethod("beforeHookedMethod", hookClazz).apply {
isAccessible = true isAccessible = true
} }
val onProcessBG5Min = val onAppBackground =
getDeclaredMethod("onProcessBG5Min").apply { getDeclaredMethod("onAppBackground").apply {
isAccessible = true isAccessible = true
} }
val writeReport = val onOtherProcReport =
getDeclaredMethod( getDeclaredMethod(
"writeReport", "onOtherProcReport",
Boolean::class.java Bundle::class.java
).apply { isAccessible = true } ).apply { isAccessible = true }
XposedBridge.hookMethod(onHook, replaceToNull) val onProcessRun30Min =
XposedBridge.hookMethod(doReport, replaceToNull) getDeclaredMethod("onProcessRun30Min").apply {
XposedBridge.hookMethod(afterHookedMethod, replaceToNull) isAccessible = true
XposedBridge.hookMethod(beforeHookedMethod, replaceToNull) }
XposedBridge.hookMethod(onAppBackground, replaceToNull) val onProcessBG5Min =
XposedBridge.hookMethod(onOtherProcReport, replaceToNull) getDeclaredMethod("onProcessBG5Min").apply {
XposedBridge.hookMethod(onProcessRun30Min, replaceToNull) isAccessible = true
XposedBridge.hookMethod(onProcessBG5Min, replaceToNull) }
XposedBridge.hookMethod(writeReport, replaceToNull) val writeReport =
} getDeclaredMethod(
"writeReport",
Boolean::class.java
).apply { isAccessible = true }
XposedBridge.hookMethod(onHook, replaceToNull)
XposedBridge.hookMethod(doReport, replaceToNull)
XposedBridge.hookMethod(afterHookedMethod, replaceToNull)
XposedBridge.hookMethod(beforeHookedMethod, replaceToNull)
XposedBridge.hookMethod(onAppBackground, replaceToNull)
XposedBridge.hookMethod(onOtherProcReport, replaceToNull)
XposedBridge.hookMethod(onProcessRun30Min, replaceToNull)
XposedBridge.hookMethod(onProcessBG5Min, replaceToNull)
XposedBridge.hookMethod(writeReport, replaceToNull)
}
} }
logD("hook Completed!") logD("hook Completed!")
} }
@@ -506,7 +500,7 @@ class HookMain : IXposedHookLoadPackage {
override fun afterHookedMethod(param: MethodHookParam?) { override fun afterHookedMethod(param: MethodHookParam?) {
(param?.thisObject as? Activity?)?.apply { (param?.thisObject as? Activity?)?.apply {
showDialog { showDialog(isUseBlackTheme = true) {
title = "TSBattery 已激活" title = "TSBattery 已激活"
msg = "[提示模块运行信息功能已打开]\n\n" + msg = "[提示模块运行信息功能已打开]\n\n" +
"模块工作看起来一切正常,请自行测试是否能达到省电效果。\n\n" + "模块工作看起来一切正常,请自行测试是否能达到省电效果。\n\n" +

View File

@@ -27,23 +27,28 @@ import android.content.Context
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.GradientDrawable import android.graphics.drawable.GradientDrawable
/** /**
* 构造对话框 * 构造对话框
* @param isUseBlackTheme 是否使用深色主题
* @param it 对话框方法体 * @param it 对话框方法体
*/ */
fun Context.showDialog(it: DialogBuilder.() -> Unit) = DialogBuilder(this).apply(it).show() fun Context.showDialog(isUseBlackTheme: Boolean = false, it: DialogBuilder.() -> Unit) =
DialogBuilder(this, isUseBlackTheme).apply(it).show()
/** /**
* 对话框构造器 * 对话框构造器
* @param context 实例 * @param context 实例
* @param isUseBlackTheme 是否使用深色主题
*/ */
class DialogBuilder(private val context: Context) { class DialogBuilder(private val context: Context, private val isUseBlackTheme: Boolean) {
private var instance: AlertDialog.Builder? = null // 实例对象 private var instance: AlertDialog.Builder? = null // 实例对象
init { init {
instance = AlertDialog.Builder(context, android.R.style.Theme_Material_Light_Dialog) instance = AlertDialog.Builder(
context,
if (isUseBlackTheme) android.R.style.Theme_Material_Dialog else android.R.style.Theme_Material_Light_Dialog
)
} }
/** 设置对话框不可关闭 */ /** 设置对话框不可关闭 */
@@ -91,7 +96,8 @@ class DialogBuilder(private val context: Context) {
internal fun show() = instance?.create()?.apply { internal fun show() = instance?.create()?.apply {
window?.setBackgroundDrawable(GradientDrawable( window?.setBackgroundDrawable(GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM, GradientDrawable.Orientation.TOP_BOTTOM,
intArrayOf(Color.WHITE, Color.WHITE) if (isUseBlackTheme) intArrayOf(0xFF2D2D2D.toInt(), 0xFF2D2D2D.toInt())
else intArrayOf(Color.WHITE, Color.WHITE)
).apply { ).apply {
shape = GradientDrawable.RECTANGLE shape = GradientDrawable.RECTANGLE
gradientType = GradientDrawable.LINEAR_GRADIENT gradientType = GradientDrawable.LINEAR_GRADIENT