Плагін Android Gradle 0.7.0: "копіювання файлів під час упаковки APK"


324

Використовуючи плагін Android Gradle 0.7.0 із наступним build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.0'
    }
}

apply plugin: 'android'

repositories {
    maven { url "https://android-rome-feed-reader.googlecode.com/svn/maven2/releases" }
    maven { url "http://dl.bintray.com/populov/maven" }
    mavenCentral()
}

android {
    compileSdkVersion 19
    buildToolsVersion '18.1.1'

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
    }
    buildTypes {
        release {
            runProguard true
            proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
        }
    }
    productFlavors {
        defaultFlavor {
            proguardFile 'proguard-rules.txt'
        }
    }
    sourceSets {
        instrumentTest.setRoot('src/instrumentTest')
    }
}

configurations {
    apt
}

ext.androidAnnotationsVersion = '2.7.1';

dependencies {
    compile 'com.android.support:support-v4:18.0.0'

    compile 'com.viewpagerindicator:library:2.4.1@aar'

    compile 'com.google.code.android-rome-feed-reader:android-rome-feed-reader:1.0.0-r2'
    compile 'org.jdom:jdom:1.1.1-android-fork'

    apt "com.googlecode.androidannotations:androidannotations:${androidAnnotationsVersion}"
    compile "com.googlecode.androidannotations:androidannotations-api:${androidAnnotationsVersion}"

    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.j256.ormlite:ormlite-android:4.47'
    compile 'com.j256.ormlite:ormlite-core:4.47'
    compile 'org.springframework.android:spring-android-core:1.0.1.RELEASE'
    compile 'org.springframework.android:spring-android-rest-template:1.0.1.RELEASE'
    compile 'com.prolificinteractive:actionbarsherlock:4.3.1@aar'

    compile 'com.google.code.geocoder-java:geocoder-java:0.15'

    compile files('libs/CWAC-Pager.jar')
}

android.applicationVariants.all { variant ->
    aptOutput = file("${project.buildDir}/source/apt_generated/${variant.dirName}")
    println "****************************"
    println "variant: ${variant.name}"
    println "manifest:  ${variant.processResources.manifestFile}"
    println "aptOutput:  ${aptOutput}"
    println "****************************"

    variant.javaCompile.doFirst {
        println "*** compile doFirst ${variant.name}"
        aptOutput.mkdirs()
        variant.javaCompile.options.compilerArgs += [
                '-processorpath', configurations.apt.getAsPath(),
                '-AandroidManifestFile=' + variant.processResources.manifestFile,
                '-s', aptOutput
        ]
    }
}

видає помилку Duplicate files copied in APK META-INF/LICENSE.txt:

WARNING: Dependency commons-logging:commons-logging:1.0.4 is ignored for defaultFlavorDebug as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage it with jarjar to change the class packages
WARNING: Dependency commons-logging:commons-logging:1.0.4 is ignored for defaultFlavorRelease as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage it with jarjar to change the class packages
Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheduled to be removed in Gradle 2.0. Please read http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on the replacement for dynamic properties.
Deprecated dynamic property: "aptOutput" on "com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@5705013c", value: "/Users/david/Developer...".
****************************
variant: defaultFlavorDebug
manifest:  /Users/david/Developer/.../build/manifests/defaultFlavor/debug/AndroidManifest.xml
aptOutput:  /Users/david/Developer/.../build/source/apt_generated/defaultFlavor/debug
****************************
Deprecated dynamic property "aptOutput" created in multiple locations.
****************************
variant: defaultFlavorRelease
manifest:  /Users/david/Developer/.../build/manifests/defaultFlavor/release/AndroidManifest.xml
aptOutput:  /Users/david/Developer/.../build/source/apt_generated/defaultFlavor/release
****************************
:TravelGuard:compileDefaultFlavorDebugNdk UP-TO-DATE
:TravelGuard:preBuild UP-TO-DATE
:TravelGuard:preDefaultFlavorDebugBuild UP-TO-DATE
:TravelGuard:preDefaultFlavorReleaseBuild UP-TO-DATE
:TravelGuard:prepareComProlificinteractiveActionbarsherlock431Library UP-TO-DATE
:TravelGuard:prepareComViewpagerindicatorLibrary241Library UP-TO-DATE
:TravelGuard:prepareDefaultFlavorDebugDependencies
:TravelGuard:compileDefaultFlavorDebugAidl UP-TO-DATE
:TravelGuard:compileDefaultFlavorDebugRenderscript UP-TO-DATE
:TravelGuard:generateDefaultFlavorDebugBuildConfig UP-TO-DATE
:TravelGuard:mergeDefaultFlavorDebugAssets UP-TO-DATE
:TravelGuard:mergeDefaultFlavorDebugResources UP-TO-DATE
:TravelGuard:processDefaultFlavorDebugManifest UP-TO-DATE
:TravelGuard:processDefaultFlavorDebugResources UP-TO-DATE
:TravelGuard:generateDefaultFlavorDebugSources UP-TO-DATE
:TravelGuard:compileDefaultFlavorDebugJava
*** compile doFirst defaultFlavorDebug
/Users/david/Developer/.../src/main/java/com/travelguard/service/TravelGuardService.java:53: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.service.TravelGuardService
    TravelGuardPrefs_ travelGuardPrefs;
    ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:14: cannot find symbol
