java - मैं "डुप्लिकेट फ़ाइलों को APK META-INF/* में कॉपी कैसे हल करूं"




android gradle (4)

मैं एक वाणिज्यिक Android आवेदन पर काम कर रहा हूँ। मैं विभिन्न लाइसेंस प्रकारों के तहत लाइसेंस प्राप्त कुछ पुस्तकालयों का उपयोग कर रहा हूं जिनमें से कुछ निम्नलिखित बताते हैं:

यदि लाइब्रेरी में एट्रिब्यूशन नोट्स के साथ "NOTICE" फाइल है, तो आपको वितरित करते समय उस NOTICE को शामिल करना होगा

(उनमें से एक उदाहरण के लिए अपाचे लाइसेंस 2.0 के तहत लाइसेंस प्राप्त है)।

एक से अधिक पुस्तकालय हैं। जब मैं निर्माण को ढाल के साथ या एंड्रॉइड स्टूडियो के साथ करता हूं तो मुझे निम्नलिखित बिल्ड त्रुटि प्राप्त होती है:

* 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

इंटरनेट और स्टैकओवरफ़्लो पर अब तक मुझे जो उत्तर मिले हैं, वे निम्नलिखित के लिए 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 META-INF / LICENSE.txt में कॉपी किए गए एंड्रॉइड स्टूडियो 0.4 डुप्लीकेट फाइलें

उन पुस्तकालयों (उदाहरण के लिए अपाचे लाइसेंस 2.0 ) के लाइसेंस के अनुसार, लाइसेंस और नोटिस फ़ाइलों को शामिल किया जाना चाहिए।

मेरा प्रश्न: मैं लाइसेंस से संबंधित कई फाइलों को कैसे जोड़ सकता हूं (जैसे लाइसेंस.टेक्स्ट , नोटिस.टेक्स्ट आदि) अपने प्रोजेक्ट में लाइसेंस से लाइसेंस के साथ अनुपालन करने के लिए ( तकनीकी विवरण: लाइसेंस ग्रंथों को संक्षिप्त किया जाएगा)?



निम्नलिखित 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'
    }

मुझे अपने आवेदन के साथ इसी मुद्दे का सामना करना पड़ा। आपको यह सुनिश्चित करने की आवश्यकता है कि आपने दो बार कोई लाइब्रेरी नहीं जोड़ी है। अगर आपने फायरबेस डॉक्यूमेंट का अनुसरण किया है तो https://firebase.google.com/docs/android/setup

फिर आपको एंड्रॉइड स्टूडियो के अंदर फायरबेस लाइब्रेरी को नहीं जोड़ना चाहिए, फ़ाइल-> प्रोजेक्ट संरचना-> क्लाउड-> फायरबेस

आपको अपने Android एप्लिकेशन में फायरबेस का उपयोग करने के लिए दोनों में से केवल एक करना है।

अंत में अपने ऐप को साफ़ और फिर से चलाएँ।


मुझे लगता है कि आपको 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'
    }
}




gradle