2015-01-15 5 views
6

मैं अपनी प्रोजेक्ट में शामिल लाइब्रेरी के साथ कुछ परेशानी में भाग रहा हूं: शुरुआत में यह केवल एक विरोधाभासी निर्भरता मुद्दा था जिसे मैंने छोड़कर हल किया support-v4 जो आमतौर पर साझा किया गया मॉड्यूल है।ग्रैडल पुस्तकालय कक्षाओं के अंदर शामिल जेएआर फ़ाइल के लिए संदर्भ को शामिल या जोड़ना .jar

समस्या यह है कि lbsLib-release में से एक डेवलपर निर्माण से पहले रूट प्रोजेक्ट के अंदर एक सादे .jar फ़ाइल के साथ बनाया गया प्रतीत होता है।

./gradlew app:dependencies चलाकर मैंने सत्यापित किया कि बिल्ड ग्राफ़ में निर्भरता का संदर्भ नहीं दिया गया है।

और मैं इस support-v4classes.jar पर स्थित में एम्बेड पाया: app/build/intermedites/exploded-aar/MyQaaAndroid/lbsLib-release/unspecified/classes.jar/ के रूप में आप नीचे चित्र पर देख सकते हैं:

enter image description here

मैं परियोजना अपने आप पुनर्निर्माण नहीं कर सकता, क्योंकि यह नहीं है एक खुली सोर्स लिब, इसलिए दो समस्याएं हैं:

  1. यदि मैंजोड़ता हूंbuild.gradle पर multiple dex file त्रुटि समय पर फेंक दिया गया है ताकि लाइब्रेरी को दो बार संदर्भित किया जा सके।

    UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Landroid/support/v4/app/BackStackState; 
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596) 
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554) 
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535) 
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) 
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:189) 
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454) 
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303) 
    at com.android.dx.command.dexer.Main.run(Main.java:246) 
    at com.android.dx.command.dexer.Main.main(Main.java:215) 
    at com.android.dx.command.Main.main(Main.java:106) 
    

    `

  2. अगर मैं सभी libs जो support-v4 की आवश्यकता होती है यह आवेदन कार्यावधि में एक लापता निर्भरता त्रुटि फेंकता को हटा दें।

तो मैं अगर यह संभव है निर्माण से इस .jar फ़ाइल को बाहर करने या दूसरों libs बनाने के लिए जानना चाहते हैं lbsLib-release एम्बेडेड support-v4.jar पर निर्भर करता है। जड़ build.gradle पर resolutionStrategy (API reference) का उपयोग करने

compile (project(':lbsLib-release')) { 
    exclude module: 'support-v4' 
} 

compile ('com.sothree.slidinguppanel:library:2.0.4'){ 
    exclude module: 'support-v4' 
} 

compile('com.google.android.gms:play-services:6.5.87') { 
    exclude module: 'support-v4' 
} 
+0

आप lbsLib रिलीज एक 'संकलन project' निर्देश के माध्यम से शामिल कर रहे हैं, तो आप के लिए स्रोत कोड की जरूरत नहीं है यह? –

+0

नहीं, यह एक * .aar फ़ाइल –

+0

है जो 'मॉड्यूल' को सबमिशन के build.gradle में बहिष्कृत करने का प्रयास करें, जहां आप .aar सहित हैं, और शीर्ष-स्तर में नहीं, जहां आप सबमिशन शामिल कर रहे हैं। –

उत्तर

4

प्रयास करें।

// Top-level build file where you can add configuration options common to all sub-projects/modules. 
buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:1.0.0' 
    } 
} 

allprojects { 
    repositories { 
     jcenter() 
    } 
    configurations.all((Closure) { 
     resolutionStrategy { 
      force 'com.android.support:support-v4:21.0.2' // your version of support library 
     } 
    }) 

} 
0

Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat से कम यह आसान के रूप में exclude module: 'support-v4'

उदाहरण

dependencies { 
    compile('com.commonsware.cwac:camera-v9:0.5.4') { 
     exclude module: 'support-v4' 
    } 

    compile 'com.android.support:support-v4:18.0.+' 
} 
+2

कृपया इसे और स्पष्ट करें और शब्दों में जवाब समझाएं। – arkoak

संबंधित मुद्दे