当前位置: 首页 > news >正文

Kotlin 33. CompileSdkVersion 和 targetSdkVersion 有什么区别?

CompileSdkVersion 和 targetSdkVersion 有什么区别?

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

plugins {id 'com.android.application'id 'org.jetbrains.kotlin.android'
}android {compileSdk 32defaultConfig {applicationId "com.example.processbarvertical"minSdk 28targetSdk 32versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility 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 是什么,以及他们的区别。

1 是什么

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 后,才会使用新的通知外观。

请添加图片描述

2 compileSdkVersiontargetSdkVersion 的关系

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

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

http://www.lryc.cn/news/13748.html

相关文章:

  • 实用调试技巧——“C”
  • JavaScript - 函数
  • Cesium 卫星轨迹、卫星通信、卫星过境,模拟数据传输。
  • 2023年湖北中级职称(工程类建筑类)报名条件和要求是什么?
  • socket编程复习
  • 深度学习神经网络基础知识(三)前向传播,反向传播和计算图
  • 一图说明 monorepo 落地流程方案
  • SAP ABAP WRITE语法大全
  • 微信小程序自定义全局组件showModal
  • 4|无线传感器网络与应用|无线传感器网络原理及方法-许毅版|考试知识点
  • startForegroundService与startService 使用浅析
  • django项目实战三(django+bootstrap实现增删改查)进阶分页
  • Python 之 Pandas DataFrame 数据类型的简介、创建的列操作
  • 华为OD机试真题Python实现【5键键盘的输出】真题+解题思路+代码(20222023)
  • IDEA全家桶式讲解 | IDEA安装、使用、断点调试、Git、插件 (第二篇)
  • 音视频基础之封装格式与音视频同步
  • 外籍在读博士|赴新西兰奥克兰大学双院士导师麾下联合培养
  • Learning C++ No.11【string类实现】
  • 实力见“证”:Tapdata 技术创新与发展潜力广受认可
  • 【C++修炼之路】18.map和set
  • ChatGPT原理与技术演进剖析
  • Retrofit+Hilt后端请求小项目1--项目介绍
  • 实际项目角度优化App性能
  • Structure|Alphafold2在肽结构预测任务上的基准实验
  • Simple XML
  • 在代码质量和工作效率的矛盾间如何取舍?
  • rabbitMq安装(小短文)--未完成
  • Python调用MMDetection实现AI抠图去背景
  • Java代码使用最小二乘法实现线性回归预测
  • linux-rockchip-音频相关