首页 > 编程知识 正文

安卓10是不是有些app不兼容,android版本

时间:2023-05-04 17:45:44 阅读:110847 作者:1974

Android系统的向后兼容性较差,在实际开发和测试中会出现版本兼容性问题。 本题成文是参考网络上的部分教程和个人开发中的实例进行总结的。

版本兼容性问题

版本兼容性:

Android系统向后兼容较低,但即使处理了一个APP应用程序APP,也可以在版本之间运行。 向后兼容性差,不同的系统版本有不同的API版本,当然有些接口也不一样,旧平台也不能使用新的API,这就是安卓的版本兼容性问题。

首先来看看实例吧

说明:如图所示,如果在build.gradle中设置minSdkVersion=8,则调用以上API时将出现如图所示的提示,并且在低于API8的手机上不起作用。 这就是安卓版本兼容性问题的体现。

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

说明:安卓版本已更新。 新版本将引入一些新的特性和方法。 新方法虽然会带来很多便利,但是对系统的版本有要求,不能在更旧版本的手机上运行。 如果不进行兼容性处理就强制执行,会导致Crash。

要进行兼容性处理,您需要了解一些概念Android build.gradle中的compileSdkVersion、minSdkVersion、targetSdkVersion和maxSdkVersion信息。

创建新项目项目时,系统将缺省设置上述参数。 compileSdkVersion、minSdkVersion、targetSdkVersion,你知道为什么设置这些参数,有什么作用吗?

合成sdkversion

compilesdkversion 26:target=Android-26,即{ SDK }platformsAndroid-26Android.jar编译项目

在项目项目项目的外部库下,可以看到引用了Android-26

如果compileSdkVersion更改为27,则会相应地进行更改

通常,将compileSdkVersion设定为最新的API即可。 这也是项目的默认行为

最小版本

所谓minSdkVersion 15,APP的最低支持版本是API15(Android4.0 ),不能在低于Android 4.0的手机上安装这样的APP应用程序。 在设置minSdkVersion 15时,100%的设备已完全覆盖

而且谷歌官方表示了支持其他版本的比例

minSdkVersion不仅在安装过程中工作,而且在生成项目时也工作。 如图所示,minSdkVersion 8调用API 9的方法时会给出提示

targetSdkVersion

targetSdkVersion 26意味着当前的APP应用程序已经过API26(Android8.0 )的测试,并且系统无需启动兼容模式保证程序即可正常运行。 该值一般与最新的API值相同。

设置targetSdkVersion 26后,将显示如图所示的提示。 这意味着没有设置最新的API Level值。 打开SDK manager时,如果最新的API Level设置为27,targetSdkVersion设置为27,则会与最新的API兼容

maxSdkVersion

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

如何对API更改带来的问题进行兼容性处理? 程序运行时确定APP应用程序正在运行的平台,旧平台使用旧的API,新平台使用新的API

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

使用TargetApi标注

注: targetApi会阻止从只有一个新API可用的方法(如path.getTotalSpace )报告的Android lint错误。 如果在此方法中引入了另一个高于minSdkVersion的API,则此方法仍会报告错误。

使用SuppressLint注释

注: Android lint错误只有在阻止所有新API后才能用新方法报告

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

总结: 1和2没有提示错误,但问题依然存在,我们一般与1、3配套使用

反射性地调用和调用高版本的新功能界面

如果是基于较低版本的SDK开发的,新版本的新接口将始终无法编译。 此时,反射性地首先查找该方法是否存在,如果存在,则代表用户手机支持该呼叫方法,否则可以考虑采用低版本的处理方法。 (

分离码

请勿在不同的SDK上编译并运行。 最后,classLoader加载更高版本的相关类接口。 该方法封装了更高版本的API接口后,可以将更高版本的SDK编译到jar包中,并在更低版本中动态加载,如2所示。 (

使用官方提供的support类库,如support-v4、support-v7和support-v13

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。