Как разрешить «Дублировать файлы, скопированные в APK META-INF / *»,

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

Если в библиотеке есть файл «УВЕДОМЛЕНИЕ» с примечаниями о атрибуции, вы должны включить это УВЕДОМЛЕНИЕ, когда вы распространяете

(Например, один из них лицензируется под лицензией Apache 2.0 ).

Существует более одной библиотеки. Когда я делаю сборку с помощью gradle или с Android Studio, я получаю следующую ошибку сборки:

* What went wrong: Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/license.txt 

Ответы, которые я нашел до сих пор в Интернете и stackoverflow, предлагают удалить файл license.txt (notice.txt или другие файлы, которые могут помешать так) от упаковки, добавив в файл build.gradle следующее:

 packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LGPL2.1' } 

См. Например: Android Studio 0.4 Дублирующие файлы, скопированные в APK META-INF / LICENSE.txt

Согласно лицензии этих библиотек (например, Apache License 2.0 ), должны быть включены лицензии и файлы уведомлений.

Мой вопрос: как я могу добавить несколько файлов, связанных с лицензированием (например, license.txt , notice.txt и т. Д.) Из gradleиента в мой проект, чтобы быть совместимым с лицензиями ( техническая информация: тексты лицензий будут объединены)?

Существует решение, если у вас есть только одна лицензия, используя имя license.txt (читайте: все копии license.txt идентичны):

 packagingOptions { pickFirst 'META-INF/license.txt' } 

В противном случае Google также выпустил плагин Gradle для управления лицензиями зависимостей. См. Здесь . Я не пробовал, но похоже, что он способен агрегировать каждую зависимость и даже генерировать активность, отображающую все эти лицензии.

Добавьте следующий файл в соответствующий файл build.gradle

 packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/MANIFEST.MF' } 

Я столкнулся с той же проблемой с моим приложением. Вам нужно убедиться, что вы не добавляли библиотеки дважды. Если вы следовали документации по firebase https://firebase.google.com/docs/android/setup

Тогда вы не должны добавлять библиотеку firebase внутри андроид-студии, то есть file-> project structure-> cloud-> firebase

Вы должны сделать только один из них, использовать firebase в своем приложении для Android.

В конце очистите и повторите свое приложение.

Вы можете добавить несколько лицензий в gradleле, см. Это

Я думаю, вам нужно включить только эти опции в build.gradle:

 android { packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' } } 

Конечно, это сработает

packageOptions {исключить ‘META-INF / LICENSE.txt’ исключить ‘META-INF / NOTICE.txt’}

  • Обновить данные в fragmentе ViewPager
  • Как добавить push-уведомление в мое собственное приложение для Android
  • Попытка чтения с консоли в Java
  • Элемент списка избранных элементов Android ListView выделен
  • Как у вас пародия на пару секунд в андроиде?
  • Удалить данные из ArrayList с помощью цикла For-loop
  • Java: как обращаться к методам из другого classа
  • Theme.AppCompat.Light.DarkActionBar - Ресурс не найден
  • Recyclerview мучительно медленно загружает кешированные изображения из Picasso
  • Упорядочение аргументов String.equals ()
  • Регистрация кнопки гарнитуры с помощью BroadcastReceiver на Android
  • Давайте будем гением компьютера.