可以与特定Android API级别一起使用的JDK版本

时间:2018-02-03 16:56:54

标签: java android

我开发了自己的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范围之外的任何用法?

1 个答案:

答案 0 :(得分:0)

JDK与此无关,这完全不相关。

区域设置forLanguageTag()显然是documentedadded 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
}