compileSdkVersion,minSdkVersion,targetSdkVersion作用和如何选择关系

文章地址http://www.jianshu.com/p/72d311d72fcb
1.compileSdkVersion,minSdkVersion,targetSdkVersion作用和如何选择关系.

2.Support Library 包的选择,v4,v7等包到底是干啥的。

3.我们到底该如何选择这些东西运行项目的时候才能正确运行。

下面我将围绕这些问题和疑问来给大家一步步讲解他们的关系。

一丶compileSdkVersion,miniSdkVersion,targetSdkVersion的作用 :
1.compileSdkVersion:这个主要是我们编译app时候用的sdk版本,就我们在AndroidStudio上面点击运行时候的编译时候的环境。记住这个只是在编译时候选择的版本,不涉及到运行时候的行为。由于androidStudio有预编译的功能所以会提示一些警告,提前了解新的sdk

api。修改compileSdkVersion并不会影响我们的我们生成的app在手机先的行为。例如在android6.0之前的系统是不需要动态申请权限的,在6.0之后的系统需要动态申请权限。这个和你的compileSdkVersion的版本选择是完全没有任何关系的。也就是说你app运行时需不需要动态申请权限和你complieSdk是否设置的6.0,没有半毛钱关系,记住compileSDK只是关系到你编译出来的包。不是运行的表现行为。所以修改compileSdkVersion是不会改变你app在手机上运行的表现行为的。但是我们一般情况,也是最理想的情况就是把compileSdkVersion设置到最高,因为使用新的编译检查可以获得很多好处,可以避免弃用的API,并且为使用新的API做好准备。

2.minSdkVersion:这个就是程序运行的最低的要求的Sdk,就是给说如果我设置的minSdkVersion是15的话那么如果你系统低于这个SdkVersion是安装不上的。还有一个好处就是。例如你设置miniSdk是3.0的话,你写的方法只有在4.0后才有的方法,这个时候就会提示你在3.0的时候是没有这个方法的。

Studio会给你这样的提示。说但前的最低版本level是15这个方法是在23上才有的。

我们得这样做:

if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.M) {

requestPermissions(newString[]{“”},REQUEST_CODE_ASK_CALL_PHONE);

}else{

//不需要申请权限直接调用我们需要处理的方法。

}

添加一张图片缓解视觉疲劳。显得排版好看。

3.targetSdkVersion:targetSdk主要是提供向前兼容的作用,什么意思呢?手机系统4.0的,或者

5.0或者更高,但是编译包的时候用的compileSdk是6.0,但是表现形式得按照targetSdk。1.提供向下兼容。2.确定app的表现行为。3.这允许你在适应新的行为变化之前就可以使用新的

API (因为你已经更新了 compileSdkVersion 打出来的包就是在compileSdkVersion上打出来的)。

A.当系统版本高于targetSdkVersion时候:

假设我们的targetSdkVersion是22(就是5.0)不需要动态申请权限,但是我们的系统是6.0的。现在程序运行到了需要某个需要权限的地方了。此时想想我们的手机该怎么办。

系统逻辑是这样的。这不代码系统源码,只是说处理逻辑。

finalint sdkVersion = ctx.getApplicationInfo().targetSdkVersion;

if(sdkVersion

//这里的M就是level 23也就是6.0的系统

//这里的判断是如果当前的打包的targetSdkVersion小于23

那么这里就不需要动态申请权限直接可以调取开放的权限

}else{

//否则系统认为你需要动态申请权限

}

注意这里是系统处理。不需要你显式的写这些代码。是系统内部的代码和自动处理。所以targetSdkVersion是确定表现形式的。并且也做到了向下兼容。

B.当系统版本等于targetSdkVersion时候

当安装app的时候targetSdkVersion刚好等需系统的level,这个时候Andorid平台会认为这个程序在此版本上已经经过了充分的测试。不必为此程序开启兼容性检查判断的工作了。也就是说,如果targetSdkVersion与目标设备的API版本相同时,运行效率可能会高一些。

C.当系统版本小于targetSdkVersion的时候

还是举栗子把:targetSdkVersion=23的时候,但是系统版本是22很明显你代码里面做了动态权限分配。但是系统版本不支持。怎么办呢?我们ninSdk不就是处理这个情况的吗?

从这里看出targetSdkVersion的设置主要是当系统版本高于设置的target的时候。

http://www.race604.com/android-targetsdkversion/讲targetSdkVersion作用的。

总的来说你的app的表现行为和你是否修改过targetSdkVersion是有关系的。当我们修改他的时候要做足够的测试。

minSdkVersion<=targetSdkVersion<=compileSdkVersion

minSDKVersion查看创建项目的时候的版本分部图表确定,然后targetSdkVersion最好和compileSdkVersion一样。CompileSdk选最新的,因为你更新了

compileSdkVersion 打出来的包就是在compileSdkVersion上打出来的。可以使用最新的api

上面就是讲的这个3个sdkVerison的作用了。要是还有不明白的可以留言,我将会尽我所能为大家解答

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值