मुझे दो लाइब्रेरी मॉड्यूल के साथ एक मूल प्रोजेक्ट बनाने के दौरान "डुप्लिकेट फ़ाइलें" संघर्ष मिलता है, जो उसी libc++_shared.so
साझा लाइब्रेरी का उपयोग करता है।मल्टी-प्रोजेक्ट एंड्रॉइड बिल्ड में डुप्लिकेट सी साझा लाइब्रेरीज़ (.so) को कैसे निकालें?
(नोट:। कृपया यह एक "डुप्लिकेट सवाल" पर विचार नहीं करते मैं कई संबंधित पोस्ट है, जो मुझे मिल मदद की है पढ़ा है यह अब तक हालांकि, कोई पोस्ट एक जवाब है कि मेरे मामले को शामिल में काम करता है प्रदान की है। एनडीके कलाकृतियों।)
बिल्ड सही ढंग से काम कर रहा था जब मेरे पास केवल 1 ऐसा पुस्तकालय मॉड्यूल था। दूसरी लाइब्रेरी मॉड्यूल का जोड़ा अब संघर्ष बना रहा है।
निम्नलिखित परियोजना संरचना पर विचार करें: 1 माता पिता परियोजना, 2 "बच्चा" परियोजनाओं - लेकिन प्रत्येक परियोजना (यानी पदानुक्रम नेस्ट नहीं) एक ही निर्देशिका स्तर पर स्थित
ProjectA/ (Parent)
LibraryModuleA1/
build/exploded-aar/com.package.name/
LibraryModuleB1/<version>/jni/armeabi-v7a/libc++_shared.so
LibraryModuleC1/<version>/jni/armeabi-v7a/libc++_shared.so
build.gradle (bgA1)
Test_APK_Module A1T/
build.gradle (bgA1T)
build.gradle (bgPA)
ProjectB/
LibraryModuleB1/ (Uses NDK)
build/lib/armeabi-v7a/libc++_shared.so
build.gradle (bgB1)
build.gradle (bgPB)
ProjectC/
LibraryModuleC1/ (Uses NDK)
build/lib/armeabi-v7a/libc++_shared.so
build.gradle (bgC1)
build.gradle (bgPC)
लाइब्रेरी मॉड्यूल A1 दोनों लाइब्रेरी पर निर्भर करता है मॉड्यूल बी 1 & सी 1।
A1 -> बी 1
A1 -> सी 1
परियोजनाओं बी और सी दोनों NDK आधारित कोड है और/परीक्षण सही ढंग से निर्माण। दोनों libc++_shared.so
साझा लाइब्रेरी पर निर्भर करते हैं।
हालांकि, जब परियोजना एक इमारत, मैं निम्न त्रुटि :LibraryModuleA1:packageDebugTest
कार्य के दौरान हो:
Error: duplicate files during packaging of APK /ProjectA/LibraryModuleA1/build/apk/LibraryModuleA1-debug-test-unaligned.apk
Path in archive: lib/armeabi-v7a/libc++_shared.so
Origin 1: /ProjectA/LibraryModuleA1/build/exploded-aar/com.package.name/LibraryModuleB1/<version>/jni/armeabi-v7a/libc++_shared.so
Origin 2: /ProjectA/LibraryModuleA1/build/exploded-aar/com.package.name/LibraryModuleC1/<version>/jni/armeabi-v7a/libc++_shared.so
You can ignore those files in your build.gradle:
android {
packagingOptions {
exclude 'lib/armeabi-v7a/libc++_shared.so'
}
}
* What went wrong:
Execution failed for task ':LibraryModuleA1:packageDebugTest'.
> Duplicate files copied in APK lib/armeabi-v7a/libc++_shared.so
File 1: /ProjectA/LibraryModuleA1/build/exploded-aar/com.package.name/LibraryModuleC1/<version>/jni/armeabi-v7a/libc++_shared.so
File 2: /ProjectA/LibraryModuleA1/build/exploded-aar/com.package.name/LibraryModuleC1/<version>/jni/armeabi-v7a/libc++_shared.so
:LibraryModuleA1:packageDebugTest FAILED
क्या मैं तो कोशिश की है सुदूर
- मैं जोड़ने के लिए सुझाव का प्रयास किया मेरे
build.gradle
फ़ाइल को बंद करें, लेकिनbuild.gradle
फ़ाइल मैं इसे जोड़ता हूं? मैंनेbgA1
,bgB1
, औरbgC1
(एक समय में एक) को बंद करने के लिए कोई सफलता नहीं दी है। - सुझाए गए बंदरगाह
exclude 'lib/armeabi-v7a/libc++_shared.so'
का उपयोग करने के लिए कहते हैं। प्रत्येक "बच्चा" लाइब्रेरी मॉड्यूलbuild/lib
पथ के तहतlibc++_shared.so
फ़ाइल बनाता है। हालांकि, मैंने देखा कि पेरेंट लाइब्रेरी मॉड्यूल निर्देशिका संरचना के अंदरjni/armeabi-v7a/libc++_shared.so
के तहतlibc++_shared.so
फ़ाइल की प्रतिलिपि बनाता है। (ऊपर देखें) बंद होने के बजायexclude 'jni/armeabi-v7a/libc++_shared.so
(यानीjni
बनामlib
) बंद करना चाहिए? - चूंकि मैं ग्रैडल प्लगइन 0.9.1 का उपयोग कर रहा हूं, इसलिए मैंने
exclude
के स्थान परpickFirst
का उपयोग करने का प्रयास किया, लेकिन यह भी सफल नहीं था।
क्या कोई यह निर्धारित करने में सहायता कर सकता है कि मुझे अपने दिए गए मामले के लिए 'पैकेजिंग विकल्प' बंद करने के तरीके को कैसे कॉन्फ़िगर करना चाहिए?
आपकी मदद के लिए धन्यवाद!
पैकेज एप्लिकेशन कैसे ट्रिगर होता है? ऐप में - मैं इसे डिबग बिल्ड पर नहीं देख रहा हूं ... इसलिए मेरी डीबग एपीके शामिल हैं ... धन्यवाद। –
आप सही हैं, मुझे स्वचालित रूप से चलाने के लिए copyDependingNativeLibs प्राप्त करने में परेशानी हो रही है। मुझे लगता है कि इसे पीकेजी टास्क के लिए निर्भरता के रूप में जोड़ना सही काम नहीं है। मेरे पास वास्तव में समाधान खोजने का समय नहीं है, इसलिए अब जब मैं कुछ मूल भाग बदलता हूं तो मैं केवल './gradlew ऐप चलाता हूं: copyDependingNativeLibs'। – Julien