標籤:
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態擷取的資訊以及動態調用對象的方法的功能稱為java語言的反射機制。
然而在android中Google很多的類的某些方法不讓第三方應用去調用,通過java反射機制能把這些隱藏方法擷取出來並調用,三方應用上我們就很方便的去用這些方法。
例如我們需要安全的殺死某個應用的服務和進程調用ActivityManager.forceStopPackage()方法很方便
| 123456789101112131415161718192021 |
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肯定也是有系統許可權的,這些許可權也是被隱藏的,那麼我們怎麼在自己的應用裡去調用這些許可權呢?
| 1234567 |
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" 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"/> |
如上,我們只需要在AndroidManifest.xml中添加android:sharedUserId="android.uid.system"這句就能調用系統的一些隱藏許可權,但是這樣還不行,這個應用還得簽名。
用命令列進入到目錄下面輸入
java -jar signapk.jar platform.x509.pem platform.pk8 ResApp.apk DesApp.apk
ResApp.apk:要簽名的apk DesApp.apk簽名後產生的apk
java中的反射機制在Android開發中的用處
java中的反射機制在Android開發中的用處