Intereting Posts
Как сохранить карты для просмотра в автономном режиме Как вернуть результат деятельности Child в Parent в android? Как удалить тень под панелью действий с помощью AppCompat.Light.NoActionBar? Увеличить масштаб, уменьшить масштаб – javascript / jquery / jquery мобильные события для Интернета на платформе Android? Как обменивать фрагменты с разными макетами в android? Как узнать, был ли пользователь щелкал spinner в Android? Преобразование координат устройства в координаты мира Android Mask растровое изображение на холсте gen черное пространство Android: получите программную информацию по программному обеспечению Как отключить раскрывающийся список AutoCompleteTextView? Несколько файлов AAR Как прикрепить PDF-файл из активов по электронной почте? GCM-тестирование, как спровоцировать ответ сервера GCM с помощью canonical_id? Текст-заполнитель (только процесс проектирования) в макете Android? Режим мягкого ввода окна ConstraintLayout

Указание развернутого имени файла для артефакта AAR в проекте библиотеки Android

Я пытаюсь настроить проект библиотеки Android для развертывания нескольких артефактов в локально размещенном хранилище Maven. Я получил достаточно далеко, так что у обоих артефактов есть свой собственный POM, и он правильно развертывается в репо со следующим скриптом:

android { // Publish both debug and release publishNonDefault true } uploadArchives { repositories.mavenDeployer { def majorVersion = 1 def minorVersion = 1 def buildVersion = project.properties.get('RELEASE', '0').toInteger() addFilter('release') { artifact, file -> file.name.contains('release') } addFilter('debug') { artifact, file -> file.name.contains('debug') } activePomFilters.each { filter -> pom(filter.name) { groupId = 'com.redacted' artifactId = 'redacted' packaging = 'aar' version = "${majorVersion}.${minorVersion}.${buildVersion}" if (!project.hasProperty('RELEASE')) { version += "-SNAPSHOT" } if (filter.name == 'debug') { artifactId += '-debug' } } } } } 

Ожидаемая доставка:

 com/ redacted/ redacted/ 1.1.0-SNAPSHOT/ redacted-debug/ 1.1.0-SNAPSHOT/ 

Что происходит так, как ожидалось, но, кажется, публикует артефакты с дополнительным суффиксом (который нарушает обнаружение зависимости), и я не могу понять, откуда он, или как его изменить. Я вижу:

 com/redacted/redacted/1.1.0-SNAPSHOT/ redacted-1.1.0-20150717.213849-1-release.aar redacted-1.1.0-20150717.213849-1-release.aar.md5 redacted-1.1.0-20150717.213849-1-release.aar.sha1 redacted-1.1.0-20150717.213849-1.pom redacted-1.1.0-20150717.213849-1.pom.md5 redacted-1.1.0-20150717.213849-1.pom.sha1 

По какой-то причине он добавляет дату, а также суффикс -release только к файлам, связанным с AAR, но не к файлам POM. Если я вручную переименую эти файлы, все будет работать так, как ожидалось. Например, это то, что я ожидаю получить:

 com/redacted/redacted/1.1.0-SNAPSHOT/ redacted-1.1.0-20150717.213849-1.aar redacted-1.1.0-20150717.213849-1.aar.md5 redacted-1.1.0-20150717.213849-1.aar.sha1 redacted-1.1.0-20150717.213849-1.pom redacted-1.1.0-20150717.213849-1.pom.md5 redacted-1.1.0-20150717.213849-1.pom.sha1 

Как я могу изменить способ доставки этих файлов?

То, что вы используете, – это (внимание мое):

Важно: при включении публикации не по умолчанию плагин публикации Maven публикует эти дополнительные варианты в виде дополнительных пакетов ( с классификатором ). Это означает, что это несовместимо с публикацией в репозитории maven. Вы должны либо опубликовать один вариант в репозитории, либо разрешить публикацию всех конфигураций для межпроектных зависимостей.

См. Документацию: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-Publication

Выпуски и debug суффиксов, которые вы видите, представляют собой классификаторы, введенные, позволяя публиковать артефакты, отличные от дефолта. Элементы <artifact> в build/ivy.xml , который используется в качестве основы для конфигурации Maven, содержат эти классификаторы.

Итерация по артефактам в конфигурациях и удаление классификатора не работает. Хотя установка классификатора разрешена, его исходное значение сохраняется.

Но что делает работа обертывания оригинальных артефактов. Обертка всегда возвращает null для классификатора. Это приводит к тому, что артефакт выпуска и отладки имеет тот же самый полный идентификатор (= имя + классификатор), что приводит к публикации только одного артефакта. Это можно исправить, используя другое имя для артефактов отладки:

 class UnclassifiedPublishArtifact implements PublishArtifact { private PublishArtifact delegatee; private boolean isDebugArtifact; UnclassifiedPublishArtifact(PublishArtifact delegatee, isDebugArtifact) { this.delegatee = delegatee this.isDebugArtifact = isDebugArtifact } @Override String getName() { return delegatee.name + (isDebugArtifact ? '-debug' : '') } @Override String getExtension() { return delegatee.extension } @Override String getType() { return delegatee.type } @Override String getClassifier() { return null } @Override File getFile() { return delegatee.file } @Override Date getDate() { return delegatee.date } @Override TaskDependency getBuildDependencies() { return delegatee.buildDependencies } } project.afterEvaluate { configurations.each { configuration -> def artifacts = configuration.artifacts if (!artifacts.isEmpty()) { def unclassifiedArtifacts = [] unclassifiedArtifacts.addAll(artifacts.collect { classifiedArtifact -> new UnclassifiedPublishArtifact(classifiedArtifact, classifiedArtifact.classifier == 'debug') }) artifacts.clear() artifacts.addAll(unclassifiedArtifacts) } } } 

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