JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。
然而在android中Google很多的類的某些方法不讓第三方應用去調用,通過java反射機制能把這些隱藏方法獲取出來並調用,三方應用上我們就很方便的去用這些方法。
例如我們需要安全的殺死某個應用的服務和進程調用ActivityManager.forceStopPackage()方法很方便
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
Method m =
null
;
try
{
Class c = Class.forName(
"android.app.ActivityManager"
);
m = c.getMethod(
"forceStopPackage"
, Class.forName(
"java.lang.String"
) );
m.invoke(am,
"com.tencent.mobileqq"
);
}
catch
(IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch
(ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch
(NoSuchMethodException 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();
}
|
當然隱藏了這些API是為了防止第三方應用打破其他應用程序,停止服務,消除他們的警報等等。隱藏的這些api肯定也是有系統權限的,這些權限也是被隱藏的,那么我們怎么在自己的應用里去調用這些權限呢?
1
2
3
4
5
6
7
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
package
=
"com.acer.shadow.apps"
android:versionCode
=
"1"
android:versionName
=
"1.0"
android:sharedUserId
=
"android.uid.system"
>
<
uses-permission
android:name
=
"android.permission.FORCE_STOP_PACKAGES"
/>
|