GradleForAndroid笔记

本文首发于微信公众号——世界上有意思的事,搬运转载请注明出处,否则将追究版权责任。微信号:a1018998632,交流qq群:859640274

就是一笔记,我看的英文版,里面纰漏应该比较多。方便自己记忆而已。

  • 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

不贩卖焦虑,也不标题党。分享一些这个世界上有意思的事情。题材包括且不限于:科幻、科学、科技、互联网、程序员、计算机编程。下面是我的微信公众号:世界上有意思的事,干货多多等你来看。

世界上有意思的事