`

Android中巧用Java反射机制

 
阅读更多

在Android中,可以从下面两点考虑来使用Java反射(Java Reflection)机制,从而达到意想不到的效果。这里也将展示Google是怎样在自己的应用中来使用Java反射机制的。

 

1. 同时兼容新老版本的SDK

Android往往会在新版本中引入一些新的API来替代老的API,这些新的API在性能或者易用性上比老的API更好。但为了兼容性,新老API往往是共存的。

在这种情况下,你的应用如果调用了新的API,是没办法在安装老版本Android的设备上运行的,但如果使用老的API,又没办法在安装新版本Android的设备上体现新API的性能。

这时候,就可以使用Java反射机制,从而实现一个apk,如果安装在老版本Android的设备上,则调用老的API;安装在新版本Android的设备上,则调用新的API。

下面是来自Google的一段代码:

public class SharedPreferencesCompat {

    private static final Method sApplyMethod = findApplyMethod();

    private static Method findApplyMethod() {
        try {
            return SharedPreferences.Editor.class.getMethod("apply", new Class[0]);
        } catch (NoSuchMethodException e) {
            return null;
        }
    }

    public static void apply(SharedPreferences.Editor editor) {
        if (sApplyMethod != null) {
            try {
                sApplyMethod.invoke(editor, new Object[0]);
                return;
            } catch (IllegalAccessException e) {
            } catch (InvocationTargetException e) {
            }
        }
        editor.commit();
    }
}

 

2. 使用私有的API

如果在Eclipse上开发应用,必须调用对应的Android SDK的标准API,即在开发文档中说明的API。调用非标准的即私有的API,是编译不过的。

但Android实际上有很多API,是被@hide标注的。被@hide注解的类和方法就是私有API。如果一个应用想调用这些API,则只有在编译整个系统image的时候才能编译过,而在Eclipse上是编译不过的。所以,这些API往往会被手机开发商的本地应用调用,则第三方的应用是没办法调用的。

这种情况下,可以使用Java反射机制来调用这些私有的API。一旦编译通过生成了apk,就能正常在手机上运行,因为这样的API的实现已经在手机系统中只是没有公开出来。

下面是来自Google的一段代码:

private static final String AMR_INPUT_STREAM_CLASS = "android.media.AmrInputStream";

private static Class<?> getAmrInputStreamClass() throws ClassNotFoundException {
    return Class.forName(AMR_INPUT_STREAM_CLASS);
}

private static InputStream createAmrInputStream(InputStream in) {
    try {
        Class<?> clazz = getAmrInputStreamClass();
        Constructor<?> constructor = clazz.getConstructor(new Class[] { InputStream.class });
        return (InputStream)constructor.newInstance(new Object[] { in });
    } 
    ...
}


 

 

3
0
分享到:
评论

相关推荐

    android系统java反射机制详解

    在Android系统中,Java反射机制同样被广泛应用,尤其是在动态加载类、处理不确定类型的对象、调用私有方法或者访问私有变量等方面。下面将深入探讨Java反射机制的概念、原理及在Android开发中的应用。 一、Java反射...

    在android中利用JAVA反射机制终止通话

    一、《在android中利用JAVA反射机制终止通话》:http://www.mydreamsky.tk/?p=874 二、《Android 电话的反射调用机制实现静默接听电话》:http://blog.csdn.net/zengyangtech/article/details/6198355 源码在...

    Java反射机制的学习

    Java反射机制是Java编程语言中的一项核心特性,它允许程序在运行时动态地获取类的信息并进行操作。这使得Java能够在编译后仍然能够灵活地处理类和对象,增强了代码的动态性。在Android应用开发中,反射机制尤其重要...

    java反射机制的原理及在Android下的简单应用

    ### Java反射机制的原理及在Android下的简单应用 #### 一、Java反射机制的基本概念 反射(Reflection)是指程序在运行时能够访问、检测和修改它自身的能力。这种能力使得程序能够动态地获取自身的结构信息并操作...

    Android平台与Web服务数据交互时运用Java反射机制解析数据的研究.pdf

    Android平台与Web服务数据交互时运用Java反射机制解析数据的研究 本文研究了Android平台与Web服务数据交互时运用Java反射机制解析数据的技术。Java反射机制是一种在运行状态中动态获取类的信息以及动态调用对象方法...

    Java反射机制测试Demo

    Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类包括`Class`、`Field`、`Method`和`Constructor`等,它们分别代表...

    android 反射机制 简单示例

    在Android开发中,反射机制是一种强大的工具,它允许我们在运行时动态地获取类的信息或调用私有方法、访问私有变量,甚至修改类的行为。本文将深入探讨反射的概念、工作原理以及如何在Android中使用反射,通过一个...

    Java反射机制的原理及在Android下的简单应用[归纳].pdf

    Java反射机制是Java语言的一个重要特性,它允许程序在运行时动态地获取类的信息并创建对象,甚至可以访问私有成员。在Android开发中,反射机制有着广泛的应用,尤其是在处理框架内部逻辑、插件化开发、API兼容性等...

    java 反射的使用

    Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是`java.lang.Class`,它代表了类的信息。通过反射,我们可以动态地...

    java 反射 报错 no such method exception

    ### Java反射机制与NoSuchMethodException详解 在Java编程中,反射是一种强大的机制,允许程序在运行时检查和修改自身结构和行为。然而,当开发者尝试使用反射调用一个不存在的方法时,便会遇到`java.lang....

    关于Java反射机制的小例子

    要使用蓝牙设备进行通讯必须的先使两个设备之间建立连接,Android SDK中提供了一些方法可供调用,但是有些方法没有提供接口,于是参考了网上的一些资料写了这个例子,顺便学习下Android反射机制的使用,自测OK,留待...

    android java反射,通过图片名获取图片

    在给定的场景中,“android java反射,通过图片名获取图片”这个主题涉及到利用反射机制来动态地加载和使用资源图片。下面将详细阐述这一知识点。 首先,我们需要理解Java反射的基本概念。Java反射是Java语言提供的...

    反射机制在Android开发中的应用.pdf

    通过Java反射机制,开发者可以访问和调用这些隐藏的类和方法,从而实现更多功能。 依赖注入(Dependency Injection,DI)和控制反转(Inversion of Control,IOC)是降低程序耦合性的关键原则。传统编程中,调用者...

    android 使用反射机制操作数据库 插入 查询

    在Java中,反射是一种强大的工具,它允许我们在运行时检查类、接口、字段和方法的信息,甚至可以在不知道对象具体类型的情况下调用其方法。在Android中,反射可以用于动态操作数据库,尤其是在处理不确定的数据模型...

    android 通过反射自动拨打电话和挂断电话

    本教程将介绍如何利用Java的反射机制来实现自动拨打电话和挂断电话的功能。 首先,我们需要了解反射的基本概念。反射是Java语言的一种特性,允许运行状态中的Java程序对自身进行检查并且可以直接操作程序的内部属性...

    Java 学习之反射机制及应用场景

    前言:  近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,...  JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方

    java反射实现javabean转json实例代码.docx

    ### Java反射机制实现JavaBean转JSON的详细解析 #### 一、引言 在现代软件开发过程中...通过以上内容的学习与理解,开发者不仅能够更好地掌握Java反射机制的应用,还能在实际项目中更加自如地处理各种数据转换需求。

    java中的反射机制

    Java语言反射提供一种动态链接程序组件的多功能方法。它允许程序创建和控制任何类的对象,无需提前硬编码目标类。这些特性使得反射特别适用于创建以非常...在实际的开发中会用到的比如:手动打开状态栏(android)等等

    通过Java annotation以及反射机制实现不同类型通用的数据库访问接口

    总的来说,通过Java的注解和反射机制,我们可以构建出一个高度抽象且具有通用性的数据库访问接口,它能够适应各种不同的数据模型,极大地提高了代码的灵活性和可维护性。同时,理解Android应用的基本结构,如...

Global site tag (gtag.js) - Google Analytics