Kotlin語(yǔ)言中CompileSdkVersion與targetSdkVersion的區(qū)別淺析
前言
在 build.gradle (Module)
文件中,我們通常會(huì)看到 CompileSdkVersion
和 targetSdkVersion
的使用,比如下面是一個(gè)完整的 build.gradle (Module)
文件:
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}android {
compileSdk 32defaultConfig {
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)解釋一下 CompileSdkVersion
和 targetSdkVersion
是什么,以及他們的區(qū)別。
一.CompileSdkVersion與targetSdkVersion是什么
compileSdkVersion
和 targetSdkVersion
對(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)畫(huà)面:
<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
那么有人就要問(wèn)了,有的手機(jī)沒(méi)有升級(jí)到 Android 12 怎么辦?對(duì)于那些版本低于 API 31 的用戶(hù)/設(shè)備,我們必須提供一種替代方法來(lái)為那些無(wú)法訪問(wèn)此新 API 的舊設(shè)備顯示上面這個(gè)新功能啟動(dòng)畫(huà)面。同樣,一些方法或?qū)傩钥赡軙?huì)在此 Android SDK 版本中被棄用,其中一些甚至被刪除。 這就是為什么一旦我們更新應(yīng)用程序中的 compiledSdkVersion
,我們將經(jīng)常在編譯期間看到一些必須解決的警告和錯(cuò)誤,比如下圖:
但是單獨(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è)試的。
如果用戶(hù)在安卓版本高于此應(yīng)用中定義的 targetSdkVersion
的設(shè)備上運(yùn)行您的應(yīng)用程序,對(duì)于新的安卓功能,系統(tǒng)可能會(huì)引入一些向后兼容行為以確保此應(yīng)用程序仍然以某種方式工作。比如說(shuō),在 Android 12 中,自定義通知的外觀發(fā)生了變化。 以前他們可以使用整個(gè)通知區(qū)域,但在 Android 12 系統(tǒng)中,將標(biāo)準(zhǔn)模板應(yīng)用于所有自定義通知,因此它們看起來(lái)更加一致。
如果我們的應(yīng)用中設(shè)置 targetSdkVersion
低于 31,系統(tǒng)將假定此應(yīng)用尚未測(cè)試該功能并將以舊方式顯示通知,以將通知無(wú)法正確顯示的風(fēng)險(xiǎn)降至最低。只有將目標(biāo) SDK 版本更新為 31 后,才會(huì)使用新的通知外觀。
二.compileSdkVersion和targetSdkVersion的關(guān)系
即使 compileSdkVersion
和 targetSdkVersion
的含義完全不同,它們顯然也不是獨(dú)立的。
簡(jiǎn)單地說(shuō),targetSdkVersion
不能高于 compileSdkVersion
。理想情況下,compileSdkVersion
和 targetSdkVersion
應(yīng)該相等,并且都指向最新的安卓版本。
到此這篇關(guān)于Kotlin語(yǔ)言中CompileSdkVersion與targetSdkVersion的區(qū)別淺析的文章就介紹到這了,更多相關(guān)Kotlin CompileSdkVersion內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android與單片機(jī)通信常用數(shù)據(jù)轉(zhuǎn)換方法總結(jié)
本文主要介紹Android與單片機(jī)通信常用數(shù)據(jù)轉(zhuǎn)換方法,這里提供了代碼示例,有需要的小伙伴可以參考下2016-09-09android實(shí)現(xiàn)可自由移動(dòng)、監(jiān)聽(tīng)點(diǎn)擊事件的懸浮窗
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)可自由移動(dòng)、監(jiān)聽(tīng)點(diǎn)擊事件的懸浮窗,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12Android 使用SharedPreferrences儲(chǔ)存密碼登錄界面記住密碼功能
Android存儲(chǔ)方式有很多種,在這里所用的存儲(chǔ)方式是SharedPreferrences, 其采用了Map數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù),以鍵值的方式存儲(chǔ),可以簡(jiǎn)單的讀取與寫(xiě)入,下面通過(guò)實(shí)例代碼給大家講解下,需要的朋友參考下吧2017-04-04Android的Launcher啟動(dòng)器中添加快捷方式及小部件實(shí)例
這篇文章主要介紹了在Android的Launcher啟動(dòng)器中添加快捷方式及窗口小部件的方法,包括在自己的應(yīng)用程序中添加窗口小部件AppWidget的例子,需要的朋友可以參考下2016-02-02Android中使用orc實(shí)現(xiàn)文字識(shí)別實(shí)例
這篇文章主要介紹了Android中使用orc實(shí)現(xiàn)文字識(shí)別實(shí)例,詳細(xì)的介紹了orc的簡(jiǎn)介和用法,有興趣的可以了解一下2017-05-05Android webview與js的數(shù)據(jù)交互
有了WebView這個(gè)組件,Android應(yīng)用開(kāi)發(fā)技術(shù)也就轉(zhuǎn)嫁到html與java數(shù)據(jù)交互上來(lái)。說(shuō)白了就是js與WebView的數(shù)據(jù)交互,這就是本文所要討論的2017-04-04Android 動(dòng)態(tài)菜單實(shí)現(xiàn)實(shí)例代碼
這篇文章主要介紹了Android 動(dòng)態(tài)菜單實(shí)現(xiàn)實(shí)例代碼的相關(guān)資料,這里附有實(shí)例代碼及實(shí)現(xiàn)效果圖,需要的朋友可以參考下2017-01-01Android代碼實(shí)現(xiàn)圖片和文字上下布局
在Android開(kāi)發(fā)中經(jīng)常會(huì)需要用到帶文字和圖片的button,下面來(lái)給大家介紹使用radiobutton實(shí)現(xiàn)圖片和文字上下布局或左右布局。感興趣的朋友一起學(xué)習(xí)吧2015-11-11