做Android也好几年了,在开发过程中发现很多小伙伴对一些边边角角的东西还是不那么清楚,模模糊糊,全靠撞大运,即使是想搞明白网上的相关文章要么是写的太官方,看了更迷糊,要么就是很乱套,让人看不懂,准备出一个系列,系统讲一下边角干货,这些虽然不影响开发,但是对分析问题,定位bug还是很有帮助的,也提现了对Android基本的了解与认知,在说话时候更有底气

首先,每个App的build.gradle文件中都会有compileSdkVersion、targetSdkVersion、minSdkVersion,是什么意思呢,意味着什么呢,
我们来具体说一下

minSdkVersion

这个是最简单的一个,我想应该不用多说,大家都知道,他代表的意思是App的最低向下兼容版本,也就是说只能运行在手机系统大于等于此版本的手机上面,否则安装不上

targetSdkVersion

这个意思是目标运行的版本,就是说只要你的App安装到了手机上,不管你的手机系统是多少,在运行的时候系统代码执行的时候会按照此版本执行,什么意思呢,举个栗子:你的targetSDKversion = 22,而你的应用中的权限有一些在危险权限列表中,也就是动态权限,刚好你的手机是8.0的系统,那么会不会执行动态权限检测呢?答案是不会的,因为动态权限是23之后才有的,即使是你的手机是大于23的系统,也不会执行,所以说是取决于targetSDKversion的大小

compileSdkVersion

说白了就是编译版本,也就是说你代码进行编译的时候,也就是你写代码的时候调用的方法都在这个版本里,当然编译的意思是只参与编译,不会将源码打包到apk里,真正打包进apk的源码还是targetSDKversion,所以一般建议将此版本号改为最大,这样在最新的系统中有哪些方法被废弃你可以第一时间就知道,及时查找替代方法,将来升级targetSDKversion的时候就不用踩坑了