Skip to content

Instantly share code, notes, and snippets.

@d4rken
Created October 8, 2019 23:16
Show Gist options
  • Save d4rken/0848c64f93f91ea38370ac324232d49b to your computer and use it in GitHub Desktop.
Save d4rken/0848c64f93f91ea38370ac324232d49b to your computer and use it in GitHub Desktop.
/**
* We need to go deeper!
*/
public static void doHorribleHack() {
try {
try {
Class<?> testCls = Class.forName("dalvik.system.VMRuntime");
Method method = testCls.getDeclaredMethod("setHiddenApiExemptions", String[].class);
} catch (Exception ex) {
// This will fail
ex.printStackTrace();
}
Method forName = Class.class.getDeclaredMethod("forName", String.class);
Method getDeclaredMethod = Class.class.getDeclaredMethod("getDeclaredMethod", String.class, Class[].class);
Class<?> vmRuntimeClass = (Class<?>) forName.invoke(null, "dalvik.system.VMRuntime");
Method getRuntimeMethod = (Method) getDeclaredMethod.invoke(vmRuntimeClass, "getRuntime", null);
Method setHiddenApiExemptions = (Method) getDeclaredMethod.invoke(vmRuntimeClass, "setHiddenApiExemptions", new Class[]{String[].class});
if (getRuntimeMethod != null && setHiddenApiExemptions != null) {
Object vmRuntime = getRuntimeMethod.invoke(null);
setHiddenApiExemptions.invoke(vmRuntime, (Object) new String[]{"L"});
}
try {
Class<?> testCls = Class.forName("dalvik.system.VMRuntime");
Method method = testCls.getDeclaredMethod("setHiddenApiExemptions", String[].class);
} catch (Exception ex) {
// This will not
ex.printStackTrace();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment