Android build.gradle文件详解

  • 1. 最外层目录下的build.gradle文件
    • 1.1 repostories
    • 1.2 dependencies
  • 2. app目录下的build.gradle文件
    • 2.1 apply plugin
    • 2.2 android
    • 2.3 buildTypes
    • 2.4 dependencies

以下内容都是记录的《Android第一行代码》(郭霖·第二版)中的内容。
Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置,摒弃了传统基于XML(Ant和Maven)的各种繁琐配置。
Android项目有两个build.gradle文件,一个在最外层的目录下,一个是在app目录下。这两个文件对构建Android Studio项目都起到了至关重要的作用。

1. 最外层目录下的build.gradle文件

下面是文件代码,直接从项目中复制出来的

buildscript {repositories {google()jcenter()}dependencies {classpath 'com.android.tools.build:gradle:3.4.2'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}
}allprojects {repositories {google()jcenter()maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }maven { url 'https://www.jitpack.io' }}
}

这些代码都是自动生成的,如果需要自己添加也是可以的。新人的话不用看语法结构,直接看最关键的部分。

1.1 repostories

首先,两处repositories的闭包中都声明了jcenter()这行配置,这个jcenter()其实就是一个代码托管仓库,很多Android开源项目都会选择项代码托管到jcenter上,声明了这行配置后,我们就可以在项目中轻松引用任何jcenter()上的开源项目了。还有上面代码中配置的google()也是一个道理。maven关键字时属于引入的单个开源项目。

1.2 dependencies

dependencies闭包中使用classpath声明了一个Gradle插件。因为Gradle不是专门为构建Android项目开发的,Java、C++等很多项目都可以使用Gradle来构建。因此如果是想构建Android项目,就需要声明‘com.android.tools.build:gradle:3.1.4’这个插件。其中,最后面的部分是插件的版本号。
通常情况下不需要修改这个文件中的内容,除非想添加一些全局的项目配置。

2. app目录下的build.gradle文件

下面代码都是我自己项目中复制出来的,有文章中没有说到的地方,可以暂时忽略。

apply plugin: 'com.android.application'android {compileSdkVersion 29buildToolsVersion "29.0.0"defaultConfig {applicationId "com.timemanagersystem"minSdkVersion 19targetSdkVersion 29versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}useLibrary 'org.apache.http.legacy'
}dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation 'androidx.appcompat:appcompat:1.1.0'implementation 'androidx.constraintlayout:constraintlayout:1.1.3'testImplementation 'junit:junit:4.12'androidTestImplementation 'androidx.test:runner:1.2.0'androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'implementation 'cn.bmob.android:bmob-sdk:3.7.3-rc1'implementation "io.reactivex.rxjava2:rxjava:2.2.2"implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'implementation 'com.squareup.okio:okio:2.1.0'
}

2.1 apply plugin

第一行应用了一个插件,一般有两种值可以选:com.android.application 表示这是一个应用程序模块,com.android.library表示这是一个库模块。应用程序模块和库模块最大的区别在于,一个是可以直接运行的,一个只能作为代码库依附于别的应用程序模块来运行。

2.2 android

在android闭包中,我们可以配置项目构建的各种属性。

  • compileSdkVersion:用于指定项目的编译版本,这里的29好像是Android 10的SDK。
  • buildToolsVersion:用于指定项目构建工具的版本。
  • defaultConfig:在这个闭包中,可以对项目进行更多的细节配置。applicationId用于指定项目的包名,在项目创建的时候,就已经指定过包名了,如果需要改的话,就在这里改。-minSdkVersion用于指定项目最低兼容的Android系统版本,这里为19,表示最低兼容Android 4.4系统。targetSdkVersion指定的值表示在该目标版本上已经做了充分的测试,系统将会为你的应用程序启用一些最新的功能和特性。比如说Android 6.0 系统中引入了运行时权限这个功能,如果你想targetSdkVersion指定成23或者更高,那么系统就会为你得程序启用运行时权限这个功能,而如果想targetSdkVersion指定成22,那么就说明你的程序最高只在Android 5.1 上做过充分测试,Android 6.0 系统引入的新功能就不会启用了。
  • versionCode:用于指定项目的版本号。
  • versionName:用于指定项目的版本名。

2.3 buildTypes

buildTypes闭包用于指定生成安装文件相关配置,通常只会有两个子闭包,一个是debug,一个是release。debug闭包用于指定生成测试版安装文件的配置,release闭包用于指定生成正式安装文件的配置。debug闭包可以忽略不写。release闭包中的minifyEnabled用于指定是否对项目的代码进行混淆,true表示混淆,false表示不混淆。proguardFiles用于指定混淆时使用的规则文件,这里指定了两个文件,第一个proguard-android.txt是在Android SDK目录下的,里面是所有项目通用的混淆规则,第二个proguard-rules.pro是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则。

2.4 dependencies

