//访问某个属性
Context mmsCtx = createPackageContext( "com.android.lockscreen" , Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY); Class<?> maClass = Class.forName( "com.android.lockscreen.LockScreenActivity" , true , Object maObject = maClass.newInstance(); Field f_mPm = maClass.getDeclaredField( "TAG" ); f_mPm.setAccessible( true ); Log.i(LOG_TAG, "obj:" +f_mPm.get(maObject)); |
//访问方法
//访问 try
Context mmsCtx = createPackageContext( "com.android.lockscreen" , Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY); Class<?> maClass = Class.forName( "com.android.lockscreen.LockScreenActivity" , true , Object maObject = maClass.newInstance(); Field f_mPm = maClass.getDeclaredField( "TAG" ); //maClass.getDeclaredMethod("", parameterTypes); f_mPm.setAccessible( true ); Log.i(LOG_TAG, "obj:" +f_mPm.get(maObject)); Class[] resource = new Class[]{Context. class }; resourceObj = new Object[]{mmsCtx}; Method addsMethod = maClass.getDeclaredMethod( "getLockScreenView" , resource); addsMethod.setAccessible( true ); View addsResult = (View)addsMethod.invoke(maObject, resourceObj); Log.i(LOG_TAG, "addsResult:" +addsResult); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //定义被访问 public LockScreenActivity extends Activity { private String TAG = "LockScreenActivity" ; //private LockScreen mScreen = new LockScreen(LockScreenActivity.this); private LockScreen getLockScreenView(Context context){ Log.i(TAG, "context:" +context); return new LockScreen(context); } } |
//获取setting包的的Context
Context mmsCtx = createPackageContext(
"com.android.settings"
,
Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
//使用setting的classloader加载com.android.settings.ManageApplications类
Class<?> maClass = Class.forName(
"com.android.settings.ManageApplications"
,
true
,
mmsCtx.getClassLoader());
//创建它的一个对象
Object maObject = maClass.newInstance();
/*
* 将私有域mPm赋值。因为mPm在SizeObserver的invokeGetSize中用到了,
* 却因为没有执行onCreate而没有初始化,所以要在此处初始化。
*/
Field f_mPm = maClass.getDeclaredField(
"mPm"
);
f_mPm.setAccessible(
true
);
f_mPm.set(maObject, mmsCtx.getPackageManager());
转自:http://www.cnblogs.com/wanqieddy/archive/2011/10/25/2224200.html