2015-10-05 13 views
12

मुझे एक प्रोजेक्ट मिला है जो प्रयोगात्मक ग्रेडल प्लगइन का उपयोग करता है, यानी 0.2.0। जब मुझे productFlavor नहीं मिला है, तो मैं एंड्रॉइड स्टूडियो में लाइब्रेरी मॉड्यूल को पूरी तरह से एकीकृत कर सकता हूं और सब कुछ पूरी तरह से काम करता है। लेकिन जब पुस्तकालय में productFlavor है, तो मुझे मुख्य परियोजना लाइब्रेरी कक्षाएं नहीं मिलती हैं।उत्पाद जोड़ें प्रायोगिक एंड्रॉइड ग्रेडल प्लगइन लाइब्रेरी

यह fix प्रयोगात्मक ग्रेडल प्लगइन के साथ काम नहीं करता है। क्या किसी को कोई विचार है कि नए प्लगइन के साथ स्वाद कैसे काम करते हैं?

लाइब्रेरी:

android.productFlavor { 
    create ('flavor') { 
     ... 
    } 
} 

परियोजना:

... 

dependencies { 
    compile project(':mylibrary') 
} 

उत्तर

0

वाक्य रचना गलत है।

प्रयोगात्मक प्लगइन के साथ

(0.2.1) जायके को परिभाषित कर रहे हैं android ब्लॉक और सही वाक्य रचना के बाहर android.productFlavors

model { 
    android { 

    } 

    android.productFlavors { 
     create("flavor") { 

     } 
    } 
} 
+0

यह काम नहीं करता है। – dragostis

+0

क्या यह उदाहरण आपके लिए 0.2.1' पर काम करता है? निश्चित रूप से उचित वाक्यविन्यास के साथ। लाइब्रेरी में 'android.productFlavors' और मुख्य परियोजना में 'संकलित परियोजना (': mylibrary ')'। – dragostis

+0

वाक्यविन्यास सही है और यह एक अनुप्रयोग मॉड्यूल के साथ ठीक काम करता है। मुझे नहीं पता कि यह पुस्तकालय के साथ कैसे काम कर सकता है। मेरी राय में आपको मुख्य मॉड्यूल में स्वाद ले जाना चाहिए (मैंने कभी लाइब्रेरी के अंदर स्वाद नहीं देखा है) –

9

यह मदद कर सकता है है?

लाइब्रेरी प्रकाशन

डिफ़ॉल्ट रूप से एक पुस्तकालय केवल अपनी रिहाई संस्करण प्रकाशित करती है। यह संस्करण लाइब्रेरी का संदर्भ देने वाली सभी परियोजनाओं द्वारा उपयोग किया जाएगा, इससे कोई फर्क नहीं पड़ता कि वेरिएंट वे स्वयं बनाते हैं। यह की वजह से अस्थायी सीमा है जो हम हटाने की दिशा में काम कर रहे हैं।

आप जो संस्करण के साथ

android { defaultPublishConfig "debug" } 

नोट इस प्रकाशन विन्यास नाम का संदर्भ देता है पूर्ण भिन्न नाम प्रकाशित होता है नियंत्रित कर सकते हैं। रिलीज और डिबग केवल तभी लागू होते हैं जब स्वाद नहीं होते हैं। आप जबकि जायके का उपयोग कर डिफ़ॉल्ट प्रकाशित संस्करण को बदलना चाहते हैं, तो आप लिखते थे:

android {defaultPublishConfig "flavor1Debug" } 

यह भी एक पुस्तकालय के सभी वेरिएंट प्रकाशित करने के लिए संभव है। हम सामान्य प्रोजेक्ट-टू-प्रोजेक्ट निर्भरता (जैसा ऊपर दिखाया गया है) का उपयोग करते समय इसे अनुमति देने की योजना बना रहे हैं, लेकिन ग्रैडल में सीमाओं के लिए के कारण यह संभव नहीं है (हम उनको ठीक करने की दिशा में भी काम कर रहे हैं)। सभी प्रकारों का प्रकाशन डिफ़ॉल्ट रूप से सक्षम नहीं है। उन्हें सक्षम करने के लिए:

android {publishNonDefault true } 

