我最近正在自我学习Android,并且对新的AndroidX库有一个疑问(也许是一个愚蠢的问题)。我了解到AndroidX仅仅是对支持库的新升级,该库着重于为早期的Android Sdks提供向后兼容性。
但是,Google要求“如果要在新项目中使用AndroidX,则需要将编译SDK设置为Android 9.0(API级别28)或更高版本”。我在这里感到困惑,这是否意味着AndroidX实际上使用了一些仅在Android 9.0或更高版本上可用的API方法或功能?如果是这样,它如何为无法访问这些高级API方法的旧API提供向后兼容性?
我认为支持库对compileSdkVersion没有任何要求。
答案 0 :(得分:3)
编译版本是在IDE上开发应用程序时需要使用的版本。 Accroding to this answer.
因此,在哪个SDK上执行代码并不重要。它将始终提供向后兼容性。
答案 1 :(得分:0)
我在这里感到困惑,这是否意味着AndroidX实际上使用了一些仅在Android 9.0或更高版本上可用的API方法或功能?
否 add
可用于具有向后兼容性的Android版本
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文件。注意minSdkVersion
和compileSdkVersion
版本号。
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'
}