概念
1、何为Gradle?何为Gradle插件?
- Gradle
我们知道Android的构建系统是使用Gradle来构建应用的,Gradle是一种构建工具,它使用一种基于Groovy的特定领域语言来实现的。
软件开发过程不仅仅是编写代码,还涉及到对项目的管理,例如添加项目依赖,打包,签名,发布等一系列操作,后面这些就是Gradle替我们做的事。Gradle通过编写一个名为build.gradle的脚本文件对项目进行设置,再根据这个脚本对项目进行构建。
- Gradle插件
那么,如何来提供这个Gradle构建环境呢?这就需要我们电脑上安装Gradle插件,通过安装Gradle插件来支持系统能够运行Gradle脚本。安装Android Studio后就已经帮我安装了Gradle插件.但Gradle插件是独立于Android Studio运行的,所以它的更新也是与Android Studio分开的。
2、如何通过Android Studio查看当前项目的Gradle版本和Gradle插件版本?
buildscript {
...
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
}
}
这里的版本就是指Gradle插件版本,我们可以直接修改版本号,然后构建项目,Android Studio就会自动下载对应的版本插件。
打开gradle/wrapper/gradle-wrapper.properties文件,我们可以看到如下内容:
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
这即是Gradle的引用地址,后面数字即为Gradle的版本号。
3、Gradle 和 Gradle插件版本对应关系
具体可以查看官网地址。
https://developer.android.google.cn/studio/releases/gradle-plugin.html#updating-plugin
4、SDK & SDK Tools & SDK Build Tools & SDK Platform & SDK Platform Tools
- SDK
SDK全称为Software Development Kit,翻译成中文为软件开发工具包,Android SDK采用了Java语言,因此需要先安装JDK,Android SDK为我们提供了开发测试所必须的Android API类库等。
- SDK Tools
首先看看英文的介绍:
Android SDK Tools is a component for the Android SDK. It includes the complete set of development and debugging tools for Android. It is included with Android Studio.
大概意思是:Android SDK Tools 是Android SDK的一个组件,它包括完整的Android开发和调试工具集,被包含在Android Studio中,主要存在于<sdk>/tools 下,例如模拟器,.9patch工具,性能追踪可视化工具traceview
SDK Build Tools
Android SDK Build-Tools is a component of the Android SDK required for building Android apps. It's installed in the
<sdk>/build-tools/
directory.Android SDK Build-Tools是构建Android应用程序所需的Android SDK的一个组件。它安装在<sdk>/
build-tools目录下,包括aapt(
Android Asset Packaging Tool)、aidl工具、dexdump等等。
- SDK Platform
SDK Platform,它可以理解为 SDK版本。
- SDK Platform Tools
Android SDK Platform-Tools is a component for the Android SDK. It includes tools that interface with the Android platform, such as
adb
,fastboot
, andsystrace
. These tools are required for Android app development.Android SDK Platform-Tools 是Android SDK的一个组件, 它主要包括与Android平台交互的工具例如adb、fastboot及systrace(性能测试工具)等。
5、compileSdkVersion、buildToolsVersion、targetSdkVersion之间的区别?
我们通过AS创建一个project的时候,会自动为我们在app下的build.gradle中添加如下代码:
android {
compileSdkVersion 25
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "com.android.study.example"
minSdkVersion 16
targetSdkVersion 25
...................
}
}
那么compileSdkVersion、buildToolsVersion、targetSdkVersion,minSdkVersion 表示什么意思?它们之间有什么关系呢?
- compileSdkVersion
CompileSdkVersion表明使用哪个版本的SDK进行编译,是你SDK的版本号,也就是API Level,例如API-19、API-20、API-21等等。那它和android系统版本有什么关系呢?其实android每个系统都对应有一个SDK版本,例如如下:
https://developer.android.com/guide/topics/manifest/uses-sdk-element.html
CompileSdkVersion作用是告诉Gradle使用哪个Android SDK版本编译你的应用,SDK相关不会包含到APK中,通常情况下SDK都是向下兼容的,因此建议使用最新的SDK版本进行编译。
注意,如果使用 Support Library ,那么使用最新发布的 Support Library 就需要使用最新的 SDK 编译。例如,要使用 23.1.1 版本的 Support Library ,compileSdkVersion 就必需至少是 23 (大版本号要一致!)。通常,新版的 Support Library 随着新的系统版本而发布,它为系统新增加的 API 和新特性提供兼容性支持。
- buildToolsVersion
buildToolsVersion表明构建工具集的版本号,
- minSdkVersion
minSdkVersion 表示apk运行的最低SDK版本(也就是系统版本)要求,如果目标手机的SDK版本号低于这个版本,则无法进行安装。
- targetSdkVersion
官方的定义是:targetSdkVersion is the main way Android provides forward compatibility。
大概意思是:targetSdkVersion 是 Android 提供向前兼容的主要依据。这是什么意思呢?随着 Android 系统的升级,某个系统的 API 或者模块的行为可能会发生改变,但是为了保证老 APK 的行为还是和以前兼容。只要 APK 的 targetSdkVersion 不变,即使这个 APK 安装在新 Android 系统上,其行为还是保持老的系统上的行为,这样就保证了系统对老应用的前向兼容性。
说的更加简单一点就是你的APK targetSdkVersion为19,运行在SDK为25的系统上,由于各个不同版本的SDK API具体实现可能有些不同,但是由于targetSdkVersion的作用,最终调用的仍然是 SDK 为19的API。这就存在一种情况了,例如在SDK 25中增加了某些API并且代码中调用了这些新增的API,如果运行在SDK 为 19的系统上,就会出现报错例如可能是java.lang.VerifyError错误,因此此属性不会帮你解决兼容性的测试问题。
总结:
通常情况下,minSdkVersion <= targetSdkVersion <= compileSdkVersion,如果targetSdkVersion>compileSdkVersion,则打包时,会自动将targetSdkVersion降为compileSdkVersion。
参考文献
https://blog.csdn.net/qq_26296197/article/details/52202903
https://blog.csdn.net/jinrall/article/details/53220761
http://www.open-open.com/lib/view/open1453253049558.html