symbol  : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:16: cannot find symbol
symbol  : class CategoryFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.CategoryFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CategoriesActivity.java:17: cannot find symbol
symbol  : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CountriesActivity.java:25: cannot find symbol
symbol  : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
                              ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/CountriesActivity.java:44: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.ui.CountriesActivity
    TravelGuardPrefs_ travelGuardPrefs;
    ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:18: cannot find symbol
symbol  : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:19: cannot find symbol
symbol  : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/InstructionsActivity.java:21: cannot find symbol
symbol  : class InstructionsFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.InstructionsFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:36: cannot find symbol
symbol  : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
                              ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:40: cannot find symbol
symbol  : class AssistanceFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.AssistanceFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:41: cannot find symbol
symbol  : class ContactFragment_
location: package com.travelguard.ui.fragments
import com.travelguard.ui.fragments.ContactFragment_;
                                   ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/MainActivity.java:55: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.ui.MainActivity
    TravelGuardPrefs_ travelGuardPrefs;
    ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/TermsActivity.java:17: cannot find symbol
symbol  : class TravelGuardPrefs_
location: package com.travelguard.service
import com.travelguard.service.TravelGuardPrefs_;
                              ^
/Users/david/Developer/.../src/main/java/com/travelguard/ui/TermsActivity.java:23: cannot find symbol
symbol  : class TravelGuardPrefs_
location: class com.travelguard.ui.TermsActivity
    TravelGuardPrefs_ travelGuardPrefs;
    ^
Note: Starting AndroidAnnotations annotation processing
Note: AndroidManifest.xml file found: /Users/david/Developer/.../build/manifests/defaultFlavor/debug/AndroidManifest.xml
Note: Number of files generated by AndroidAnnotations: 22
Note: Generating source file: com.travelguard.service.SmartTravellerService_
Note: Generating source file: com.travelguard.service.SmartTravellerWebservice_
Note: Generating source file: com.travelguard.service.TravelGuardPrefs_
Note: Generating source file: com.travelguard.service.TravelGuardService_
Note: Generating source file: com.travelguard.service.TravelGuardWebservice_
Note: Generating source file: com.travelguard.ui.AdviceActivity_
Note: Generating source file: com.travelguard.ui.CategoriesActivity_
Note: Generating source file: com.travelguard.ui.ContactDetailActivity_
Note: Generating source file: com.travelguard.ui.ContactListActivity_
Note: Generating source file: com.travelguard.ui.ContactTravelGuardActivity_
Note: Generating source file: com.travelguard.ui.CountriesActivity_
Note: Generating source file: com.travelguard.ui.InformationActivity_
Note: Generating source file: com.travelguard.ui.InstructionsActivity_
Note: Generating source file: com.travelguard.ui.MainActivity_
Note: Generating source file: com.travelguard.ui.TermsActivity_
Note: Generating source file: com.travelguard.ui.TravelGuardActivity_
Note: Generating source file: com.travelguard.ui.fragments.AdviceDetailFragment_
Note: Generating source file: com.travelguard.ui.fragments.AdviceFragment_
Note: Generating source file: com.travelguard.ui.fragments.AssistanceFragment_
Note: Generating source file: com.travelguard.ui.fragments.CategoryFragment_
Note: Generating source file: com.travelguard.ui.fragments.ContactFragment_
Note: Generating source file: com.travelguard.ui.fragments.InstructionsFragment_
Note: Time measurements: [Whole Processing = 913 ms], [Generate Sources = 358 ms], [Extract Manifest = 163 ms], [Process Annotations = 158 ms], [Extract Annotations = 120 ms], [Validate Annotations = 82 ms], [Find R Classes = 28 ms],
Note: Time measurements: [Whole Processing = 0 ms],
Note: Time measurements: [Whole Processing = 0 ms],
warning: The following options were not recognized by any processor: '[androidManifestFile]'
Note: /Users/david/Developer/.../src/main/java/com/travelguard/ui/ContactDetailActivity.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: /Users/david/Developer/.../src/main/java/com/travelguard/service/SmartTravellerService.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
:TravelGuard:preDexDefaultFlavorDebug UP-TO-DATE
:TravelGuard:dexDefaultFlavorDebug
:TravelGuard:processDefaultFlavorDebugJavaRes UP-TO-DATE
:TravelGuard:validateDebugSigning
:TravelGuard:packageDefaultFlavorDebug
Error: duplicate files during packaging of APK /Users/david/Developer/.../build/apk/TravelGuard-defaultFlavor-debug-unaligned.apk
    Path in archive: META-INF/LICENSE.txt
    Origin 1: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.jar
    Origin 2: /Users/david/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.2/397f4731a9f9b6eb1907e224911c77ea3aa27a8b/commons-codec-1.2.jar
