欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

Kotlin语言中CompileSdkVersion与targetSdkVersion的区别浅析,

来源: 开发者 投稿于  被查看 18572 次 评论:6

Kotlin语言中CompileSdkVersion与targetSdkVersion的区别浅析,


目录
  • 前言
  • 一.CompileSdkVersion与targetSdkVersion是什么
    • 1.1 compileSdkVersion
    • 1.2 targetSdkVersion
  • 二.compileSdkVersion和targetSdkVersion的关系

    前言

    build.gradle (Module) 文件中,我们通常会看到 CompileSdkVersiontargetSdkVersion 的使用,比如下面是一个完整的 build.gradle (Module) 文件:

    plugins {
        id 'com.android.application'
        id 'org.jetbrains.kotlin.android'
    }

    android {
        compileSdk 32

        defaultConfig {
            applicationId "com.example.processbarvertical"
            minSdk 28
            targetSdk 32
            versionCode 1
            versionName "1.0"

            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }

        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
        kotlinOptions {
            jvmTarget = '1.8'
        }
    }

    dependencies {

        implementation 'androidx.core:core-ktx:1.7.0'
        implementation 'androidx.appcompat:appcompat:1.5.1'
        implementation 'com.google.android.material:material:1.6.1'
        implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
        testImplementation 'junit:junit:4.13.2'
        androidTestImplementation 'androidx.test.ext:junit:1.1.3'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
        implementation 'com.github.transferwise:sequence-layout:1.2.0'
    }

    一旦新的 Android SDK 版本发布,我们通常会更新这两个值。 但为什么这样做如此重要? 另外,为什么有两个SdkVersion,而我们通常将它们设置为相同的值呢?这篇文章,我们来解释一下 CompileSdkVersiontargetSdkVersion 是什么,以及他们的区别。

    一.CompileSdkVersion与targetSdkVersion是什么

    compileSdkVersiontargetSdkVersion 对于处理安卓中的向前兼容性至关重要,因此它们都与新 Android SDK 版本出现时的操作有关。

    1.1 compileSdkVersion

    compileSdkVersion 定义了 gradle 将使用哪个 Android SDK 版本来编译我们的应用程序。比如,在 Android 12 / API 31 中引入了一个新的功能,使我们能够轻松实现启动画面:

    <item name="android:windowsSplashScreenBackground">@color/cyan_50</item>
    <item name="android:windowsSplashScreenIconBackgroundColor">@color/cyan_200</item>
    <item name="android:windowsSplashScreenAnimatedIcon">@color/ic_foreground</item>
    <item name="android:windowsSplashScreenAnimationDuration">1000</item>
    

    如果我们想在应用程序中使用该功能,我们必须:

    • 在 Android Studio 中下载 API 31
    • 在应用程序中将 compileSdkVersion 更新为 31

    那么有人就要问了,有的手机没有升级到 Android 12 怎么办?对于那些版本低于 API 31 的用户/设备,我们必须提供一种替代方法来为那些无法访问此新 API 的旧设备显示上面这个新功能启动画面。同样,一些方法或属性可能会在此 Android SDK 版本中被弃用,其中一些甚至被删除。 这就是为什么一旦我们更新应用程序中的 compiledSdkVersion,我们将经常在编译期间看到一些必须解决的警告和错误,比如下图:

    但是单独更改 compileSdkVersion 并不会真正改变我们创建的应用程序的行为。那么安卓系统如何知道它是否可以使用此应用程序的新功能? 这就是 targetSdkVersion 发挥作用的地方。

    1.2 targetSdkVersion

    targetSdkVersion 是一个属性,它告诉系统应用程序是针对哪个安卓版本设计和测试的。

    如果用户在安卓版本高于此应用中定义的 targetSdkVersion 的设备上运行您的应用程序,对于新的安卓功能,系统可能会引入一些向后兼容行为以确保此应用程序仍然以某种方式工作。比如说,在 Android 12 中,自定义通知的外观发生了变化。 以前他们可以使用整个通知区域,但在 Android 12 系统中,将标准模板应用于所有自定义通知,因此它们看起来更加一致。

    如果我们的应用中设置 targetSdkVersion 低于 31,系统将假定此应用尚未测试该功能并将以旧方式显示通知,以将通知无法正确显示的风险降至最低。只有将目标 SDK 版本更新为 31 后,才会使用新的通知外观。

    二.compileSdkVersion和targetSdkVersion的关系

    即使 compileSdkVersiontargetSdkVersion 的含义完全不同,它们显然也不是独立的。

    简单地说,targetSdkVersion 不能高于 compileSdkVersion。理想情况下,compileSdkVersiontargetSdkVersion 应该相等,并且都指向最新的安卓版本。

    到此这篇关于Kotlin语言中CompileSdkVersion与targetSdkVersion的区别浅析的文章就介绍到这了,更多相关Kotlin CompileSdkVersion内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

    您可能感兴趣的文章:
    • Android中buildToolVersion与CompileSdkVersion的区别

    用户评论