返回

Gradle 实用技巧和窍门:提升开发效率!

Android

掌握 Gradle 诀窍,提升 Android 开发效率

定制化构建任务

  • 自定义构建任务: 为构建任务赋予自定义名称,让脚本更易读。利用 doLastdoFirst 任务灵活控制执行顺序。
task cleanBuild(type: Delete) {
    delete buildDir
}
  • 插件化构建脚本: 将构建脚本分解成独立的插件,提高可维护性和复用性。使用 includeBuildbuildSrc 方便地管理插件。
includeBuild "../my-gradle-plugin"
  • 构建缓存: 启用 Gradle 构建缓存,显著提升构建速度。通过 gradle.properties 优化缓存设置。
buildCache {
    local {
        enabled = true
    }
}

优化依赖管理

  • 依赖冲突管理: 使用 configurationsresolutionStrategy 解决依赖冲突。通过 implementationapi 明确依赖范围。
configurations {
    implementation.resolutionStrategy {
        force 'com.google.guava:guava:29.0-jre'
    }
}
  • 依赖版本管理: 使用统一的版本号,确保项目依赖版本一致。利用 versions.txt 文件集中管理依赖版本。
ext {
    kotlinVersion = '1.6.10'
}
  • 离线模式管理依赖: 通过 offline 模式本地缓存依赖,即使无网络也能构建项目。
offline { enabled = true }

代码质量与测试

  • 代码质量检查: 集成代码质量检查插件(如 lintdetekt)发现并修复代码问题,提升代码质量。
apply plugin: 'com.android.lint'
lint {
    abortOnError = true
    checkAllWarnings = true
}
  • 单元测试增强: 自定义单元测试任务,支持并行测试和覆盖率分析。使用 junitPlatformjacoco 增强测试功能。
test {
    useJUnitPlatform()
    jacoco {
        version = '0.8.7'
    }
}
  • 集成测试优化: 通过 androidTestconnectedCheck 任务进行集成测试。利用 EspressoRobolectric 提升集成测试效率。
androidTest {
    applicationVariants.all { variant ->
        instrumentation {
            testTask.useJUnitPlatform()
            testTask.jacoco {
                version = '0.8.7'
            }
        }
    }
}

构建过程中的小技巧

  • 自定义构建输出: 使用 loggerprintln 控制构建过程中的日志输出。通过 project.buildDir 获取构建输出目录路径。
logger.lifecycle "Building project..."
println "Build output directory: ${project.buildDir}"
  • 变量和属性的使用: 利用 Gradle 的变量和属性提升构建脚本的可读性和可维护性。结合 project.extgradle.properties 自定义项目属性。
ext.appName = 'MyAwesomeApp'
gradle.properties.put('signingKeyId', '12345')
  • Gradle 命令行技巧: 熟练使用 gradlew 命令快速执行构建任务。利用 gradlew --help 了解命令行选项。
gradlew build
gradlew --help

常见问题解答

1. 如何禁用构建缓存?
答:在 gradle.properties 中设置 buildCache.local.enabled=false

2. 如何解决 NoClassDefFoundError 异常?
答:可能是由于依赖冲突。使用 resolutionStrategy 配置强制使用特定依赖版本。

3. 如何在集成测试中使用 Espresso?
答:添加 androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' 依赖,并使用 Espresso API 编写集成测试。

4. 如何获取当前构建变体的名称?
答:使用 project.buildDir.toString().split('/').last()

5. 如何自定义任务名称?
答:使用 taskName 'customTaskName' 在构建任务定义之前设置任务名称。