Groovy是基于JVM虚拟机的一种动态语言,支持闭包,支持DSL。

  • 如何创建一个Task,如何配置它?

  • Task之间如何建立依赖关系

  • Task如何使用API控制和task之间的通信

  • 自定义属性,如何控制,如何定义

一个子工程只有在Setting文件里配置了,gradle文件才会识别,才会在构建的时候被包含进去。

任务的doFirst和doLast分别代表任务执行前后做的操作。

  • 如何对任务进行分组,排序。

<< 是操作符,在Gradle的task上是以doLast形式标记的,也就是说 << 可以替代doLast


插件的应用都是通过Project.apply()提供的,插件分为二进制插件和脚本插件

android {}这个配置块就是Android Gradle插件为Project对象添加的一个扩展。

Jekins可以为我们做什么?

1,从git版本库获取最新代码

2,对代码配置等进行预处理

3,执行Android Gradle的Task(编译,单元测试等)

4,生成单元测试报告和覆盖率文件等

5,触发代码静态检查

6,一些构建后的处理,比如发送通知邮件等


http://ask.android-studio.org/?/explore/category-gradle

加快apk的构建速度,如何把编译时间从130秒降到17秒:

https://www.jianshu.com/p/53923d8f241c

gradle各种用法:

http://mp.weixin.qq.com/s/cjvPVG6ifry6VsLkAu6JEQ

Android 彻底组件化番外篇-gradle3.0.0

http://mp.weixin.qq.com/s/kr4SqGcTnWmsQMwHHbLCrw

在终端执行

gradle wrapper --gradle-version 3.3

输入这个命令,那么 distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-bin.zip

就变成3.3了,直接决定你gradle wrapper依赖哪个版本。

强制刷新依赖(就是集成的第三方库)

gradle --refresh-dependencies assemble


弄懂Gradle依赖 Android依赖导入全攻略


Implementation

用它的好处:

  • 使用了该命令编译的依赖,将该依赖隐藏在内部,而不对外部公开

  • 会使编译速度有所增快

compileOnly

  • 只在编译时有效,不会参与打包,不会包含到apk文件中。可以用来解决重复导入库的冲突

** 如implementation 'com.android.support:appcompat-v7:23.1.1',和androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.1',所依赖的com.android.support:support-annotations版本不同,导致冲突了,请问怎么办?

1,可以用exclude、force解决

2,统一为所有依赖指定support包的版本,不需要为每个依赖单独设置

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '26.1.0'
            }
        }
    }
}
  • AndroidManifest合并错误

在构建应用时,Gradle 构建会将所有清单文件合并到一个封装到 APK 的清单文件中。aar包的清单文件和我们的app清单文件属性冲突时:用tools:replace="属性名"解决。


  • applicationIdSuffix:应用id后缀

  • versionNameSuffix:版本名称后缀

  • debuggable:是否生成一个debug的apk

  • minifyEnabled:是否混淆

  • proguardFiles:混淆文件

  • signingConfig:签名配置

  • manifestPlaceholders:清单占位符

  • shrinkResources:是否去除未利用的资源,默认false,表示不去除。

  • zipAlignEnable:是否使用zipalign工具压缩。

  • multiDexEnabled:是否拆成多个Dex

  • multiDexKeepFile:指定文本文件编译进主Dex文件中

  • multiDexKeepProguard:指定混淆文件编译进主Dex文件中


引用位置

为什么有的引用是放在头部,有的引用需要放置在中间,这个取决于引用的插件是否需要读取application的配置信息,如果是tinker,必须放置在中间,因为它生成patch包需要获取很多application信息,如果是packer打包的话,则不需要,这个需要格外留意一下,不然会有很多莫名其妙的错误。


gradle模块化


gradle build --stacktrace


results matching ""

    No results matching ""