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



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



если библиотека имеет файл "уведомление" с примечаниями об атрибуции, вы должны включить это уведомление при распространении



(один из них под лицензией Лицензия Apache 2.0 например).



существует более одной библиотеки. Когда я делаю сборку с помощью ш или 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 предлагают удалить лицензию.txt (обратите внимание.txt или другие файлы, которые могут помешать этому) от упаковки путем добавления в следующее:



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 2.0 например), файлы лицензии и уведомления должны быть входит.



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

556   6  

6 ответов:

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

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

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

добавить следующее в соответствующей сборки.gradle file

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'
    }

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

тогда вы не должны добавлять библиотеку firebase внутри Android studio т. е. файл->структура проекта->Облако->военнослужащих

вы должны сделать только один из обоих, чтобы использовать 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'
    }
}

конечно, это будет работать

packagingOptions { исключить ' META-INF / LICENSE.txt' исключить ' META-INF / NOTICE.txt'}

Comments

    Ничего не найдено.