支持旧版Android设备

时间:2017-03-01 11:44:43

标签: android

我开发了运行Marshmallow的设备上运行正常的应用程序,现在当我尝试在早期版本的android(V 21)上运行它时,它会出现以下错误

java.lang.NoSuchMethodError: No Virtual methold getColor(ILandroid/content/res/Resources$Theme;) 
in class Landroid/content/res/Resources; or its super classes`

在gradle中,我包括:

compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
    applicationId "com.veggies.test"
    minSdkVersion 21
    targetSdkVersion 25
    versionName '1.1'

`

我还复制了资源文件,例如colors.xml等从valuesvalues-v21

2 个答案:

答案 0 :(得分:2)

ok。问题是这个函数getColor()已经被包含在api 23之后所以它显示错误。你将不得不添加检查更低版本

int color;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                color = ContextCompat.getColor(this, R.color.app_theme_color);
            } else {
                color = getResources().getColor(R.color.app_theme_color);
            }

答案 1 :(得分:1)

这是你的问题。

minSdkVersion 21
targetSdkVersion 25

您所说的是,此应用仅在大于或等于21的设备上运行,最好是我的目标是api级别为25的设备。更改min = 15并定位相同。

然后同步,清理并再次运行。 *在api之后引入了getColors,这是主要问题。