
प्रविष्टि
सभी को नमस्कार। कुछ समय पहले, मैंने उसी समय एंड्रॉइड और आईओएस के लिए अपना प्रोजेक्ट बनाने का फैसला किया। स्वाभाविक रूप से, प्रौद्योगिकी की पसंद के बारे में सवाल उठे। कुछ हफ़्ते में मैंने लोकप्रिय ढेर को देखा और कोटलिन / मूल को चुना। चूंकि मैं एक एंड्रॉइड डेवलपर हूं, इसलिए मैं लंबे समय से कोटलिन से परिचित था, लेकिन मुझे स्विफ्ट के साथ बहुत अनुभव नहीं था और दोनों प्लेटफार्मों में अधिकांश कोड को प्राप्त करना चाहता था। इसलिए, सवाल तुरंत उठा, लेकिन iOS के लिए UI कैसे लिखना है। बाजार पर एक त्वरित नज़र ने सुझाव दिया कि फ़्लटर है, जो आपको दो प्लेटफार्मों के लिए एक साथ यूआई लिखने की अनुमति देता है। दरअसल, यह कहानी शुरू हुई।
यह लेख फ़्लटर के यूआई के रूप में बिल्ड अनुभव और कोर लॉजिक के लिए कोटलिन का वर्णन करता है। 
महत्वपूर्ण: बिल्ली के नीचे परियोजना को इकट्ठा करने के तरीके पर बहुत सारे चित्र और निर्देश हैं
सामग्री की तालिका
भाग 1
कोटलिन पर एक साझा पुस्तकालय बनाना
- कोटलिन मोबाइल साझा पुस्तकालय चुनें
 
  
- आगे
 
  
- हमारे काम करने वाले फ़ोल्डर को निर्दिष्ट करें, यहां मैंने प्रोजेक्ट के लिए एक अलग फ़ोल्डर बनाया है। चूंकि मेरे पास 4 अलग-अलग परियोजनाएं होंगी और उन्हें एक स्थान पर रखना अधिक सुविधाजनक होगा
 
  
- यह sdk.dirमेंsdk.dirको निर्दिष्ट करने के लिए बनी हुई है। परियोजनाएं और परियोजना का निर्माण शुरू होता है, मेरे पास पथ/Users/vlad/Library/Android/sdk
 
  
- प्रोजेक्ट संरचना, sample habr.example
samplehabr.example
 
  
- यह प्रकाशन शुरू करने, wrapperकॉल करने का समय है। उसके बाद, .gradlew.gradlewहमारी परियोजना में दिखाई देगी और टर्मिनल से इसके साथ काम करना संभव होगा
 
  
- टर्मिनल से चलाएँ ./gradlew publishToMavenLocal
 
  
- उसके बाद, स्थानीय मावेन रिपॉजिटरी में, हमारे पास 4 फ़ोल्डर होंगे जिसमें हमारे पुस्तकालय झूठ बोलेंगे
 
  
भाग २
Android एप्लिकेशन बनाना
Android प्रोजेक्ट बनाएं
- लेखन के समय, परियोजना एक "टूटी" निर्भरता के साथ उत्पन्न हो रही है, इसलिए हम इसे jre7के अंत मेंjre7देते हैं, हमेंkoltin-stdlibमिलता है, जिसके बाद परियोजना का निर्माण शुरू होता है
 
  
- build.gradleखोलें और- repositoriesसेक्शन में- mavenLocalजोड़ें। महत्वपूर्ण!- repositoriesसेक्शन- allprojectsअंदर होना चाहिए और- buildScriptमें नहीं
 
  
- अब हम अपनी लाइब्रेरी को एक निर्भरता के रूप में जोड़ सकते हैं
 implementation 'habr.example:commonLibrary-jvm:0.0.1'
 
  
