java中的反射機制在Android開發中的用處


   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" ?>
< 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開發中的用處


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM