Android版本兼容性问题

来源:互联网 发布:淘宝上的哥弟是真的吗 编辑:程序博客网 时间:2024/06/06 02:21

我们先从一个实例开始


如图所示:当我们在build.gradle中设置minSdkVersion=8时,调用上诉API时会出现如图提示,无法运行在低于API8的手机上,这就是Android版本兼容性问题的体现;

下面是google官方给出的API平台版本:https://developer.android.google.cn/guide/topics/manifest/uses-sdk-element.html#provisional

下表列出了各 Android 平台版本支持的 API 级别。 如需了解有关运行各版本的设备的相对数量的信息,请参阅“平台版本”信息中心页面。

平台版本API 级别VERSION_CODE备注Android 7.024N平台亮点Android 6.023M平台亮点Android 5.122LOLLIPOP_MR1平台亮点Android 5.021LOLLIPOPAndroid 4.4W20KITKAT_WATCH仅限 KitKat for WearablesAndroid 4.419KITKAT平台亮点Android 4.318JELLY_BEAN_MR2平台亮点Android 4.2、4.2.217JELLY_BEAN_MR1平台亮点Android 4.1、4.1.116JELLY_BEAN平台亮点Android 4.0.3、4.0.415ICE_CREAM_SANDWICH_MR1平台亮点Android 4.0、4.0.1、4.0.214ICE_CREAM_SANDWICHAndroid 3.213HONEYCOMB_MR2 Android 3.1.x12HONEYCOMB_MR1平台亮点Android 3.0.x11HONEYCOMB平台亮点Android 2.3.4
Android 2.3.310GINGERBREAD_MR1平台亮点Android 2.3.2
Android 2.3.1
Android 2.39GINGERBREADAndroid 2.2.x8FROYO平台亮点Android 2.1.x7ECLAIR_MR1平台亮点Android 2.0.16ECLAIR_0_1Android 2.05ECLAIRAndroid 1.64DONUT平台亮点Android 1.53CUPCAKE平台亮点Android 1.12BASE_1_1 Android 1.01BASE 

Android版本更新,新的版本会引入一些新的特性和方法,新的方法带来很多便利,但是对系统版本有要求,无法再低版本手机上运行,如果未做兼容性处理,强行运行,会导致Crash。

做兼容性处理先要明白几个概念:

一:Android 中低端compileSdkVersion,minSdkVersion,targetSdkVersion,maxSdkVersion你弄明白了么!


新建一个项目工程时,系统都会默认为我们配置上面的参数,compileSdkVersion,minSdkVersion,targetSdkVersion,为什么设置这些参数,有什么作用,你都知道么!

1.1:compileSdkVersion

 compileSdkVersion 26:指target=android-26,也就是{Sdk}\platforms\android-26\android.jar编译项目


在项目工程的External Libraries下可以看到


如果compileSdkVersion 修改为27,相应的也会做修改


在该API下有对应的API方法调用,如果版本过低,高版本的方法是没有导入,不可调用的!一般情况下,设置compileSdkVersion为最新的API即可,这也是项目默认的行为。

1.2:minSdkVersion

minSdkVersion 15,指app最小支持版本为API15(Android 4.0),低于Android 4.0的手机无法安装此类应用,当设置minSdkVersion 15时,已经完全覆盖100%的设备


并且google官方给出了其他最小版本对应的比例


minSdkVersion不仅在安装时起作用,在项目构建时也会起作用。如图,在minSdkVersion 8 调用API 9中的方法时给出提示


1.3:targetSdkVersion

targetSdkVersion 26,指当前应用已在API26(Android 8.0)经过测试,无需系统开启兼容模式保证程序正常运行。这个值一般和最新的API值相同。


当设置targetSdkVersion 26时会有如图提示,意思是没有设置为最新的API Level值,打开SDK manager看到最新的API Level为 27,将targetSdkVersion设置为27便兼容了最新的API


1.4:maxSdkVersion 

maxSdkVersion 26 标明App最高应用版本为API 26(Android 8.0),高于Android 8.0的手机无法安装此类应用。如果系统升级后,高于maxSdkVersion ,应用将会被卸载。所以官方文档,不推荐使用这个属性。

二:针对API的变更引起的问题如何做兼容性处理呢?

1:在程序运行时对应用所运行的平台进行判断,旧平台使用旧的API,新平台使用新的API

 使用高于minSdkVersion API Level的方法时,可以看到如下三条提示

 

1.1:使用TargetApi注解标注

   注:targetApi,只屏蔽某一新API才能使用的方法报的Android lint错误,如图path.getTotalSpace,如果你在此方法中引入了另一个高于minSdkVersion的api时,此方法仍会报错!


1.2:使用SuppressLint注解标注

注:屏蔽一切新API才能使用新方法才报的Android lint错误


1.3:使用Build.Version

使用build.Version.SDK_INT运行时判断,分别处理


总结:1.1和1.1虽然未提示错误,但问题依然存在,我们一般结合1,3使用

二:用反射的方式调用高版本中的新功能接口进行调用

如果是基于低版本SDK开发,那么新版本中的新接口肯定编译不通过,这时候可以考虑反射的方式先去查找这个方法是否存在,如果有就代表用户的手机支持该调用方法,如果没有则采用低版本的处理方式(借用网上的一段话)

三:分离代码

分别在不同的SDK上编译运行,最后classLoader加载高版本中的相关类接口。此方法如同二,可以将高版本中的API接口封装后再高版本中的SDK编译成jar包,供低版本中动态加载(借用网上的一段话)

四:使用官方提供的support类库,如support-v4,support-v7,support-v13等


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 很抱歉手机淘宝停止运行怎么办 苹果手机桌面淘宝图标不见了怎么办 提示网页上有错误怎么办 淘宝定制家具违约两个月怎么办 同行在买家评价下面评论怎么办 淘宝知识产权侵权被投诉了怎么办 闲鱼买家说是假货退货怎么办 日验证失败次数上限怎么办 淘宝卖家发货不全怎么办 子账号登录不上怎么办 淘宝宝贝曝光量少怎么办 淘宝买东西退款卖家拒绝怎么办 华为手机淘宝不能收藏宝贝怎么办 包裹发出不想要了怎么办 淘宝改登录密码忘记了怎么办 三星s8应用闪退怎么办 淘宝购物商家不发货怎么办 淘宝商家迟迟不发货怎么办 买家地址写错了怎么办 买家写错快递地址怎么办 淘宝退款选择服务类型出不来怎么办 网购东西发错了怎么办 拒签商家不退款怎么办 红米手机无响应怎么办 淘宝网登录密码忘记了怎么办 淘宝网密码忘记了怎么办 京东抢购不发货怎么办 微商不想做了怎么办 减肥过程中饿了怎么办 滴滴车龄超过6年怎么办 网络公选课没过怎么办 大学网络课挂了怎么办 淘宝虚拟订单买家恶意退款怎么办 淘宝卖家虚拟发货怎么办 淘宝买虚拟产品被骗了怎么办 哈尔滨暖气低于十八度怎么办 淘客店铺没人买怎么办 淘宝商家不给退货怎么办 淘宝卖家拒绝退款申请怎么办 运费险赔付少了怎么办 买了运费险退货怎么办