Android用loadClass获取系统隐藏类和隐藏服务的方法

我们需要获取的是Serial这个系统服务,这是一个系统服务,是不对外开放的。此服务的源码路径在Frameworks/base/services/java/com/android/server/SerialService.java,继承了ISerialManager。此服务的名称是serial

ServiceManager是系统内部对所有服务的管理类这个类并不是开放的,我们需要通过获取ServiceManager这个隐藏类来获取这个隐藏服务。

先来获取隐藏类ServiceManager和这个类的操作函数getService,再执行这个函数:
   
   
Class clazz = PlaceholderFragment.class.getClassLoader().loadClass("android.os.ServiceManager");
Method method = clazz.getDeclaredMethod("getService", String.class);
IBinder iBinder = (IBinder) method.invoke(null, "serial");

这样就返回了一个IBinder。我们可以用隐藏服务的aidl再结合IBinder来获取到这个服务:
先找到这个服务的aidl:frameworks\base\core\java\android\hardware\ISerialManager.aidl
在App创建一个与aidl相同的包名:android.hardware
ISerialManager.aidl放入App新建的包里,这时我们就可以在App里引用 ISerialManager这个类
   
   
private ISerialManager mSerialManager;
mSerialManager = ISerialManager.Stub.asInterface(iBinder);
已经成功找到了SerialService。可能通过mSerialManager调用相应的函数了。
我们先了解怎么用,有时间再探究一下其中的原理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值