采用反射调用android隐藏的api

这篇博客介绍了如何通过Java反射机制调用Android系统的隐藏API,首先展示了创建一个简单的类并进行反射调用的方法,然后演示了如何获取并使用`SmsManager`类,特别是调用`getDefault`方法并发送短信的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java里的反射如下:

一。写个类

public class Simple {
 private void displayMessage(String strMsg) {
  System.out.println("message is:" + strMsg);
 }
}

二。反射调用

import java.lang.reflect.*;

public class Test {

 /**
  * @param args
  * @throws ClassNotFoundException
  * @throws NoSuchMethodException
  * @throws SecurityException
  * @throws IllegalAccessException
  * @throws InstantiationException
  * @throws InvocationTargetException
  * @throws IllegalArgumentException
  */
 public static void main(String[] args) throws ClassNotFoundException,
   SecurityException, NoSuchMethodException, InstantiationException,
   IllegalAccessException, IllegalArgumentException,
   InvocationTargetException {

  Class simpleClass = Class.forName("Simple");
  Object simpelObject = simpleClass.newInstance();
  Class[] args1 = new Class[1];
  args1[0] = String.class;

  Method simpleMethod = simpleClass.getDeclaredMethod("displayMessage",
    args1);

  simpleMethod.setAccessible(true);

  String[] argments = new String[1];
  argments[0] = "Hello,world";
  simpleMethod.invoke(simpelObject, argments);

 }
}

查看Android源代码时就会发现,这些隐藏的API都有一个共同的特点:类或者方法前都有@hide。如果我们已经知道目标类的类名和方法名,以及参数列表,那么这样的方法即使被@hide了,我们依然可以通过反射来调用它。

Class<?> smsManager = Class.forName("android.telephony.SmsManager" );  

   Object obj_smsManager=smsManager.getClass(). forName("android.telephony.SmsManager").

getMethod("getDefault",null).invoke(null,null);
   ((SmsManager) obj_smsManager).sendTextMessage("***",null,"test",null,null);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值