就是一笔记,我看的英文版,里面纰漏应该比较多。方便自己记忆而已。
-
1.gradle的插件就是一系列可以被复用的构建项目的脚本,我们可以使用其中的task
-
2.一个gradle文件中只能存在一种插件:
-
1.apply plugin: 'com.android.application',这是构建一个app的插件
-
2.apply plugin: 'com.adnroid.library',这是构建一个sdk的插件
-
3.setting.gradle文件中表示需要加入到project中的module,单个项目不需要setting文件,多module的项目就需要了
-
4.android项目中最顶层的build文件被应用于所有的module:
-
1.buildscript中放置的是项目构建的配置
-
1.repositories:其中放置的是远程中央仓库,用于联网下载依赖
-
2.dependencies:其中放置的是需要应用于所有module的依赖,初始化的时候回默认放置一个 android的gradle插件。
-
2.allprojects:其中可以放置自定义的适用于全部module的配置和task。
-
5.gradle的android插件继承了java插件的几个基本task:
-
1.assemble:为每个build type 创建apk
-
2.clean:清理build后的文件,例如apk文件
-
3.check:运行所有的单元测试,和集成测试
-
4.build:运行assemble和check
-
5.connectedCheck:在一个连接的手机设备安装了apk之后再卸载
-
6.deviceCheck:
-
7.installDebug、installRelease:将某种版本的apk安装到手机设备上
-
8.所有的install操作都有相应的uninstall操作
-
6.在编译的时候回生成一个BuildConfig,我们可以在buildType中为各种版本的apk,添加自定义字段,在打包的时候会根据不同的版本的字段进行打包
-
7.在用多个module的情况下可以在根目录的 gradle文件中增加ext块,这个块中的配置可以被到其他moudule中去
-
8.可以由这些方式引入依赖:
-
1.maven库
-
2.Ivy
-
3.静态文件或者目录
-
9.一个远程依赖由于三部分组成:group、name、version
-
10.设置仓库
-
1.远程maven库:JCenter()、mavenCentral()、mavenLocal()
-
2.其他远程库:如果需要添加其他maven或者ivy远程库,那么可以用maven、ivy块将url包起来
-
3.本地库:对于本地其他的maven或者ivy库,可以使用绝对路径或者相对路径
-
4.设置文件为库:你可以使用flatDir块来将某个目录设置成仓库
-
11.添加依赖:
-
1.添加远程依赖: compile '远程依赖名'
-
2.添加jar依赖: compile files('jar名')
-
3.添加依赖目录: compile fileTree('libs'),android中只能添加目录下的jar: compile fileTree(dir: 'libs' , include: ['*.jar'] )
-
12.依赖项目
-
1.apply plugin: 'com.android.library' 是一个依赖项目的插件
-
2.最后生成的是一个aar文件,可以被其他项目引用
-
1.编译library然后再output文件下面可以找到aar文件
-
2.需要新建一个arr的目录,然后使用flatDir来添加这个目录
-
3.compile(name: 'libraryname' , ext: 'aar')
-
3.compile project(':library') 表示引用该项目
-
13.依赖的概念
-
1.compile:不仅仅在项目中使用代码,而且将代码打包造apk中
-
2.apk:不在项目中用,打包入代码
-
3.provider:在项目中用,不打包入代码
-
4.testCompile和androidTestCompile:只添加到测试apk中,不加在release中
-
14.语义版本
-
1.major结尾:修改api接口
-
2.minor结尾:修改api内部代码
-
3.patch结尾:修复bug
-
15.动态版本:依赖一个最终版,不再修改版本了
-
1.compile ‘groupname:name:version+’
-
2.动态版本可能造成编译问题,因为可能中间会有版本修改api
-
16.可以在buildTypes中添加块,来定义多个不同的打包方式
-
17.每创建一个buildTypes 资源集合都会赋值成为一个新的分支
-
18.如果只要在某个版本中添加依赖,那么加个前缀就好了例如:debugCompile
-
19.如果要对某一个相同的apk,进行区分。例如区分付费和不付费的两个版本。那么可以使用productFlavors块
-
20.在资源打包上的优先级是这样的:Build type > Flavor > main > dependencies
-
21.compile project(':library')用来添加依赖库依赖
-
22.可以在setting.gradle中添加类似‘:library1:library2’,来表示嵌套的依赖项目
-
23.在gradle编译项目的时候,会先去找setting文件,如果没有那么gradle久认定只有一个项目,如果有多个项目,那么gradle编译的时候会选择给定的那个项目,然后将其他项目的文件合并进来。
-
24.在根目录下面使用构建命令的时候,会编译全部的module。在某个module下面则编译某个module
-
25.你可以通过在根目录下面运行类似 gralde:app:clean 来控制具体某个module进行构建操作
-
26.Groovy语法:类似java,是运行在jvm上面的,可以和java混用
-
1.println ‘aaa’:直接输出
-
2.def name = ‘a:使用def可以定义任何类型变量
-
3.new Date()."$method"():可以定义占位符method
-
4.定义的class method 默认是public的
-
5.instance.setA 'a':调用方法的时候 可以不写括号
-
6.def square = { num -> num * num}定义method返回值的时候 可以返回具体类型,也可以返回def,方法体也可以写成lambda的形式
-
7.List l = [1 , 2 , 3]:定义数组,遍历可以用each(),lambda加在后面,也可以使用闭包
-
8.Map m = [m : 10 , p : 12]:定义map,m.m方式可以获取
-
27.Groovy在Gradle中:
-
1.引入插件的时候会使用:apply plugin: '',也可以写成:project.apply([plugin : ‘’]),project是自动生成的一个class,可以通过添加map的方式添加插件
-
2.添加依赖的时候会使用:dependencies {compile ''},也可以写成:project.dependencies({add(‘compile’ , '' , {})})
-
28.缩小包:
-
1.混淆
-
2.缩小资源:shrinkResource = true
-
3.去掉语言包,去掉不同分辨率的图片:resConfig
-
29.加快编译:
-
1.并行编译:org.gradle.parallel = true
-
2.增大gradle 的jvm内存大小:org.gradle.jvmargs = -Xms256m -Xmx1024m
-
3.开启jack和jill进行编译:defaultConfig、regular、experimental 中添加 useJack = true
-
4.忽略Lint检查:在LintOptions中添加 abortOnError = flase