Временные зависимости проекта проекта библиотеки Android освобождают тип AAR

Я работаю над проектом, который включает в себя два проекта библиотеки Android. Когда я загружаю эти библиотеки в мой Maven repo (Nexus), сгенерированный pom не включает элемент <type>aar</type> в зависимости.

Здесь дерево зависимостей

* App1
 \
  * lib1
  |\
  | * lib2
  * Other libs

Вы можете видеть на этой диаграмме, что мой app зависит от lib1, который зависит от lib2. Обе библиотеки - это проекты библиотеки Android, поэтому AARs.

Lib1/build.gradle

apply plugin: 'com.android.library'
apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    provided project(':lib2')

    compile 'com.squareup.picasso:picasso:2.3.3'
}

Lib2/build.gradle

apply plugin: 'com.android.library'
apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion 19
        versionCode 1
        versionName '1.0'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:19.+'
    compile 'com.squareup.retrofit:retrofit:1.6.1'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0'
    compile 'com.squareup.okhttp:okhttp:2.0.0'
}

Обратите внимание, что lib1 включает lib2 в качестве зависимости project().

Теперь, когда я развертываю это с помощью превосходного плагина gradle -mvn-push Chris Banes, все работает так, как ожидалось. Есть только одна странность, которую я замечаю в сгенерированном pom.xml.

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>lib2</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>
    ...
</dependencies>

Обратите внимание, что плагин mavenDeployer не использовал элемент <type>aar</type> в зависимости от того, когда он сгенерировал pom.

В моем проекте приложения (который является проектом maven) у меня есть эта зависимость:

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>lib1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>aar</type>
    </dependency>
    ...
</dependencies>

При попытке построить это с помощью Maven, я получаю следующую ошибку.

Could not resolve dependencies for project com.example:app:apk:1.0.0-SNAPSHOT: The following artifacts could not be resolved: com.example:lib2:jar:0.0.1-SNAPSHOT

Обратите внимание на то, как он ищет версию библиотеки jar. Я полагаю, поскольку плагин mavenDeployer не генерирует <type>aar</type> в списке зависимостей сгенерированного pom, maven по умолчанию ищет банку.

Кто-нибудь знает, как создавать проекты библиотеки Android, которые включают временные зависимости с помощью Gradle?

Ответ 1

Просто добавьте aar в pom с любым текстовым редактором. После этого откройте консоль в корне проекта (где находится pom) и запустите "mvn clean install". Артефакт aar будет создан и развернут на ваш maven-репо.

В любом случае гораздо проще создавать aar-библиотеки с Maven. Просто создайте проект Maven, используя любой архетип библиотеки Android. (De.akquinet хороши, но вы должны использовать версию плагина между 3.8.2 и 3.9, http://mvnrepository.com/artifact/de.akquinet.android.archetypes). Просто создайте проект, добавьте библиотеки и запустите команду "mvn clean install", чтобы установить их в свой локальный каталог maven. После этого просто используйте их как обычные зависимости aar.

Ответ 2

Попробуйте gradle -fury. Он исправляет все это... эмм... прочее. В частности, недействительный и/или неточный pom, которые генерируются gradle. Подтверждено рабочее решение для публикации в sonatype oss/maven central. Никаких ручных изменений pom, поддержки подписи pgp и многого другого.

Сайт: https://github.com/gradle-fury/gradle-fury

В частности, вам нужна поддержка maven gradle script, которая выполняет всю работу за вас. Все вещи, которые обычно хранятся в памяти, хранятся в gradle.properties. Также поддерживаются варианты android, военные файлы (скоро исправления для distZip), javadocs и исходные банки и многое другое.

Отказ от ответственности, я работаю над ним

Изменить: еще один лакомый кусочек информации. Хотя ярость делает инъекционные зависимости и правильную типизацию для AAR-библиотек, плагин gradle -android (материал google делает) не соблюдает раздел зависимости и игнорирует его. В основном транзитивные зависимости проектов AAR не поддерживаются. Не знаю, почему