प्रयास करना चाहिए मैं, एक ही Binding a Java Library लेख तुमने पढ़ा निर्देश माध्यम से चला गया है, और कोई निर्माण में त्रुटियां थीं। जब मैंने अपनी जार फ़ाइल से कक्षाओं का उपयोग करने का प्रयास किया, तो इंटेलिजेंस कुछ भी पहचान नहीं रहा था। फिर मैंने API Metadata Reference पर फॉलो-ऑन आलेख पढ़ा। यह मुझे सोच रहा है कि शायद मुझे ट्रांसफॉर्म/मेटाडाटा.एक्सएमएल फ़ाइल को संपादित करने का प्रयास करना चाहिए। पैकेज के नाम को शामिल करने के लिए संक्षेप में संपादन के बाद, विजुअल स्टूडियो को जार फ़ाइल से कक्षा के संदर्भ में (संकलन के बाद) अनुमति दी गई। फिर मैंने कक्षा से एक विधि को कॉल करने का प्रयास किया, और फिर, एक और कंपाइलर त्रुटि मिली। तो, मैं मेटाडाटा.एक्सएमएल फ़ाइल में वापस गया और प्रश्न में विधि का नाम बदलने के लिए एक प्रविष्टि जोड़ा। मैंने अपना नाम बदलकर विधि को कॉल करने के लिए संपादित किया, और विजुअल स्टूडियो संकलित जुर्माना लगाया। मैंने इस कॉल को यूनिट टेस्ट केस में एकीकृत किया, और यह पारित हो गया!
मेरे पढ़ने से, मेटाडाटा.एक्सएमएल फ़ाइल को संपादित करना आवश्यक नहीं था, लेकिन कम से कम मेरे अनुभव में यह आवश्यक लग रहा था। यह obj/release/api.xml फ़ाइल पर XPATH का उपयोग करता है (जैसा कि API Metadata Reference में बताया गया है)। उस आलेख से पैकेज & विधि नाम दोनों का नाम बदलने के लिए उदाहरण थे, इसलिए मेरे मेटाडाटा.एक्सएमएल फ़ाइल में डालने के लिए यह मेरे लिए बहुत अधिक काम नहीं था। इसके अलावा, मैंने Binding a Java Library आलेख से OsmBindingDroidExample डाउनलोड किया और अपनी मेटाडाटा.एक्सएमएल फ़ाइल भी जांच ली।
यहाँ के रूप में अच्छी संदर्भ के लिए मेरी एक्सएमएल है: मेरी नेट कोड में
<metadata>
<attr path="/api/package[@name='com.abc.def']" name="managedName">MyRenamedPackage</attr>
<attr path="/api/package[@name='com.abc.def']/class[@name='MyClass']/method[@name='originalJavaMethod']" name="managedName">RenamedDotNetMethod</attr>
</metadata>
तो, अब, मैं लिख सकते हैं:
MyRenamedPackage.MyClass.RenamedDotNetMethod(...);
आशा इस मदद करता है!
संपादित करें:
मैं Xamarin टूलकिट से अधिक परिचित एक सा मिल गया है, और इस उपयोग को आसान बना के लिए एक अद्यतन है।
जार विधियों के साथ बातचीत करने की आवश्यकता वाले कोड की भागीदारी को सीमित करने के लिए, Xamarin आपको जोड़ों फ़ोल्डर में सी # कक्षाएं बनाने की अनुमति देता है।इसलिए, मैंने एक रैपर वर्ग बनाया जो एक प्रबंधित सी # कक्षा में विधियों का खुलासा करता है जो अन्य परियोजनाएं एक्सेस कर सकती हैं। चूंकि यह सी # दृश्य स्टूडियो से कोई शिकायत नहीं है। ,
public class InovcationWrapper
{
public static void InvokeMethod(...)
{
MyRenamedPackage.MyClass.RenamedDotNetMethod(...);
}
}
फिर अपनी परियोजना कोड में
आप चाहते हैं:
यहाँ एक आवरण वर्ग मेरी पहले उदाहरण के साथ जा रहा तरह दिखाई देगा (जाहिर है आप हाथ में कार्य करने के लिए और अधिक सार्थक एक नाम चुनते थे)
InvocationWrapper.InvokeMethod(...);
यह बहुत आसान है के साथ काम करने में आता है और लाल squiggles की राशि अपने कोड में ध्यान नहीं दिया जा करने के लिए सीमित करता है: अगर आप सिर्फ अपने आवरण वर्ग फोन पूर्ण IntelliSense की है। उम्मीद है की यह मदद करेगा!
क्या आपको "एंड्रॉइड लाइब्रेरी" या सिर्फ नियमित पुस्तकालय की आवश्यकता है? आपका उदाहरण जार एंड्रॉइड लाइब्रेरी नहीं है, यह एक स्टैंडआर्ट जावा लाइब्रेरी है जिसमें संकलित कक्षा का समूह शामिल है। यहां अंतर यह है कि एंड्रॉइड लाइब्रेरी में जावा कोड न साझा करने के लिए संसाधन शामिल हैं। चूंकि आपका उदाहरण Test.java में एंड्रॉइड के बारे में कुछ भी नहीं है, इसलिए आप इसे संकलित और जार कर सकते हैं। –
* .jar से * .zip का नाम बदलने पर आप अंदर देखने के लिए किसी भी संग्रह उपकरण का उपयोग कर सकते हैं। एंड्रॉइड आवश्यकताओं के बारे में नहीं जानते लेकिन आपके गिटहब..बिन/ए 2 डीपी.जर में मेटा-आईएनएफ/मेनफैस्ट.एमएफ शामिल है जिसमें दो बाइट्स हैं, इसलिए यह एक कंपाइलर समस्या की तरह दिखता है, कृपया असली जार प्रदान करें – xmojmr