2016-06-03 14 views
12

मैं एक जावा इंटरफ़ेस MyService कहा जाता है, जो एक विधि है के साथ एक .jar फ़ाइल है:Xamarin बाध्यकारी .jar - 'बिटमैप पाया नहीं जा सका'

boolean printBitmapObject(android.graphics.Bitmap bitmap, byte[] result); 

मैं में सी # में इस .jar फ़ाइल का उपयोग करना चाहते हैं विजुअल स्टूडियो 2015 में मेरी एंड्रॉइड ज़ैमरिन प्रोजेक्ट। मैंने निम्नलिखित चरणों का पालन किया:

  1. मैंने एक नई लाइब्रेरी बाइंडिंग प्रोजेक्ट बनाई है।
  2. मैंने फ़ाइल JarsBuildAction संपत्ति InputJar पर सेट की गई नई परियोजना की निर्देशिका में डाल दी है।
  3. परियोजना सफलतापूर्वक बनाई गई थी।
  4. मैंने लाइब्रेरी बाइंडिंग प्रोजेक्ट को मेरे मुख्य प्रोजेक्ट में संदर्भ जोड़ा।

दुर्भाग्य से, मैं अपने मुख्य परियोजना अब निर्माण नहीं कर सकते, स्वत: जनरेट सी # कोड में कोई त्रुटि है, क्योंकि वहाँ: संदेश "The type or namespace name 'Bitmap' could not be found (are you missing a using directive or an assembly reference?)" साथ

public interface IMyService : global::Android.OS.IInterface 
    { 
     bool PrintBitmapObject (Bitmap bmp, byte[] result); //"Bitmap" is red underlined 
    } 

एक ऑटो-जेनरेटेड अमूर्त वर्ग IMyServiceStub भी है, जो Bitmap को भी पहचान नहीं पाता है। इसके अलावा, यह पता नहीं है कुछ स्वत: जनरेट BitmapStub या तो:

public abstract class IMyServiceStub : global::Android.OS.Binder, global::Android.OS.IInterface, IMyService 
{ 
    ... 
    protected override bool OnTransact (int code, global::Android.OS.Parcel data, global::Android.OS.Parcel reply, int flags) 
    { 
     ... 
     case TransactionPrintBitmapObject: { 
       data.EnforceInterface (descriptor); 
       Bitmap arg0 = default (Bitmap); //Bitmap red underlined 
       arg0 = BitmapStub.AsInterface (data.ReadStrongBinder()); //BitmapStub red underlined 
       byte [] arg1 = default (byte []); 
       var result = this.PrintBitmapObject (arg0, arg1); 
       reply.WriteNoException(); 
       reply.WriteInt (result ? 1 : 0); 
       data.WriteByteArray (arg1); 
       return true; 
       } 
     ... 
    } 

} 

मैं स्वत: जनरेट फाइल करने के लिए using Bitmap = Android.Graphics.Bitmap जोड़ने की कोशिश की है, लेकिन यह मदद नहीं करता है, क्योंकि BitmapStub अनजान बनी हुई है और मेरे परिवर्तन के दौरान ओवरराइट कर रहे हैं अगला निर्माण।

क्या इस मुद्दे को ठीक करने के लिए मैं कुछ भी कर सकता हूं? या यह Xamarin में एक ज्ञात बग है (मैं संस्करण 4.0 का उपयोग करें)?

+0

क्या आप .jar साझा कर सकते हैं ताकि मैं आपकी मदद करने की कोशिश कर सकूं? – jzeferino

+0

@jzeferino मैं दुर्भाग्य से नहीं कर सकता, मैं एनडीए तोड़ूंगा ... – vojta

उत्तर

1

मैंने थोड़ी देर में ज़ैमरिन में नहीं खेला है, हालांकि एंड्रॉइड.ग्राफिक्स.बिटमैप नेमस्पेस जावा भाषा से संबंधित है, सी # नहीं। तो जेनरेट सी # कोड उस नामस्थान के बारे में कुछ भी नहीं जानता।

इसलिए, मैं using System.Drawing; के बजाय using Bitmap = Android.Graphics.Bitmap

आप मैन्युअल रूप से सी # परियोजना के लिए एक संदर्भ के रूप में है कि DLL जोड़ने के लिए है, तो संकलक System.Drawing नाम स्थान को नहीं पहचानता है हो सकता है जोड़ने की कोशिश करेंगे।

मुझे बताएं कि यह कैसे काम करता है।

+0

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

+0

सिस्टम। ड्रॉइंग केवल विंडोज प्लेटफार्मों के लिए विशिष्ट है !!! –

+0

हाँ मुझे पता है ...लेकिन चूंकि निर्माण समय पर त्रुटि उत्पन्न होती है, इसलिए यह विंडोज़ प्रकार की तलाश में है, जावा प्रकार नहीं (जब तक कि विजुअल स्टूडियो जावा स्रोत को संकलित नहीं कर रहा है और न केवल इसे उत्पन्न करता है, जो मुझे खबर होगी)। – HBomb

2

जार बाध्यकारी एंड्रॉइड लाइब्रेरी प्रोजेक्ट्स के साथ काम नहीं करेगा, आपको .aar फ़ाइल शामिल करने की आवश्यकता है। जार फ़ाइलें जार में एंड्रॉइड विशिष्ट पुस्तकालयों का संदर्भ नहीं देती हैं, लेकिन .aar फ़ाइल सभी आवश्यक एंड्रॉइड संबंधित पुस्तकालयों का सही संदर्भ देता है।

+1

धन्यवाद, यह दिलचस्प है ... क्या आप कुछ विवरण जोड़ सकते हैं? मेरे पास यह तीसरी पार्टी जार फ़ाइल है जो जावा में लिखे गए एंड्रॉइड ऐप में बहुत अच्छा काम करती है और एंड्रॉइड स्टूडियो में बनाई गई है। हालांकि, मेरे पास कोई आरा फ़ाइल नहीं है। मैं इसे कैसे प्राप्त कर सकता हूँ? विजुअल स्टूडियो में मेरे सी # एक्समारिन एंड्रॉइड ऐप से जार फ़ाइल कार्यक्षमता का उपयोग करने में सक्षम होने के लिए मुझे किन कदमों का पालन करना चाहिए? – vojta

+0

आपको 'build \ outputs \ aar' फ़ोल्डर में aar फ़ाइल मिल जाएगी। कृपया इसका पालन करें, https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/binding-an-aar/ –

+0

लिंक्ड मैनुअल बताता है कि एक .aar फ़ाइल को कैसे बांधना है। हालांकि, मेरे पास कोई .aar फ़ाइल नहीं है और मेरे पास जार फ़ाइल के लिए स्रोत कोड नहीं है, इसलिए मैं इसे स्वयं नहीं बना सकता। मेरी जार फ़ाइल एक थर्ड-पार्टी लाइब्रेरी है। क्या मैं जार को किसी भी तरह से एक आड़ में बदल सकता हूं? – vojta

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