欢迎光临
专注android技术,聚焦行业精粹,我们一直在努力

gradle常用命令检索

1. 打印gradle task 依赖关系

解决问题:我们经常发现gradle里面的task分析起来特别困难,不同于代码文件有不同的包名可以分类,task看起来就晦涩很多。gradle里面的task是依赖关系的,例如我们在命令行输入assembleDebug,其实这个task的背后也依赖了很多其它的task。那么有什么工具可以方便我们分析这些task呢,我们可以用gradle-task-tree

上面的task依赖关系的树状结构是否清晰了很多。插件下载和使用:https://github.com/dorongold/gradle-task-tree

具体接入步骤:

1.使用时在项目根目录的build.gradle中添加以下脚本:

2. 查询某个task(例如build)的依赖可以这样用:

输出结果:

注意:有时打印的task依赖会出现很多重复的,这里建议去重,方便查看。可以在上面的命令行加上–no-repeat

2. 查看工程的依赖

除了看gradle的task依赖,我们也经常会看android studio里面的module(模块)依赖关系

3. aar 打包包含libs下面的jar包

以上方式会在aar文件中有一个libs目录存放这些jar包。classes.jar中只会包含src/main/java中的内容。如果想要把libs的jar内容合并到

classes.jar中需要自己写task处理

4. gradle 编译时刷新已有的依赖项dependency

gradle官网描述如下:–refresh-dependencies option tells Gradle to ignore all cached entries for resolved modules and artifacts. A fresh resolve will be performed against all configured repositories, with dynamic versions recalculated, modules refreshed, and artifacts downloaded. Gradle Manual

5. 添加本地aar包依赖

把aar文件放在需要依赖该aar的module目录下的库文件夹下,例如放在libs文件夹下

在该module的build.gradle中添加以下代码:

在Module的build.gradle中的dependencies中加入:

6. 使用fat-aar打包时提示classes.jar as it does not exist

阅读fat-aar的脚本代码可以发现fat-aar只会打release包,且默认会在以下路径找依赖工程的classes.jar。可以看得出来它指定了release目录。

找到build目录下面对应具体目录我们发现依赖的工程中有的工程在这个位置有release目录,有的却没有。原因是因为依赖的工程下面build.gradle 文件是否有这个参数

这个参数的含义是:默认情况当android工程为com.android.library时,只会打release环境的包,如果设置上面的参数为true,那么就会根据你的buildTypes里面支持的类型生出相应的编译类型的包了,同样的在引用了fat-aar工程的build目录下面对应的依赖工程目录会多一层上面提到的buildType命名的目录(例如:release),所以这里的处理方法是哪个工程缺少了release目录就在哪个依赖工程里面加上publishNonDefault true

7. Dependency aar exclude asset files

排除工程依赖的aar library 库中指定的资源文件。以下的例子描述了在release环境下删除assets目录下面xxx目录里面的所有文件:

这段脚本加载对应gradle工程的build.gradle里面即可

8、android library 打包时exclude assets路径下文件

9、停用构建缓存

由于构建缓存可以加快您的干净构建的速度,因此不建议停用此功能。如果您仍希望为您的项目停用构建缓存,请将以下内容添加到项目的 gradle.properties 文件中:

完成文件的编辑后,请点击 Sync Project  以应用您的更改。

:在您停用构建缓存后,Android 插件将忽略 android.buildCacheDir 属性,cleanBuildCache 任务将不再可用。同样,停用构建缓存不会自动清除构建目录。如果您决定重新启用构建缓存,这样可以让您保留缓存的文件。

10、打印task的输入和输出

日志输出如下:

11、dependency配置统一管理

背景:我们经常在module根目录的build.gradle文件里面的dependencies里面配置依赖的第三方maven库,对于这些maven库可能其它模块也有相同的依赖,如果该第三方maven库的版本需要升级,所有依赖该版本maven库的module都要改动。为了避免遗漏,我们需要统一管理这些maven库版本的方法,下面介绍这样一个方法。

例子:

在工程根目录的build.gradle里面配置依赖库的常量定义:

在module的dependencies里面可以引用这些常量,示例如下:

12、gradle 中不使用task实现Zip功能

gradle里面copy和delete等都可以在task或方法中直接调用,而如果想要zip则必须定义一个Zip类型的task,示例如下:

但如果你想要不创建task而实现zip功能,可以使用ant的zip,代码如下:

将多个jar文件合并成一个jar文件

 

 

 

赞(1) 打赏
未经允许不得转载:花花鞋 » gradle常用命令检索
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

国内精品Android技术社区

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