में मैं इस तरह के TextView
के रूप में एंड्रॉयड UI फ्रेमवर्क में विभिन्न दृश्य वर्गों पर प्रॉक्सी तरीकों की जरूरत है। विशेष रूप से TextView#setText(int resId)
। यह विधि एक इंटरफ़ेस का हिस्सा नहीं है। इसलिए, जावा Proxy काम नहीं करेगा क्योंकि यह केवल इंटरफेस के लिए काम करता है। मुझे बाइटकोड मैनिपुलेशन का उपयोग करने की आवश्यकता है।प्रॉक्सी अंतिम विधि गैर अंतिम कक्षा
मैं एक पुस्तकालय dexmaker कहा जाता है कि होनहार लग रहा था मिल गया। मुझे लगता है कि मुझे रनटाइम बाइट कोड मैनिपुलेशन करने की आवश्यकता है क्योंकि एंड्रॉइड व्यू क्लासेस केवल डिवाइस पर उपलब्ध हैं। डेक्समेकर कंक्रीट कक्षाओं पर सार्वजनिक तरीकों का प्रॉक्सी कर सकता है। तब मैंने देखा कि TextView#setText(int resId)
निष्पक्ष रूप से final है। TextView
कक्षा स्वयं गैर-अंतिम है।
मुझे लगता है कि मैं गैर अंतिम कक्षाओं में अंतिम तरीकों का समर्थन करने के dexmaker कांटा सकता है। क्या यह संभव है? अगर यह नहीं है तो मैं इस परियोजना को शुरू नहीं करना चाहता हूं। यह मेरी लाइब्रेरी के लिए एक बड़ी जीत होगी हालांकि डेवलपर्स को उनके विचारों के लिए सबक्लास, इंटरफेस, या मैन्युअल स्थैतिक विधि कॉल करने की आवश्यकता नहीं होगी। मेरी लाइब्रेरी को यह जानने की जरूरत है कि जब विशेष दृश्य पर टेक्स्ट सेट किया जाता है। एक प्रॉक्सी इसके लिए एक आदर्श डिजाइन पैटर्न है।
यादृच्छिक शॉट (चूंकि इसका उल्लेख नहीं किया गया है): एक लेआउट inflater [कारखाने वर्ग सेट करने की अनुमति देता है] (http://developer.android.com/reference/android/view/LayoutInflater। एचटीएमएल # setFactory2 (android.view.LayoutInflater.Factory2)) जो हो सकता है कि आप बाद में हो। इसका उपयोग [जांच] (https://github.com/lucasr/probe/) में किया जाता है जहां फैक्ट्री गतिशील रूप से कॉल को अवरुद्ध करने के लिए डेक्समेकर का उपयोग करके प्रॉक्सी बनाती है। –
मेरी लाइब्रेरी का हिस्सा वास्तव में लेआउट inflater फैक्टरी तकनीक का उपयोग करता है। आप कह रहे हैं कि आप व्यू ऑब्जेक्ट्स पर प्रॉक्सी स्थापित कर सकते हैं जो डेक्समेकर के माध्यम से बनाए जाते हैं? – jophde
बहुत बहुत धन्यवाद स्टीफन। जांच स्रोत बिल्कुल वही है जो मुझे चाहिए :)। अगर मैं सही ढंग से समझता हूं कि प्रोब पूरी तरह से नए व्यू क्लास बनाता है तो अंतिम विधियों को संभालने में सक्षम नहीं होने के कारण डेक्समेकर प्रॉक्सीबिल्ड सीमा कोई मुद्दा नहीं है? डेक्समेकर प्रॉक्सीबिल्डर डॉक्स से: "यह प्रक्रिया केवल सार्वजनिक और संरक्षित स्तर की दृश्यता वाले वर्गों के लिए काम करती है।" – jophde