安卓版本问题compileSdkVersion, minSdkVersion 和 targetSdkVersion

Android面试:compileSdkVersion、targetSdkVersion、minSdkVersion作用与区别 作用 Android Studio 新建一个工程后,build.gradle里会有compileSdkVerson、targetSdkVersion、minSdkVersion这几个字段,这些配置有啥意义呢? compileSdkVersion: 和编译时有关。比如我们当前compileSdkVersion=28(Andorid 9.0),Android 10 新增了有关5G的api。我们的app想尽早使用5G相关的api,这时只需要将compileSdkVersion=29(Android. 阅读详情

来源
https://chinagdg.org/2016/01/picking-your-compilesdkversion-minsdkversion-targetsdkversion/

当你发布一个应用之后,(取决于具体的发布时间)可能没过几个月 Android 系统就发布了一个新版本。这对你的应用意味着什么,所有东西都不能用了?

别担心,向前兼容是 Android 非常关注的事情。用户在升级到新版 Android 的时候,用以前版本的 SDK 构建的现有应用应该不会出问题。这就是 compileSdkVersion, minSdkVersion 和 targetSdkVersion 的作用:他们分别控制可以使用哪些 API ,要求的 API 级别是什么,以及应用的兼容模式。

compileSdkVersion
compileSdkVersion 告诉 Gradle 用哪个 Android SDK 版本编译你的应用。使用任何新添加的 API 就需要使用对应 Level 的 Android SDK。

需要强调的是修改 compileSdkVersion 不会改变运行时的行为。当你修改了 compileSdkVersion 的时候,可能会出现新的编译警告、编译错误,但新的 compileSdkVersion 不会被包含到 APK 中:它纯粹只是在编译的时候使用。(你真的应该修复这些警告,他们的出现一定是有原因的)

因此我们强烈推荐总是使用最新的 SDK 进行编译。在现有代码上使用新的编译检查可以获得很多好处,避免新弃用的 API ,并且为使用新的 API 做好准备。

注意,如果使用 Support Library ,那么使用最新发布的 Support Library 就需要使用最新的 SDK 编译。例如,要使用 23.1.1 版本的 Support Library ,compileSdkVersion 就必需至少是 23 (大版本号要一致!)。通常,新版的 Support Library 随着新的系统版本而发布,它为系统新增加的 API 和新特性提供兼容性支持。

minSdkVersion
如果 compileSdkVersion 设置为可用的最新 API,那么 minSdkVersion 则是应用可以运行的最低要求。minSdkVersion 是 Google Play 商店用来判断用户设备是否可以安装某个应用的标志之一。

在开发时 minSdkVersion 也起到一个重要角色:lint 默认会在项目中运行,它在你使用了高于 minSdkVersion 的 API 时会警告你,帮你避免调用不存在的 API 的运行时问题。如果只在较高版本的系统上才使用某些 API,通常使用运行时检查系统版本的方式解决。

请记住,你所使用的库,如 Support Library 或 Google Play services,可能有他们自己的 minSdkVersion 。你的应用设置的 minSdkVersion 必需大于等于这些库的 minSdkVersion 。例如有三个库,它们的 minSdkVersion 分别是 4, 7 和 9 ,那么你的 minSdkVersion 必需至少是 9 才能使用它们。在少数情况下,你仍然想用一个比你应用的 minSdkVersion 还高的库(处理所有的边缘情况,确保它只在较新的平台上使用),你可以使用 tools:overrideLibrary 标记,但请做彻底的测试!

当你决定使用什么 minSdkVersion 时候,你应该参考当前的 Android 分布统计,它显示了最近 7 天所有访问 Google Play 的设备信息。他们就是你把应用发布到 Google Play 时的潜在用户。最终这是一个商业决策问题,取决于为了支持额外 3% 的设备,确保最佳体验而付出的开发和测试成本是否值得。

当然,如果某个新的 API 是你整个应用的关键,那么确定 minSdkVersion 的值就比较容易了。不过要记得 14 亿设备中的 0.7% 也是个不小的数字。

targetSdkVersion
三个版本号中最有趣的就是 targetSdkVersion 了。 targetSdkVersion 是 Android 提供向前兼容的主要依据,在应用的 targetSdkVersion 没有更新之前系统不会应用最新的行为变化。这允许你在适应新的行为变化之前就可以使用新的 API (因为你已经更新了 compileSdkVersion 不是吗?)。

targetSdkVersion 所暗示的许多行为变化都记录在 VERSION_CODES 文档中了,但是所有恐怖的细节也都列在每次发布的平台亮点中了,在这个 API Level 表中可以方便地找到相应的链接。

例如,Android 6.0 变化文档中谈了 target 为 API 23 时会如何把你的应用转换到运行时权限模型上,Android 4.4 行为变化阐述了 target 为 API 19 及以上时使用 set() 和 setRepeating() 设置 alarm 会有怎样的行为变化。

由于某些行为的变化对用户是非常明显的(弃用的 menu 按钮,运行时权限等),所以将 target 更新为最新的 SDK 是所有应用都应该优先处理的事情。但这不意味着你一定要使用所有新引入的功能,也不意味着你可以不做任何测试就盲目地更新 targetSdkVersion ,请一定在更新 targetSdkVersion 之前做测试!你的用户会感谢你的。

Gradle 和 SDK 版本
所以设置正确的 compileSdkVersion, minSdkVersion 和 targetSdkVersion 很重要。如你所想, Gradle 和 Android Studio 都在构建系统中集成了它们。在你的模块的 build.gradle 文件中(也可以在 Android Studio 的项目结构选项中)设置:

android {
  compileSdkVersion 23
  buildToolsVersion "23.0.1"

  defaultConfig {
    applicationId "com.example.checkyourtargetsdk"
    minSdkVersion 7
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
  }
}

编译时用到的 compileSdkVersion 是和构建工具版本一起设置的 Android 设置之一。其他两个稍有不同,他们在构建变体(build variant)的那里声明。defaultConfig 是所有构建变体的基础,也是设置这些默认值的地方。你可以想象在一个更复杂的系统中,应用的某些版本可能会有不同的 minSdkVersion 。

minSdkVersion 和 targetSdkVersion 与 compileSdkVersion 的另一个不同之处是它们会被包含进最终的 APK 文件中,如果你查看生成的 AndroidManifest.xml 文件,你会看到类似下面这样的标签:

<uses-sdk android:targetSdkVersion="23" android:minSdkVersion="7" />

如果你在 manifest 文件中手工设置,你会发现 Gradle 在构建时会忽略它们(尽管其它构建系统可能会明确依赖它们)。

综合来看
如果你按照上面示例那样配置,你会发现这三个值的关系是:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

这种直觉是合理的,如果 compileSdkVersion 是你的最大值,minSdkVersion 是最小值,那么最大值必需至少和最小值一样大且 target 必需在二者之间。

理想上,在稳定状态下三者的关系应该更像这样:

minSdkVersion (lowest possible) <= 
    targetSdkVersion == compileSdkVersion (latest SDK)

用较低的 minSdkVersion 来覆盖最大的人群,用最新的 SDK 设置 target 和 compile 来获得最好的外观和行为。

Android 11适配指南之Toast解析 网上高级工程师面试相关文章鱼龙混杂,要么一堆内容,要么内容质量太浅, 鉴于此我整理了上述安卓开发高级工程师面试题以及答案。希望帮助大家顺利进阶为高级工程师。目前我就职于某大厂安卓高级工程师职位,在当下大环境下也想为安卓工程师出一份力,通过我的技术经验整理了面试经常问的题,答案部分是一篇文章或者几篇文章,都是我认真看过并且觉得不错才整理出来。大家知道高级工程师不会像刚入门那样被问的问题一句话两句话就能表述清楚,所以我通过过滤好文章来帮助大家理解。现在都说互联网寒冬,其实只要自身技术能力够强,咱们就不怕。 阅读详情

相关推荐

UniApp安卓原生插件开发实战指南

原生插件开发是跨平台应用实现硬件交互与性能优化的关键技术,通过桥接JavaScript与原生代码实现深度系统功能调用。其核心原理在于建立双向通信通道,利用模块化架构平衡开发效率与原生性能。在UniApp生态中,原生插件可突破H5限制,实现摄像头控制、传感器调用等核心场景需求。本文基于企业级开发实践,详解安卓原生插件的环境配置、模块化开发、调试技巧及性能优化方案,特别针对蓝牙通信、NFC读写等高频需求提供组件化实现方案,并分享插件市场发布的标准流程与安全防护经验。

weixin_34242509的博客 486

compileSdkVersion, minSdkVersion 和 targetSdkVersion

android

u010783226的专栏 6114

Android编译SDK问题解决方案一览

打开您的项目中的build.gradle文件,并确保在dependencies部分中添加了所需的编译SDK依赖项。在Android应用开发过程中,使用合适的编译SDK版本是至关重要的。本文将概述一些常见的问题,并提供相应的解决方案和示例代码。以上是一些常见的与Android编译SDK相关的问题以及相应的解决方案。通过正确配置和使用合适的编译SDK版本,您将能够顺利地进行Android应用开发并避免常见的编译问题。确保您的本地环境中已安装所需的编译SDK版本。确保您的编译SDK版本与使用的支持库版本兼容。

CyberGenius的博客 564

详解 MinSdkVersion、CompileSdkVersion、TargetSdkVersion 三者的区别、作用与关系(超详细图文教程)

对 Android 项目来说,MinSdkVersion、CompileSdkVersion、TargetSdkVersion 这三个属性是必不可少的,贯穿于应用开发的始终,它们的作用也非常重要,只有搞清楚它们三者的内在含义和逻辑关系才能「正确」地设定或修改它们的数值,以确保应用在不同版本的 Android 系统上正常的运行。用较低的 minSdkVersion 来覆盖最大的人群,用最新的 SDK 设置 targetSdkVersion 和 compileVersion 来获得最好的外观和行为。

指尖流连敲击梦想,代码行行承载远方! 2万+

R语言环境下Bibliometrix与Biblioshiny的安装与配置指南

本文提供了在R语言环境下安装与配置Bibliometrix和Biblioshiny的详细指南。内容涵盖R与RStudio的安装、Bibliometrix包的安装避坑方法,以及如何启动Biblioshiny图形界面进行文献计量分析。重点解决了安装过程中的常见网络与依赖问题,帮助科研人员快速搭建高效的文献分析环境。

jwt8token的博客 1145

Ubuntu系统下主板GPU温控pwm风扇

在Linux系统下——以Ubuntu为例,配置主板sys_fan等接口连接pwm温控风扇转速根据NVIDIA GPU温度,为服务器GPU等无主动散热显卡提供散热。

罗思哲的博客 5032

react-native-community/netinfo:compileDebugJavaWithJavac FAILED

请教了安卓大佬,说是这个安卓版本不对,需要安卓10以上才有Q这个属性和getRxLinkSpeedMbps这个方法。和安卓大佬说的差不多,需要指定新的安卓版本。再重新运行项目,就可以了。

weixin_42349568的博客 1450

【深度学习】基于BERT模型的情感分析(附实战完整代码+数据集)

情感分类是一个快速发展的研究领域,尽管众多模型和数据集在二分类任务中显示出很高的准确性,但细粒度的情感分类任务仍然是一个很大改进空间的领域。分析SST-5数据集,Munikar等人的先前工作表明,嵌入工具BERT允许使用简单的模型来实现最新的准确性。

aaaa_hsjsueu的博客 2万+

compileSdkVersion、targetSdkVersion以及minSdkVersion三者关系

minSdkVersion: app运行要求的手机最低安卓版本。比如安卓手机版本是19(安卓4.4),minSdkVersion是21(安卓5.0)。那么编译出来的apk将无法安装到该手机上 compileSdkVersion :参与编译的sdk版本。比如想要使用安卓10的5g,需要将compileSdkVersion改为>=29(安卓10),否则无法在代码当中找到相关api targetSdkVersion:目标版本,兼容旧版本的api。虽然由compileSdkVersion编译通过了,但是最终运

LJ_GOD的博客 3001

Aras Innovator系统配置-01对象类(一)

对象类配置-对象类属性说明

企业信息化(PLM,ERP.MES) 2032

使用Kettle进行数据同步(增量)

文章目录kettle介绍kettle安装kettle使用使用kettle同步关系型数据库数据(MySQL示例)1. 创建一个转换2. 选择表输入3. 格式转换4. 执行脚本5. 创建job使用kettle同步NoSql数据(MongoDB示例)创建转换时的注意事项MongoDBInput怎么创建job的创建如何在Linux上面运行已经创建好的job?1、把创建好的job传输到Linux机器上面2、编辑kjb文件3、执行任务 kettle介绍 Kettle 是一款国外开源的 ETL 工具,纯 Java 编写

JenKin的博客 7349

android:minSdkVersion、android:targetSdkVersion、compileSdkVersion、buildToolsVersion

与上面管理sdk版本类似,Android Studio中管理sdk编译工具版本,Tools/SDK Manager(或者Settings/Appearance & Behavior/System Settings/Android SDK),在SDK Tools/Android SDK Build-Tools中勾选/取消勾选需要的android sdk编译工具版本,点击Apply按钮,就会下载/删除对应的android sdk编译工具版本。用于指定应用的目标 API 级别,如果未设置,其默认值与为。

xixi_028的博客 1662

YOLOv8中Anchor-Based、Anchor-Free及样本分配策略

本文主要介绍yolov8中的anchor机制与样本分配策略的静态策略和动态策略

qq_52889317的博客 2211

compileSdkVersion, buildToolsVersion,minSdkVersion 和 targetSdkVersion的区别与意义

每个Android studio项目中都有一个Build.gradle(Module app)可以看到这样的一段设置 android { compileSdkVersion 29 buildToolsVersion “29.0.3” defaultConfig { applicationId “包名” minSdkVersion 24 targetSdkVersion 29 versionCode 1 versionName “1.0” testInstrumentationRunner “androidx

wstcl的博客 1072

基于Simulink的永磁同步电机力位混合控制(导纳+位置)仿真

本文详细介绍了基于Simulink的永磁同步电机(PMSM)力位混合控制系统实现方法。主要内容包括:1) 通过导纳控制原理(二阶质量-阻尼-弹簧模型)实现机器人柔顺控制;2) 在Simulink中构建虚拟环境、导纳控制器、PMSM驱动系统等完整框架;3) 针对曲面恒力打磨场景,实现20N恒力跟踪(RMS误差1.2N)和位置顺应;4) 支持纯位置/导纳/恒力三种工作模式切换;5) 提供系统性能评估指标和高级扩展功能。该方案显著提升了机器人环境交互的安全性和适应性,适用于精密装配、人机协作等应用场景。

