适配Xiaomi HyperOS

This commit is contained in:
wenyifan 2023-11-01 17:32:14 +08:00
parent a7fbe6264f
commit 8b2a13cfe8
4 changed files with 35 additions and 18 deletions

View File

@ -7,6 +7,7 @@
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="Android Studio default JDK" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="temurin-11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">

View File

@ -1,9 +1,11 @@
package run.evan.hotspotip;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
@ -13,10 +15,27 @@ public class MainHook implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
if (loadPackageParam.packageName.equals("com.android.networkstack.tethering.inprocess")) {
XposedBridge.log("Hotspot Ip init");
XposedBridge.log("Hotspot IP init process="+loadPackageParam.packageName);
XposedHelpers.findAndHookMethod("com.android.networkstack.tethering.PrivateAddressCoordinator", loadPackageParam.classLoader, "requestDownstreamAddress", "android.net.ip.IpServer", boolean.class, new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {
return buildPrivateAddressResponse(methodHookParam, loadPackageParam);
}
});
}
if (loadPackageParam.packageName.equals("com.android.networkstack.tethering")) {
XposedBridge.log("Hotspot IP init process="+loadPackageParam.packageName);
XposedHelpers.findAndHookMethod("com.android.networkstack.tethering.PrivateAddressCoordinator", loadPackageParam.classLoader, "requestDownstreamAddress", "android.net.ip.IpServer",int.class, boolean.class, new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {
return buildPrivateAddressResponse(methodHookParam, loadPackageParam);
}
});
}
}
private static Object buildPrivateAddressResponse(XC_MethodHook.MethodHookParam methodHookParam, XC_LoadPackage.LoadPackageParam loadPackageParam) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class linkAddressClass = XposedHelpers.findClass("android.net.LinkAddress", loadPackageParam.classLoader);
Constructor linkAddressConstructor = linkAddressClass.getConstructor(String.class);
Class ipServerClass = XposedHelpers.findClass("android.net.ip.IpServer", loadPackageParam.classLoader);
@ -33,7 +52,4 @@ public class MainHook implements IXposedHookLoadPackage {
return linkAddressConstructor.newInstance("192.168.8.1/24");
}
}
});
}
}
}

View File

@ -2,5 +2,6 @@
<resources>
<string-array name="scope">
<item>android</item>
<item>com.android.networkstack</item>
</string-array>
</resources>