适配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="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" /> <option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="Android Studio default JDK" />
<option name="modules"> <option name="modules">
<set> <set>
<option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$" />

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <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" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
<component name="ProjectType"> <component name="ProjectType">

View File

@ -1,9 +1,11 @@
package run.evan.hotspotip; package run.evan.hotspotip;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import de.robv.android.xposed.IXposedHookLoadPackage; 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.XC_MethodReplacement;
import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.XposedHelpers;
@ -13,10 +15,27 @@ public class MainHook implements IXposedHookLoadPackage {
@Override @Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
if (loadPackageParam.packageName.equals("com.android.networkstack.tethering.inprocess")) { 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() { XposedHelpers.findAndHookMethod("com.android.networkstack.tethering.PrivateAddressCoordinator", loadPackageParam.classLoader, "requestDownstreamAddress", "android.net.ip.IpServer", boolean.class, new XC_MethodReplacement() {
@Override @Override
protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable { 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); Class linkAddressClass = XposedHelpers.findClass("android.net.LinkAddress", loadPackageParam.classLoader);
Constructor linkAddressConstructor = linkAddressClass.getConstructor(String.class); Constructor linkAddressConstructor = linkAddressClass.getConstructor(String.class);
Class ipServerClass = XposedHelpers.findClass("android.net.ip.IpServer", loadPackageParam.classLoader); 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"); return linkAddressConstructor.newInstance("192.168.8.1/24");
} }
} }
});
}
}
} }

View File

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