2016-11-23 6 views
8

के आधार पर विभिन्न लाइब्रेरी/आयात एक एंड्रॉइड ऐप में, मुझे एक निश्चित परिधीय के लिए एक विशिष्ट एसडीके का उपयोग करने की आवश्यकता है।बिल्ड प्रकार

सब कुछ एक भी निर्माण प्रकार के साथ ठीक काम करता है:

provided fileTree(include: ['peripheral.jar'], dir: 'libs') 
compile fileTree(exclude: ['peripheral.jar'], dir: 'libs') 

समस्या यह है कि एसडीके वास्तविक परिधीय में स्थापित किसी साझा लाइब्रेरी पर निर्भर करता है। यदि मैं किसी भी अन्य एंड्रॉइड डिवाइस में ऐप इंस्टॉल करने का प्रयास करता हूं (बाकी कार्यक्षमताओं के डीबगिंग उद्देश्यों के लिए), मुझे INSTALL_FAILED_MISSING_SHARED_LIBRARY त्रुटि मिलती है।

मुझे लगता है कि मैं दो निर्माण वेरिएंट इस्तेमाल कर सकते हैं:

  • release, कि एसडीके
  • debug, कि एसडीके का उपयोग नहीं करता

मैं एसडीके सहित कोशिश की है का उपयोग करता है केवल release निर्माण प्रकार:

releaseProvided fileTree(include: ['peripheral.jar'], dir: 'libs') 
releaseCompile fileTree(exclude: ['peripheral.jar'], dir: 'libs') 

लेकिन फिर, मैं गायब आयात की वजह से परियोजना को संकलित नहीं कर सकता।

main/java/package/PeripheralManager.java में:

public class ScannerManager { 
    // fake 
} 

release/java/package/PeripheralManager.java में:

import peripheral; <- IT FAILS WHEN COMPILING 

public class ScannerManager { 
    // real code 
} 

कोई मायने रखती निर्माण प्रकार मैं चुना है, मैं यह कर सकते हैं

तो मैं केवल वर्ग उन आयात का उपयोग करता है दोहराया प्रोजेक्ट को संकलित नहीं करें अगर आयात को किसी एक प्रकार में हल नहीं किया गया है ...

+0

क्या आप डुप्लिकेट से बचने के लिए मल्टीडेक्स आज़मा सकते हैं। –

+0

मैंने पहले कभी इसका उपयोग नहीं किया है। क्या आपको लगता है कि इसे बिल्ड प्रकारों का उपयोग करके हल नहीं किया जा सकता है? – thelawnmowerman

+0

उम्मीद है कि यह मदद करेगा, क्या मैं यहां जवाब साझा कर सकता हूं? –

उत्तर

4

मैं अंत में जायके के साथ इसे हल। समस्या main और release फ़ोल्डरों में एक ही कक्षा को डुप्लिकेट करने का प्रयास कर रही थी। हम ऐसा नहीं कर सकते। इसके बजाय, मुझे इसे डुप्लिकेट करना था, उदाहरण के लिए, debug और release, या flavour1 और flavour2, (आयात के साथ एक और अन्य बिना) और main से इसे हटा देना था। फिर, मैं चुन सकता हूं कि संकलन करना और सब कुछ काम करता है।

आपकी मदद के लिए वैसे भी धन्यवाद, + मोहनराज!

2

कृपया इसे अपने मॉड्यूल build.gradle फ़ाइल पर आज़माएं, यहां मेरा कोड, कृपया मुझे अपना फ़ीडबैक दें। अग्रिम धन्यवाद।

build.gradle

android { 

    defaultConfig { 
     ----some stuff--- 
     multiDexEnabled true 


    } 
    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/maven/ch.acra/acra/pom.xml' 
     exclude 'META-INF/maven/ch.acra/acra/pom.properties' 

    } 
    buildTypes { 
     release { 
      --some stuff---- 
     } 
     debug { 
     } 
    } 
    dexOptions { 
     javaMaxHeapSize "2g" 
    } 
    } } 
} 

dependencies { 
--some stuff---- 
} 
} 
+0

हो सकता है कि आपने अपनी समस्या से संबंधित पैकेजिंग विकल्पों को कस्टमाइज़ किया हो। –

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