compileSdkVersion、targetSdkVersion以及minSdkVersion三者关系

minSdkVersion: app运行要求的手机最低安卓版本。比如安卓手机版本是19(安卓4.4),minSdkVersion是21(安卓5.0)。那么编译出来的apk将无法安装到该手机上

compileSdkVersion :参与编译的sdk版本。比如想要使用安卓10的5g,需要将compileSdkVersion改为>=29(安卓10),否则无法在代码当中找到相关api

targetSdkVersion:目标版本,兼容旧版本的api。虽然由compileSdkVersion编译通过了,但是最终运行到手机上的运行效果(表现形式)由targetSdkVersion决定

targetSdkVersion详解

  • 何时生效?

targetSdkVersion>=xx(安卓手机系统版本)

比如新系统要用andriod6.0的动态权限,要想该部分api生效,那么目标版本targetSdkVersion也需要大于6.0。

  • 为何要引入targetSdkVersion?

    如果goole在高版本中修改了api,同一方法有了新的代码逻辑,执行该方法依照原来的条件会报错,那么如何避免呢?

    如果有个参数targetSdkVersion,大于执行新代码逻辑否则执行旧代码逻辑。可以想象下andirod里面sdk的伪代码:

if( getApplicationInfo().targetSdkVersion>26){//26为安卓版本号
    //新的API逻辑
}else {
    //旧的API逻辑
}

如果开发者要用新版本里的方法(需要对新版本api做适配),则更新targetSdkVerison,这样运行时就走新版本api的逻辑,如不需要则可用原targetSdkVerison。

  • 举例:

    app使用了透明的activity且固定了方向,在Android 8.0版本以下运行正常,当运行在Android 8.0/8.1系统上,直接crash。(Android 8.0/8.1 系统规定了透明的ativity 不能固定方向,否则抛出异常)。

    如果使用者,更新了手机系统,使用了8.0/8.1以上的,如何避免更新手机系统后app报错呢?

    通过引入目标版本targetSdkVersion来区分同一api在不同系统上的行为,如果目标版本大于8.0那么走新的逻辑,小于走原来逻辑。开发者要使用8.0/8.1该版本的新特性,就需要修改targetSdkVersion,并且做适配避免报错。

三者联系

  • compileSdkVersion>=targetSdkVersion>minSdkVersion
  • 最佳compileSdkVersion=targetSdkVersion>minSdkVersion

参考

https://www.jianshu.com/p/12e42558378a

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值