build、minifyReleaseWithR8 和 compileReleaseJavaWithJavac 三个不同的 Gradle 任务的主要差异

在 Android 项目(使用 AGP 7.4.2)中,buildminifyReleaseWithR8 和 compileReleaseJavaWithJavac 是三个不同的 Gradle 任务,它们的主要差异如下:

task makeJar(type: Jar) {
    // 设置 JAR 文件名
    archiveBaseName = 'my-library'
    archiveVersion = '1.0'
    
    // 从混淆后的类文件中获取内容
    from fileTree(dir: "${buildDir}/intermediates/javac/release/classes", 
                  excludes: ["**/R.class", "**/R\$*.class", "**/BuildConfig.class"])
    
    // 设置目标目录
    destinationDirectory.set(file("${buildDir}/outputs/jar/"))
    
    // 依赖于混淆任务
    // dependsOn("compileReleaseJavaWithJavac")
    // dependsOn("minifyReleaseWithR8")
    dependsOn("build")
}

1. compileReleaseJavaWithJavac

作用

  • 仅编译 Java/Kotlin 代码(不包含混淆、优化或打包)

  • 生成 .class 文件,存放在 build/intermediates/javac/release/classes/ 目录下

特点

  • 是纯粹的编译任务

  • 不涉及代码优化或资源处理

  • 生成的代码未混淆,适合调试

典型输出

复制

build/intermediates/javac/release/classes/
  └── com/example/
      ├── MyClass.class
      └── ...

2. minifyReleaseWithR8

作用

  • 执行代码混淆(ProGuard/R8)、优化和压缩

  • 依赖 compileReleaseJavaWithJavac,在其生成的 .class 文件基础上处理

  • 输出混淆后的代码到 build/intermediates/optimized_classes/release/

特点

  • 需要 minifyEnabled true 才会生效

  • 会移除未使用的代码(Tree Shaking)

  • 重命名类/方法/字段(混淆)

  • 生成映射文件(mapping.txt

典型输出

复制

build/intermediates/optimized_classes/release/
  └── com/example/
      ├── a.class  # 混淆后的类
      └── ...
build/outputs/mapping/release/mapping.txt

3. build

作用

  • 聚合任务,包含完整的构建流程:

    1. 编译(compileReleaseJavaWithJavac

    2. 混淆(minifyReleaseWithR8,如果启用)

    3. 打包资源

    4. 生成 APK/AAR

特点

  • 执行所有必要的子任务

  • 最终产物是完整的 APK 或 AAR

  • 适合发布前的完整构建

典型输出

复制

build/outputs/apk/release/app-release.apk
或
build/outputs/aar/library-release.aar

关键差异总结

任务阶段是否混淆输出内容典型用途
compileReleaseJavaWithJavac编译❌ 否原始 .class 文件快速检查编译结果
minifyReleaseWithR8优化/混淆✅ 是优化后的 .class + mapping.txt生成混淆代码供分析
build完整构建流程取决于配置APK/AAR + 所有中间文件发布或测试完整产物

执行顺序示例

如果运行 ./gradlew build(且启用了混淆):

  1. compileReleaseJavaWithJavac → 生成未混淆的 .class

  2. minifyReleaseWithR8 → 处理这些 .class 文件

  3. 其他任务(如资源合并、打包等)


如何选择?

  • 需要 快速编译 测试代码? → 用 compileReleaseJavaWithJavac

  • 需要 分析混淆效果? → 用 minifyReleaseWithR8

  • 需要 最终产物? → 用 build

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值