就是一笔记,我看的英文版,里面纰漏应该比较多。方便自己记忆而已。
- 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。
- 1.buildscript中放置的是项目构建的配置
- 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