android反射方式内部クラスメンバーへのアクセス
//
Context mmsCtx = createPackageContext(
"com.android.lockscreen"
,
Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
Class<?> maClass = Class.forName(
"com.android.lockscreen.LockScreenActivity"
,
true
, mmsCtx.getClassLoader());
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
, mmsCtx.getClassLoader());
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
class
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