【问题标题】:Why AndroidX needs compileSdkVersion set to be 28 or higher为什么 Android 需要将 compileSdkVersion 设置为 28 或更高
【发布时间】:2018-12-19 05:10:08
【问题描述】:

我最近一直在学习 Android,我对新的 AndroidX 库有疑问。我知道 AndroidX 只是对支持库的新升级,它专注于为早期的 Android SDK 提供向后兼容性。

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

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

【问题讨论】:

    标签: android androidx


    【解决方案1】:

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

    因此,您使用哪个 SDK 编写代码并不重要。它将始终提供向后兼容性。

    【讨论】:

      【解决方案2】:

      我之前也有同样的问题。关键是,不要将 minSdkVersioncompileSdkVersion 混淆。如果你的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'
      }
      

      【讨论】:

        【解决方案3】:

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

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

        阅读AndroidX Overview

        • 与支持库一样,AndroidX 独立于 Android 操作系统提供,并提供跨 Android 版本的向后兼容性。

        更多信息请阅读关于Hello World, AndroidX的Android开发者博客

        还可以阅读有关 compileSdkVersion

        的更多信息

        compileSdkVersion

        • compileSdkVersion 是您告诉 Gradle 使用哪个版本的 Android SDK 编译您的应用程序的方式。使用新的 Android SDK 是使用该级别中添加的任何新 API 的要求。
        • 需要强调的是,更改 compileSdkVersion 不会改变运行时行为

        【讨论】:

        • 如果是这样,为什么Google要求编译SDK设置为Android 9.0或更高版本?奇怪..
        • @NJUHOBBY 因为AndroidX 从 API 级别 28 添加,但在 API 级别 28 以下不可用
        猜你喜欢
        • 2022-06-27
        • 2022-11-04
        • 1970-01-01
        • 1970-01-01
        • 2016-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多