Android Studio Gradle文件解释其作用

简介: Android Studio Gradle文件解释其作用

在使用AndroidStudio时通常会遇到如下问题:


  1. Android sutdio打开一个工程一直卡在Background Tasks怎么办?
  2. 手动配置Gradle Home后,怎么还是提示错误?
  3. 下载了Gradle,配置了gradle home,为什么打开工程显示还要在远程库下载?


先了解下gradle到底是什么?Studio中用她做了些什么? Gradle是一种构建脚本,用Groovy语言实现,一种类似于java的语言。AndroidStudio使用Gradle作为构建工具,是构建工具就必须管理依赖库,当工程中使用了开源库时只需在build.gradle中告知gradle从哪个远程库下载就可以了。


下面详细介绍AndroidStudio工程的settings.gradle、Project的build.gradle、Module的build.gradle、gradle/wrapper这些文件分别是用来干什么的。


Groovy Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy也可以使用其他非Java语言编写的库。


● 是一个基于 Java虚拟机的敏捷 动态语言。

● 构建在强大的Java语言之上 并 添加了从Python,Ruby和Smalltalk等语言中学到的 诸多特征。

● 为Java开发者提供了 现代最流行的编程语言特性,而且学习成本很低(几乎为零)。

● 支持DSL(Domain Specific Languages领域定义语言)和其它简洁的语法,让你的代码变得易于阅读和维护。

● Goovy拥有处理原生类型,面向对象以及一个Ant DSL,使得创建Shell Scripts变的非常简单。

● 在开发Web,GUI,数据库或控制台程序时 通过 减少框架性代码 大大提高了开发者的效率。

● 支持单元测试和模拟(对象),可以 简化测试。

● 无缝集成 所有已经存在的 Java对象和类库。

● 直接编译成Java字节码,这样可以在任何使用Java的地方 使用Groovy。


生态圈:         除了语言和它的API之外,还围绕Groovy催生出了一个卓有成效的项目生态系统,包括web框架、桌面应用程序框架、并发性、测试等各种主题,它们将Groovy作为核心。        

Grails是JVM的一个开源、完整的堆栈、web应用程序框架。它利用了Groovy编程语言和约定优于配置,以提供高效的、流媒体的开发体验。        

Gradle可以自动化构建、测试、发布、部署以及更多的软件包或其他类型的项目,如生成的静态网站、生成的文档或其他任何东西。  


Project的settings.gradle include ':app'


位于工程的根目录,用于指示 Gradle 在构建应用时应将哪些模块包括在内,当然一个工程可以包含多个moudle,若还有一个lib moudle ,settings.gradle则如下:


include ':app', ':lib'

Project的build.gradle


位于工程的跟目录,指定Gradle构建所引用的仓库和依赖的插件


/**

  • buildscript 配置gradle的依赖,此处不能配置模块的依赖/ buildscript {     /    * repositories 告知gradle从哪里下载自身的依赖库,     * 目前支持JCenter, Maven Central, and Ivy,也可以配置自己使用的依赖库     /     repositories {        jcenter()     }     /    * 配置gradle构建工程的依赖插件(Android Plugin for Gradle)的版本     **/     dependencies {         classpath 'com.android.tools.build:gradle-experimental:0.8.3'     } }

/**

  • 配置工程中所有模块的远程依赖仓库。若工程某个模块中不依赖这里定义的远程仓库,则需在模块的build.gradle中申明 **/  


allprojects {     repositories {         jcenter()     } }

Module的build.gradle


模块级 build.gradle 文件位于每个 // 目录,用于配置适用于其所在模块的构建设置。您可以通过配置这些构建设置来提供自定义打包选项(例如附加构建类型和产品风味),以及替换 main/ 应用清单或顶级 build.gradle 文件中的设置。


