我正在编写一些代码,这些代码将由一些维护SDK的合作伙伴使用。开发人员在Android 1.5到2.3.7上使用SDK。我的代码使用仅在2.2及更高版本上可用的功能。如何编写我的代码,以便使用合作伙伴SDK的开发人员不会在Android上获得编译错误< 2.2
我尝试使用反射并避免使用2.2之前不可用的类的导入/声明,但由于无法调度到我将所需的类类型更改为Object的方法,因此代码在2.2之后无效。
答案 0 :(得分:4)
您可以尝试将代码拆分为基线(Android 1.5)并为更高的API级别提供额外的JAR,类似于Android compat librabry与Android 1.6兼容的“v4”风格的方式以及适用于Android 3.2及更高版本的“v11”。
在某些时候,您也可以从AOSP获取代码并从后端选择2.2功能。我做了这个,例如能够在API级别7上使用getExternalCacheDir()
:
private static File getExternalCacheDir(final Context context) {
// return context.getExternalCacheDir(); API level 8
// e.g. "<sdcard>/Android/data/<package_name>/cache/"
final File extCacheDir = new File(Environment.getExternalStorageDirectory(),
"/Android/data/" + context.getApplicationInfo().packageName + "/cache/");
extCacheDir.mkdirs();
return extCacheDir;
}
反思繁重的代码将是维护的噩梦 - 你想要为你的客户/合作伙伴避免那些红色编译器错误加密狗,你希望看到它们而不是一些模糊的运行时异常造成的通过反射代码中的过时常量。