Android 的哪个 Java 版本具有不同的 minSdkVersion 和 targetSdkVersion

Pat*_*k W 5 java android build-tools

使用 Gradle 编译 Android 应用程序时,如何确定要使用哪个 Java 版本?例如,我的 gradle 构建文件的一些片段如下所示:

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    // Other settings

    defaultConfig {
        applicationId "com.example"
        minSdkVersion 15
        targetSdkVersion 22

        // Other default settings
    }
}
Run Code Online (Sandbox Code Playgroud)

Android SDK 版本 19 及更高版本(即 KitKat 及更高版本)支持 Java SE 7。根据上面的代码片段,我如何确定应该使用 Java SE 7 还是 Java SE 6 来实现编译和源代码兼容性?

Pat*_*k W 2

minSdkVersion都不targetSdkVersion用于确定编译的源代码兼容性。源兼容性和编译的决定因素是compileSdkVersionbuildToolsVersion

我使用了具有以下值的 gradle 文件:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    // Other settings

    defaultConfig {
        applicationId "com.example"
        minSdkVersion 8
        targetSdkVersion 23

        // Other default settings
    }
}
Run Code Online (Sandbox Code Playgroud)

专门用于测试的代码片段是:

public void onCreate(Bundle bundle) {

    ...

    List<String> strings = new ArrayList<>();
    strings.add("John Doe");
    strings.add("Jane Doe");
    strings.add("Bill Gates");
    strings.add("Mark Zuckerberg");

    ListView listView = (ListView) findViewById(R.id.list);
    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_gallery_item, strings);
    listView.setAdapter(adapter);

    ...
}
Run Code Online (Sandbox Code Playgroud)

当您更改构建工具时,buildToolsVersion = '17'您会收到一条错误消息:

The SDK Build Tools revision (17.0.0) is too low for project ':app'. Minimum required is 19.1.0
Run Code Online (Sandbox Code Playgroud)

当你将其更改为buildToolsVersion = '19.1.0',构建成功。

当您将 设为compileSdkVersion任何小于buildToolsVersion主要值的任何值时,构建会失败,主要是由于缺少资源依赖性。

minSdkVersion和设置targetSdkVersion为低于compileSdkVersion的任何版本都没有效果。

PS 1. 主要值是第一个点之前的第一个整数。例如,buildToolsVersion '23.0.2'主要值为 23。

PS 2. 我使用 Android API Level 10 (Gingerbread 2.3.6) 的真实设备测试了成功构建的结果。我将源代码兼容性设置为JDK 7,并使用Java 7中引入的Diamond Operator。