我正在考虑使用自 Android 2.2 以来可用的新备份 API,但需要保持向后兼容性(准确地说是 1.5)。
文档状态:
您必须使用的备份服务和 API 仅在运行 API 级别 8 (Android 2.2) 或更高版本的设备上可用,因此您还应该将 android:minSdkVersion 属性设置为“8”。但是,如果您在应用程序中实现适当的向后兼容性,则可以为运行 API 级别 8 或更高级别的设备支持此功能,同时保持与旧设备的兼容性。
我确实targetSdkVersion
使用 3 级针对 8 级构建,minSdkVersion
并尝试使用包装类(带反射)来克服如果您实现扩展不存在的类的类,应用程序将无法运行的问题。
这就是问题所在:由于我们自己并没有实际调用BackupHelper
该类,因此我们无法预先检查该类是否确实存在。(正如 Android 向后兼容性文档中使用checkAvailable()
方法所解释的那样。)因此,该类将被实例化并强制转换为BackupAgent
. 但是由于我们使用反射,它实际上并没有覆盖 BackupAgent 并且在请求备份时会在运行时发生异常:
java.lang.RuntimeException: Unable to create BackupAgent org.transdroid.service.BackupAgent: java.lang.ClassCastException: org.transdroid.service.BackupAgent
这是我向后兼容的方法BackupAgent
:http://code.google.com/p/transdroid/source/browse/#svn/trunk/src/org/transdroid/service其中 BackupAgent.java 是“常规” BackupAgentHelper -扩展类和 BackupAgentHelperWrapper 是基于反射的包装类。
有谁成功实现了BackupAgent
向后兼容?