You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Android Gradle中用.class文件而非.java文件构建sources.jar

解决方案:生成包含.class文件的sources.jar(无需java插件)

当然可以实现!你只需要调整现有的sourcesJar任务,让它指向Android项目编译后生成的.class文件目录,而不是原始的.java源码目录。

基础版本(适用于单变体项目)

直接修改你的任务代码,替换from的路径为编译后的class文件目录:

task sourcesJar(type: Jar) {
    // 指向Android项目编译生成的.class文件根目录
    from file("$buildDir/intermediates/javac/main/classes")
    classifier = 'sources'
}

artifacts {
    archives sourcesJar
}

这个任务会自动收集build/intermediates/javac/main/classes下所有的.class文件,打包成带有sources分类器的Jar包,完全符合你需要的包含.class文件的sources.jar要求。

进阶版本(支持多构建变体)

如果你的项目有debug、release等多个构建变体,可以用下面的代码为每个变体生成对应的.class版本sources.jar,适配性更强:

android.applicationVariants.all { variant ->
    // 为每个变体创建对应的sourcesJar任务
    task "${variant.name}SourcesJar" (type: Jar) {
        // 通过变体的编译任务获取.class文件输出目录,更可靠
        from variant.javaCompileProvider.get().destinationDir
        classifier = 'sources'
    }
    // 将生成的Jar包加入artifacts
    artifacts {
        archives tasks["${variant.name}SourcesJar"]
    }
}

为什么这个方案可行?

这个实现完全基于Android Gradle插件的现有编译输出路径和API,不需要引入java插件,因此不会和你的Android项目配置产生冲突,完美适配你的场景。

内容的提问来源于stack exchange,提问作者DineshKumar

火山引擎 最新活动