所以,我的问题是,我的应用程序不会在API级别10上运行的设备上崩溃吗?
这个问题出现在我的脑海中,因为即使我在这里使用Reflection,我仍然在调用API级别11中引入的方法.当我在API级别10上运行的Android设备上运行我的应用程序时,此方法是否成功运行还是会崩溃?
As stated in source,该方法将独立于OS级别运行.但是,为什么它应该在仍然使用API级别10的Android.jar的API级别10设备上成功运行,并且该文件甚至不包含此方法?
我试图搜索它但找不到解释.
附:我想在API级别为10的设备上进行测试,但由于构建完整的应用程序需要一些时间,因此无法立即在API级别10设备上测试应用程序.
不,当然,如果您调用其API级别中不存在的方法,应用程序将崩溃.无论你是否通过反思来调用都是如此.反思的一点是,您可以根据API级别选择是否调用它.比较http://developer.android.com/reference/android/os/Build.VERSION.html#SDK_INT到您的代码中的http://developer.android.com/reference/android/os/Build.VERSION_CODES.html如果SDK编号足够高,则仅进行反射调用.
关键是你将带有字节码引用的代码与任何方法,或者所有API级别中不存在的常量或类隔离到一个仅由反射加载的单独类中.
这是我为了管理这种事情而创建的一些实用程序代码的示例;它基于API级别加载一个或另一个接口实现:
https://code.google.com/p/zxing/source/browse/trunk/android/src/com/google/zxing/client/android/common/PlatformSupportManager.java?spec=svn2361&r=2361
编辑:@ FD_的答案也有效,令我感到惊讶.反射更安全,但代码更多.事实上,最近(如果不是全部)Android JVM似乎不需要反射方法.