溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Kotlin語(yǔ)言中CompileSdkVersion與targetSdkVersion的區(qū)別是什么

發(fā)布時(shí)間:2023-02-23 10:10:26 來(lái)源:億速云 閱讀:150 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Kotlin語(yǔ)言中CompileSdkVersion與targetSdkVersion的區(qū)別是什么”,在日常操作中,相信很多人在Kotlin語(yǔ)言中CompileSdkVersion與targetSdkVersion的區(qū)別是什么問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Kotlin語(yǔ)言中CompileSdkVersion與targetSdkVersion的區(qū)別是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

    前言

    build.gradle (Module) 文件中,我們通常會(huì)看到 CompileSdkVersiontargetSdkVersion 的使用,比如下面是一個(gè)完整的 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 版本發(fā)布,我們通常會(huì)更新這兩個(gè)值。 但為什么這樣做如此重要? 另外,為什么有兩個(gè)SdkVersion,而我們通常將它們?cè)O(shè)置為相同的值呢?這篇文章,我們來(lái)解釋一下 CompileSdkVersiontargetSdkVersion 是什么,以及他們的區(qū)別。

    一.CompileSdkVersion與targetSdkVersion是什么

    compileSdkVersiontargetSdkVersion 對(duì)于處理安卓中的向前兼容性至關(guān)重要,因此它們都與新 Android SDK 版本出現(xiàn)時(shí)的操作有關(guān)。

    1.1 compileSdkVersion

    compileSdkVersion 定義了 gradle 將使用哪個(gè) Android SDK 版本來(lái)編譯我們的應(yīng)用程序。比如,在 Android 12 / API 31 中引入了一個(gè)新的功能,使我們能夠輕松實(shí)現(xiàn)啟動(dòng)畫面:

    <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>

    如果我們想在應(yīng)用程序中使用該功能,我們必須:

    • 在 Android Studio 中下載 API 31

    • 在應(yīng)用程序中將 compileSdkVersion 更新為 31

    那么有人就要問了,有的手機(jī)沒有升級(jí)到 Android 12 怎么辦?對(duì)于那些版本低于 API 31 的用戶/設(shè)備,我們必須提供一種替代方法來(lái)為那些無(wú)法訪問此新 API 的舊設(shè)備顯示上面這個(gè)新功能啟動(dòng)畫面。同樣,一些方法或?qū)傩钥赡軙?huì)在此 Android SDK 版本中被棄用,其中一些甚至被刪除。 這就是為什么一旦我們更新應(yīng)用程序中的 compiledSdkVersion,我們將經(jīng)常在編譯期間看到一些必須解決的警告和錯(cuò)誤,比如下圖:

    Kotlin語(yǔ)言中CompileSdkVersion與targetSdkVersion的區(qū)別是什么

    但是單獨(dú)更改 compileSdkVersion 并不會(huì)真正改變我們創(chuàng)建的應(yīng)用程序的行為。那么安卓系統(tǒng)如何知道它是否可以使用此應(yīng)用程序的新功能? 這就是 targetSdkVersion 發(fā)揮作用的地方。

    1.2 targetSdkVersion

    targetSdkVersion 是一個(gè)屬性,它告訴系統(tǒng)應(yīng)用程序是針對(duì)哪個(gè)安卓版本設(shè)計(jì)和測(cè)試的。

    如果用戶在安卓版本高于此應(yīng)用中定義的 targetSdkVersion 的設(shè)備上運(yùn)行您的應(yīng)用程序,對(duì)于新的安卓功能,系統(tǒng)可能會(huì)引入一些向后兼容行為以確保此應(yīng)用程序仍然以某種方式工作。比如說,在 Android 12 中,自定義通知的外觀發(fā)生了變化。 以前他們可以使用整個(gè)通知區(qū)域,但在 Android 12 系統(tǒng)中,將標(biāo)準(zhǔn)模板應(yīng)用于所有自定義通知,因此它們看起來(lái)更加一致。

    Kotlin語(yǔ)言中CompileSdkVersion與targetSdkVersion的區(qū)別是什么

    如果我們的應(yīng)用中設(shè)置 targetSdkVersion 低于 31,系統(tǒng)將假定此應(yīng)用尚未測(cè)試該功能并將以舊方式顯示通知,以將通知無(wú)法正確顯示的風(fēng)險(xiǎn)降至最低。只有將目標(biāo) SDK 版本更新為 31 后,才會(huì)使用新的通知外觀。

    Kotlin語(yǔ)言中CompileSdkVersion與targetSdkVersion的區(qū)別是什么

    二.compileSdkVersion和targetSdkVersion的關(guān)系

    即使 compileSdkVersiontargetSdkVersion 的含義完全不同,它們顯然也不是獨(dú)立的。

    簡(jiǎn)單地說,targetSdkVersion 不能高于 compileSdkVersion。理想情況下,compileSdkVersiontargetSdkVersion 應(yīng)該相等,并且都指向最新的安卓版本。

    到此,關(guān)于“Kotlin語(yǔ)言中CompileSdkVersion與targetSdkVersion的區(qū)別是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI