यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।
नेटिव इंटीग्रेशन 🤖🍎🖥️
न्यूट्रल Java कोड (core में) उन OS सुविधाओं तक कैसे पहुँचता है जो प्लेटफ़ॉर्म के अनुसार भिन्न होती हैं।
PlatformUtils — एब्स्ट्रैक्शन का एकल बिंदु
PlatformUtils.instance प्लेटफ़ॉर्म फ़ैसाड है। हर launcher अपना कार्यान्वयन इंस्टॉल करता है
(वेब PlatformUtilsWeb इंस्टॉल करता है)। मुख्य मेथड:
IWebView wv = PlatformUtils.instance.createWebView(); // जहाँ webview नहीं है वहाँ null (web)
PlatformUtils.instance.view(url); // बाहरी URL खोलता है
PlatformUtils.instance.dial(numero); // डायल करता है
नेटिव लाइब्रेरी crossfly-lib
आरंभ में Main.create() के भीतर SharedLibraryLoader.load("crossfly-lib") द्वारा लोड की जाती है —
सभी लक्ष्यों पर, WebGL को छोड़कर:
if (Gdx.app.getType() != Application.ApplicationType.WebGL)
new SharedLibraryLoader().load("crossfly-lib");
इसलिए, जो कुछ भी इस पर निर्भर है (उदा.: JNI के ज़रिए NativeImage) वेब पर मौजूद नहीं है — वहाँ
शुद्ध Java कार्यान्वयन (JavaImageOps) या stub लागू होता है।
“fallback के साथ नेटिव सुविधा” पैटर्न
ऐसी सुविधा का उपयोग करने से पहले हमेशा जाँचें जो मौजूद नहीं हो सकती:
if (PlatformUtils.instance.createWebView() != null) {
WebContainer c = new WebContainer(); // Android/iOS/Desktop
painel.add(LAY_FILL, c);
c.show(url);
} else {
PlatformUtils.instance.view(url); // Web: बाहर से खोलता है
}
यही बात कैमरा/मानचित्र के null रिटर्न और Device.platform पर भी लागू होती है:
if (Device.platform.isDesktop()) { /* desktop पथ */ }
अपना स्वयं का नेटिव कार्यान्वयन लिखना
ठोस सेवाएँ (webview, GPS, आदि) core के बाहर, हर launcher में रहती हैं। किसी नई सुविधा के लिए,
इंटरफ़ेस core में परिभाषित करें और उसे हर launcher के लिए लागू करें, आरंभ में उसे PlatformUtils/सेवा
फ़ील्ड में इंस्टॉल करें। इमेज एब्स्ट्रैक्शन इसी मॉडल का अनुसरण करता है: ImageOps → JavaImageOps (JVM) बनाम
NativeImage (JNI)।
सर्वोत्तम अभ्यास
- कभी यह न मानें कि कोई डिवाइस सुविधा मौजूद है —
!= null/Device.platformजाँचें। - OS-विशिष्ट कोड को launcher में रखें,
coreमें नहीं।
सामान्य त्रुटियाँ
- fallback के बिना कोई नेटिव सुविधा कॉल करना (वेब पर टूट जाता है)।
- वेब पर
crossfly-lib/JNI की अपेक्षा करना (WebGL में लोड नहीं होती)।