我开发了自己的Java JAR(使用JDK 1.6兼容性),我试图在我的Android应用程序中使用它(使用android:minSdkVersion="16"
)
除了一些(旧的)Android版本缺少(多个)方法之外,一切正常。特别是,我尝试使用(在我的JAR库中):
String languageTag = "en";
locale = Locale.forLanguageTag(languageTag);
但是这会在运行API低于21级的设备上抛出NoSuchMethodError
。
现在我可以使用:
来避免这种依赖locale = new Locale(languageTag);
它在API 16及更高版本中有效,但我希望有更多依赖项,例如在特定的Android级别中缺少JDK方法。
是否有一个列表,其中JDK 1.6方法不受各种API级别的支持? 更好的是,是否有一个工具(cf lint)可以检查我的JAR并报告特定Android API范围之外的任何用法?
答案 0 :(得分:0)
JDK与此无关,这完全不相关。
区域设置forLanguageTag()
显然是documented为added in API level 21
因此,您的代码尝试使用该调用而不检查其运行的API版本。您需要修复您的库并在使用documented BUILD.SDK_INT调用某些版本的框架之前可能无法使用的方法之前进行一些检查,因此在这种情况下
if (BUILD.SDK_INT >= BUILD.VERSION_CODES.LOLLIPOP) {
// ok to use forLanguageTag()
} else {
// no luck. do the alternative approach
}