android兼容性设计目标
android是一个不断更新迭代的系统,而应用是基于android系统开发的,那么自然就会出现一个问题即不同版本应用如何在不同的android版本运行?所以可以归纳android系统的设计目标有两个
- 新平台能够兼容的运行旧应用
- 旧平台能够兼容的运行新应用
设计前言
- 在思考如何实现这两个问题之前,有个需要提出的问题是apk是如何创建与安装的?
首先apk的创建,是通过android stuido中指定的android sdk将你写的代码编译打包。这里的版本需要假设为
compilesdk,其次在apk的安装运行也需要一个android sdk去解析apk,这里的sdk,我们假设为currentsdk
设计方案
从设计前言中,我们知道有两个sdk,分别是compilesdk与currentsdk,现在我们来实现第一个设计目标即新平台(带有currentsdk)如何运行旧应用(带有compilesdk),很显然的一个方向是
if(currentsdk > compilesdk){
//遇到不兼容问题是应该做的事情
...
}
因为最新的sdk在设计的时候在大部分情况下会包含旧的sdk里的函数,所以可以用这样的方式去处理。但是问题在于遇到不兼容的问题时应该用哪一版本的sdk的函数去运行,这里就需要另一个属性targetsdk来标识,所以可以这样设计。但前提需要保证targetsdk <= compilesdk
if(currentsdk > targetsdk){
//遇到不兼容问题是应该做的事情
...
}
下面来处理第二个设计目标,即如何在旧平台(带有currentsdk)如何运行新应用(带有compilesdk),如果用上诉的方式即
if(currentsdk < compilesdk){
//遇到不兼容问题是应该做的事情
...
}
就会出现问题,因为之前的老版本sdk是不一定能兼容处理compilesdk中的新函数的,所以我们需要另外在应用中设置一个最小sdk即minsdk来保证小于这个minsdk的应用都不能进行安装运行。如果你为了保证最好的兼容性,那么你付出的代价就是需要在IDE中改写很多的代码。这就是android studio中很多关于minsdk的提示的原因。
总结
在android中也是这样设计的,有三个属性是解决平台兼容性问题的,minsdk,targetsdk和compilesdk。minsdk在一定程度上解决了旧平台运行新应用,而targetsdk在一定程度上解决了新平台运行旧应用。compilesdk仅仅是IDE编译的sdk版本,他可以让你使用最新的api让你的代码更简洁写得更舒坦,但是编译后的.dex文件(类似.class)和不是最新的api编译出来是一样的,这个就相当于语法糖的感觉。
本文探讨了Android系统的兼容性设计目标,包括新平台运行旧应用和旧平台运行新应用。文章详细介绍了apk的创建和安装过程,以及如何通过设置targetSdk、minSdk属性来解决兼容性问题。总结指出,Android通过targetSdk、minSdk和compatibleSdk来处理平台兼容性,让应用能在不同版本的Android系统上运行。

619

被折叠的 条评论
为什么被折叠?



