【转】http://mysuperbaby.iteye.com/blog/1458966
在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 });
- }
- ...
- }
相关推荐
在Android开发中,注解通常用于简化生命周期管理、依赖注入、数据验证等场景。在这个"android 反射注解框架"中,注解被用来标记视图组件,以便于后续的自动化处理。 反射是Java提供的一种能够在运行时检查类、接口...
下面是一个简单的Android反射机制示例: 首先,定义一个简单的类`Person`,包含一个私有字段`name`和一个私有方法`sayHello()`: ```java public class Person { private String name; private void sayHello()...
在使用反射启动未安装APK的Activity时,开发者必须谨慎行事,确保符合Android的安全规范,避免潜在的漏洞和风险。通过深入学习和实践,开发者可以掌握这一高级技术,为复杂的应用场景提供解决方案。
二、Android反射的应用场景 1. 动态加载:当需要在运行时根据用户选择加载不同的模块或库时,反射是理想的选择。 2. 接口处理:如果第三方库没有提供接口,但其内部类或方法可以满足需求,反射可以帮助我们直接调用...
三、Android中反射的应用场景 1. 动态加载组件:在AndroidManifest.xml中,我们可以在运行时动态决定要加载哪个Activity或Service。 2. 操作私有成员:有时我们需要访问或修改私有成员,反射提供了解决方案。 3. 第...
通过上述方法,我们可以灵活地使用反射机制来操作Android的SQLite数据库,实现插入和查询功能。这种方法对于处理动态数据模型或者需要高度自定义SQL操作的场景特别有用。在进行实际开发时,应当结合具体情况,权衡...
FreeReflection库通过绕过Android P的反射限制,提供了一种安全、高效的方式来使用反射。它使用了类加载器技巧,动态地加载并访问所需的类,使得开发者可以在不修改原有代码的情况下,恢复在Android P上的反射功能...
本示例"Android-使用反射和aidl实现的电话拦截功能的demo"提供了一个利用反射和Android Interface Definition Language (AIDL)来拦截电话的解决方案。下面将详细介绍这个项目中的关键技术点。 1. **反射(Reflection...
在Android系统中,外置SD卡的加载与卸载通常由系统服务自动处理,但有时开发者可能需要在特定场景下进行手动操作,例如在应用程序中实现数据备份或系统优化功能。这种情况下,可以通过反射调用来执行加载(mount)和...
- **处理隐藏API**:如文中提到的,Android SDK中部分API被标记为隐藏(@hide),通过反射机制可以访问这些API,从而解决某些特定场景下的需求。 - **热修复**:利用反射机制实现代码的热更新,无需重新安装应用程序...
在Android开发中,反射、注解和动态代理是三个非常重要的高级特性,它们极大地提高了代码的灵活性和可维护性。接下来我们将深入探讨这三个概念以及它们的综合应用。 反射(Reflection)是Java提供的一种机制,允许...
在Android开发中,反射是一种强大的编程技术,它允许我们在运行时检查和操作类、接口、字段和方法。本文将深入探讨如何通过反射获取`Context`的实例,并展示如何利用反射实现一个集成`Toast`的工具类。这在某些场景...
在给定的场景中,“android java反射,通过图片名获取图片”这个主题涉及到利用反射机制来动态地加载和使用资源图片。下面将详细阐述这一知识点。 首先,我们需要理解Java反射的基本概念。Java反射是Java语言提供的...
"Android反射完全解析--强势来袭"这个主题深入探讨了如何利用Java的反射机制来增强Android应用的功能和灵活性。反射使得我们能够在程序运行过程中动态地获取类的信息,并能调用私有方法,访问私有变量,甚至执行不...
在这个博客文章中,作者android_ku_ku详细解释了反射的概念,并提供了一个具体的代码示例来帮助理解。 反射的核心概念在于,它允许程序在运行时动态地获取类的信息,如类名、属性、方法等,并可以实例化对象、调用...
为了保证兼容性和稳定性,开发者应当尽可能使用公开API,并在必要时使用反射调用隐藏API。同时,为了遵循最佳实践,应在应用中加入详细的日志记录和异常处理,以便在出现问题时能快速定位和解决。
在APP开发时,经常会遇到要获取手机状态信息的场景,像升级时获取版本号,像发生异常时要收集手机信息等等。有些软件还要根据Mac地址来判定当前用户以前是否登录过。下面将一一介绍获取这些手机状态信息的方法。 1 ...
在Android开发中,反射机制是一种强大的工具,它...以上是关于Android环境中Java反射机制的一些核心概念和使用方式。通过"MyReflectionTest"项目,你可以实践这些知识点,加深对反射的理解并掌握其在实际开发中的应用。
本文将详细讲解如何通过反射调用静态方法,并探讨在特定场景下,如MyBatis中的应用。 首先,理解反射的概念是至关重要的。在Java中,反射API(java.lang.reflect)允许我们获取类的信息,包括类名、构造函数、方法...
总的来说,实现Android设备的以太网设置涉及对系统框架的深入理解和使用反射技术。这是一个高级主题,通常只适用于系统开发者或对Android底层有深厚了解的开发者。如果你正在寻求为你的Android设备添加以太网功能,...