- हम activity_main.xmlखोलतेactivity_main.xmlऔर हमmain_activity_textidmain_activity_textमें निर्दिष्ट करते हैं
 
  
- MainActivity.ktबस इस- MainActivity.ktमें टेक्स्ट सेट करें
 
  
- महान, इस बिंदु पर हमारे पास एक एंड्रॉइड एप्लिकेशन है जो हमारी लाइब्रेरी से hello()फ़ंक्शन का उपयोग कर सकता है
भाग 3
एक iOS प्रोजेक्ट बनाएं
- एकल दृश्य ऐप चुनना
 
  
- मूल जानकारी भरें और फ़ोल्डर का चयन करें। हमारे अन्य प्रोजेक्ट्स के लिए फ़ोल्डर रूट चुनना महत्वपूर्ण है, क्योंकि इसमें Xcode प्रोजेक्ट के नाम के साथ एक सबफ़ोल्डर बनाएगा
 
  
 
  
- सबसे पहले, CocoaPodsजोड़ें। ऐसा करने के लिए, प्रोजेक्ट फ़ोल्डर मेंpod initचलाएं, प्रोजेक्ट कोXcodeमें बंद करेंXcodeऔरpod installरन करें। हम देखते हैं कि स्थापना सफलतापूर्वक पूर्ण हुई
 
  
- महत्वपूर्ण! CocoaPods/PodsCocoaPodsको/Podsफ़ोल्डर जोड़ने की अनुशंसा नहीं करता है, लेकिन मैंने इसे वैसे भी किया।flutterको जोड़ने के बाद से, हम प्रत्येकbuildलिए निर्भरता को फिर से कॉन्फ़िगर करेंगे। अब तक, मुझे यह समाधान पसंद है
- फ़ाइल Awesome App.xcworkspaceमाध्यम से परियोजना खोलें
 
  
- हम टर्मिनल को खोलते हैं, इसमें हम अपने commonLibraryफोल्डर में जाते हैं और रन करते हैं./gradlew linkDebugFrameworkIos। उसके बाद,iOSFrameworkहमारेbuildफ़ोल्डर में दिखाई देता हैiOSFramework
 
  
- लक्ष्य चुनें
 
  
- और इस लक्ष्य के लिए हम बाइनरी को जोड़ते हैं
 
  
- अन्य जोड़ें चुनें
 
  
- चरण 6 में प्राप्त frameworkलिए पथ निर्दिष्ट करें (commonLibrary.framework)
 
  
 
  
- अब परियोजना में इस frameworkको प्रदर्शित किया जाना चाहिए
 
  
- Build Settingsजाएं और- Enable Bitcodeअक्षम- Enable Bitcode
 
  
- अब आपको यह निर्दिष्ट करने की आवश्यकता है कि हमारे frameworkको देखने के लिए,Framework Search Pathखोलें
 
  
- पथ निर्दिष्ट करें "${PODS_ROOT}/../../commonLibrary"।recursiveका चयन करना सुनिश्चित करें। बेशक, आप इसके बिना कर सकते हैं, यदि आप पथ को अधिक सटीक रूप से कॉन्फ़िगर करते हैं। लेकिन, चूंकि यह केवल परियोजना की शुरुआत है, अब हमारे लिए यह सुनिश्चित करना महत्वपूर्ण है कि यह पूरा गुच्छा काम करेगा। और हम रास्ता बदल सकते हैं और फिर
 
  
- हमें यह सुनिश्चित करने की आवश्यकता है कि Xcodeमें प्रत्येकbuildसाथXcodeहमाराframeworkgradleका उपयोग करकेframework।Build Phasesखोलें
 
  
- एक नया Script Phaseजोड़ें
 
  
- स्क्रिप्ट कोड जोड़ें।
 
  cd "${PODS_ROOT}/../../commonLibrary" echo $(pwd) ./gradlew linkIos
 
 यहाँ हम बस अपनी लाइब्रेरी के प्रोजेक्ट फोल्डर में जाते हैं और रन करते हैं./gradlew linkIos।echo $(pwd)कॉल केवल कंसोल में दिखाने के लिए आवश्यक है जो हमें विशेष फ़ोल्डर में मिला है
 
  
- हम अपने build phaseकोtarget dependenciesठीक बाद, शीर्ष पर धकेल देते हैं
 
  
- अब ViewControllerखोलें और लाइब्रेरी से हमारे फ़ंक्शन में कॉल जोड़ें
 
  
- हम अपना प्रोजेक्ट लॉन्च करते हैं और देखते हैं
 
  
महान, इसका मतलब है कि हमने कोटलिन लाइब्रेरी को iOS प्रोजेक्ट से सही तरीके से जोड़ा है।
हमारे सभी अनुप्रयोगों में UI लिखने के लिए एक रूपरेखा के रूप में, स्पंदन जोड़ना बाकी है
भाग ४
एंड्रॉइड ऐप में स्पंदन जोड़ना
तब 
गीथूब के एक लेख ने मेरी बहुत मदद की
- रूट फ़ोल्डर पर जाएं जहां हमारी सभी परियोजनाएं स्थित हैं और flutter create -t module flutter_ui
 
  
 
