Временные зависимости проекта проекта библиотеки 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 не поддерживаются. Не знаю, почему