当前位置: 首页 > 知识库问答 >
问题:

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

娄浩荡
2023-03-14

我最近一直在学习Android系统,我有一个关于新Android系统库的问题。据我所知,AndroidX只是对支持库的一个新升级,其重点是为早期的Android SDK提供向后兼容性。

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

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

共有3个答案

凌志学
2023-03-14

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

没有AndroidX可用于向后兼容的Android版本

阅读AndroidX概述

  • 与支持库一样,AndroidX与Android操作系统分开发布,并提供跨Android版本的向后兼容性。

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

还可以阅读更多关于compileSdkVersion

compileSdkVersion

  • compileSdkVersion是告诉GradleAndroid SDK编译应用的方式。使用新的Android SDK是使用该级别中添加的任何新API的要求

孙夕
2023-03-14

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

下面是一个应用程序构建示例。使用AndroidX的gradle文件。请注意带有compileSdkVersion版本号的minSdkVersion

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'
}
谯志诚
2023-03-14

在IDE上开发应用程序时,需要使用编译版本。根据这个答案。

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

 类似资料:
  • 我将把我的Android项目从Ant转换为Gradle。 我的Eclipse工作区非常简单: 当我添加构建时。MyApp中的gradle文件,我想引用我的Android库项目: 当我运行gradle build时,出现了一个错误“Project with path”:在根项目中找不到MyApp AndroidLibrary“,我在Google上搜索了一下,发现我需要在我的工作区目录中设置一个“se

  • 问题内容: 为了运行ssh守护程序服务,必须在/etc/pam.d/sshd中将entry设置为可选,如Ubuntu 13.10 的官方示例中所述。 此项对于Ubuntu的早期版本是否可选?它甚至在Ubuntu 13.10之前存在吗? 什么是设置到的意思是,无论如何? 我的ssh配置在这方面的安全性要差得多吗? 问题答案: 用于在用户通过SSH,X或类似方式登录时设置进程的审核属性。然后,审核框架

  • 在我的Java项目中,我使用Lombok工具生成getter和setter<它与Maven完美配合,无需任何配置。 为什么我需要为龙目岛配置Eclipse<我已经知道如何配置Eclipse:https://projectlombok.org/download.html 为什么我必须在我的eclipse.ini中添加以下行?

  • 将清单中的compileSdkVersion设置为小于最新的api内部版本号有什么好处吗,还是您应该始终将其设置为最新的api内部版本? 我说的优势是指应用程序的性能、应用程序的编译时间、apk的大小等。当然,我指的是你可以把它设置得更低的情况--例如,一个应用程序不使用共享转换或任何Lollipop的功能。

  • 编辑:哎呀,毕竟安装了铬。

  • 互联网是超文本标记语言(HTML)页面的集合,它们彼此链接以形成概念性信息网络。随着时间的推移,静态资源数量增加,图像等更丰富的项目开始成为Web结构的一部分。 高级服务器技术允许动态服务器页面 - 其内容基于查询生成的页面。 很快,需要拥有更多动态网页才能获得动态超文本标记语言(DHTML)。一切都归功于JavaScript。在接下来的几年中,我们看到了跨帧通信,试图避免页面重新加载,然后在帧内