java - जंग कोड के लिए जावा बाइंडिंग को स्वचालित कैसे करें?




jni rust (2)

आखिरकार मैंने बाइंडिंग सृजन को स्वचालित करने के लिए ऐसी परियोजना (गिटब रिपॉजिटरी लिंक) बनाई।

मैं जावा / एंड्रॉइड से जंग कोड को कॉल करना चाहता हूं, और मुझे ऐसा करने के लिए 3 वेरिएंट मिले हैं:

  1. JNI
  2. JNA
  3. जेएनआर एफएफआई

जेएनआई बहुत अच्छा और शक्तिशाली लग रहा है, लेकिन आपको हाथ से बहुत ज्यादा कोड लिखना होगा

जेएनएन , अगर यह ध्यान में नहीं ले रहा है कि यह मेरी मशीन पर दुर्घटनाग्रस्त है , तो जवाबी हाथ में जंग संरचना डेटा प्रकार का विवरण, जेएनआर एफएफआई के साथ ही समस्या लिखना आवश्यक है।

तो मुझे आश्चर्य है कि मैट्रिक्स या एक कंपाइलर प्लगइन के साथ traits और struct के लिए जेएनआई कोड कितना मुश्किल होगा? इस संकलक को कंक्रीट संरचना के लिए गुणों के अनुरूप होना चाहिए, और संरचना भी

#[JNI]
struct Foo {
    a: i32,
}

trait Boo {
    fn f(&self, b: f64) -> f64;
}
#[JNI]
impl Boo for Foo {
    fn f(&self, b: f64) -> f64 {
        0f64
    }
}

और native कार्यों के साथ संरचना और जावा वर्गों के लिए जावा कक्षाएं बनायें, साथ ही pub no_mangle फंक्शंस तैयार करें, जो गुण कार्यों को लपेटें।


जेएनए के लिए अपनी संरचना मैपिंग स्वत: उत्पन्न करने के लिए आप jnererator का उपयोग कर सकते हैं।

वैकल्पिक रूप से, यदि आप जेएनआई (और कुछ और देशी कोड संकलित) का उपयोग करना चाहते हैं तो आपको SWIG के साथ जाना चाहिए।





jna