package com.example.myreflect.util;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class MyClass {
private Class<?> class1;
private Method method1;
private MyClass(Class<?> class1,String name, Class<?>... parameterTypes) throws NoSuchMethodException {
super();
this.class1 = class1;
this.method1=class1.getMethod(name, parameterTypes);
}
public static MyClass build(String className,String name, Class<?>... parameterTypes) throws ClassNotFoundException, NoSuchMethodException
{
return new MyClass(className, name, parameterTypes);
}
public static MyClass build(Class<?> class1,String name, Class<?>... parameterTypes) throws ClassNotFoundException, NoSuchMethodException
{
return new MyClass(class1, name, parameterTypes);
}
private MyClass(String className,String name, Class<?>... parameterTypes) throws ClassNotFoundException, NoSuchMethodException {
super();
this.class1 = forName(className);
this.method1=class1.getMethod(name, parameterTypes);
}
public Class<?> getClass1() {
return class1;
}
public void setClass1(Class<?> class1) {
this.class1 = class1;
}
public Method getMethod1() {
return method1;
}
public void setMethod1(Method method1) {
this.method1 = method1;
}
public static Class<?> forName(String className)
throws ClassNotFoundException {
return Class.forName(className);
}
public Object invoke(Object receiver, Object... args)
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
return method1.invoke(receiver, args);
}
/*
private void test() throws Exception {
Class<?> class001 = Class.forName("");
Method method001 = class001.getMethod("", new Class[] {});
method001.invoke(null, new Object[] {});
}
private void test2() throws Exception {
//Log.i(tag, msg)
MyClass class1=new MyClass("android.util.Log", "i", new Class[] {String.class,String.class});
class1.invoke(class1.getClass1(), "tag","ok");
}
*/
}
package com.example.myreflect;
import com.example.myreflect.util.MyClass;
import android.app.Activity;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void logstatic(View view) {
try {
MyClass class1 = MyClass.build("android.util.Log", "i",
new Class[] { String.class, String.class });
class1.invoke(class1.getClass1(), "tag", "ok");
} catch (Exception e) {
e.printStackTrace();
}
}
public void log(View view) {
try {
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(
Activity.TELEPHONY_SERVICE);
// telephonyManager.getDeviceId();
MyClass class1 = MyClass.build(
"android.telephony.TelephonyManager", "getDeviceId",
new Class[] {});
String result = (String) class1.invoke(telephonyManager);
Log.i("xx", result);
Log.i("fuck",(String) MyClass.build("android.telephony.TelephonyManager",
"getDeviceId", new Class[] {}).invoke(telephonyManager));
} catch (Exception e) {
e.printStackTrace();
}
}
}