Gradle基础知识

标签: android  gradle  groovy

Gradle基础知识

Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目配置,摒弃了传统基于XML(Ant和Maven)的各种繁琐配置。

Gradle作为Android的构建系统,主要作用是编译应用资源和源代码,将其打包成可供测试、部署、签署和分发的APK。

Android Studio使用Gradle这个高级构建工具包来自动化执行和管理构建流程,也可运行我们自定义的构建配置。

Gradle和Android插件是独立于Android Studio运行的,所以我们可以在非Android Studio中,也可以构造Android应用。

构建流程

Alt text

  1. 编译器将源代码转换成 DEX(Dalvik Executable) 文件(其中包括运行在 Android 设备上的字节码),将所有其他内容转换成已编译资源。

  2. APK 打包器将 DEX 文件和已编译资源合并成单个 APK。不过,必须先签署 APK,才能将应用安装并部署到 Android 设备上。

  3. APK 打包器使用调试或发布**库签署 APK:
    如果构建的是调试版本的应用(即专用于测试和分析的应用),打包器会使用调试**库签署您的应用。Android Studio 自动使用调试**库配置新项目。

    如果构建的是打算向外发布的发布版本应用,打包器会使用发布**库签署您的应用。

  4. 在生成最终 APK 之前,打包器会使用 zipalign 工具对应用进行优化,减少其在设备上运行时的内存占用。

简而言之:

编译器将源代码生成dex与编译好的资源文件生成APK,然后通过调试或发布秘钥,来签署APK。最后使用zipalign优化,才生成可安装的APK。

依赖项(dependencies)

管理本地系统以及来自远程存储区的项目依赖项,不用去手动搜索和下载依赖项的二进制文件包以及将它们复制到项目目录内。

ProGuard

构建系统可在构建过程中运行 ProGuard 对类进行压缩和混淆处理。

这里写图片描述

settings.gradle(设置文件)

指示Gradle在构造应用时,包含的模块。在项目中我创建了两个模块,app和myapplication,Android Studio会自动帮我们配置。

include ':app', ':myapplication2'

build.gradle(Project: )(顶级配置文件)

安卓编译工具的路径,配置项目中共用的库和依赖项。

repositories中的 jcenter() , 它是一个代码仓库,很多Android开源项目都会选择将代码托管到jcenter(),声明了这行配置之后,我们就可以在项目中轻松引用jcenter上的开源项目。也就是说,Gradle 会自动去搜索和下载开源项目。默认代码仓库为jcenter() , 其实还有Maven Central() , Ivy 。

dependencies中使用了classpath声明了Gradle插件。因为Gradle并不是专门为构建Android应用开发的,Java,C++等很多项目都可以使用Gradle来构建。我们想要使用它来构建Android项目,就要声明这个插件,后面是Gradle的版本。

allprojects 在这里我们配置所有项目的库和依赖,为了保证每个项目的独立性,不会有过多的公有操作,所以每个依赖项要在每个项目(Module)中自行配置。

    buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
    }
    }
    allprojects {
    repositories {
        jcenter()
    }
    }
    task clean(type: Delete) {
    delete rootProject.buildDir
    }

build.gradle(Module:app)(模块级配置文件)

第一行应用了一个插件apply plugin: 'com.android.application',表明这是一个应用程序模块。一般有两个可选值,还一个为apply plugin: 'com.android.library'表示这是一个库模块。

两者的去区别在于:前者是可以直接运行的,后者只能作为代码库依附于别的应用程序模块来运行。注意两者不能同时使用

android这里内容包括很多,我们主要是用来配置项目

defaultConfig默认配置,可以重写清单文件中的信息,如果清单文件和配置文件所涉及到的内容相同,以配置文件为准。

buildTypes 这里包括debug,release。但是debug不显示,它包含了调试工具,和秘钥签名。release做的工作就是代码的压缩和混淆处理。proguardFiles用于指定混淆时使用的规则文件,proguard-android.txt是Android SDK 目录下的,里面是所有项目通用的混淆规则。proguard-rules.pro 是当前项目根目录下的,里面可以编写当前项目特有的混淆规则。

Android Studio 直接运行项目生成的都是测试版的安装文件。

dependencies 指定当前项目的所有依赖关系。Android Studio共有三种依赖:本地依赖,库依赖,远程依赖。

本地依赖可以对本地的jar包或目录添加依赖关系。库依赖可以对项目中的库模块添加依赖关系。远程依赖可以对jcenter库上的开源项目添加依赖关系。

compile fileTree(dir: 'libs', include: ['*.jar'])第一行是本地依赖声明,表示可以将libs目录下所有.jar后缀文件都添加到项目中。

compile 'com.android.support:appcompat-v7:25.3.1'第二行是远程依赖,其中com.android.support是域名,用于和其他库和其他公司的库做区分。appcompat-v7是组名,用于同一公司不同库作区分。25.3.1版本号,用于同一个库中不同版本作区分。

