1. 打印gradle task 依赖关系
解决问题:我们经常发现gradle里面的task分析起来特别困难,不同于代码文件有不同的包名可以分类,task看起来就晦涩很多。gradle里面的task是依赖关系的,例如我们在命令行输入assembleDebug,其实这个task的背后也依赖了很多其它的task。那么有什么工具可以方便我们分析这些task呢,我们可以用gradle-task-tree
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
:build +--- :assemble | \--- :jar | \--- :classes | +--- :compileJava | \--- :processResources \--- :check \--- :test +--- :classes | +--- :compileJava | \--- :processResources \--- :testClasses +--- :compileTestJava | \--- :classes | +--- :compileJava | \--- :processResources \--- :processTestResources |
上面的task依赖关系的树状结构是否清晰了很多。插件下载和使用:https://github.com/dorongold/gradle-task-tree
新版本task-tree依赖比较高的gradle版本,如果你的gradle版本比较旧可以使用下面的task-tree配置
工程的根目录的build.gradle:
1、buildscript > repositories 添加
1 2 3 |
maven { url "https://plugins.gradle.org/m2/" } |
2、buildscript > dependencies 里面添加:
1 |
classpath "gradle.plugin.com.dorongold.plugins:task-tree:1.3" |
3、build.gradle文件最后添加
1 |
apply plugin: "com.dorongold.task-tree" |
2. 查看工程的依赖
除了看gradle的task依赖,我们也经常会看android studio里面的module(模块)依赖关系
1 |
./gradlew app:dependencies |
3. aar 打包包含libs下面的jar包
1 2 3 |
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') } |
以上方式会在aar文件中有一个libs目录存放这些jar包。classes.jar中只会包含src/main/java中的内容。如果想要把libs的jar内容合并到
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
1 |
./gradlew build --refresh-dependencies |
5. 把dependencies依赖的aar copy到本地
使用场景:当一些依赖的库在外网无法访问时,或者需要本地拿到依赖的aar文件时使用
使用方法:
- configurations的setCanBeResolved设置为true
- 然后调用copy命令
使用示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
configurations.implementation.setCanBeResolved(true) task CopySdks << { def sdksDir = new File(rootProject.getBuildDir().getParentFile(), "sdks").getAbsolutePath() delete sdksDir configurations.implementation.each { File file -> if (file.getPath().contains("com.xxx.yyy")) { copy { from file into sdksDir } } } } |
Do you have a spam issue on this website; I also am a blogger, and I was curious about your situation;
many of us have created some nice procedures
and we are looking to swap solutions with others, please
shoot me an e-mail if interested.