zoukankan      html  css  js  c++  java
  • [转]Android开发中隐藏类的使用

    本文转自:http://edu.gamfe.com/tutor/d/37656.html

    在开发中发现,随着android版本的升级,有些class被隐藏掉了。很是苦恼。网上有人提出的方法是将代码放到源码的环境中去编译,这个对我来说有些难搞。首先,没有源码的环境;其次,咋个编译,对我这小白级别的人来说,有难度。在强大的互联网帮助下,找到了一个方法。就是利用Java中的反射机制。

      关于什么是反射机制,偶目前为止,也是一知半解,感兴趣的tx自己去学习吧。我就不耽误大家了。

      我就来说说,我遇到的问题:

      在模拟按键处理时用到了:

      IBinder wmbinder = ServiceManager.getService( "window" );

      final IWindowManager wm = IWindowManager.Stub.asInterface( wmbinder );

      需要引入的类是:

      import android.os.ServiceManager;

      import android.view.IWindowManager;

      很不幸,这两个class在1.6版本后就被隐藏掉了。

      花费一天时间,终于找到了解决方法。

      方法如下:

      1. 首先查找源码,找到了IWindowManager.aidl文件,将源码按照相同的路径在自己的工程中创建;创建好后,发现会提示另外一些需要添加的文件,继续添加,直到没有错误提示。(PS:当然,在过程中,有些地方我认为自己的工程中不会用到,所以擅自屏蔽掉了部分功能,目前还没有发现有什么问题。另附源码地址:

      http://www.google.com/codesearch#ukcgseahr9A/trunk/lib/bin_1_5/android/view/WindowManager.aidl&type=cs)

      2. 添加代码替换原来的实现方法

      try{

      Object object = new Object();

      Method getService = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);

      Object obj = getService.invoke(object, new Object[]{new String("window")});

      //System.out.println(obj.toString());

      windowMger = IWindowManager.Stub.asInterface((IBinder)obj);

      }catch(ClassNotFoundException ex){

      //ignored

      }catch(NoSuchMethodException ex){

      //ignored

      }catch(IllegalAccessException ex){

      //ignored

      }catch(InvocationTargetException ex){

      //ignored

      }

  • 相关阅读:
    我的NopCommerce之旅(8): 路由分析
    我的NopCommerce之旅(7): 依赖注入(IOC/DI)
    我的NopCommerce之旅(6): 应用启动
    我的NopCommerce之旅(5): 缓存
    我的NopCommerce之旅(4): 定时任务之邮件
    我的NopCommerce之旅(3): 系统代码结构分析
    我的NopCommerce之旅(2): 系统环境及技术分析
    我的NopCommerce之旅(1): 系统综述
    关于CSS中部分浏览器兼容性问题的解决
    每天一个Js小demo之移动端全景图场景实现-全景装修图。主要知识点:css3,旋转角度检测
  • 原文地址:https://www.cnblogs.com/freeliver54/p/2170503.html
Copyright © 2011-2022 走看看