Android大家都知道的,版本碎片化比较严重,做版本的适配是必须,从而有了下面的这些知识点。


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

二丶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不能比他的还低。


 

更多相关文章

  1. Android启动过程 && Activity生命周期 && Activity开机自启动 &&
  2. Android超精准计步器开发-Dylan计步
  3. Android(安卓)Compile
  4. Android(安卓)Api级别
  5. 1.Android系统架构
  6. Android(安卓)Studioto同步失败的解决笔记 (AS更新后)
  7. Andriod开发教程 怎么导入现有的Android工程
  8. mmsplayer for ios 版本已经完成。支持iphone,ipod touch,ipad
  9. 编译librtmp for Android

随机推荐

  1. Android(安卓)单元测试实战(2)—— 基于Pow
  2. Android事件分发机制及其拓展
  3. 包建强的培训课程(15):Android(安卓)App热修
  4. Android动画浅析
  5. [置顶] Android之Notification的多种用法
  6. Android之Handler与AsyncTask的那些事
  7. Android之文字描边
  8. 【Android每日一讲】2012.11.06 Android
  9. 我的Android(安卓)NDK之旅(一),不使用ndk-bu
  10. android Asynctask的优缺点?能否同时并发1