//訪問某個屬性
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};Object[] 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 blocke.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());