Перед созданием приложения для Android извлеките jars в папку libs из другого каталога - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть проект Android, который зависит от внешнего файла JAR, то есть A.jar.

Я настроил свой Android build.gradle для первой сборки проекта, который собирает A.jar.Затем сборка Android продолжается.

Каков наилучший способ скопировать jar из его папки сборки в папку lib проектов android после сборки jar?

Таким образом, сборка должна продолжаться так...

Сборка 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 голосов
/ 17 февраля 2019

Поскольку вы не используете Android Studio, а модуль зависимостей находится в каком-то другом месте, где он используется некоторыми другими проектами, вы можете подумать о копировании jar в каталог libs после того, как модуль зависимостей завершит сборку.и создает банку для копирования.Таким образом, общее выполнение выглядит следующим образом:

  • Задача 1. Создайте модуль зависимости
  • Задача 2. Скопируйте файл JAR в определенное место, которое будет использоваться вашим приложением для Android.
  • Задача 3. При создании приложения для Android скопируйте файл JAR из этого определенного места в каталог libs.
  • Задача 4. Создайте jar, используя compile files('libs/jar-from-dependency.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

Вот документ для необходимых функций, связанных с этим.

Для Задачи 3: Теперь задача проста.Вам нужно скопировать банку из этого конкретного места в проект приложения Android перед сборкой с помощью gradle.Вот как вы можете инициировать задачу копирования перед сборкой проекта.

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

Это запустит задачу copyFiles, когда начнется очистка люльки.

Следовательно, для Задачи 4: Добавьте банку в ваш раздел dependencies.

dependencies {
    // ... Other dependencies
    compile files('libs/jar-from-dependency.jar')
}
0 голосов
/ 17 февраля 2019

проще всего удалить прямую зависимость от модуля:

// 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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...