2016-01-26 6 views
40

कभी-कभी एंड्रॉइड ग्रेडल फ़ाइलों में उपयुक्त निर्भरता क्षेत्र क्या होता है?एपीटी निर्भरता गुंजाइश - इसका क्या उपयोग किया जाता है?

एक उदाहरण इस तरह दिखता है?

apply plugin: 'com.android.application' 
apply plugin: 'com.neenbedankt.android-apt' 
android { 
    compileSdkVersion 20 
    buildToolsVersion '20.0.0' 
    defaultConfig { 
     applicationId "org.ligboy.test.card.module1" 
     minSdkVersion 14 
     targetSdkVersion 20 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      runProguard false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

final DAGGER_VERSION = '2.0.2' 

dependencies { 
    compile "com.google.dagger:dagger:${DAGGER_VERSION}" 
    apt "com.google.dagger:dagger-compiler:${DAGGER_VERSION}"//what is this scope 
    provided 'org.glassfish:javax.annotation:10.0-b28' 
} 

और शीर्ष स्तर build.gradle में दायर यह इस वैश्विक निर्भरता है: निर्भरता में

buildscript { 
dependencies { 
     classpath 'com.android.tools.build:gradle:1.3.0' 
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' 
    } 
} 

सूचना खंड एक उपयुक्त गुंजाइश है? मैं केवल संकलन, पैकेज और प्रदान किए गए दायरे के बारे में जानता हूं। संकलन संकलन समय और आपके पैकेज में निर्भरता शामिल है, बशर्ते केवल संकलन समय पर लाइब्रेरी शामिल करें और पैकेज समय पर इसे छोड़ दें ताकि इसे अंतिम निर्माण में शामिल न किया जा सके। और पैकेज विपरीत है, इसमें पैकेज में निर्भरता शामिल है और संकलन समय पर नहीं। लेकिन एपीटी निर्भरता क्षेत्र क्या है जिसे हम काम करने के लिए com.neenbedankt.android-apt की स्पष्ट रूप से आवश्यकता है, इसलिए मैं इसके एंड्रॉइड आधारित जानता हूं।

अद्यतन: क्यों नहीं कर सकते मैं उपयोग निर्भरता गुंजाइश बजाय उपयुक्त गुंजाइश प्रदान की? वे अलग कैसे होते हैं?

मैंने उन लोगों के लिए dagger dependency scopes पर एक ट्यूटोरियल बनाया है, जिन्हें अधिक जानकारी चाहिए।

उत्तर

65
android-apt project page से

:

android-उपयुक्त एंड्रॉयड स्टूडियो के साथ संयोजन में एनोटेशन प्रोसेसर के साथ काम करने में सहायता करता है प्लगइन।

  • एक निर्भरता के रूप में एक संकलन समय केवल एनोटेशन प्रोसेसर कॉन्फ़िगर करने के लिए, अंतिम APK में विरूपण साक्ष्य या लाइब्रेरी

  • स्रोत पथ सेट करें जिससे कोड है कि सहित नहीं की अनुमति दें: यह दो उद्देश्यों है एंड्रॉइड स्टूडियो द्वारा एनोटेशन प्रोसेसर से उत्पन्न किया गया है।

आप डैगर, जो कोड उत्पन्न करने के लिए एनोटेशन संसाधन का उपयोग करता उपयोग कर रहे हैं। एनोटेशन प्रोसेसिंग कोड को अंतिम एपीके में शामिल नहीं किया जाना चाहिए, और आप जेनरेट कोड को एंड्रॉइड स्टूडियो में दिखाना चाहते हैं। android-apt इस व्यवहार को सक्षम बनाता है।

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

एक और महत्वपूर्ण अंतर है कि एक पुस्तकालय provided गुंजाइश का उपयोग करने में कोड (अर्थात आपने वर्गों आयात और उन्हें उपयोग करने का प्रयास कर सकते हैं), आईडीई classpath पर है, जबकि एक apt निर्भरता में कोड नहीं है। provided के साथ, यदि आप वास्तव में compile स्कॉप्ड समकक्ष के साथ संदर्भित निर्भरता प्रदान नहीं करते हैं तो आपका कोड रनटाइम पर क्रैश हो जाएगा।

आप बनाम provided पर this android-apt issue पर चर्चा कर सकते हैं।

डैगर के मामले में, आपके किसी भी कोड में एनोटेशन प्रोसेसर और कोड जेनरेटर शामिल करने का कोई कारण नहीं होना चाहिए (provided स्कोप अनुमति देगा)। इस प्रकार apt गुंजाइश अधिक उपयुक्त है। अक्टूबर 2016 के लिए

अद्यतन: आप शायद apt और android-apt प्लगइन की आवश्यकता नहीं है। एंड्रॉइड ग्रैडल प्लगइन के संस्करण 2.2 में annotationProcessor कॉन्फ़िगरेशन है जिसका उपयोग आप इसके बजाय करना चाहिए।

अधिक What's next for android-apt?

+0

और मैं उपयुक्त के बजाय इस मामले में "प्रदान" क्यों नहीं कर सकता? मुझे लगता है कि अगर आपने जवाब दिया कि यह मेरे लिए चीजों को साफ़ करेगा। – j2emanue

+0

मतभेदों पर एक स्पष्टीकरण जोड़ा गया। –

+0

शानदार। मैं भी प्रदान की जाती है 'org.glassfish: javax.annotation: 10.0-b28' क्रम में। क्या आपको लगता है कि यह एक उपयुक्त गुंजाइश बनाना बेहतर होगा? इस तरह जेनरेटर में से कोई भी कोड में शामिल नहीं है, है ना? – j2emanue

8

पर बस को जोड़ने का तरीका स्टूडियो 2.2 में इसे बदलने के लिए +

dependencies { 
    compile 'com.google.dagger:dagger:2.4' 
    annotationProcessor "com.google.dagger:dagger-compiler:2.4" 
} 

क्षुधा में इस जोड़े Gradle मॉड्यूल देखें। किसी भी अन्य चीज को बदलने की जरूरत नहीं है।

हैप्पी कोडिंग :)

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