论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
分布式数据库
›
Android 中compileSdk、minSdk、targetSdk 是干什么用的 ...
Android 中compileSdk、minSdk、targetSdk 是干什么用的?
雁过留声
金牌会员
|
2024-8-8 02:40:48
|
显示全部楼层
|
阅读模式
楼主
主题
961
|
帖子
961
|
积分
2883
作为多年 Android 开辟的老司机, compileSdk 、minSdk、targetSdk 都是常常见到,但其具体含义是什么?它们都是在什么场景下去利用的。追念起来还真不太能说得清楚。
背景
要想说清楚它们是干什么的,那就不得不说一下主角 Android 操作系统。Android 操作系统在 2008 年发布了第一个版本,到今年已经发布了几十个版本:
Android 版本历史(图源维基百科) 在如此多的版本迭代更新的过程中,Android 操作系统中不断引入新的接口,也不断的对 App 添加一些新的限制。在这不断迭代的过程中,对于开辟者来说,就会面临以下问题:
虽然开辟者盼望本身的 App 可以触达到更多的用户,但开辟的 App 不可能对所有手机都举行支持。
Android 发布新版本,会有新的 API 提供出来利用,那当前编译利用应该利用哪个版本的 Android SDK 呢?
开辟者开辟的 APP 是以哪个系统版本为目标版本举行开辟的?
minSdk
Android 系统的更新,会渐渐引入更多的新功能,这此功能不仅是软件上的,另有硬件上的更新。随着新版本的发布,老系统的用户也会越来越少。而针对低版本系统的功能开辟者,可能会有非常多的兼容大概优化的处理。举一个例子(系统越老,手机也就越老,内存、CPU 等硬件也就越差):好比我现在有一个很复杂的页面,其页面嵌套层级比较大,此页面在高版本手机中可以正常渲染,但在 Android 2.3 的系统中,却加载非常慢,甚至加载不出来。为了能让 2.3 版本的系统中能够支持这个页面的表现,可能必要付出很大的积极,甚至于去重写结构,才能让页面渲染出来。
就如这个例子,为了那百分之零点几的用户去做兼容处理,对于一个资源有限的开辟团队来说,是一件很不值当的事情。不再支持老版本的系统,可以让有限的资源去做更多的新功能的开辟。
为此,在项目中我们可以利用 minSdk 去指定当前项目支持的最低版本。编译产物 APK 文件中的 AndroidManifest.xml 文件中会标明最小支持的系统版本。在安装时,如果当前系统版本不支持,则不能举行安装。
APK 中 minSdkVersion 字段
compileSdk
顾名思义,这个东西是用来指定当前编译情况的。作为老司机,你可能还设置过 buildToolsVersion ,这个也是在编译过程中必要用到的东西。
先来看一下 Android 官方给出的编译过程图:
Android 编译流程 整个过程比较复杂,我们只看其中的一部门内容,下面是 javac 编译的部门:
Class 文件编译过程 图中可以看到, javac 编译的过程,会将 java 代码转换成 class 文件。在编译的过程中,有一个非常重要的东西,那就是 android.jar 文件,此文件为当前利用的 Android SDK 。利用 SDK Manager 可以下载差异版本的 SDK ,如下图所示:
SDK 目录 因此,我们在 build.gradle 文件中定义的 compileSdkVersion 简朴明白就是用来指定 android.jar 的版本的。
当 Android Gradle Tools 版本为 3.0.0 及以上版本,另一个与编译相关的参数 buildToolsVersion 可以不消在设置了。如在 Android Gradle Tools 7.3.0 的版本中,默认利用的为 30.0.3 的版本:
默认 Build Tools 版本 官方文档传送门:
Android Gradle Tools 7.3 Release Note
Android Gradle Tools Latest Release Note
targetSdk
targetSdk 的直译名称就是目标版本,顾名思义,这个版本决定当前应用程序在什么哪个版本系统提供的 API。如许设计,在 Android 系统升级后,某些 API 举动发生改变时,就能根据 APK 中指定的目标版本,保证其业务特性不会发生影响。
举个例子,在 Android 7.0 中引入了一个新的安全计谋 ,对文件访问加入了限制,直接利用 Uri.parse() 是无法直接访问外部存储中的文件。在后续的版本中都必要利用 FileProvider 类举行访问,并添加相应的设置。那么问题来了,手机中编写的应用程序发布时,系统的安全计谋还没有发布,那老应用程序就不可用了吗?答案当是依然可用。7.0 的系统会对低版本兼容,保证业务还能按照之前的特性实验。
按照如上做法,那是不是可以低沉 targetSdk 版本,绕过安全计谋,利用老 API 做需求呢?从技术原理上,这是没有问题的。Google 为了防止这种问题发生,会在应用上架去做限制,在新版本系统发布后,会给应用开辟厂商肯定的时间,去修改适配新的 API, 如果不改造,那么新版本的 APP 可能就无法上架,老应用也可能会被直接下架掉。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
雁过留声
金牌会员
这个人很懒什么都没写!
楼主热帖
XShell免费版的安装配置教程以及使用教 ...
阿里云体验有奖:如何将 PolarDB-X 与 ...
day02-代码实现01
【如何优化她】教你如何定位不合理的SQ ...
微服务大行其道的今天,Service Mesh是 ...
十年技术进阶路,让我明白了三件要事( ...
常用类-LocalDate、LocalTime、LocalDa ...
无需支付688苹果开发者账号,xcode13打 ...
鸿蒙3.0来了,这次,我真的想批评鸿蒙 ...
Elasticsearch 入门实战(5)--Java API ...
标签云
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表