dependencies闭包中指定当前项目所有的依赖关系。通常一个Android Studio项目一共有三种依赖方式:本地依赖,库依赖和远程依赖。本地依赖可以对本地的jar包或者目录添加依赖关系,库依赖可以对项目中的库模块添加依赖关系,远程依赖则可以对jcenter库上的开源项目添加依赖关系。第一行implementation fileTree是一个本地依赖的声明,表示将libs目录下所有.jar文件都添加到项目的构建路径中。第二行的**implementation **是声明远程依赖,在“androidx.appcompat:appcompat:1.1.0” 中“androidx.appcompat”是域名,用于和其他公司的库做区别,“appcompat”是组名称,用于区别同一个公司中不同库,“1.1.0”是版本号。
声明后,在构建项目是会先检查本地是否已经有了这些库的缓存,没有的话会自动联网下载,然后添加到编译路径中。

Android build.gradle文件详解(转述自《Android第一行代码》第二版)相关推荐

  1. Android build.gradle文件详解

    Android build.gradle详解 什么是gradle? gradle是一个项目构建工具,java开发中有两个大名鼎鼎的项目构建Maven,Ant,其中maven简单易控深受开发者喜爱. 项 ...

  2. 史上最全Android build.gradle配置详解

    Android Studio是采用gradle来构建项目的,gradle是基于groovy语言的,如果只是用它构建普通Android项目的话,是可以不去学groovy的.当我们创建一个Android项 ...

  3. android 项目build.gradle,Android build.gradle 配置详解

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Gradle 简介 Android Studio 是采用 Gradle 来构建项目的.Gradle 是一个非常先进的项目 ...

  4. Android第一行代码第二版简要总结

    进入安卓的第一本书(简要概括) 第一章 了解大体Android 1.Android系统架构 Linux内核层:为Android设备的各种硬件提供了底层的驱动. 系统运行库层:通过c/c++库来提供主要 ...

  5. Android 中 build.gradle 文件详解

    一.简介 一般来说一个新创建的项目中,有两个 build.gradle 文件,一个是工程目录下的,一个是 app 目录下的,这两个 build.gradle 文件对 Android Studio 项目 ...

  6. Android build.gradle配置详解

    AndroidStudio中的Gradle文件 Android Studio是采用gradle来构建项目的,gradle是基于groovy语言. 如上图所示,创建一个AndroidStudio项目,会 ...

  7. build.gradle文件详解

    一个普通的android项目工程里面有两个build.gradle文件,一个位于根目录,一个位于app文件夹内. 一. 位于根目录的build.gradle // Top-level build fi ...

  8. Android Studio build.gradle配置详解

    Android Studio是采用gradle来构建项目的,gradle是基于groovy语言的,如果只是用它构建普通Android项目的话,是可以不去学groovy的.当我们创建一个Android项 ...

  9. Android Studio 中的 gradle 介绍及build.gradle配置文件详解

    不同于 Eclispse,Android Studio 是采用 Gradle 来构建项目的,Gradle 是一个非常先进强大的项目构建工具,它使用了一种基于 Groovy 领域的特定语言(DSL)来声 ...

最新文章

  1. Ubuntu中Atom编辑器显示中文乱码的处理方法
  2. 聊聊用户裂变的那些事
  3. OpenCV 脸部跟踪(1)
  4. mysql mydumper_MySQL 之mydumper安装详解
  5. 阿里云张献涛:自主最强DPU神龙的秘诀
  6. 一文简单弄懂tensorflow_在tensorflow中设置梯度衰减
  7. 吴恩达机器学习作业Python实现(三):多类分类和前馈神经网络
  8. MySQL5.7收集表统计信息时对该表上增删改查的影响
  9. centos cmake安装mysql_CentOS下使用cmake编译安装mysql
  10. vue自定义组件递归实现树状_一道价值25k的腾讯递归组件面试题(Vue3 + TS 实现)...
  11. 李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
  12. 雷赛服务器信号er020,伺服与雷赛控制卡配套的小技巧
  13. javag关于视频转码技术点分析!
  14. SAP开发-同时定义同名的工作区、内表 OCCURS 0 WITH HEADER LINE
  15. 一个奇鸽船新体验:类似的木函软件
  16. GitHub上广受欢迎的下载神器:youtube-dl
  17. poi 宋体_(六)POI-操作Excel的poi的字体设置
  18. 提升算法数据结构的几个网站
  19. How To Install GLPI 9.5 On CentOS7
  20. [IOS APP]长恨歌-王安忆有声小说

热门文章

  1. python flask api部署_使用flask开发api——部署flask,使用gunicorn+gevent模式的http server...
  2. 图像分类数据集类型--典型模型--相关论文
  3. 面经——嵌入式芯片底层
  4. python之地基(四)
  5. li的鼠标移入移出事件和点击事件分别实现为当前li添加样式,删除其他li样式...
  6. golang中字符串的查找方法小结
  7. linux下命令行操作快捷键及技巧
  8. 深入浅出 Java Concurrency - 目录 [转]
  9. linux mdel 命令详解
  10. Bailian3256 矩阵的乘法【数学计算】