在声明这行代码后,Gradle在构建项目的时候会首先查看本地是否有缓存,没有的话就会去远程库中下载,然后添加到项目的构建路径当中。

库依赖:compile project结构,例如添加helper就应该compile project(':helper')

声明测试用例库testCompile 'junit:junit:4.12'

 apply plugin: 'com.android.application'
    android {
    compileSdkVersion 25 //项目编译版本
    buildToolsVersion "25.0.2" //项目构建工具版本
    defaultConfig {
        applicationId "example.com.myapplication" //包名,发布应用时的唯一识别
        minSdkVersion 15 //最低兼容的Android系统版本
        targetSdkVersion 25 //用于测试程序的最高API级别
        versionCode 1  //指定项目的版本号(发布更新应用时使用)
        versionName "1.0" //指定项目的版本名
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false //使代码缩小
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
        }
    }
    }
    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    }

这里还有productFlavors,用来配置免费和付费的应用,两者需要制定不同的applicationId。

     productFlavors {
    free {
      applicationId 'com.example.myapp.free'
    }

    paid {
      applicationId 'com.example.myapp.paid'
    }
    }

Gradle属性文件

gradle.properties
以在其中配置项目范围 ,例如 Gradle 后台进程的最大堆大小。

local.properties
为构建系统配置本地环境属性,例如 SDK 安装路径。由于该文件的内容由 Android Studio 自动生成并且专用于本地开发者环境,因此不需要手动操作。

版权声明:本文为Fessible_Max原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Fessible_Max/article/details/73008206

智能推荐

1264页面推荐(中等 union all )稍微的难点在于找1的朋友

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200904233840843.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NTMxNTk0,size_16,color_FFFFFF,t...

单链表+单链表代码(链表最基础)

链表 链表是有顺序的表,在内存中存储: 链表是以节点的方式存储的 每个节点包括data域,next域:指向下一个节点 如图:发现链表的各个节点不一定是连续存放的,有跳跃的,不是连续存储 链表分为带头节点的链表和没有头结点的链表 添加: 1.先创建一个head头结点,作用就是单链表的头 2.后面每添加一个节点,就直接加入到链表最后 遍历: 代码 添加节点到链表里: 这里借助于temp节点,通过循环找...

Rtthread学习笔记(十三)RT-Thread Studio开启硬件看门狗Watchdog

一、开启硬件看门狗Watchdog 1、配置RT-Thread Settings 2、开启stm32f1xx_hal_conf.h中的宏定义 3.使用RT接口函数初始化硬件看门狗...

TYVJ 4864 天天去哪吃 || 清北学堂金秋杯大奖赛

题目描述: 记录一下i这个值上次出现的位置在哪里,就是pre...

java反编译

jvm 把Boolean类型的值flag当做int类型处理。​​​ Foo.java: 由 class 文件生成 jasm 文件:java -jar asmtools.jar jdis Foo.class > Foo.jasm  修改jasm文件: 执行反编译: java -jar jd-gui-1.6.6.jar File 打开Foo.class文件:b修改为2 重新执行java...

猜你喜欢

【学习笔记】03-v-html的学习和示例

v-html的认识和使用 示例: 显示结果: 注意:v-html是有复制的...

Java实现在线考试系统(系统介绍)

1.和现在有的考试系统有以下几种优势: a.和现在有的系统比较起来,本系统有科目、章节、老师、学生、班级等信息的管理,还有批阅试卷查看已批阅试卷等。传统的考试系统划分并不细,业务功能简单。 b.和学校的考试系统还有外面的考试系统比较起来,本系统是B/S结构,学校的考试系统一般为C/S结构,性能方面不如B/S结构,并且C/S接口需要安装客户端,客户端压力很大,我的系统只需要电脑具有浏览器,在同一局域...

计算机视觉--多视几何初步尝试

基础矩阵的原理 K和K’分别是两个相机的参数矩阵。p和p’是X在平面π的坐标表示。所以可以得出 具体计算过程 代码: #!/usr/bin/env python coding: utf-8 from PIL import Image from numpy import * from pylab import * import numpy as np from imp ...

java初学者怎么学习才可以快速入门

java初学者怎么学习才可以快速入门 一、了解JAVA 我们要知道:Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言。 Java之父:詹姆斯·高斯林 1.1 java的三个体系 Java SE(Java Platform Standard Edition)。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境...

字段属性之主键&增删改查&自增长&唯一键约束

字段属性之主键&自增长&唯一键约束 主键 主键:primary key 主要的键 一张表中只有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复,这种称之为主键 一张表只能最多一个主键 增加主键 SQL操作中有多种方式增加主键大体分为三种 1.在创建表的时候直接在字段之后跟primary key关键字(主键本身不允许为空) 优点:非常直接:缺点:只能使用一个字段作为...