zoukankan      html  css  js  c++  java
  • 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"?>
        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开发中的用处

  • 相关阅读:
    《中断学习(一) —— Linux中断流程以及处理机制》
    《C语言知识点 —— 字符串指针和字符串数组的区别》
    《驱动实例 —— 触发外部中断后通过异步通知机制发送信号给用户态》
    《驱动学习 —— 杂项设备》
    玩转----adb adb monkey命令及介绍
    玩转----黑盒技术设计测试用例的方法主要有
    玩转----LoadRunner具体流程
    玩转----软件立项阶段
    玩转----Linux之ant安装部署
    玩转----Ubuntu 16.04安装JDK并配置环境变量
  • 原文地址:https://www.cnblogs.com/dracohan/p/5386623.html
Copyright © 2011-2022 走看看