Вручную добавление aar с зависимым файлом pom/iml

Так как я не могу использовать частный maven для обмена своей библиотекой, я думал о совместном использовании aar и импортировании в другой проект. Проблема возникает, когда файлы aar и jar не содержат никакой зависимости. Поэтому, как только я вручную импортирую aar в андроид-студию (с помощью Import.JAR/.AA Package), нет зависимости, и мне придется вручную добавлять все зависимости снова. Я уже создал файл pom с помощью задачи gradle, хотя я не могу найти способ вручную импортировать его в проект.

В файле build.gradle, автоматически создаваемом пакетом "Импорт .JAR/.AA", указан:

configurations.maybeCreate("default")
artifacts.add("default", file('TestSample_1.0.0.aar'))

Есть ли способ добавить файл pom/iml? что-то вроде:

artifacts.add("default", file('pomDependencies.xml'))

Ответ 1

1. Издательство

В вашем проекте aar добавьте плагин maven-publish и добавьте необходимую конфигурацию плагинов.

apply plugin: 'com.android.library'
apply plugin: 'maven-publish'

...

dependencies {
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.novoda:bintray-release:0.2.7'
}

...

publishing {
    publications {
        maven(MavenPublication) {
            groupId 'com.example' //You can either define these here or get them from project conf elsewhere
            artifactId 'example'
            version '0.0.1-SNAPSHOT'
            artifact "$buildDir/outputs/aar/app-release.aar" //aar artifact you want to publish

            //generate pom nodes for dependencies
            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.compile.allDependencies.each { dependency ->
                    def dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId', dependency.group)
                    dependencyNode.appendNode('artifactId', dependency.name)
                    dependencyNode.appendNode('version', dependency.version)
                }
            }
        }
    }

    //publish to filesystem repo
    repositories{
        maven {
            url "$buildDir/repo"
        }
    }
}

Несколько заметок:

  • Мы используем настраиваемую публикацию maven, поэтому вам нужно определить, что публикуется с помощью предложения artifact

  • Мы должны сгенерировать сам pom, в приведенном выше коде я использую все зависимости для конфигурации компиляции, вы можете убедиться, что все необходимые вам конфиги покрываются.

Запуск gradle publish будет публиковаться в структуру maven repo в папку repo, которую вы затем можете использовать из другого проекта.

2. Использование опубликованного .aar

В другом проекте для Android, чтобы использовать aar, опубликованный в # 1: На верхнем уровне build.gradle:

allprojects {
    repositories {
        jcenter()
        maven {
            url "D:/full/path/to/repo"
        }
    }
}

добавить путь к более раннему репо в качестве репозитория maven. Обратите внимание, что вам, возможно, придется использовать полный путь, потому что $buildDir имеет другое значение для этого проекта. В вашем приложении build.gradle:

dependencies {
    ...
    other dependencies
    ...
    compile ('com.example:example:[email protected]'){transitive=true}
}

transitive=true требуется для извлечения транзитивных зависимостей из файла pom.