mirror of
https://github.com/LittleTurtle2333/SimplicityTools.git
synced 2026-07-15 12:51:17 +08:00
Use EasyXposed (#112)
* add EasyXposed * change hook entry * [android] use EasyXposed * [com.miui.mediaeditor] use EasyXposed * [com.miui.home] use EasyXposed * [com.miui.powerkeeper] use EasyXposed * [com.miui.screenshot] use EasyXposed * [com.miui.securitycenter] use EasyXposed * [com.android.settings] use EasyXposed * [com.android.thememanager] use EasyXposed * [com.android.systemui] use EasyXposed
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
package com.lt2333.simplicitytools.util.xposed
|
||||
|
||||
import com.github.kyuubiran.ezxhelper.init.EzXHelperInit
|
||||
import com.github.kyuubiran.ezxhelper.utils.Log.logexIfThrow
|
||||
import com.lt2333.simplicitytools.util.xposed.base.AppRegister
|
||||
import de.robv.android.xposed.IXposedHookLoadPackage
|
||||
import de.robv.android.xposed.IXposedHookZygoteInit
|
||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||
|
||||
abstract class EasyXposedInit: IXposedHookLoadPackage, IXposedHookZygoteInit {
|
||||
|
||||
private lateinit var packageParam: XC_LoadPackage.LoadPackageParam
|
||||
abstract val registeredApp: List<AppRegister>
|
||||
|
||||
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
|
||||
packageParam = lpparam!!
|
||||
registeredApp.forEach { app ->
|
||||
if (app.packageName == lpparam.packageName && (lpparam.processName in app.processName || app.processName.isEmpty())) {
|
||||
EzXHelperInit.initHandleLoadPackage(lpparam)
|
||||
EzXHelperInit.setLogTag(app.logTag)
|
||||
EzXHelperInit.setToastTag(app.logTag)
|
||||
runCatching { app.handleLoadPackage(lpparam) }.logexIfThrow("Failed call handleLoadPackage, package: ${app.packageName}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun initZygote(startupParam: IXposedHookZygoteInit.StartupParam?) {
|
||||
EzXHelperInit.initZygote(startupParam!!)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.lt2333.simplicitytools.util.xposed.base
|
||||
|
||||
import com.github.kyuubiran.ezxhelper.utils.Log
|
||||
import com.github.kyuubiran.ezxhelper.utils.Log.logexIfThrow
|
||||
import de.robv.android.xposed.IXposedHookInitPackageResources
|
||||
import de.robv.android.xposed.IXposedHookLoadPackage
|
||||
import de.robv.android.xposed.callbacks.XC_InitPackageResources
|
||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||
|
||||
abstract class AppRegister: IXposedHookLoadPackage {
|
||||
|
||||
abstract val packageName: String
|
||||
abstract val processName: List<String>
|
||||
abstract val logTag: String
|
||||
|
||||
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {}
|
||||
|
||||
protected fun autoInitHooks(lpparam: XC_LoadPackage.LoadPackageParam, vararg hook: HookRegister) {
|
||||
hook.forEach {
|
||||
runCatching {
|
||||
if (it.isInit) return@forEach
|
||||
it.setLoadPackageParam(lpparam)
|
||||
it.init()
|
||||
it.isInit = true
|
||||
Log.i("Inited hook: ${it.javaClass.simpleName}")
|
||||
}.logexIfThrow("Failed init hook: ${it.javaClass.simpleName}")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.lt2333.simplicitytools.util.xposed.base
|
||||
|
||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||
|
||||
abstract class HookRegister {
|
||||
private lateinit var lpparam: XC_LoadPackage.LoadPackageParam
|
||||
var isInit: Boolean = false
|
||||
abstract fun init()
|
||||
|
||||
fun setLoadPackageParam(loadPackageParam: XC_LoadPackage.LoadPackageParam) {
|
||||
lpparam = loadPackageParam
|
||||
}
|
||||
|
||||
protected fun getLoadPackageParam(): XC_LoadPackage.LoadPackageParam {
|
||||
if (!this::lpparam.isInitialized) {
|
||||
throw RuntimeException("lpparam should be initialized")
|
||||
}
|
||||
return lpparam
|
||||
}
|
||||
|
||||
protected fun getDefaultClassLoader(): ClassLoader {
|
||||
return getLoadPackageParam().classLoader
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user