怎么使用android系统隐藏hide的类和方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么使用android系统隐藏hide的类和方法相关的知识,希望对你有一定的参考价值。
huanglenzhi 资深电脑人 学校微机室管理及教学工作2014-12-05 23:59
主要是利用java 中java.lang.Object下的Method类
Method提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。
Method允许在匹配要调用的实参与基础方法的形参时进行扩展转换;但如果要进行收缩转换,则会抛出IllegalArgumentException。
//
例如:该function 需要 “Queries the framework about whether any physical keys exist on the
any keyboard attached to the device that are capable of producing the given array of key codes.“
public static boolean[] deviceHasKeys(int[] keyCodes)
boolean[] ret = new boolean[keyCodes.length];
IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
try
wm.hasKeys(keyCodes, ret);
catch (RemoteException e)
// no fallback; just return the empty array
return ret;
其中 IWindowManager ServiceManageer均为隐藏类,
要想这样用,有两个方法:
1是修改framwork 让其不为hide class 从而可以使用
2是使用java的映射机制。
下面是使用映射后,对应的代码:
public static boolean[] deviceHasKeys(int[] keyCodes)
boolean[] ret = new boolean[keyCodes.length];
Method method;
String methodName = "hasKeys";//haskey 为隐藏类的隐藏method
try
method = Class.forName("android.view.IWindowManager.Stub").getMethod(methodName, String.class);
try
method.invoke(Class.forName("android.view.IWindowManager.Stub"),keyCodes,ret);
catch (IllegalArgumentException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IllegalAccessException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (InvocationTargetException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (SecurityException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (NoSuchMethodException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (ClassNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
return ret;
参考技术A 使用反射就可以了。
以上是关于怎么使用android系统隐藏hide的类和方法的主要内容,如果未能解决你的问题,请参考以下文章
android使用隐藏api的方法(使用被@hide的api)