动态创建 task

  1. def createFetchRnTask() {
  2. def configJson = new JsonSlurper().parse(file("$rootDir/config.json"))
  3. def configs = configJson.libConfig
  4. for (def module : configs) {
  5. def moduleName = module.name
  6. task "fetch-$moduleName"(type: Copy) {
  7. exclude '**/.gradle'
  8. exclude '**/build'
  9. exclude '**/gradle'
  10. exclude '**/**.properties'
  11. exclude '**/gradlew'
  12. exclude '**/gradlew.bat'
  13. exclude '**/**.iml'
  14. exclude '**/.**'
  15. from "$rootDir/../node_modules/$moduleName/android"
  16. into "$rootDir/node_modules/$moduleName/android"
  17. }
  18. }
  19. }
  20. createFetchRnTask()

打包源码

  1. // 打包源码
  2. task sourcesZip(type: Zip) {
  3. group = 'uploadMaven'
  4. archiveClassifier = "sources"
  5. from android.sourceSets.main.java.srcDirs
  6. }

创建/打包项目 doc

请参考 创建/打包项目 doc

打包项目所有文件

  1. // 打包项目所有文件
  2. task packZip(type: Zip) {
  3. group = 'uploadMaven'
  4. archiveBaseName = project.name
  5. archiveAppendix = VERSION
  6. archiveClassifier = "all"
  7. archiveExtension = "zip"
  8. // 打包根路径
  9. from project.projectDir.absolutePath
  10. // 输出路径
  11. destinationDir = project.projectDir.absoluteFile
  12. exclude '**.zip'
  13. exclude '**.iml'
  14. exclude '**/**.iml'
  15. exclude 'build/**'
  16. exclude '.idea/**'
  17. exclude '.gradle/**'
  18. exclude 'gradle/**'
  19. exclude '**/build/**'
  20. exclude 'repo/**'
  21. }

发布 aar

请参考Maven 发布 aar

文件拷贝

  1. // ** 为通用通配符,某类文件:**.aar,某个路径下的 build 文件夹:**/build
  2. // from "$rootDir/repo": 要复制的文件所在文件夹路径
  3. // include 'xxx.aar' : 要复制的文件名
  4. // exclude 'xxx.aar' : 要排除的文件名
  5. // into "$rootDir/temp" : 复制到 "$rootDir/temp"
  6. task copyTest(type: Copy){
  7. from "$rootDir/repo"
  8. // include '**/**.aar'
  9. // exclude '**/**.zip**'
  10. into "$rootDir/temp"
  11. }

混淆加密(待测试)

  1. task proguard(type: ProGuardTask, dependsOn: makeJar) {
  2. // 输入路径
  3. injars "build/libs/zxing.jar"
  4. // 输出路径
  5. outjars 'build/libs/zxing-proguard.jar'
  6. // 添加混淆配置
  7. configuration 'proguard-rules.pro'
  8. }

执行 cmd 命令

  1. // 第一种写法:
  2. task test(type: Exec){
  3. // 单个命令
  4. commandLine "java", "-version"
  5. // 多个命令
  6. commandLine "java", "-version"
  7. commandLine "java", "-version"
  8. }
  9. // 第二种写法:
  10. task test(){
  11. doLast {
  12. exec {
  13. // 单个命令
  14. commandLine "java", "-version"
  15. // 多个命令
  16. commandLine "java", "-version"
  17. commandLine "java", "-version"
  18. }
  19. }
  20. }
  21. // 第三种写法:
  22. task test(){
  23. doLast {
  24. // 单个命令
  25. def cmd = "git --version"
  26. println cmd.execute().text
  27. // 多个命令
  28. def cmd1 = "git --version"
  29. println cmd1.execute().text
  30. def cmd2 = "git --version"
  31. println cmd2.execute().text
  32. }
  33. }

小技巧

./gradlew xxx —profile

输出 xxx 任务的html编译报告,可在浏览器查看,并进行针对性优化

./gradlew xxx —offline

离线编译 xxx 任务

./gradlew xxx —rerun-tasks

输出 xxx 任务相关联的所有任务

./gradlew :app:dependencies —configuration releaseCompileClasspath

查看app模块release版本下的所有依赖

./gradlew :app:dependencyInsight —dependency support-annotations —configuration releaseCompileClasspath

查看app模块release版本下的support-annotations依赖引用 可以帮助跟踪和解决库版本冲突的任何问题

./gradlew —profile —rerun-tasks assembleDebug

查看gradle编译各任务详细耗时 完成后,打开/build/reports/profile目录下类型如下命名的文件:
profile-2020-08-12-20-22-44.html https://www.jianshu.com/p/7cea87f28868