为什么AndroidX需要将compileSdkVersion设置为28或更高

时间:2018-12-19 05:10:08

标签: android androidx

我最近正在自我学习Android,并且对新的AndroidX库有一个疑问(也许是一个愚蠢的问题)。我了解到AndroidX仅仅是对支持库的新升级,该库着重于为早期的Android Sdks提供向后兼容性。

但是,Google要求“如果要在新项目中使用AndroidX,则需要将编译SDK设置为Android 9.0(API级别28)或更高版本”。我在这里感到困惑,这是否意味着AndroidX实际上使用了一些仅在Android 9.0或更高版本上可用的API方法或功能?如果是这样,它如何为无法访问这些高级API方法的旧API提供向后兼容性?

我认为支持库对compileSdkVersion没有任何要求。

3 个答案:

答案 0 :(得分:3)

编译版本是在IDE上开发应用程序时需要使用的版本。 Accroding to this answer.

因此,在哪个SDK上执行代码并不重要。它将始终提供向后兼容性。

答案 1 :(得分:0)

  

我在这里感到困惑,这是否意味着AndroidX实际上使用了一些仅在Android 9.0或更高版本上可用的API方法或功能?

add可用于具有向后兼容性的Android版本

阅读AndroidX Overview

  • 与支持库一样,AndroidX与Android OS分开提供,并在各个Android版本之间提供向后兼容性。

更多信息,请阅读有关 Hello World, AndroidX

的Android开发者博客。

ALSO详细了解 AndroidX

  

compileSdkVersion

  • compileSdkVersion是告诉compileSdkVersion用来编译应用程序的Android SDK版本的方法。必须使用新的Android SDK才能使用在该级别添加的任何新API。
  • 应该强调的是,更改Gradle不会更改运行时行为

答案 2 :(得分:0)

我之前也有同样的问题。关键是不要将 minSdkVersion compileSdkVersion 混淆。如果您的minSdkVersion是16,则您的应用程序将支持最低Android API版本16。但是,要使用AndroidX,您需要确保compileSdkVersion是28。通常使用最新的Android SDK版本。无论如何,当编译应用程序时,这并不是什么新鲜事。

这是使用AndroidX的示例应用build.gradle文件。注意minSdkVersioncompileSdkVersion版本号。

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.core:core-ktx:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}