在AndroidMenifest.xml中,常常会有下面的语句:
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="10" android:maxSdkVersion="10" /> 在default.properties中,会看到下面的语句:
target=android-10 如果是使用Eclipse的话,还可能会看到这样的警告: Attribute minSdkVersion (4) is lower than the project target API level (10)
那么,这里面的minSdkVersion、targetSdkVersion、maxSdkVersion、target API level四个数值到底有什么区别?
minSdkVersion与maxSdkVersion比较容易理解,就是在安装程序的时候,如果目标设备的API版本小于minSdkVersion,或者大于maxSdkVersion,程序将无法安装。一般来说没有必要设置maxSdkVersion。

targetSdkVersion相对复杂一些,如果设置了此属性,那么在程序执行时,如果目标设备的API版本正好等于此数值,他会告诉Android平台:此程序在此版本已经经过充分测,没有问题。不必为此程序开启兼容性检查判断的工作了。也就是说,如果targetSdkVersion与目标设备的API版本相同时,运行效率可能会高一些。 但是,这个设置仅仅是一个声明、一个通知,不会有太实质的作用,比如说,使用了targetSdkVersion这个SDK版本中的一个特性,但是这个特性在低版本中是不支持的,那么在低版本的API设备上运行程序时,可能会报错:java.lang.VerifyError。也就是说,此属性不会帮你解决兼容性的测试问题。你至少需要在minSdkVersion这个版本上将程序完整的跑一遍来确定兼容性是没有问题的。(这个问题确实让人头疼)

在default.properties中的target是指在编译的时候使用哪个版本的API进行编译。
综上,上面的四个值其实是作用于不同的时期: target API level是在编译的时候起作用,用于指定使用哪个API版本(SDK版本)进行编译。 minSdkVersion和maxSdkVersion是在程序安装的时候起作用,用于指定哪些版本的设备可以安装此应用。 targetSdkVersion是在程序运行的时候起作用,用于提高指定版本的设备上程序运行体验。 这四个数值在程序编译时也没有严格的检查,比如说,你可以将minSdkVersion设置的比maxSdkVersion还大,他会自动忽略掉错误的maxSdkVersion。

项目在三星S3和三星Note II 上调用系统相机点击存储的时候崩溃了。查了半天没弄明白原因,后来发现就是因为在manifest里设置了android:targetSdkVersion = 14,导致程序出问题了。后来查下资料,在sdkversion 12以上,不包含12,设置了android:targetSdkVersion之后,android:configChanges="orientation|keyboardHidden"没有起作用,导致程序onCreate还会走。解决方法就是在android:configChanges="orientation|keyboardHidden|sreenSize".这样就ok了。

更多相关文章

  1. Android(安卓)显示网络信息 ConnectivityManager用法
  2. android 面试知识个人积累1
  3. Android(安卓)OpenGL ES 开发教程(7):创建实例应用OpenGLDemos程
  4. android实现程序的后台运行 and 完全退出
  5. Android(安卓)8.0 Volte开关流程 HD图标显示
  6. repo 切换分支一种简单的方法
  7. android Binder机制深入浅出
  8. React Native开发error calling appregistry.runapplication的解
  9. Android(安卓)利用viewpager 来实现Frament 有导航条

随机推荐

  1. 结构体初应用
  2. grid对齐方式以及简单实战
  3. 数据库操作:增删改查-CURD
  4. JavaScript初学习之构造函数、类与继承、
  5. 大家好我是破壳数据技术研究者,多多指教
  6. 网页bug测不出来?不知道的还不点进来瞅瞅!
  7. 安卓2
  8. 第10章 0222-重载,引用与命名空间,学心心得
  9. PHP命名空间类三种引用|类导入命名冲突解
  10. 记一次Linux内核中socket源码走读