- settings.gradleखोलें- settings.gradleऔर हमारे फ़्लटर-मॉड्यूल को एक सबप्रोजेक्ट के रूप में सक्षम करें
 
  
 
- बिल्ड.ग्रेड फ़ाइल खोलें और हमारे प्रोजेक्ट को जोड़ें
 
  
 
- MainActivity.ktको- FlutterActivity
 
  
 
- App.ktजोड़ें, जिसमें हम एप्लिकेशन स्टार्टअप पर- App.ktको इनिशियलाइज़ करेंगे
 
  
 
- प्रकटन को बदलें और कहें कि अब हमारे पास Applicationलिए एक वर्ग है
 
  
 
- java8जोड़ना सुनिश्चित करें, इसके बिना स्पंदन शुरू नहीं होगा
 
  
 
- हम JVM लॉग से हैलो में UI देखते हैं, जिसका अर्थ है कि हमने यूआई को फ़्लटर पर और कोटलिन / नेटिव पर मुख्य पुस्तकालय में रखा है
 
  
 
  
 
- MainActivity.ktएक विधि जोड़ें, जिसे हम- MainActivity.ktसे कॉल करेंगे। यहाँ, फ़्लटर से एक घटना पर, हम कोटलिन-लाइब्रेरी से अपना- hello()लौटाते हैं
 
  
 
- और main.dartकोड जोड़ेंiOS/Android-एप्लिकेशन केiOS/Android-में विधि को कॉल करेगा
 
  
 
- हमें मिलता है
  
 
भाग 5
IOS ऐप में स्पंदन जोड़ना
- हमारे Podfileअपडेट करना
  flutter_application_path = File.expand_path("../flutter_ui", File.dirname(path)) eval(File.read( File.join( flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')), binding)
 
  
 
  
- यह महत्वपूर्ण है । framework search pathsकी पहली पंक्ति में$(inherited)जोड़ें। यह जांचना सुनिश्चित करें कि आपकेframework search pathsखाली नहींframework search paths
 
  
 
 जब आपsome/path/my_flutter/pubspec.yamlमें निर्भरताएँsome/path/my_flutter/pubspec.yaml, तो आपकोsome/path/my_flutterमें निर्भरता को अपडेट करने के लिएsome/path/my_flutterसेflutter packages getहोने वालेsome/path/my_flutterflutter packages getचलाने की आवश्यकताpodhelper.rb। उसके बाद,some/path/MyAppसेpod installरन करें
- केवल स्पंदन के लिए 1 और Build Phaseजोड़ें। ऊपर हमने जोScript phaseभाग 3 में जोड़ा है
 
  "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed
 
  
- हमारे AppDelegateकोFlutterAppDelegateAppDelegate
 
  
- ViewControllerअपडेट करें
 
  
- एक NavigatorControllerमें हमारेViewControllerलपेटें
 
    
- अब आवेदन शुरू होता है। लेकिन, अभी के लिए, हमारे पास पुस्तकालय और स्पंदन के बीच कोई संबंध नहीं है  
- इस लिंक को FlutterMethodChannelका उपयोग करकेFlutterMethodChannel
 
  
 
- महान, अब iOS एप्लिकेशन मुख्य तर्क के लिए UIऔरkotlinलिएflutterका उपयोग करता है।
 
  
 
निष्कर्ष 
यहाँ क्या कहना महत्वपूर्ण है: मैं यह ढोंग नहीं करता कि आपने कुछ नया या अनोखा सीखा है। मैंने सिर्फ अपने अनुभव साझा किए, क्योंकि यह सब एक साथ करने के लिए, मैंने लगभग 4 कार्य दिवस बिताए। और मुझे प्रोजेक्ट कोड के उदाहरण नहीं मिले जो कोटलिन / मूल और स्पंदन दोनों का उपयोग करता है
अंतिम परियोजनाएं
- परियोजना समूह
- स्पंदन-ui
- ios
- एंड्रॉयड
- आम-पुस्तकालय
उन लिंक्स की सूची, जिन्होंने मेरी मदद की, लेकिन अभी नहीं
- खुद ही झड़ जाता है
- देशी कोड और UI फ़्लटर प्लेटफ़ॉर्म-चैनल के बीच संबंध
- मौजूदा github ऐप में स्पंदन जोड़ें
- कोटलिन नेटिव देशी-अवलोकन