首页 文章

如何使Android Gradle构建依赖于提供jar文件的简单(非android库,非java)任务?

提问于
浏览
2

我有一个命令行程序,根据一组源文件,生成一个我想在我的Android gradle构建(A)中使用的jar文件 . 此命令行程序只是将jar文件存储在磁盘上的目录中 .

如何创建一个新的gradle项目(B),它运行我的命令行程序(在gradle多项目设置中),Android Gradle项目(A)将依赖于它:换句话说,如果B的源更改,它应该重建!

注意:

项目B既不是Android库项目,也不是Java项目 . 它只是通过命令行运行程序,恰好将jar文件存储在文件系统上 .

1 回答

  • 3

    您可以通过在项目B中创建自己的自定义任务来执行此操作,以执行生成JAR的程序 . 确保正确声明输入/输出,以便Gradle知道如何处理任务的依赖关系:

    task buildProjB {
        inputs.file file('my_source_file.name')
        ext.dest = new File(buildDir, "libs")
        outputs.dir ext.dest
    
        doLast {
            //  Run your program and put output in "libs" subdir
        }
    }
    
    tasks.whenTaskAdded { theTask ->
        if (theTask.name.contains("assemble")) {
            theTask.dependsOn "buildProjB"
        }
    }
    

    请注意, buildProjB 任务获取"hooked"任何 assemble 任务 . 您可能需要执行此操作或执行 build 任务之一,以便将其作为正常Android应用程序构建的一部分正确构建 .

    在项目A settings.gradle 中,将项目B作为构建的一部分:

    include ':projectA', ':projectB'
    

    在项目A build.gradle 文件中,使项目B成为依赖项:

    dependencies {
        ...
        compile project(':projectB')
    }
    

    假设您在顶级Android Studio项目下面有项目B(Android Studio术语中的模块),因此与项目A处于同一级别 .

相关问题