android minSdkVersion maxSdkVersion targetSdkVersion build target


分析一下minSdkVersion maxSdkVersion targetSdkVersion build target,大部分是我自己的理解,一部分是网上摘抄


minSdkVersion:软件最低可运行在哪个版本的手机上


maxSdkVersion:软件最高可运行在哪个版本的手机上,android 2.0.1以后该属性已无用

targetSdkVersion:(1)软件最佳可运行在哪个版本的手机上,举例来说,如果软件的targetSdkVersion=17,则该软件运行在4.2.x的手机上时性能最佳,
(2)如果软件的targetSdkVersion=17低于所在手机的版本,会告诉系统应用是在api level为17的系统上进行的测试, 应用不允许有向上兼容的行 为,即使用自己定      义的api 17来运行自己的软件,那么版本较高手机会开启向下兼容模式,让该软件以期望的效果运行.
(3)如果软件的targetSdkVersion=17高于所在手机的版本,那么软件会使用手机的api版本运行.

build target:build target并不存在于manifest文件中,而是存在于项目根目录中的project.properties文件中.如果使用Eclipse构建项目的话,那么每个项目的 根目录下都会有一个project.properties文件,这个文件中的内容用于告诉构建系统,怎样构建这个项目。打开这个文件,除了注释之外,还有 一行:target=android-18.这句话就是指明build target,也就是根据哪个android平台构建这个项目。指明build target为android-18,就是使用 sdk中platforms目录下android-18目录中的android.jar这个jar包编译项目。同样,这个android.jar会被加入到本项目的build path中.但是需要 注意的一点,build target只是在Eclipse或Android Studio编译的时候说明用哪个版本的API进行编译,并不是运行在手机上,真正测试该软件能否 运行在某个版本的手机上还需要看targetSdkVersion.

问题示例:
该问题也是我自己遇到的问题
在使用百度推送时,比较老的百度推送jar包启动服务时采用的是隐式意图启动的,当时我的targetSdkVersion为23(android 6.0),build target版本20(android4.4),在编译的时候采用build target编译,所以没有任何问题,并且我的手机API版本是4.2.1的,即api 17,所以运行时也没任何问题.
后来我换了手机,手机API版本为22(android5.0.1),当我把软件运行在5.0.1的手机上时,直接报错:说我启动服务的intent必须明确,在网上查了之后发现在android5.0以后,为了安全性考虑,启动服务都必须采用显式意图启动,不然就抛出异常.解决办法肯定是有的,那就是更新百度推送jar包呗,但是这样做太麻烦了.
所以一直拖着用4.2.1的手机测试,但是今天看来,更为简单的方法出现了.我直接把targetSdkVersion从原来的23改为17(只要改为5.0以下都行),然后运行在android5.0的手机上,问题直接解决,一切正常.

解释一下:之前在4.2.1手机上运行时,一切正常,因为targetSdkVersion为23高于测试手机的API版本16,所以会使用手机的API版本去运行,此时intent采用隐式意图启动服务还只是报个警告,后来测试手机换成API 22的,由于targetSdkVersion为23仍然高于22,所以会使用测试手机的API版本去运行.这时问题就来了,因为API 22的手机已经不支持隐式意图启动服务了,也不给警告,而是直接抛出异常.而我们把targetSdkVersion改为17之后,再次运行到API22的手机上时,因为targetSdkVersion为17低于22,所以测试手机会开启兼容模式来运行我们的软件,即使用API 17来运行我们的软件,而API 17是支持隐式意图启动服务的,所以软件可以正常在API 22的手机上运行.

看不懂的留言哈

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值