:TravelGuard:packageDefaultFlavorDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':TravelGuard:packageDefaultFlavorDebug'.
> Duplicate files copied in APK META-INF/LICENSE.txt
    File 1: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.jar
    File 2: /Users/david/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.jar


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 21.957 secs

Сьогодні вранці все добре працювало, перш ніж я оновив Android Studio. Будь-які ідеї?

EDIT: Мені вдалося тимчасово виправити це, виконуючи такі команди

zip -d spring-android-core-1.0.1.RELEASE.jar META-INF/notice.txt

поки всі дублікати помилок не зникли.



2
Схоже, це помилка code.google.com/p/android/isissue/detail?id=61573 . Я не знаю, чому в цьому випуску це стало тільки для вас клопітно.
Скотт Барта

застрягла з тією ж проблемою. Вирішили залишитися на Android Studio 0.3.7 та додатку gradle 0.6.3, поки помилка не буде вирішена
men

6
Вам слід позбавитись від своїх формулювань: ви не використовуєте gradle 0.7.0 - це плагін для android gradle. У якому використовується Gradle (із обгорткою) у версії 1.9.0. Неправильні формулювання призведуть до плутанини - крім заданого контексту.
onigunn

1
Зверніть увагу, що pickFirstопція доступна з Gradle 0.9.1 .
JJD

Відповіді:


475

Станом на версію Android Studio 0.8.14

Вам слід додати:

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

у ваш build.gradleфайл.

Історія:

Відповідно до коментаря 14 у цій помилці: https://issuetracker.google.com/isissue/36982149#comment14, це помилка в v0.7.0 плагіну Android Gradle, і незабаром має бути виправлена ​​в 0.7.1.

Ось примітки цього помилки про додаток для 0.7.1:

0.7.1 не вдається виправити це.

DSL для виключення файлів:

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

Ви можете додати стільки заяв виключення, скільки вам потрібно. Значення - шлях до архіву. Ще немає підстановки чи глобальної підтримки.

Назви файлів "LICENSE.txt" та "NOTICE.txt" залежать від регістру. Спробуйте також "License.txt" і "notice.txt".


12
Дякую! Я також повинен був виключити 'META-INF / NOTICE.txt';)
Кліматизуйте

71
З кожним днем ​​мене дивує те, як програмісти могли бути віддаленими продуктивними до того, як прибув stackoverflow. Дякуємо за виправлення! Мені довелося виключати META-INF / LICENSE та / NOTICE. (Без txt, навіть на останньому градусі.)
domenukk

3
Який файл я повинен редагувати і де його можна знайти? дякую, Еял.
eyal

2
@ um.anusorn Шон дав вам хороший приклад для файлу gradle, який виключає ці файли з бібліотек під час упаковки. Це те, що у мене є: packOptions {виключити 'META-INF / LICENSE' виключити 'META-INF / NOTICE' виключити 'META-INF / DEPENDENCIES' виключити 'META-INF / License.txt' виключити 'META-INF / ovisenices.txt 'виключити' META-INF / notice.txt '}
praneetloke

4
Все ще поширена помилка в v0.12 вбудованих інструментів .. Просто кажу
Nilzor

149

