28、compileSdkVersion,minSdkVersion,targetSdkVersion 的区别和比较

28、compileSdkVersion,minSdkVersion,targetSdkVersion 的区别和比较

https://blog.csdn.net/lanxuan1993/article/details/84975565

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<Build.VERSION_CODES.M){

                     //这里的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的作用了。要是还有不明白的可以留言,我将会尽我所能为大家解答。

二丶buildToolsVersion和这些配置的sdkVesion有什么关系呢。

       buildToolsVersion是讲的你构建工具的版本号是多少,规则是可以用高的构建工具来构建低版本Sdk的工程。

      

三丶接下来讲讲v4,v7,v13的

       总体来说这个就是一个libs和我们在github上都的libs一模一样。由于android版本碎片化太严重了。导致的,说一个案例在刚开始的时候android系统是没有ViewPager的。是后面的系统才出现的。那么以前的系统想用ViewPager该怎么办呢?好办和我们项目需要自定义某些特殊的View一样,没有的话我们要么自己写,要么到github上面去找然后引入到我们的项目中。这里从github上导入就是这个意思了。但是为啥叫做v4呢。就是说这个包可以兼容到1.6以后的系统可以使用。所以1.6以下的系统是用不了的。v7包的意思就是可以兼容到2.3以上的系统。另外v7包是依赖v4包的。可以看出v4包的minSdk肯定是等于1.6了。v7包的minSdk就会是2.3。v13包主要是在平板上使用,一般在手机端不会用。

       再通过这里我们就会发现一个事情了,我们想要使用v7包我们project,对nimSdk是有要求的我们的minSdk不能比support包的还低吧。

       看到了吧。提示我们要使用v7包必须要minSdk在9或以上

       这里注意了,就是我们在使用surpport包的时候或者lbs的时候我们的minSdk不能比他的还低。

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值