mirror of
https://github.com/fankes/TSBattery.git
synced 2025-09-07 03:06:06 +08:00
Fix change hook entry inject function try fix some Non-Root Hook Framework not work, such as TaiChi
This commit is contained in:
@@ -24,15 +24,11 @@
|
|||||||
package com.fankes.tsbattery.hook
|
package com.fankes.tsbattery.hook
|
||||||
|
|
||||||
import com.fankes.tsbattery.const.PackageName
|
import com.fankes.tsbattery.const.PackageName
|
||||||
import com.fankes.tsbattery.data.ConfigData
|
|
||||||
import com.fankes.tsbattery.hook.entity.QQTIMHooker
|
import com.fankes.tsbattery.hook.entity.QQTIMHooker
|
||||||
import com.fankes.tsbattery.hook.entity.WeChatHooker
|
import com.fankes.tsbattery.hook.entity.WeChatHooker
|
||||||
import com.fankes.tsbattery.utils.factory.versionName
|
|
||||||
import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed
|
import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed
|
||||||
import com.highcapable.yukihookapi.hook.factory.configs
|
import com.highcapable.yukihookapi.hook.factory.configs
|
||||||
import com.highcapable.yukihookapi.hook.factory.encase
|
import com.highcapable.yukihookapi.hook.factory.encase
|
||||||
import com.highcapable.yukihookapi.hook.factory.registerModuleAppActivities
|
|
||||||
import com.highcapable.yukihookapi.hook.param.PackageParam
|
|
||||||
import com.highcapable.yukihookapi.hook.xposed.proxy.IYukiHookXposedInit
|
import com.highcapable.yukihookapi.hook.xposed.proxy.IYukiHookXposedInit
|
||||||
|
|
||||||
@InjectYukiHookWithXposed(isUsingResourcesHook = false)
|
@InjectYukiHookWithXposed(isUsingResourcesHook = false)
|
||||||
@@ -50,31 +46,9 @@ class HookEntry : IYukiHookXposedInit {
|
|||||||
isEnableDataChannel = false
|
isEnableDataChannel = false
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 装载对象是否为 QQ、TIM、微信
|
|
||||||
* @return [Boolean]
|
|
||||||
*/
|
|
||||||
private fun PackageParam.isCurrentScope() = packageName.let { it == PackageName.QQ || it == PackageName.TIM || it == PackageName.WECHAT }
|
|
||||||
|
|
||||||
override fun onHook() = encase {
|
override fun onHook() = encase {
|
||||||
loadApp {
|
loadApp(PackageName.QQ) { loadHooker(QQTIMHooker) }
|
||||||
if (isCurrentScope()) onAppLifecycle {
|
loadApp(PackageName.TIM) { loadHooker(QQTIMHooker) }
|
||||||
attachBaseContext { baseContext, hasCalledSuper ->
|
loadApp(PackageName.WECHAT) { loadHooker(WeChatHooker) }
|
||||||
if (hasCalledSuper) return@attachBaseContext
|
|
||||||
ConfigData.init(baseContext)
|
|
||||||
when (baseContext.packageName) {
|
|
||||||
PackageName.QQ, PackageName.TIM -> loadHooker(QQTIMHooker.apply { appVersionName = baseContext.versionName })
|
|
||||||
PackageName.WECHAT -> loadHooker(WeChatHooker)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onCreate {
|
|
||||||
when (packageName) {
|
|
||||||
PackageName.QQ, PackageName.TIM ->
|
|
||||||
registerModuleAppActivities(proxy = "${PackageName.QQ}.activity.QQSettingSettingActivity")
|
|
||||||
PackageName.WECHAT -> registerModuleAppActivities(proxy = "${PackageName.WECHAT}.plugin.welab.ui.WelabMainUI")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -35,13 +35,13 @@ import com.fankes.tsbattery.hook.factory.hookSystemWakeLock
|
|||||||
import com.fankes.tsbattery.hook.factory.jumpToModuleSettings
|
import com.fankes.tsbattery.hook.factory.jumpToModuleSettings
|
||||||
import com.fankes.tsbattery.hook.factory.startModuleSettings
|
import com.fankes.tsbattery.hook.factory.startModuleSettings
|
||||||
import com.fankes.tsbattery.utils.factory.dp
|
import com.fankes.tsbattery.utils.factory.dp
|
||||||
|
import com.fankes.tsbattery.utils.factory.versionName
|
||||||
import com.highcapable.yukihookapi.hook.bean.VariousClass
|
import com.highcapable.yukihookapi.hook.bean.VariousClass
|
||||||
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
|
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
|
||||||
import com.highcapable.yukihookapi.hook.factory.buildOf
|
import com.highcapable.yukihookapi.hook.factory.*
|
||||||
import com.highcapable.yukihookapi.hook.factory.current
|
|
||||||
import com.highcapable.yukihookapi.hook.factory.field
|
|
||||||
import com.highcapable.yukihookapi.hook.log.loggerD
|
import com.highcapable.yukihookapi.hook.log.loggerD
|
||||||
import com.highcapable.yukihookapi.hook.log.loggerE
|
import com.highcapable.yukihookapi.hook.log.loggerE
|
||||||
|
import com.highcapable.yukihookapi.hook.log.loggerI
|
||||||
import com.highcapable.yukihookapi.hook.type.android.*
|
import com.highcapable.yukihookapi.hook.type.android.*
|
||||||
import com.highcapable.yukihookapi.hook.type.java.*
|
import com.highcapable.yukihookapi.hook.type.java.*
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@ object QQTIMHooker : YukiBaseHooker() {
|
|||||||
private val isQQ get() = packageName == PackageName.QQ
|
private val isQQ get() = packageName == PackageName.QQ
|
||||||
|
|
||||||
/** 当前宿主的版本 */
|
/** 当前宿主的版本 */
|
||||||
var appVersionName = "<unknown>"
|
private var appVersionName = "<unknown>"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 这个类 QQ 的 BaseChatPie 是控制聊天界面的
|
* 这个类 QQ 的 BaseChatPie 是控制聊天界面的
|
||||||
@@ -500,6 +500,21 @@ object QQTIMHooker : YukiBaseHooker() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onHook() {
|
override fun onHook() {
|
||||||
|
onAppLifecycle {
|
||||||
|
onCreate {
|
||||||
|
appVersionName = versionName
|
||||||
|
ConfigData.init(context = this)
|
||||||
|
registerModuleAppActivities(QQSettingSettingActivityClass)
|
||||||
|
if (ConfigData.isDisableAllHook) return@onCreate
|
||||||
|
hookSystemWakeLock()
|
||||||
|
hookQQBaseChatPie()
|
||||||
|
hookCoreService()
|
||||||
|
hookQQDisgusting()
|
||||||
|
loggerI(msg = "All processes are completed for \"${processName.takeIf { it != packageName } ?: packageName}\"")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/** 仅注入主进程 */
|
||||||
|
withProcess(mainProcessName) {
|
||||||
/** Hook 跳转事件 */
|
/** Hook 跳转事件 */
|
||||||
JumpActivityClass.hook {
|
JumpActivityClass.hook {
|
||||||
injectMember {
|
injectMember {
|
||||||
@@ -553,14 +568,6 @@ object QQTIMHooker : YukiBaseHooker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ConfigData.isDisableAllHook) return
|
}
|
||||||
/** Hook 系统电源锁 */
|
|
||||||
hookSystemWakeLock()
|
|
||||||
/** Hook 聊天界面 */
|
|
||||||
hookQQBaseChatPie()
|
|
||||||
/** Hook CoreService */
|
|
||||||
hookCoreService()
|
|
||||||
/** Hook QQ 不省电的功能 */
|
|
||||||
hookQQDisgusting()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -36,10 +36,14 @@ import com.fankes.tsbattery.hook.factory.jumpToModuleSettings
|
|||||||
import com.fankes.tsbattery.hook.factory.startModuleSettings
|
import com.fankes.tsbattery.hook.factory.startModuleSettings
|
||||||
import com.fankes.tsbattery.utils.factory.absoluteStatusBarHeight
|
import com.fankes.tsbattery.utils.factory.absoluteStatusBarHeight
|
||||||
import com.fankes.tsbattery.utils.factory.dp
|
import com.fankes.tsbattery.utils.factory.dp
|
||||||
|
import com.fankes.tsbattery.utils.factory.versionCode
|
||||||
|
import com.fankes.tsbattery.utils.factory.versionName
|
||||||
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
|
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
|
||||||
import com.highcapable.yukihookapi.hook.factory.current
|
import com.highcapable.yukihookapi.hook.factory.current
|
||||||
import com.highcapable.yukihookapi.hook.factory.injectModuleAppResources
|
import com.highcapable.yukihookapi.hook.factory.injectModuleAppResources
|
||||||
import com.highcapable.yukihookapi.hook.log.loggerD
|
import com.highcapable.yukihookapi.hook.factory.processName
|
||||||
|
import com.highcapable.yukihookapi.hook.factory.registerModuleAppActivities
|
||||||
|
import com.highcapable.yukihookapi.hook.log.loggerI
|
||||||
import com.highcapable.yukihookapi.hook.type.android.BundleClass
|
import com.highcapable.yukihookapi.hook.type.android.BundleClass
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -52,10 +56,33 @@ object WeChatHooker : YukiBaseHooker() {
|
|||||||
/** 微信存在的类 - 未测试每个版本是否都存在 */
|
/** 微信存在的类 - 未测试每个版本是否都存在 */
|
||||||
const val LauncherUIClass = "${PackageName.WECHAT}.ui.LauncherUI"
|
const val LauncherUIClass = "${PackageName.WECHAT}.ui.LauncherUI"
|
||||||
|
|
||||||
|
/** 微信存在的类 - 未测试每个版本是否都存在 */
|
||||||
|
private const val EmptyActivityClass = "${PackageName.WECHAT}.ui.EmptyActivity"
|
||||||
|
|
||||||
|
/** 微信存在的类 - 未测试每个版本是否都存在 */
|
||||||
|
private const val WelabMainUIClass = "${PackageName.WECHAT}.plugin.welab.ui.WelabMainUI"
|
||||||
|
|
||||||
/** 微信存在的类 - 未测试每个版本是否都存在 */
|
/** 微信存在的类 - 未测试每个版本是否都存在 */
|
||||||
private const val SettingsUIClass = "${PackageName.WECHAT}.plugin.setting.ui.setting.SettingsUI"
|
private const val SettingsUIClass = "${PackageName.WECHAT}.plugin.setting.ui.setting.SettingsUI"
|
||||||
|
|
||||||
override fun onHook() {
|
override fun onHook() {
|
||||||
|
onAppLifecycle {
|
||||||
|
onCreate {
|
||||||
|
ConfigData.init(context = this)
|
||||||
|
registerModuleAppActivities(
|
||||||
|
when {
|
||||||
|
EmptyActivityClass.hasClass() -> EmptyActivityClass
|
||||||
|
WelabMainUIClass.hasClass() -> WelabMainUIClass
|
||||||
|
else -> error("Inject WeChat Activity Proxy failed, unsupport version $versionName($versionCode)")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
if (ConfigData.isDisableAllHook) return@onCreate
|
||||||
|
hookSystemWakeLock()
|
||||||
|
loggerI(msg = "All processes are completed for \"${processName.takeIf { it != packageName } ?: packageName}\"")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/** 仅注入主进程 */
|
||||||
|
withProcess(mainProcessName) {
|
||||||
/** Hook 跳转事件 */
|
/** Hook 跳转事件 */
|
||||||
LauncherUIClass.hook {
|
LauncherUIClass.hook {
|
||||||
injectMember {
|
injectMember {
|
||||||
@@ -99,10 +126,6 @@ object WeChatHooker : YukiBaseHooker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ConfigData.isDisableAllHook) return
|
}
|
||||||
/** Hook 系统电源锁 */
|
|
||||||
hookSystemWakeLock()
|
|
||||||
/** 日志省电大法 */
|
|
||||||
loggerD(msg = "ウイチャット:それが機能するかどうかはわかりませんでした")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user