У моєму випадку мені довелося включити кілька додаткових виключень. Здається, йому не подобаються регулярні вирази, які зробили б це непоганим однолінійним.

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

Мені потрібно було LICENSEі NOTICEпісля того, як я додав commons-lang3.
theblang

Цей мені допоміг (у мене є шаблон AndroidAnnotations + Spring REST). З необхідністю додавати такі хаки цей продукт IntelliJ страшно починає нагадувати Eclipse ...
javaxian

Не знаю, що впливає, але це дуже корисно.
CopperCash

Не працює для мене, все ще показує попередження: Dependency org.apache.httpcomponents: httpclient: 4.3 ігнорується для налагодження, оскільки це може суперечити внутрішній версії, наданій Android. У разі виникнення неполадок, запакуйте його з jarjar, щоб змінити пакунки класів
VVB

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

4
Мені потрібен був .txtсуфікс.
theblang

1
Щось ще, що я роблю, просто повернуло мене сюди, і .txtсуфікс мені не знадобився. Тож я здогадуюсь YMMV (або MMMV залежно від часу року).
theblang

31

Подивіться на коментар Sakiboy !


Застаріла відповідь

З Gradle 0.9.1 підтримується наступне:

android.packagingOptions {
    pickFirst 'META-INF/LICENSE.txt'
}

Більше інформації в примітках до випуску Gradle .


3
Це краще рішення, оскільки розробники зобов’язані включати ці файли, коли вони використовують програмне забезпечення з відкритим кодом.
Louth

1
Хороший варіант, але цей коментар абсолютно неправильний. Тільки ліцензія з бібліотеки перших буде включена, а все решта буде залишено.
Ігор Чордаш

1
це корисно, якщо 2 бібліотеки використовують одні й ті самі файли .so
Fabian

Чи можу я використовувати це для двох JAR, які містять один і той же файл .class? У мене є два JAR - файли включені , що обидва містять орг / xmlpull / v1 / XmlPullParser.class
WillC

2
@PSIXO, ви можете побачити відповідь нижче , якщо ви хочете включити всі ліцензії: stackoverflow.com/a/47828425/2371425
Sakiboy

12

Та ж проблема, коли я експортую бібліотеку httclient-4.3.5 в Android Studio 0.8.6, мені потрібно включити це:

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

Бібліотека zip-вмісту наступної банки:

commons-codec-1.6.jar
commons-logging-1.1.3.jar
fluent-hc-4.3.5.jar
httpclient-4.3.5.jar
httpclient-cache-4.3.5.jar
httpcore-4.3.2.jar
httpmime-4.3.5.jar

8

Ця помилка все ще існує в 0,8 + / 1,10

З Джексоном

compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.2.2'

Я повинен був включити, як і вищенаведене пропозицію, перш ніж воно складеться

exclude 'META-INF/services/com.fasterxml.jackson.core.JsonFactory'

як виключити "META-INF / services / com.fasterxml.jackson.core.JsonFactory". Який файл слід редагувати?
UmAnusorn

6

Це більше ніж одна помилка

Під apply plugin: 'android-library'

додати це:

android {
    packagingOptions {
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
}

У випадку, якщо дублікати файлів це легко, загляньте всередину JARпід META-INFdir та подивіться, що викликає помилку. Це може бути кілька. У моєму випадку плагін Couchbase Lite. Коли ви додасте більше плагінів, вам буде потрібно більше винятків


Дурне запитання: де цей файл JAR?
WillC

В Android Studio, запуск Gradle з --info прапором дозволив мені побачити журнал класів, який додається до apk, і я можу шукати вгору, щоб знайти запис журналу для того ж класу, який додається з іншого JAR. Це також показало мені шлях до обох файлів JAR. Я не міг знайти хороший спосіб обрати один .class файл над іншим, тому я змінив один з файлів JAR і видалив дублікат .class
WillC

4

Та сама проблема, коли я використовував 'org.springframework.android:spring-android-rest-template:2.0.0.M1' в Android Studio 1.0.1. Мені потрібно включити це вbuild.gradle

android{
...
    packagingOptions{
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
    }
...
}



2

Проблема полягає в тому, що папка META-INF не буде відфільтрована так багато записів NOTICEабо LICENSEвикликає дублікати під час створення, і їх намагаються скопіювати разом.

Брудне швидке виправлення:

Відкрийте .jarфайл у вашій .gradle/caches/...папці (за допомогою інструменту, сумісного з zip) та видаліть або перейменуйте файли в META-INFпапці, які спричиняють помилку (як правило, NOTICEабо LICENSE). (Я знаю, що це теж в ОП, але для мене це було не зовсім зрозуміло, поки я не прочитав google форум)

Редагувати:

Це було зафіксовано в 0.7.1. Просто додайте заплутані файли для виключення.

android {
    packagingOptions {
        exclude 'META-INF/LICENSE'
    }
}

Пробачте, я просто зараз це розумію.
UmAnusorn

Можливо, найгірша можлива відповідь: зміна банок у кеш-пам'яті gradle може змінити контрольну суму, і, як наслідок, не буде працювати довго ... до того ж, тхоси не є вашими банками
Riduidel

Так, саме тому жирними літерами написано "Брудне швидке виправлення". Також правильним рішенням є лише абзац. Ви розумієте, що це було написано в той час, коли не було чистого рішення, але людям все одно потрібно було складати свої програми.
Патрік Фавр

2

Те саме тут із

dependencies {
    compile 'org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.0'
}

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

Я втратив, як 2 дні, за цю дивну помилку ... Чому це все ще відбувається в gradle 1.0.0? Це дуже тривожно для новачків ... У будь-якому випадку, спасибі за цю інформацію, я думав, що це на моєму коді :)


