Gradle构建详解

最近遇到了clone项目gradle构建的问题,google众说纷纭,花了一些精力最终解决;想了下与其单独只说此次遇到的问题及解决方式,不如整体系统的梳理清楚,彻底解决今后遇到构建引发的一系列问题。gradle整体来说不难,主要比较广,杂。

1、首先说一下脚本

image.png

image.png

这几个文件在新建工程中自动生成,帮助我们可以直接实现命令,如在terminal中实现./gradlew ***,所以即使gradle未构建成功,也可实现命令行输出。

附:在命令行输出与在终端进入工程目录输出命令是一样的

2、gradle版本和android gradle插件版本

(1)gradle版本

gradle-wrapper.properties中包含参数及gradle版本下载地址,最后一句重要distributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip,这就是gradle版本与File下面的project structure的工程gradle版本一样

image.png

(2)android gradle插件版本

是根目录下的build.gradle中的classpath 'com.android.tools.build:gradle:2.3.3',因为gradle中可以适用于C++、android等等各种工程的构建,所以本身当然不包含android用到的相关方法,这就需要用插件来实现,如下:android就是插件中的,dependencies就是gradle里面的。

image.png

3、buildscript与allprojects

image.png

二者都包含repositories和dependencies,那么有什么区别呢?又分别有什么意义呢?

(1)repositories与dependencies

repositories是依赖库,包含jcenter()与mavenCentral(),若有自己建的maven库,直接加载url即可。那么jcenter()和mavenCentral又是什么,两者有什么区别呢?可以理解为公共的maven库,不过mavenCentral是老的,之前新建工程时,会自动生成,现在新建工程自动生成的是jcenter(),原因是mavenCentral对开发者要求比较高,上传也比较麻烦,而jcenter很容易。

dependencies我们就比较熟悉了,是依赖包引入,如

compile fileTree(include: ['*.jar'], dir: 'libs')意思是将libs目录下的jar文件编译进项目中

compile project(':app')是加moudle

compile '::***' 询问maven库这个包是否存在,若存在则在插件中下载aar,到本地,然后将其一起与项目编译

附:gradle3.0中使用implementation、api,老版本使用的compile,api与compile等同,而implementation在moudle间不共享

image.png

image.png

(2)buildscript与allprojects

buildscript是gradle脚本自用,allprojects是项目本身用;一般情况下,二者的repositories长一样;buildscript中的的dependencies是插件(如:classpath 'com.android.tools.build:gradle:2.3.3'在repositories的jcenter中下载),allprojects中的一般不写dependencies,如moudle中有公共部分,可以再这里写。

4、apply

上文虽然在gradle脚本中加载了插件,但如何在moudle中引用呢?这里就要用到apply了,apply常用的有两种引用:

apply form:'***' 表示引用文件

apply plugin:'***' 引用插件,如:

apply plugin: 'com.android.application'其实就是apply plugin: com.android.build.gradle.AppPlugin

apply plugin: 'com.android.library'就是apply plugin: com.android.build.gradle.LibraryPlugin

5、android{}

(1)compileSdkVersion ——API level

(2)buildToolsVersion——google用gradle提供的接口写了android gradle插件,其中用到sdk中的构建工具。

(3)defaultConfig

minSdkVersion——支持的最小的api level,小于最小版本的不能使用app

targetSdkVersion——基于这个api level开发的

signingConfigs——签名配置

(4)buildTypes——打不同阶段的apk包(release、debug)

minifyEnabled——是否需要混淆

proguardFiles——混淆文件

6、ext

ext {

BASE = 1

}

使用:compile "com.didi.onecar:onecarbase:${BASE}"

附:若在单独写的文件中,需要在使用前添加apply form:文件名引入

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342