适配Xiaomi HyperOS
This commit is contained in:
parent
a7fbe6264f
commit
8b2a13cfe8
@ -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$" />
|
||||||
|
@ -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">
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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>
|
Loading…
Reference in New Issue
Block a user