Android 版本platform 与api的对应关系

2024-06-17 16:38

本文主要是介绍Android 版本platform 与api的对应关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

API Level和版本有如下对应关系

 

 
Code nameVersionAPI level
Marshmallow6.0API level 23
Lollipop5.1API level 22
Lollipop5.0API level 21
KitKat4.4 - 4.4.4API level 19
Jelly Bean4.3.xAPI level 18
Jelly Bean4.2.xAPI level 17
Jelly Bean4.1.xAPI level 16
Ice Cream Sandwich4.0.3 - 4.0.4API level 15, NDK 8
Ice Cream Sandwich4.0.1 - 4.0.2API level 14, NDK 7
Honeycomb3.2.xAPI level 13
Honeycomb3.1API level 12, NDK 6
Honeycomb3.0API level 11
Gingerbread2.3.3 - 2.3.7API level 10
Gingerbread2.3 - 2.3.2API level 9, NDK 5
Froyo2.2.xAPI level 8, NDK 4
Eclair2.1API level 7, NDK 3
Eclair2.0.1API level 6
Eclair2.0API level 5
Donut1.6API level 4, NDK 2
Cupcake1.5API level 3, NDK 1
(no code name)1.1API level 2
(no code name)1.0API level 1

 

 

Android版本分布图- 2015-04

 

先说一下minSdkVersion的用处:
新版本中public了老版本没有的接口,如果我写的一个App中用到了只有新版本才有的接口,肯定不能让它跑在老版本SDK上,不然会报错。 Android是如何保证这一点的?靠定义minSdkVersion来实现。 比如,如果我定义了<uses-sdk android:minSdkVersion="8"  ... />, 编译生成的apk是无法安装到Android 2.1(API Level 7)系统上的,系统会提示: ERROR: Application requires API version 8. Device API version is 7。

AndroidManifest.xml中如果不写,缺省 minSdkVersion = 1, 表示程序至少能安装到,并且作者也希望它能跑到Android 1.0上。

接下来说一下targetSdkVersion的用处:
一般而言,新版本要兼容老版本,这就是为什么Android中很多接口即使过时了(deprecated)但还依然保留在新SDK中,所以绝大多数情况下,为老版本开发的应用可以运行在新版SDK上。但是也有一些例外,主要是以下三类问题:

1. 老接口被删除或修改了(这种case有,但很少),本文不关注
2. 同样的接口,但新老版本的实现有所不同。比如有一些API早期设计时考虑不周全,新版本做了改进。
3. 即使不涉及任何接口调用,但由于物理设备的扩展,同样的apk需要在新版本上需要适配更多的物理设备,从而具备了新的特性

对于第二类问题,指定targetSdkVersion为具体的某个API Level,则表示调用接口时只会调用该版本实现的API,而不是早期版本的API。
对于第三类问题,就是这封信碰到情况,Google从开发Android 1.6 (API Level 4)开始意识到,程序运行时需要考虑到手机屏幕大小、分辨率不同。因此从1.6开始引入了针对多屏幕的支持,定义了不同屏幕尺寸与分辨率、密度的一个对应关系。注意到此前google只意识到会在中密度屏幕(mdpi)下开发,所以1.5以及以前版本的图片图标等资源、布局都是按照中密度屏幕设计的。

 

从Android 1.6开始,Google提供了多套资源(ldpi, mdpi, hdpi) 支持,对内置应用以及Framework的资源(比如控件),系统可以在编译时刻决定只打包某个特定密度的资源(定义在PRODUCT_LOCALES中,对N1,应该是PRODUCT_LOCALES := hdpi ...)。

对基于SDK开发的应用,eclipse缺省会打包所有密度的资源,在Android 1.6之后的版本上跑,会在运行时刻根据物理设备实际密度来选择对应密度的资源。


如果某个App中定义的targetSdkVersion <= 3, , 表示该App无法用到Android 1.6才有的多屏幕支持能力, 所以即使应用本身包含了hdpi,mdpi,ldpi资源,但运行到hdpi的物理设备上时只会去加载mdpi的资源,当然显示就不正常了。
注意:如果App中也用到的系统级资源(比如控件),一般来说特定的物理设备只可能是hdpi,mdpi, ldpi (以后会有扩展,比如xdpi)中的一种,所以只会加载那唯一的一种dpi资源,因此显示系统控件本来不应该有任何问题。不过,如果Image没有优化,而是包含了所有资源,那么控件显示也会不正常 。

 

 

 

再回到正题上来,为什么eclipse下编译的程序运行起来和ubuntu下编译的显示效果不同?

在ubuntu下编译,系统认为你编译的是内置应用,内置应用在正常情况下不会被变态的人扒出来放到其他设备上去,所以不存在安装兼容性问题,minSdkVersion缺省就是当前物理设备的current sdk version。另外既然是内置应用,当然运行在当前物理设备上效果最好,所以targetSdkVersion缺省也是当前物理设备的current sdk version。这个在编译时刻打包apk时,build system首先检测这两个值有没有设置,没设置的话它会替你加上。 

在eclipse下编译,系统认为你编译的是第三方应用,忘了写就是你的错了,minSdkVersion和targetSdkVersion缺省都是1,所以会出现上面说到的悲剧。

结论:
1. 对内置应用,不要自己去设置minSdkVersion和targetSdkVersion;
2. 基于SDK开发的,根据自己的实际情况,一定要设置minSdkVersion和targetSdkVersion;
3. 刚刚没说maxSdkVersion,我们别定义它,以后可能会OTA升级整个Android系统,定义了它对我们是个悲剧

 

 

 

 

 

这篇关于Android 版本platform 与api的对应关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069982

相关文章

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Java 中的 equals 和 hashCode 方法关系与正确重写实践案例

《Java中的equals和hashCode方法关系与正确重写实践案例》在Java中,equals和hashCode方法是Object类的核心方法,广泛用于对象比较和哈希集合(如HashMa... 目录一、背景与需求分析1.1 equals 和 hashCode 的背景1.2 需求分析1.3 技术挑战1.4

使用Go调用第三方API的方法详解

《使用Go调用第三方API的方法详解》在现代应用开发中,调用第三方API是非常常见的场景,比如获取天气预报、翻译文本、发送短信等,Go作为一门高效并发的编程语言,拥有强大的标准库和丰富的第三方库,可以... 目录引言一、准备工作二、案例1:调用天气查询 API1. 注册并获取 API Key2. 代码实现3

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.