Android的一些基本概念你弄懂了吗?-Gradle、Gradle插件及编译打包相关汇总

概念

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 adbfastboot, and systrace. 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 

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页