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

tre*_*ere 5 android gradle

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

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

笔记:

项目 B 既不是 Android 库项目,也不是 java 项目。它只是通过命令行运行一个程序,该程序恰好在文件系统上存储了一个 jar 文件。

Lar*_*fer 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"
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,该buildProjB任务会“挂钩”到任何任务assemble。您可能需要执行此操作或执行其中一项build任务,以便将其正确构建为正常 Android 应用程序构建的一部分。

在您的项目 A 中settings.gradle,使项目 B 成为构建的一部分:

include ':projectA', ':projectB'
Run Code Online (Sandbox Code Playgroud)

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

dependencies {
    ...
    compile project(':projectB')
}
Run Code Online (Sandbox Code Playgroud)

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