在构建Android应用程序之前,将jars从其他目录拉到libs文件夹

时间:2019-02-10 22:42:53

标签: java android gradle android-gradle

我有一个Android项目,该项目依赖于外部jar文件,即A.jar

我已将自己的Android build.gradle配置为首先构建构建A.jar的项目。然后Android构建继续进行。

在jar生成后,将jar从其build文件夹复制到android项目lib文件夹的最佳方法是什么?

因此构建应以...

  

构建Jar>将Jar复制到Libs>构建Android项目。

我不使用Android Studio,因此我只能通过gradle配置文件操作来配置项目。

当前构建jar的项目已在app/build.gradle中列为依赖项

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "saf.mobilebeats2"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            debuggable true
        }
    }
}

dependencies {
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    implementation 'com.android.support:appcompat-v7:26.0.0'
    implementation project(':dawcore')
    // runtime files('../DawCore/build/libs/DawCore.jar')
}

2 个答案:

答案 0 :(得分:1)

由于您没有使用Android Studio,并且依赖项模块位于其他项目正在使用的其他位置,因此您可以考虑在依赖项模块完成后将jar复制到libs目录中构建并创建要复制的jar。因此,总体执行如下:

  • 任务1.构建依赖模块
  • 任务2.将jar文件复制到要由您的android应用程序使用的特定位置。
  • 任务3.在构建Android应用程序时,将jar文件从该特定位置复制到您的libs目录。
  • 任务4.使用compile files('libs/jar-from-dependency.jar')
  • 构建jar

现在执行任务1和2:在依赖模块的build.gradle文件中添加以下内容。因此,在构建依赖项模块之后,这会将jar复制到复制任务中指定的位置。查看下面的复制功能,了解如何在gradle中编写复制功能。

apply plugin: 'java'

task finalize << {
    println('Here use the copyTask to copy the jar to a specific directory after each build of your library module')
}

build.finalizedBy(finalize)
// compileJava.finalizedBy(copyJarToAndroid) <-- In your case

此处是与此相关的必要功能的doc

对于任务3:现在任务很简单。在使用gradle构建之前,需要将jar从该特定位置复制到Android应用程序项目中。这是在构建项目之前可以启动复制任务的方法。

task copyFiles(type: Copy) {
    description = 'Copying the jar'
    from 'your/jar/directory'
    into project(':Path:To:ModuleFrom:Settings.gradle').file('./libs')
    include 'jar-from-dependency.jar'
}

project.afterEvaluate {
    preBuild.dependsOn copyFiles
}

clean.dependsOn copyFiles
clean.mustRunAfter copyFiles

这将在初始化gradle清理时运行copyFiles任务。

因此,任务4:在您的dependencies部分中添加jar。

dependencies {
    // ... Other dependencies
    compile files('libs/jar-from-dependency.jar')
}

答案 1 :(得分:0)

最简单的方法可能是删除直接模块依赖性:

// implementation project(':dawcore')

a)并建立一个本地flatDir存储库,Android Studio会将其列为“库存储库”:

repositories {
    flatDir { dirs "/home/user/project/dawcore/build/outputs/aar" }
}

然后可以依赖库模块的构件:

dependencies {
    implementation "com.acme.dawcore:dawcore-debug:1.0.0@aar"
    // implementation "com.acme.dawcore:dawcore-release:1.0.0@aar"
}

b)或将libs目录设置为flatDir

repositories {
    flatDir { dirs "libs" }
}

并将Copy任务添加到库的build.gradle

tasks.whenTaskAdded { task ->
    if (task.name == 'assembleDebug' || task.name == 'assembleRelease') {
        task.finalizedBy copyArtifacts
    }
}

// dawcore:copyArtifacts
task copyArtifacts(type: Copy) {
    from("$buildDir/outputs/aar") {
        include "*.aar"
    }
    from("$buildDir/outputs/jar") {
        include "*.jar"
    }
    into file("${rootProject.projectDir}/mobile/libs")
    doLast {
        def path = ant.path {
            fileset(dir: "${rootProject.projectDir}/mobile/libs", includes: "*.aar, *.jar")
        }
        path.list().each {
            println it
        }
    }
}