как я могу добавить зависимости jar к сгенерированному aar

Сначала я объясню структуру моего проекта

Test Application
|
| - Library Module
|   |
|   | - Core Library Module
|       | Module 1
|       |- Jar dependency 1
|       |
|       | Module 2
|       |- Jar dependency 2

У меня есть тестовое приложение, которое я использую для тестирования библиотечного модуля, который используется для создания файла aar, который распространяется на другие приложения.

Модуль библиотеки зависит от другого модуля, который содержит некоторые основные функции для моей библиотеки и других библиотек.

Проблема в том, что основная библиотека имеет 2 зависимости, 2 файла jar. они добавляются в проект как модули, которые содержат только этот jar.

Теперь, когда я создаю файл aar для библиотечного модуля, эти файлы jar не добавляются в файл aar. Я не хочу добавлять эти jar-файлы непосредственно в клиентские приложения, поэтому мое единственное решение — найти способ добавить их в файл aar.

Я уже пытался добавить их, используя этот https://github.com/adwiv/android-fat-aar, безуспешно, потому что он используется для добавления обычных модулей в aar, а не только в файл jar.

Есть ли способ добавить эти банки в аар? aar генерируется в jenkins и развертывается в Artifextory.

Спасибо,


person acabezas    schedule 06.09.2016    source источник


Ответы (1)


Я не смог найти прямого способа сделать это, но я объясню свою работу на случай, если у кого-то еще возникнет такая же проблема, и, возможно, это сработает для вас. Я не буду считать этот ответ правильным, потому что, возможно, кто-то другой может дать нам лучший.

Поскольку я не мог добавить файлы jar напрямую, я создал метод gradle, который копирует все файлы, находящиеся внутри jar-файлов, которые я хотел добавить, в каталог классов, прежде чем gradle присоединит их к файлу class.jar, который находится внутри файл .aar.

это задача градиента

tasks.whenTaskAdded { task ->
if (task.name == 'bundleRelease') {
    task.dependsOn embedJavaJarsCustom
}
}

task embedJavaJarsCustom << {

def finalPath = '/Users/jenkins/workspace/MyProject/MyLibrary/libs'
    // Collect list of all jar files
    FileTree jars = fileTree(dir: finalPath, include: ['*.jar'])

    println "Embedding jars : " + jars

    // Explode all jar files to classes so that they can be proguarded
    jars.visit {
        FileVisitDetails element ->
            println element.getName()
            if (element.getName().equals('my.jar')
                    || element.getName().equals('my2.jar') ) {
                    copy {

                        from(zipTree(element.file))
                        into("${getProject().getBuildDir()}/intermediates/classes/release/")
                    }
            }

    }
}
person acabezas    schedule 09.09.2016