यह एहसास है कि कई वेरिएंट को प्रकाशित करने का मतलब है प्रकाशन कई आर फ़ाइलों महत्वपूर्ण है कई वेरिएंट वाली एकल आर के बजाय। प्रत्येक आयर पैकेजिंग में एक एकल संस्करण होता है। एक संस्करण का प्रकाशन करना इस एआर को आउटपुट ग्रैडल प्रोजेक्ट के आर्टिफैक्ट के रूप में उपलब्ध करा रहा है। इसका उपयोग तब किया जा सकता है जब एक मैवेन रिपोजिटरी में प्रकाशित हो रहा है, या जब कोई अन्य प्रोजेक्ट लाइब्रेरी प्रोजेक्ट पर निर्भरता बनाता है।।

compile project(':libraries:lib2') 

एक और प्रकाशित विरूपण साक्ष्य पर निर्भरता बनाने के लिए, आप करने की जरूरत है जो एक का उपयोग करने के लिए निर्दिष्ट:

Gradle डिफ़ॉल्ट "विरूपण साक्ष्य की एक अवधारणा है यह एक है कि जब लेखन में प्रयोग किया जाता है:

dependencies { 
    flavor1Compile project(path: ':lib1', configuration: 'flavor1Release') 
    flavor2Compile project(path: ':lib1', configuration: 'flavor2Release') 
} 

महत्वपूर्ण:। ध्यान दें कि प्रकाशित विन्यास एक पूर्ण संस्करण है, निर्माण प्रकार सहित है, और इस तरह के रूप में संदर्भित किए जाने की आवश्यकता Imp ऑर्टेंट: गैर डिफ़ॉल्ट के प्रकाशन को सक्षम करते समय, मेवेन प्रकाशन प्लगइन इन अतिरिक्त रूपों को अतिरिक्त पैकेज (वर्गीकृत के साथ) के रूप में प्रकाशित करेगा। इसका मतलब यह है कि यह वास्तव में एक मैवेन रिपोजिटरी को प्रकाशित करने के साथ संगत नहीं है। आपको या तो एक संग्रह में एक एकल संस्करण प्रकाशित करना चाहिए या इंटर-प्रोजेक्ट निर्भरताओं के लिए सभी कॉन्फ़िगरेशन प्रकाशन सक्षम करना चाहिए।

यहाँ से: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library

+0

मैंने पहले ही कोशिश की है [यह] (http://stackoverflow.com/questions/24860659/multi-flavor-app-based-on-multi-flavor-library-in-android-gradle)। – dragostis

0

बातें थोड़ा और अधिक जटिल हैं। मैं पुस्तकालय आप की जरूरत पर प्रयोगात्मक Gradle 0.8.0

पर परीक्षण किया है: एप्लिकेशन पर

model{ 
    android { 
    ... 
    publishNonDefault true 

    productFlavors { 
       create("flavor1") { 
       } 
       create("flavor2") { 
       } 
      } 
    } 
} 

आप की जरूरत:

model { 
    android { 
    ... 
    publishNonDefault true 

    productFlavors { 
       create("flavor1") { 
       } 
       create("flavor2") { 
       } 
      } 
    } 
} 
//after the model is closed !! 
configurations { 
    flavor1DebugCompile 
    flavor1ReleaseCompile 

    flavor2DebugCompile 
    flavor2ReleaseCompile 
} 

dependencies { 
... 
flavor1DebugCompile project(path: ':mylibrary', configuration: 'flavor1Debug') 

flavor1ReleaseCompile project(path: ':mylibrary', configuration: 'flavor1Release') 

flavor2DebugCompile project(path: ':mylibrary', configuration: 'flavor2Debug') 

flavor2ReleaseCompile project(path: ':mylibrary', configuration: 'flavor2Release') 

    } 

उम्मीद है कि, यदि आप पूर्ण चलाने इकट्ठा आप करेंगे प्रत्येक स्वाद के लिए 2 एपीके प्राप्त करें। मैंने एक cmd से "./gradlew build" का उपयोग किया है और उन्हें मिला है। ध्यान दें कि आपके lib के लिए, आपको प्रत्येक स्वाद के लिए एएआर भी मिलेगा

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