-
Notifications
You must be signed in to change notification settings - Fork 626
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
util LoadedApk#getClassLoader is called
- Loading branch information
Showing
5 changed files
with
109 additions
and
34 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
96 changes: 96 additions & 0 deletions
96
edxp-common/src/main/java/com/elderdrivers/riru/edxp/_hooker/impl/LoadedApkGetCL.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
package com.elderdrivers.riru.edxp._hooker.impl; | ||
|
||
import android.app.LoadedApk; | ||
|
||
import com.elderdrivers.riru.edxp.hooker.SliceProviderFix; | ||
import com.elderdrivers.riru.edxp.hooker.XposedBlackListHooker; | ||
import com.elderdrivers.riru.edxp.hooker.XposedInstallerHooker; | ||
import com.elderdrivers.riru.edxp.util.Hookers; | ||
|
||
import de.robv.android.xposed.XC_MethodHook; | ||
import de.robv.android.xposed.XposedBridge; | ||
import de.robv.android.xposed.XposedHelpers; | ||
import de.robv.android.xposed.callbacks.XC_LoadPackage; | ||
|
||
import static com.elderdrivers.riru.edxp.config.InstallerChooser.INSTALLER_PACKAGE_NAME; | ||
import static com.elderdrivers.riru.edxp.hooker.SliceProviderFix.SYSTEMUI_PACKAGE_NAME; | ||
import static com.elderdrivers.riru.edxp.hooker.XposedBlackListHooker.BLACK_LIST_PACKAGE_NAME; | ||
|
||
|
||
public class LoadedApkGetCL extends XC_MethodHook { | ||
|
||
private final LoadedApk loadedApk; | ||
private final String packageName; | ||
private final String processName; | ||
private final boolean isFirstApplication; | ||
private Unhook unhook; | ||
|
||
public LoadedApkGetCL(LoadedApk loadedApk, String packageName, String processName, | ||
boolean isFirstApplication) { | ||
this.loadedApk = loadedApk; | ||
this.packageName = packageName; | ||
this.processName = processName; | ||
this.isFirstApplication = isFirstApplication; | ||
} | ||
|
||
@Override | ||
protected void afterHookedMethod(MethodHookParam param) throws Throwable { | ||
|
||
try { | ||
|
||
if (XposedBlackListHooker.shouldDisableHooks("")) { | ||
return; | ||
} | ||
|
||
Hookers.logD("LoadedApk#getClassLoader starts"); | ||
|
||
LoadedApk loadedApk = (LoadedApk) param.thisObject; | ||
|
||
if (loadedApk != this.loadedApk) { | ||
return; | ||
} | ||
|
||
Object mAppDir = XposedHelpers.getObjectField(loadedApk, "mAppDir"); | ||
ClassLoader classLoader = (ClassLoader) param.getResult(); | ||
Hookers.logD("LoadedApk#getClassLoader ends: " + mAppDir + " -> " + classLoader); | ||
|
||
if (classLoader == null) { | ||
return; | ||
} | ||
|
||
XC_LoadPackage.LoadPackageParam lpparam = new XC_LoadPackage.LoadPackageParam( | ||
XposedBridge.sLoadedPackageCallbacks); | ||
lpparam.packageName = this.packageName; | ||
lpparam.processName = this.processName; | ||
lpparam.classLoader = classLoader; | ||
lpparam.appInfo = loadedApk.getApplicationInfo(); | ||
lpparam.isFirstApplication = this.isFirstApplication; | ||
XC_LoadPackage.callAll(lpparam); | ||
|
||
if (this.packageName.equals(INSTALLER_PACKAGE_NAME)) { | ||
XposedInstallerHooker.hookXposedInstaller(lpparam.classLoader); | ||
} | ||
if (this.packageName.equals(BLACK_LIST_PACKAGE_NAME)) { | ||
XposedBlackListHooker.hook(lpparam.classLoader); | ||
} | ||
if (this.packageName.equals(SYSTEMUI_PACKAGE_NAME)) { | ||
SliceProviderFix.hook(); | ||
} | ||
|
||
} catch (Throwable t) { | ||
Hookers.logE("error when hooking LoadedApk#getClassLoader", t); | ||
} finally { | ||
if (unhook != null) { | ||
unhook.unhook(); | ||
} | ||
} | ||
} | ||
|
||
public void setUnhook(Unhook unhook) { | ||
this.unhook = unhook; | ||
} | ||
|
||
public Unhook getUnhook() { | ||
return unhook; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters