首页 > 其他分享 >再次理解Android targetSdkVersion

再次理解Android targetSdkVersion

时间:2024-04-12 14:44:19浏览次数:23  
标签:理解 29 API 版本 Android targetSdkVersion SDK

1.问题发生

第一问题发生:

两个APP访问同一个系统类android.net.IpConfiguration,均正常编译生成apk安装到同一台设备上(排除了外部因素)。

一个app能正常访问IpConfiguration的属性IpAssignment ipAssignment,另一个却报错没有这个属性。

出问题的那个app,我通过反射获取获取并打印了IpConfiguration的内部所有属性值,发现真没有该属性,

同时另一个正常app也反射打印却真实能获取到ipAssignment。

后来同事说改了下targetSdkVersion,跟正常app的targetSdkVersion改到一致就可以了。

 

第二次问题发生:

 这里我写了一个应用里面有对mqtt组件的引用如下

implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.4'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

在Android9上是正常运行的,但是当我把这个app安装到另一款设备Android12上面时,却出现上面的报错信息

 

没想明白,索性再搜索学习一番并总结如下

 

2.理解学习

2.1 minSdkVersion15    

跟手机系统版本有关

这表示安装应用程序的手机系统的版本必须要>=15。比如我的应用设置minSdkVersion 29, 然后我在android系统8.1.0版本的手机上安装,8.0  Build.VERSION.SDK_INT==27,这时我的应用安装不上。

简而言之,这是决定你安装设备的最低安卓版本,低于设定的minSdkVersion系统就不让你安装。

 

2.2 compileSdkVersion 29

跟编译SDK版本有关

当前使用29版本的SDK编译应用程序。代码中我们可以使用SDK 29版本API和方法。一般设置到最大,可以检测最新SDK的特性。

这是程序在编译时使用的android版本,一般和targetSdkVersion 设置一致(非强制要一致)。

 

2.3 targetSdkVersion 20

系统兼容

高版本手机兼容:当运行在系统10.0,SDK_INT=29的设备上时,调用SDK 20的版本API,即使当前10.0手机的特性已经改变,但是还是运行SDK20的API。

(这就解释了第一节中问题一的原因,由于我们targetSdkVersion不一致导致类的定义不一致,低版本的IpConfiguration没有ipAssignment这个属性)

(同样对于问题二,由于targetSdkVersion设置的31,导致会启用高版本的一些Flag的check,问题上面也说了大于31需要增加flag,由于我们是远程依赖无法添加flag,所以我们把targetSdkVersion修改到30,程序正常执行)

低版本手机兼容:比如targetSdkVersion 29,当运行在系统8.0,SDK_INT=27的设备上时,调用SDK 29的版本API,用到新API要做好兼容。如if( Build.VERSION.SDK_INT<29){.....}else{......}

总结:targetSdkVersion 不能随便调整。如果targetSdkVersion==29,那就要做好29以前所有版本的兼容。

TargetSdkVersion 是 Android 系统提供前向兼容的主要手段。这是什么意思呢?假如用户安装了APP,但是用户的 Android 系统会不断升级,对应同一个 API(方法),内部的实现逻辑已经发生了改变,新逻辑可能会影响之前调用此 API 的 APP,为了兼容此问题,引入 targetSdkVersion。当 targetSdkVersion >= API LEVEL(某个系统版本)时再生效新的逻辑,否则还是沿用之前的逻辑。所以从这个角度来说,如果你修改通常是调高 targetSdkVersion 的数值,就一定要做充分的测试后才能发布,因为调用的 API 虽然没变,但是内部逻辑已经发送了改变

3.API级别对照表

这里再附上API级别对照表,省得每次都在查

Android 14 (Developer Preview)
Android 13.0(T) 33
Android 12.0(S) 31,32
Android 11.0(R) 30
Android 10.0(Q) 29
Android 9.0(Pie) 28
Android 8.1(Oreo) 27
Android 8.0(Oreo) 26
Android 7.1(Nougat) 25
Android 7.0(Nougat) 24
Android 6.0(Marshmallow) 23
Android 5.1(Lollipop) 22
Android 5.0(Lollipop) 21
Android 4.4W(KitKat Wear) 20
Android 4.4(KitKat) 19
Android 4.3(Jelly Bean) 18
Android 4.2(Jelly Bean) 17
Android 4.1(Jelly Bean) 16
Android 4.0.3(IceCreamSandwich) 15
Android 4.0(IceCreamSandwich) 14
Android 3.2(Honeycomb) 13
Android 3.1(Honeycomb) 12
Android 3.0(Honeycomb) 11
Android 2.3.3(Gingerbread) 10
Android 2.3(Gingerbread) 9
Android 2.2(Froyo) 8
Android 2.1(Eclair) 7
Android 2.0.1(Eclair) 6
Android 2.0(Eclair) 5
Android 1.6(Dout) 4
Android 1.5(Cupcake) 3
Android 1.1(Base) 2
Android 1.0(Base) 1