xiaoheshang_123的博客 146

SAP S/4HANA 数据 API 化与 MCP 集成全流程实战指南

通过 RAP 发布 OData、利用 Communication Arrangement 打通外网、再在 MCP-server 里封装函数签名,你就能把 S/4HANA 的核心数据安全、标准化地暴露给任意支持 MCP 的大模型。这条链路的每一个环节都由 SAP 与 MCP 社区提供了现成框架,既兼顾了企业合规,也让 LLM 落地更为轻量。期待你在项目里把这些拼图真正串联起来,让业务数据与生成式 AI 碰撞出高价值的火花。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 974

compileSdkVersion, minSdkVersion 和 targetSdkVersion之间的关系

如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion https://chinagdg.org/2016/01/picking-your-compilesdkversion-minsdkversion-targetsdkversion/

ly969434341的专栏 407

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android项目该如何选择targetSdkVersion

新手的第一个Android项目或许没有认真考虑过如何选择targetSdkVersion的问题,也或许还有一部分像TeachCourse一样的开发者,积累一些工作经验后才回头来思考这个问题。那么该如何选择一个targetSdkVersion的属性值?一个属性值为23的targetSdkVersion表示什么含义?那么API 24和Android 7.0又是什么关系?

Venus 的博客 537

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

compileSdkVersion/minSdkVersion/targetSdkVersion

