5

मुझे @StringDef समर्थन एनोटेशन के साथ समस्याएं आ रही हैं। जब वे पुस्तकालय में हैं, वे पूरी तरह से ठीक काम करते हैं (एक .aar फ़ाइल नहीं), लेकिन जब मैं लाइब्रेरी को .aar फ़ाइलों के रूप में संकलित करता हूं और उन्हें किसी अन्य प्रोजेक्ट में उपयोग करने का प्रयास करता हूं, तो एनोटेशन लागू नहीं होते हैं।एंड्रॉइड सपोर्ट एनोटेशन @StringDef एक .aar फ़ाइल में निर्यात किए जाने पर काम नहीं कर रहा है

http://tools.android.com/tech-docs/support-annotations

खंड "अपनी खुद की पुस्तकालयों में टिप्पणियों का उपयोग करने" के अंतर्गत यह

कहते हैं आप इन टिप्पणियों के साथ अपने स्वयं के पुस्तकालयों व्याख्या करते हैं, और Gradle का उपयोग एक आर विरूपण साक्ष्य के निर्माण के लिए है, तो निर्माण समय एंड्रॉइड ग्रैडल प्लगइन एनोटेशन जानकारी निकाल देगा और इसे आपकी लाइब्रेरी के ग्राहकों द्वारा उपयोग के लिए आपके एएआर फाइल के अंदर भेज देगा। आप एएआर के अंदर annotations.zip फ़ाइल को देख सकते हैं जहां जानकारी दर्ज की जाती है; यह इंटेलिजे के बाहरी एनोटेशन एक्सएमएल प्रारूप का उपयोग कर रहा है। यह आवश्यक है क्योंकि .class फ़ाइलों में उपरोक्त @IntDef जानकारी को संभालने के लिए एनोटेशन के बारे में पर्याप्त जानकारी नहीं हो सकती है; ध्यान दें कि हमें निरंतर संदर्भ का रिकॉर्ड करने की आवश्यकता है, न कि इसके मूल्य। एंड्रॉइड ग्रैडल प्लगइन बिल्ड के हिस्से के रूप में एक्स्ट्रा एनोटेशन कार्य चलाएगा यदि (और केवल अगर) आपकी परियोजना एनोटेशन सपोर्ट लाइब्रेरी पर निर्भर करती है। (ध्यान दें कि एक मात्र स्रोत प्रतिधारण एनोटेशन .aar फ़ाइल में रखा जाता है;। श्रेणी स्तर retentions classes.jar में रखा जाता है)

मैं .aar फ़ाइल को खोल दिया और अंदर वहाँ annotations.zip है फ़ाइल, और यदि मैं इसे निकालने के लिए, एक एक्सएमएल फ़ाइल है जिसमें सभी सही एनोटेशन हैं।

मैं @Retention(RetentionPolicy.SOURCE) उपयोग कर रहा हूँ के रूप में यह कहता है कि मैं

एप्लिकेशन है कि मैं के रूप में .aar फाइलों में इन उपयोग करने के लिए समर्थन पुस्तकालय compile 'com.android.support:support-annotations:23.1.1

क्या बजे पर निर्भरता है कोशिश कर रहा हूँ की जरूरत है मुझे ये काम करने में याद आ रही है?

संपादित करें: मैंने दो बार जांच की है कि इन्हें .aar फ़ाइलों के रूप में उपयोग करने वाली परियोजना में एनोटेशन प्रोसेसर चालू है।

+0

"एनोटेशन लागू नहीं किए गए" के साथ आपका क्या मतलब है? –

+1

जब मैं उस विधि का उपयोग करता हूं जिस पर एनोटेशन होता है, और मैं एनोटेटेड मान का उपयोग नहीं करता हूं, तो इसे लाल रंग में चिह्नित करना चाहिए और मुझे संकलन से रोकना चाहिए। E.G. कुछ हैलो बनाम "हैलो" बनाम HELLO_CONSTANT।यह तब काम करता है जब लाइब्रेरी को सीधे प्रोजेक्ट में संकलित किया जाता है, लेकिन जब .aar फ़ाइलों के रूप में उपयोग नहीं किया जाता है – Ben987654

+2

गलत छवि का उपयोग किया जाने पर यह कैसा दिखना चाहिए - https: // 0d9321c1-a-db1c6dfe-s-site। googlegroups.com/a/android.com/tools/tech-docs/support-annotations/image06.png?attachauth=ANoY7cqTSb17QuPBLDWr4tzSd8PWqymMcqHTUdoW1VD-jKQ6m8DAG3jhcVWkDniYH72V9mV2ZNZUfnH2KXgUOZumtywXOq9v_BK42ub6taGLV2UZ4b4QhTN7pflf130U4DVEu-L5VSH7kUXtWb5RFRIBCT5vc9nmYNsbKWVB5tKqFqj7TiYIPvkyDWpLFmu1eUjFgkjVrt1grDcsR5RdXe4IeV9AMuVT9nFp6nxSaVDcQ0kWRy2fizQ%3D&attredirects=0 – Ben987654

उत्तर

1

मुद्दा यह था कि इंटरफेस निजी थे।

किसी कारण से एक निजी इंटरफ़ेस ठीक से काम करता है जब लाइब्रेरी प्रोजेक्ट को इसके होस्ट प्रोजेक्ट द्वारा उप मॉड्यूल के रूप में संकलित किया जाता है।

जब लाइब्रेरी प्रोजेक्ट को .aar फ़ाइल के रूप में उपयोग किया जाता है, तो निजी इंटरफ़ेस अब काम नहीं करता है।

+0

मैं इस एक ही समस्या हो रही है ... आप को परिभाषित किया था अपने एक स्टैंडअलोन 'जावा' फ़ाइल में 'public @interface YourTypeDef {}'? या आपने अपनी एनोटेशन टाइपपीफ कार्यान्वयन को समाहित करने के लिए कक्षा बनाई है? – Sakiboy

1

जैसा कि here बताया गया है, @ स्ट्रिंगडिफ/@ इंटडिफ मानों के रूप में उपयोग किए जाने वाले स्थिरांक के बारे में जानकारी खोने के बाद एआर फ़ाइल में संकलित हो जाएगी। स्थिरता केवल स्थिरांक के मूल्य है।

@IntDef एनोटेशन वर्ग अवधारण हो नहीं कर सकते क्योंकि बात वे (जो स्थिरांक मान्य हैं) .class फ़ाइल में व्यक्त नहीं किया जा सकता रिकॉर्ड करने की आवश्यकता - टिप्पणी के लिए संग्रहीत केवल डेटा मूल्य है निरंतर के, स्थिरता के लिए कुछ प्रकार के सूचक नहीं।

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

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