Skip to content

Commit c9b7aea

Browse files
committed
Do not trigger HiddenApiBypass init
1 parent 20b8976 commit c9b7aea

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

library/src/main/java/org/lsposed/hiddenapibypass/HiddenApiBypass.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ public final class HiddenApiBypass {
145145
}
146146
}
147147

148+
@VisibleForTesting
148149
static boolean checkArgsForInvokeMethod(Class<?>[] params, Object[] args) {
149150
if (params.length != args.length) return false;
150151
for (int i = 0; i < params.length; ++i) {
@@ -394,7 +395,7 @@ public static boolean setHiddenApiExemptions(@NonNull String... signaturePrefixe
394395
Object runtime = invoke(VMRuntime.class, null, "getRuntime");
395396
invoke(VMRuntime.class, runtime, "setHiddenApiExemptions", (Object) signaturePrefixes);
396397
return true;
397-
} catch (Throwable e) {
398+
} catch (ReflectiveOperationException e) {
398399
Log.w(TAG, "setHiddenApiExemptions", e);
399400
return false;
400401
}

library/src/main/java/org/lsposed/hiddenapibypass/LSPass.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.lsposed.hiddenapibypass;
22

3-
import static org.lsposed.hiddenapibypass.HiddenApiBypass.checkArgsForInvokeMethod;
4-
53
import android.os.Build;
64
import android.util.Log;
75
import android.util.Property;
@@ -34,6 +32,23 @@ public final class LSPass {
3432
fields = Property.of(Class.class, Field[].class, "DeclaredFields");
3533
}
3634

35+
private static boolean checkArgsForInvokeMethod(Class<?>[] params, Object[] args) {
36+
if (params.length != args.length) return false;
37+
for (int i = 0; i < params.length; ++i) {
38+
if (params[i].isPrimitive()) {
39+
if (params[i] == int.class && !(args[i] instanceof Integer)) return false;
40+
else if (params[i] == byte.class && !(args[i] instanceof Byte)) return false;
41+
else if (params[i] == char.class && !(args[i] instanceof Character)) return false;
42+
else if (params[i] == boolean.class && !(args[i] instanceof Boolean)) return false;
43+
else if (params[i] == double.class && !(args[i] instanceof Double)) return false;
44+
else if (params[i] == float.class && !(args[i] instanceof Float)) return false;
45+
else if (params[i] == long.class && !(args[i] instanceof Long)) return false;
46+
else if (params[i] == short.class && !(args[i] instanceof Short)) return false;
47+
} else if (args[i] != null && !params[i].isInstance(args[i])) return false;
48+
}
49+
return true;
50+
}
51+
3752
/**
3853
* get declared methods of given class without hidden api restriction
3954
*
@@ -168,7 +183,7 @@ public static boolean setHiddenApiExemptions(@NonNull String... signaturePrefixe
168183
Object runtime = invoke(VMRuntime.class, null, "getRuntime");
169184
invoke(VMRuntime.class, runtime, "setHiddenApiExemptions", (Object) signaturePrefixes);
170185
return true;
171-
} catch (Throwable e) {
186+
} catch (ReflectiveOperationException e) {
172187
Log.w(TAG, "setHiddenApiExemptions", e);
173188
return false;
174189
}

0 commit comments

Comments
 (0)