首先强烈建议阅读作者的参考博文。 在AndroidStudio中这三个属性位于Module的.gardle文件中。compileSdkVersion编译版本:即使用什么版本的API编译你的代码 如果使用旧版本的API编译一个项目 可以在新版本的系统上运行 在新版本的系统运行的时候无法使用新版本特性 在新版本对旧版本呢做过更新的点我们的应用可能发生不可预测的异常。 minSdkVersion一

我的学生时代 489

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android(安卓)和ios简单阐明版本控制以及他们的区别

iOS安卓的版本设置、最小版本、目标版本、编译版本的概念以及区别

j15087159186的博客 1849

Android版本与兼容问题

实习期进行项目开发时遇到一些与Android兼容相关的问题,在自己的虚拟机上测试是可以通过的,但交给主管运行时总会出现一些问题,后来才意识到不同版本的Android会出现不兼容的问题,于是学习了与这方面相关的知识。 一.AndroidManifest.xml中的3个版本配置项 compileSdkVersion 30 buildToolsVersion "30.0.2" defaultConfig { applicationId "com.example.demo01

king_cjr的博客 1156

Android三个Version的作用

老生长谈Android三个Version的作用 其实感觉这三个Version我已经谈过几次了,但是总感觉每过一段时间都能对这三个Version有全新的认识,真的让人由衷地感慨,人还是需要不断不断地进步的。 gradle总共是三个不同的版本字段:compileSdkVersion,targetSdkVersion,minSdkVersion 然后再加上两个特殊的版本,当前谷歌发布的最新的安卓版本newSdkVersion和当前运行环境版本runtimeSdkVersion。这两个版本的命名不是官方命名,只是我

qq_31433709的博客 1588

Android Support Library 是什么?

官方地址:https://developer.android.com/about/dashboards/ (可能要FQ) 上图,应该不用我解释了,相信就算是萌新也懂。 在没有接触安卓之前,听说安卓开发需要兼容很多设备和不同版本的系统,今天呢,不同设备咱先不谈(因为我还没学到) 我就在这里对这两天的只是进行一个小结,至于标题为什么是《Android Support Library 是什么?》,因为我在学习的过程中,一直对这个支持库不太理解,我相信很多萌新也跟我一个状态,而网上对这个东西讲解有点分散,又不.

Grekit_Sun的博客 1799

Unable to resolve dependency for ‘:app@releaseUnitTest/compileClasspath‘: Could not find any version

问题 Unable to resolve dependency for ':app@releaseUnitTest/compileClasspath': Could not find any version that matches com.android.support:appcompat-v7:32.+. Open FileShow Details 原因 每发布一个Android版本,就会发布一个对应的SDK(Software Development Kit,软件开发工具包)平台 在Andr.

m0_45281759的博客 2469

Android 版本与 API 级别对照速查表

Android 版本与 API 级别对照速查表

一起coding,一起嗨。 4989

uni-app安卓原生插件开发实战指南

原生插件开发是跨平台应用实现高性能本地功能的核心技术,通过Java/Kotlin扩展JavaScript运行环境,开发者可以突破WebView限制直接调用设备硬件API。其技术原理基于模块化架构设计,通过UniModule/UniComponent基类实现原生能力封装,最终以aar形式集成到uni-app工程中。这种方案特别适合需要蓝牙打印、NFC读卡等硬件交互场景,既能保持跨平台开发效率,又能获得接近原生应用的性能表现。在uni-app生态中,合理使用原生插件可显著提升复杂业务场景下的用户体验,特别是在处

weixin_33674976的博客 417
上一篇: java使用省略号代替多参数(参数类型... 参数名)
下一篇: 基于Dubbo搭建的分布式架构搭建
Observer_P
博客等级 码龄9年 3粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值