/**
• 应用com.android.application插件构建此模块 **/
apply plugin: 'com.android.application'
/**  *开始配置安卓特定的编译选项  */
android {
  /**    * compileSdkVersion 指定gradle构建时采用的API版本,应用可以在当前版本的系统或者比当前版本更低的系统中运行    * buildToolsVersion 指定编译工具的版本,可以通过SDK Manager下载相应的版本    */
  compileSdkVersion 25   buildToolsVersion "25.0.0"
  /**    * defaultConfig 封装默认设置和编译变量,能根据编译系统动态得重写AndroidManifest.xml中的属性    */
  defaultConfig {
    /**      * applicationId 应用的名字      * 但是代码中的包名仍然参考main/AndroidManifest.xml      */
    applicationId 'com.example.myapp'
    // 定义运行的最小系统版本     minSdkVersion 15
    // 执行运行的api版本,通常和compileSdkVersion一致     targetSdkVersion 25
    // 定义应用的版本     versionCode 1
    // 定义对用户的版本     versionName "1.0"   }
  /**    * buildTypes 配置了许多的编译类型。默认情况下,定义了debug 和release两种。    * debug编译类型在编译系统中默认支持,不用配置。编译时采用debugging tools而签名采用debug key    * release 编译类型应用了混淆设置,但是在默认情况下没有签名。    */
  buildTypes {
    /**      * 默认情况下,Android Studio 对release编译类型进行了配置,      * minifyEnabled减少应用的体积,并且指定了混淆设置文件      */
    release {         minifyEnabled true // Enables code shrinking for the release build type.         proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'     }   }
  /**    * productFlavors 字面翻译是产品口味,在多渠道打包用的比较多,或者是针对同一款应用不同的使用限制。    * 在productFlavors中可以重写defaultConfig中的配置。在默认情况下编译系统是没有创建productFlavors的。    * 这里示范创建了付费和免费两种产品特性,每种特性定义了不同的应用id,所以同一款手机可以同时安装者款应用    */
  productFlavors {     free {       applicationId 'com.example.myapp.free'     }
    paid {       applicationId 'com.example.myapp.paid'     }   }
  /**    * 拆分专用版本的apk,以减小应用的提交    * 比如:jni时分别拆分成arm版和x86版    *       或者根据屏幕密度拆分    *    */
  splits {     // Screen density split settings     density {
      // Enable or disable the density split mechanism       enable false
      // Exclude these densities from splits       exclude "ldpi", "tvdpi", "xxxhdpi", "400dpi", "560dpi"     }   } }
/**  * 本模块的依赖配置  */
dependencies {     compile project(":lib")     compile 'com.android.support:appcompat-v7:25.1.0'     compile fileTree(dir: 'libs', include: ['*.jar']) }

Gradle 属性文件


Gradle 还包括两个属性文件,位于项目根目录,可用于指定适用于 Gradle 构建工具包本身的设置:


gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=services.gradle.org/distributio…


位于工程的gradle\wrapper目录,用于配置gradle,若IED将工程的gradle配置成Use default gradle wrapper 模式


当GRADE_HOME(默认为C:\Users\Administrator.gradle)中没有工程指定的gradle版本,则主动从网上下载。  下载这部分的逻辑实现在gradle\wrapper\gradle-wrapper.jar中可以通过反编译查看其源码,GradleWrapperMain.java中先读取gradle-wrapper.properties配置的版本信息,若默认目录不存在对应的Gradle,则从配置的网站上下载。


local.properties


ndk.dir=E:\Tools\ADT\ndk-bundle sdk.dir=E:\Tools\ADT


为构建系统配置本地环境属性,例如 SDK 安装路径。由于该文件的内容由 Android Studio 自动生成并且专用于本地开发者环境。


Android Studio IDE Gardle 配置 Use default gradle wrapper(recommended): 是否让gradle-wrapper.jar根据gradle-wrapper.properties的定义去查找对应的gradle。优先本地查找,若本地不存在则再在gradle-wrapper.properties中定义的distributionUrl地址中下载。下载的Gradle会存放在/wrapper/dists/Gradle-xxxxx/然后是奇怪的一窜/gradle-xxxxx.zip 下载完成后会自动解压。

Use local gradle distribution: 选择之后Gradle home才可以设置,为本工程指定本地存在的Gradle,为了减少麻烦需要最好使用gradle-wrapper.properties中定义的版本,否则有可能存在同步不通过的情况


Globle Gradle Setting


Offline work:


问题1.


卡顿是由于要下载Gradle。按如下方式解决:


本地存有工程使用的Gradle


可以直接在Use local gradle distribution中指定gradle 路径点击确定稍等片刻即可:


本地没有Gradle


在项目gradle设置中选择Use default gradle wrapper,studio会自动下载相应的gradle版本到 service directory path 目录。


由于网络原因,通常花费时间较长,直接强制从任务管理器关闭Studio 手动从网络上下载gradle/wrapper/gradle-wrapper.properties中定义的gradle版本。先将/wrapper/dists/Gradle-xxxxx/然后是奇怪的一窜/ 目录中的零时文件删除,再将下载的压缩包拷贝过来。 再重新启动Studio,gradle解压后,会自动从远程依赖库中下载所需要的依赖库


问题2


那是因为选择了 Offline work 模式导致。gradle只是构建工具,若依赖的第三方库不存在则会提示出错。  不选择Offline work ,gradle构建工具会自动从远程依赖库中下载所需要的各种库。


问题3


只是配置了gradle,gradle只是构建工具。第三方依赖的库就是通过gradle从远程依赖库中下载的,若下载库时间长,应该是本地网速不好导致。    显示类似上图的下载是很正常的,表示构建工具正在从远程依赖库中下载依赖文件!


Error:Failed to complete Gradle execution.  Cause:  文件名、目录名或卷标语法不正确。  Gradle 目录配置不正确导致


目录
相关文章
|
4天前
|
缓存 程序员 定位技术
Android Studio 插件,那些被大厂优化的程序员们
Android Studio 插件,那些被大厂优化的程序员们
|
4天前
|
Java 测试技术 Android开发
Android Gradle 干货,看这篇文章就行了
Android Gradle 干货,看这篇文章就行了
|
5天前
|
Android开发
Android studio 2021.3.1不生成iml文件
Android studio 2021.3.1不生成iml文件
21 5
|
5天前
|
开发工具 Android开发
解决夜神模拟器与Android studio自动断开的问题
解决夜神模拟器与Android studio自动断开的问题
12 1
|
6天前
|
Android开发
Android stdio 无法新建或打开AIDL文件(解决方法)
Android stdio 无法新建或打开AIDL文件(解决方法)
13 0
|
6天前
|
Android开发
android string.xml文件中的整型和string型代替
android string.xml文件中的整型和string型代替
10 0
|
7月前
|
Java 开发工具 Android开发
Cocos Creator 2.4.6 Android Gradle 版本升级为 6.5.1(插件4.1.0)
Cocos Creator 2.4.6 Android Gradle 版本升级为 6.5.1(插件4.1.0)
208 1
|
Android开发
Android Studio中修改gradle插件版本和Gradle版本
Android项目中,我们一般要设置gradle插件版本和gradle版本。 项目根目录下的build.gradle文件中,通过classpath可以指定gradle插件的版本。
|
Android开发
【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
1504 0
【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
|
Java Android开发
【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(一)
【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(一)
439 0
【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )(一)