2

Важливо знати, у якому файлі йдеться про цю помилку (у вашому прикладі це META-INF / LICENSE.txt), у моєму випадку це було у META-INF / LICENSE [без ".txt"], а потім у файлі META-INF / ASL2.0, тому я додав до свого build.gradle ці рядки:

android {
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/ASL2.0'
    }
}

Дуже важливо (!) -> додати ім'я файлу в тому ж стилі, щоб ви бачили його в повідомленні про помилку: текст відрізняється від регістру, і є різниця між * .txt і * (без "txt") .


2

Якщо ви хочете виконати свою роль як розробника, використовуючи бібліотеки з відкритим кодом, вам слід спробувати включити всі ті ліцензії з відкритим кодом у свій apk. Для цього ви можете використовувати метод злиття у своєму packagingOptions.

Приклад:

packagingOptions {
        // This will get include every license and notice regardless of what dir it’s in.
        merge '**/LICENSE.txt'
        merge '**/NOTICE.txt'
        merge '**/notice.txt'
        merge '**/license.txt'
        merge '**/NOTICE'
        merge '**/LICENSE'
        merge '**/notice'
        merge '**/license'
        merge '**/LGPL2.1'
        // This will exclude any README files, regardless of the dir or the file type.
        exclude '**/README.*'
}

Ця відповідь краще, ніж використання, pickFirstоскільки лише цей метод вибирає першу ліцензію вона знаходить і ігнорує все інше, свого роду робить його марним в цьому випадку.

Отже, коротше, використовуйте merge метод, щоб включити всі ті ліцензії з цих бібліотек відкритого коду kickass, якими ви користуєтеся.

Більше інформації про Gradle PackagingOptions .


2

Я помітив це зауваження щодо фіксації в AOSP, рішенням буде виключення деяких файлів за допомогою DSL. Можливо, коли буде випущено 0.7.1.

commit e7669b24c1f23ba457fdee614ef7161b33feee69
Author: Xavier Ducrohet <--->
Date:   Thu Dec 19 10:21:04 2013 -0800

    Add DSL to exclude some files from packaging.

    This only applies to files coming from jar dependencies.
    The DSL is:

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

Так, і вони просто написали нотатки до випуску на сайті збирання, тому, сподіваємось, вони незабаром завантажать артефакт в Maven Central, щоб ми могли використовувати це!
Метт Вулф

1

У моєму випадку мені потрібно лише додати файл файла build.gradle проекту:

android {
  packagingOptions {
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
  }

   ...
}

0

У Android Studio 1.1.0 мені потрібні малі імена:

packagingOptions{
      exclude 'META-INF/license.txt'
      exclude 'META-INF/notice.txt'
}

0

Файли "LICENSE.txt" та "NOTICE.txt" залежать від регістру. Тому для бібліотеки андроїд SPring мені довелося додати

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

0

Видалення .txt після LICENSE видалило мою помилку:

packagingOptions {
    exclude 'META-INF/LICENSE'
}

0
  packagingOptions {
    exclude 'META-INF/DEPENDENCIES.txt'
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/dependencies.txt'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/LGPL2.1'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/notice.txt'
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.