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