android 兼容API的检查
读之前可以了解一下api levels的知识: Android中文翻译组的:Android开发者指南(10) —— Android API Levels
一,使用高版本API要注意的问题
在项目开发中:由于经验和其他条件的制约,如没有查看API出现的版本,对过时API没有作兼容等等。
可能出现下面的问题:
当你的代码使用一个高版本的API,
应用运行于 低于API能够使用的版本手机 时,应用会闪退。
下面是一个例子:
如:
View的
public void setBackground (Drawable background)
Set the background to a given Drawable, or remove the background. If the background has padding, this View's padding is set to the background's padding. However, when a background is removed, this View's padding isn't touched. If setting the padding is desired, please use setPadding(int, int, int, int)
.
Parameters
background | The Drawable to use as the background, or null to remove the background |
---|
对应的过时方法是:
public void setBackgroundDrawable (Drawable background)
This method was deprecated in API level 16.
use setBackground(Drawable)
instead
安装在低于API16的手机上时,在应用调用这个API相关的功能时,会闪退。
下面是出现的条件,要同时满足:
1.仅仅使用setBackground (Drawable background),没有对API版本的兼容处理
2.项目配置的最低版本小于16(如果>=16,应用不能安装在低于API16的手机上)
二,发现使用高版本API的简单方法
<use-sdk android:minSdkVersion="10" />
不要设置android:targetSdkVersion
android:minSdkVersion="10":其中10是API兼容的最低版本
2.修改项目的SDK版本为低版本(android.jar的版本)
就可以看到错误的地方(使用了高于SDK版本的API的位置)
注意:一般,只要使用第2点的方法,就可以发现是否用了高版本的API。
如果第2点,不能发现,请同时使用上面的2个方法
如果你使用上面的方法,项目中并没有报错,说明你的项目没有使用高版本API(反射除外)。
3.兼容API方法
1.使用API时,要看一下,API要求的sdk版本
(如果,觉得麻烦,就在写完代码后,用上面的方法,查看是否使用了过高版本API)
注意点:当出现过时的api时,要注意compatiability(兼容性)
用Build.VERSION.SDK_INT来判断使用新的api和旧的api
(旧的和新的都要使用,或直接使用过时的API)
对于一些过时的API,一般都有相应的高版本的API来替代,性能可能更好。
可以根据不同的手机版本,来使用相应的API
如:
if(Build.VERSION.SDK_INT > 15){
//使用新的API
setBackground (Drawable background)
}else{//使用旧的API
setBackgroundDrawable (Drawable background)
}
有时,高版本的API对应的低版本API,并不好找
可以尝试:
1.查看高版本API的源码,内部是怎么实现,可能内部就是使用的低版本的API,明白实现的机制,自己来实现。.
2. 百度 ,google(google最好用英文来搜索)
如果有错误的地方,请提出,谢谢。