Je travaille sur une application commerciale Android. J'utilise également certaines bibliothèques sous licence sous différents types de licence, certaines indiquant ce qui suit:
Si la bibliothèque contient un fichier "NOTICE" avec des notes d'attribution, vous devez inclure cet AVIS lors de la distribution .
(L'un d'eux est sous licence Apache License 2.0 par exemple).
Il y a plus d'une bibliothèque. Quand je fais la construction avec gradle ou avec Android Studio , j’obtiens le erreur de construction suivante:
* 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
Les réponses que j'ai trouvées jusqu'à présent sur Internet et stackoverflow suggèrent de supprimer le fichier license.txt (notice.txt ou d'autres fichiers pouvant interférer de la sorte) en ajoutant au fichier 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'
}
Voir par exemple: Android Studio 0.4 Fichiers en double copiés dans APK META-INF/LICENSE.txt
Selon la licence de ces bibliothèques ( Apache License 2.0 par exemple), les fichiers de licence et d’avis doivent être inclus .
Ma question: Comment puis-je ajouter plusieurs fichiers liés aux licences (tels que license.txt , notice.txt etc) de gradure dans mon projet afin de se conformer aux licences ( détail technique: les licences seront concaténées)?
Il existe une solution si vous n’avez qu’une licence utilisant le nom license.txt
(lire: toutes les copies license.txt
sont identiques):
packagingOptions {
pickFirst 'META-INF/license.txt'
}
Sinon, Google a également publié un plugin Gradle pour gérer les licences de dépendances. Voir ici . Je ne l'ai pas essayé, mais il semble qu'il soit capable d'agréger toutes les dépendances et même de générer une activité affichant toutes ces licences.
Ajouter ce qui suit dans le fichier build.gradle respectif
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'
}
J'ai rencontré le même problème avec ma demande. Vous devez vous assurer que vous n'avez ajouté aucune bibliothèque deux fois. Si vous avez suivi la documentation de Firebase https://firebase.google.com/docs/Android/setup
Ensuite, vous ne devez pas ajouter de bibliothèque firebase dans Android studio i.e. fichier-> structure de projet-> cloud-> firebase
Vous devez faire l’un des deux à la fois, pour utiliser firebase dans votre application Android.
À la fin, nettoyez et réexécutez votre application.
Je pense que vous devez inclure uniquement ces options dans 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'
}
}
Vous pouvez ajouter plusieurs licences dans Gradle voir ceci