参考:https://www.jianshu.com/p/d833f8888a58 https://blog.csdn.net/crazestone0614/article/details/127979666

 

标签:理解,29,API,版本,Android,targetSdkVersion,SDK
From: https://www.cnblogs.com/terrorists/p/18082009

相关文章

  • String类型转LPCTSTR -----理解C++中的字符串类型转换
    在看代码时,发现有时候会把string类型转换为LPCTSTR,刚开始不理解为什么要做这个转换,所以做了一些调查,现在记录如下是这样的,STRING是代表C++中的字符串string,而LPCTSTR代表的是Windows系统中的字符串类型。也就是说,这样转换的目的是为了把C++中的字符串string转换为Windows系......
  • 以规律来理解单词
    目录象形字母表示的含义ABCDEFGHIJKLMNOPQRSTUVWXYZ单词的偏旁部首双辅音组合元音+辅音组合练习其他常用字母组合音节的规律字母间可以互换的例子熟练象形字母表示的含义学习英语就避免不了要记忆单词,如果不掌握单词的一些规律性,那么几万个单词对你来说都是一些无规律字符,你大......
  • ANDROID STUDIO操作蓝牙打印机(转)
    前言工作中或多或少都会遇到困扰自己很久的问题,我也毫无例外,曾经在项目中对蓝牙打印这一块也困惑和迷茫过,最近在做项目重构的时候,翻看了之前写的代码,还是决定通过两篇文章详细阐述蓝牙连接打印机完成整个打印流程的操作,目的是对工作的一种总结,其次是输出。好比玩个压缩,又是绿......
  • android studio 清单配置文件androidmainfest.xml解读
    1、注册Activity页面,并指定首页。 所有的页面文件要在此文件中注册。指定是APP的首页:(android:exported="true")和下面的intent-filter中的两行,; 2、需要的权限要在此文件中指定;<uses-permissionandroid:name="android.permission.BLUETOOTH_SCAN"/><?xmlver......
  • 手把手教你做阅读理解提高001-Camping:Finding Myself and Growing Strong-露营:在成长
    PDF格式公众号回复关键字:ZKYDT001阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标题、段落开头和结尾,可以迅速把握文章的主题、大致内容和结构标题通常能概括文......
  • 深入理解MD5算法:原理、应用与安全
    第一章:引言导言在当今数字化时代,数据安全和完整性变得至关重要。消息摘要算法是一种用于验证数据完整性和安全性的重要工具。在众多消息摘要算法中,MD5(MessageDigestAlgorithm5)因其快速、广泛应用和相对较高的安全性而备受关注。本书将深入探讨MD5算法的原理、应用和安全性,帮......
  • 说说你对栈、队列的理解?应用场景?
    一、栈栈(stack)又名堆栈,它是一种运算受限的线性表,限定仅在表尾进行插入和删除操作的线性表表尾这一端被称为栈顶,相反地另一端被称为栈底,向栈顶插入元素被称为进栈、入栈、压栈,从栈顶删除元素又称作出栈所以其按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶......
  • 一个bug引发的Android分区存储的思考
    **问题:**在安卓手机上实现保存图片的功能,部分手机保存失败。报了如图一的错误: 根据报错信息是没有权限,但仔细在代码内检查是有申请到存储权限的,并且该功能在其他手机上没问题**实现流程:**仔细看我们的实现流程如图二所示: 整个过程看上去都没问题。但是在出现问题的手机上,使......
  • android12 双屏异触配置
    平台:RK3399 android12。客户整机是USB接口的TP且需要双屏异触,方案如下。双屏异触的修改方法有两种:1、修改EventHub.cpp代码。2、配置触摸屏的IDC文件。这里采取第二次方法。通过adbshelldumpsysinput确认触摸屏的PID和VID。补丁如下:Index:device/rockchip/rk3......
  • AndroidStudio构建项目耗时太长优化办法
    新建AndroidStudio项目时,常会因为网络问题导致部分依赖下载缓慢,其中gradle和kotlin这两个模块最拖慢进度。解决方案:对gradle.properties和settings.gradle.kts这两个配置文件进行修改 对gradle.properties#Project-wideGradlesettings.#IDE(e.g.AndroidStudio)use......