前言

反射是很常用的一种方式。

今天就记录一下,反射ServiceManager的addService()和getService()。

如果不反射,需要引入

正常情况下,如果没有系统源码的编译,不太可能拿到framework_classes.jar。

正文

我是一个lib库中需要这个ServiceManager的添加和获取服务方法,不太想导入framework_classes.jar,因此才考虑反射。

addService()

  1. public static void addService(String name, IBinder binder) {
  2.   try {
  3.       Class<?> forName = Class.forName("android.os.ServiceManager");
  4.       Method method = forName.getMethod("addService", String.class, IBinder.class);
  5.       method.invoke(null, name, binder);
  6.   } catch (Exception e) {
  7.       e.printStackTrace();
  8.   }
  9. }
复制

getService()

  1. private static IBinder getService(String name) {
  2.   try {
  3.       Class<?> forName = Class.forName("android.os.ServiceManager");
  4.       Method method = forName.getMethod("getService", String.class);
  5.       return (IBinder) method.invoke(null, name);
  6.   } catch (Exception e) {
  7.       e.printStackTrace();
  8.   }
  9.   return null;
  10. }
复制

参考文章

  1. Java的反射简介

 历史上的今天

  1. 秀人网
  2. ServiceManager反射
  3. 丰子恺:湖畔夜饮

相关文章

暂无评论

none
暂无评论...