一般Android新系统发布会有一些变更,例如限制某个api的访问,但是为了适配市面上绝大多数app,很多时候app的targetSdkVersion只要不变更,不受该变更影响。
那么问题来了,对于同一台设备安装不同的targetSdkVersion的app,访问某个API的行为不一致,系统是如何做到的?
更多问答 >>
-
每日一问 | Android 模块化依赖中的资源冲突该如何规避?
2023-05-24 17:30 -
每日一问 | Android 默认开启硬件加速与设置hardwareAccelerated是一回事吗?
2023-05-24 17:30 -
每日一问 | 瘦身属性?对android:extractNativeLibs属性的探讨
2022-12-07 14:43 -
每日一问 | App在运行状态,可以动态安装apk,并且不重新启动吗?
2022-11-20 12:46 -
2022-11-08 21:50
我试着回答一下,如果有问题,请指正。
按照我们软件的开发传统,随着新版本的发布,必然会兼容老版本的,不能因为新版本的发布导致老版本不可用。基于这个原则咱们回到Android系统,Android系统也是一个软件系统,自然脱离不了这个原则。随着Android新版本的发布,系统api会有一些变更,官网上会有相应的行为变更说明,方便开发者进行适配,扯的有点远了了,回到问题中 targetSdkVersion,Android系统是通过运行时检查app的targetSdkVersion来决定是否允许某个API调用的当一个app调用一个Android API时,系统会先检查app的targetSdkVersion。如果调用的API在app目标平台版本中已经存在,那么系统会按目标平台版本的规则处理该调用。如果调用的API在app目标平台版本中不存在,系统会按最新平台版本的规则处理该调用。举个例子:假设系统最新版本是Android 10,它限制了某个API的访问。App A的targetSdkVersion 是28(Android 9),在它的目标平台上,那个API是允许访问的。那么App A调用那个API时,系统会按Android 9的规则允许其调用。App B的targetSdkVersion 是29(Android 10),在它的目标平台上,那个API是不允许访问的。那么App B调用那个API时,系统会按Android 10的规则拒绝其调用。所以同一台设备上,App A可以调用那个API,App B无法调用那个API,就是因为系统会根据每个app的targetSdkVersion来判断该如何处理对某个API的调用。这种机制可以很好地兼顾新老版本的兼容,旧app可以继续按旧规则运行,新app会自动采用新规则。开发者只需要在适当时候更新一下app的targetSdkVersion,就可以让app采用最新的系统功能和限制策略新人新办法,老人老办法?
targetSdk最初的想法确实是这样的,但是随着更新的越发频繁,对targetSdk的容忍度越来越低了。逐渐要求开发者适配更高的targetSdk,淘汰没有适配的apk。 ...查看更多
targetSdk最初的想法确实是这样的,但是随着更新的越发频繁,对targetSdk的容忍度越来越低了。逐渐要求开发者适配更高的targetSdk,淘汰没有适配的apk。