Омозона ненависти псто. Ондроеду тоже достанется.
От: landerhigh Пират  
Дата: 25.03.17 01:18
Оценка: 3 (1) +1 :)))
Я тут на досуге балуюсь прикладным андроидоведением.
Казалось бы, уже должен был привыкнуть к тому, что студия время от времени вытаскивает очередной апдейт к чему-либо, что напрочь ломает сборку, пока не проапдейтишь все остальное. Оказалось, что когда кажется (и далее по тексту).
Есть у меня один мо... один проектик, в котором задействованы страшные слова вроде Amazon AWS и иже с ними.
Еще вчера собирался.
Сегодня — перестал. Правда, сообщил, почему:

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForRelease'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/maven/commons-io/commons-io/pom.xml
    File1: <blah>files-2.1\commons-io\commons-io\2.4\b1b6ea3b7e4aa4f492509a4952029cd8e48019ad\commons-io-2.4.jar
    File2: <blah>files-2.1\org.apache.commons\commons-io\1.3.2\b6dde38349ba9bb5e6ea6320531eae969985dae5\commons-io-1.3.2.jar


Любому идиоту из данного сообщения сразу станет понятно, что произошло, почему и как это исправить. Ясно как божий день, что мой проект подключает две разные версии Apache commons-io либы, и достаточно всего лишь перестать это делать.
Загвоздка в том, что напрямую я вообще не использую commons-io. А студия упорно вытаскивает две версии и пытается потом что-то с ними во время сборки делать, в процессе спотыкается на том, что обе либы хотят один и тот же файл иметь в одном и том же месте. Впрочем, мне пофигу, как оно там внутри работает, главное, что оно из-за этого обламывается.
В общем, вопрос свелся к классическому "кто виноват и что делать". Добрые люди подсказали очень полезную тулзу gradlew, которая как раз строит дерево зависимостей. Запустил я ее из директории моей аппликухи
..\gradlew dependencies

и сел читать вывод. В выводе нашлось интересное
+--- com.amazonaws:aws-android-sdk-s3:2.+ -> 2.4.0
|    +--- com.amazonaws:aws-android-sdk-core:2.4.0 (*)
|    +--- com.amazonaws:aws-android-sdk-kms:2.4.0
|    |    \--- com.amazonaws:aws-android-sdk-core:2.4.0 (*)
|    +--- org.apache.commons:commons-io:1.3.2
|    |    \--- commons-io:commons-io:1.3.2 -> 2.4
|    +--- commons-io:commons-io:2.4
|    \--- org.bouncycastle:bcprov-jdk16:1.44


В общем, то ли амазоновский сдк версии 2.4.0 умудрился включить зависимости сразу от двух версий commons-io, то ли commons-io как-то так хитро зависит сама от себя, но факт остается фактом — омозон подложил свинью.

Исправилось просто. Прибил предыдущую версию гвоздями:
build.gradle:

compile 'com.amazonaws:aws-android-sdk-core:2.+' -> compile 'com.amazonaws:aws-android-sdk-core:2.2.+'


Пользуясь случаем, передаю омозоновским мастерам пламенный превед!

Комментарии о том, что я старпер и нужно давно переходить на очередной новый сверхмодный фреймворк для сборки категорически преведствуются.
www.blinnov.com
Re: Омозона ненависти псто. Ондроеду тоже достанется.
От: Quadri  
Дата: 26.03.17 14:38
Оценка: +2
Здравствуйте, landerhigh, Вы писали:


L>Исправилось просто. Прибил предыдущую версию гвоздями:

L>
L>build.gradle:

L>compile 'com.amazonaws:aws-android-sdk-core:2.+' -> compile 'com.amazonaws:aws-android-sdk-core:2.2.+'
L>


Не советую использовать плюсик + в версии зависимости. Тем самым градл будет брать последнюю версию, и каждая последующая сборка может отличаться от предыдущей, т.к. либа обновится без вашего ведома. Лучше жестко фиксировать, и самостоятельно обновлять, тогда таких внезапных проблем не случится
Re[2]: Омозона ненависти псто. Ондроеду тоже достанется.
От: landerhigh Пират  
Дата: 27.03.17 09:46
Оценка:
Здравствуйте, Quadri, Вы писали:

Q>Не советую использовать плюсик + в версии зависимости. Тем самым градл будет брать последнюю версию, и каждая последующая сборка может отличаться от предыдущей, т.к. либа обновится без вашего ведома. Лучше жестко фиксировать, и самостоятельно обновлять, тогда таких внезапных проблем не случится


Задним числом-то все умны.
А когда вынужден использовать стороннюю либу, которая вытаскивает какую хочет версию чего хочет, причем, приходится вставать на голову, чтобы это выяснить, тут начинает хотеться разбить монитор. Или лицо. Или одно другим.
www.blinnov.com
Re[3]: Омозона ненависти псто. Ондроеду тоже достанется.
От: StandAlone  
Дата: 27.03.17 10:16
Оценка:
Здравствуйте, landerhigh, Вы писали:

L>Задним числом-то все умны.

L>А когда вынужден использовать стороннюю либу, которая вытаскивает какую хочет версию чего хочет, причем, приходится вставать на голову, чтобы это выяснить, тут начинает хотеться разбить монитор. Или лицо. Или одно другим.

Хехе. А когда это проявляется на 5-10 уровне вложенности либ.... Welcome to DLL Hell back!
Майкрософт кстати недавно из-за этого бросила какой-то свой костыль для AD под Ангуляр. Ниасилили починку после очередного апдейта и тупо забили.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.