Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रणाली >> Android

मल्टी-लाइब्रेरी एंड्रॉइड प्रोजेक्ट्स में महारत हासिल करना:स्थानीय और दूरस्थ विकास के लिए सर्वोत्तम अभ्यास

मल्टी-लाइब्रेरी एंड्रॉइड प्रोजेक्ट्स में महारत हासिल करना:स्थानीय और दूरस्थ विकास के लिए सर्वोत्तम अभ्यास <पी> इस लेख में, हम एंड्रॉइड में मल्टी-लाइब्रेरी परियोजनाओं के बारे में बात करने जा रहे हैं। यह कोई सामान्य बात नहीं है, लेकिन सामान्य से कुछ अलग भी नहीं है। <पी> हो सकता है कि आपने अपने कार्यक्षेत्र में बहु-पुस्तकालय परियोजनाएं देखी हों, या आप बेहतर संरचना और संगठन के लिए अपनी लाइब्रेरी को उप-मॉड्यूल में परिवर्तित करने पर विचार कर रहे हों। चाहे कोई भी मामला हो, आपको गोता लगाने से पहले अच्छी तरह से पता होना चाहिए कि आपके सामने क्या है।

<पी> एंड्रॉइड में अपनी खुद की लाइब्रेरी लिखना अच्छा है। आपको कुछ कोड लिखने का मौका मिलता है जो अन्य डेवलपर्स (या यहां तक ​​कि स्वयं) की मदद कर सकता है। <पी> चूँकि पुस्तकालय अपने आप में एक स्टैंडअलोन प्रोजेक्ट नहीं हो सकते हैं, इसलिए उन्हें आमतौर पर हमेशा एक एप्लिकेशन के साथ एक प्रोजेक्ट में जोड़ा जाता है। यह लाइब्रेरी को विकसित करने की एक सरल प्रक्रिया की अनुमति देता है जहां आप एक सुविधा जोड़ते हैं/बग को ठीक करते हैं और फिर आप प्रोजेक्ट में मौजूद एप्लिकेशन के साथ सीधे इसका परीक्षण कर सकते हैं। इस प्रकार, यह अनुकरण करना (स्थानीय तरीके से) कि एक डेवलपर आपकी लाइब्रेरी को कैसे एकीकृत करेगा।

<पी> लेकिन, क्या होगा यदि आपकी लाइब्रेरी आपके द्वारा विकसित की जा रही किसी अन्य लाइब्रेरी पर निर्भर हो?

<पी> यदि आप इसके बारे में नहीं जानते हैं, तो आपको पता होना चाहिए कि एक पुस्तकालय (एआर पढ़ें) में कोई अन्य स्थानीय पुस्तकालय नहीं हो सकता है। यह दूरस्थ रूप से पुस्तकालयों पर (निर्भरता के माध्यम से) भरोसा कर सकता है, लेकिन किसी स्थानीय चीज़ पर नहीं। <पी> यह एंड्रॉइड में समर्थित नहीं है, और हालांकि कुछ समाधान वर्षों (FatAar) के दौरान सामने आए, लेकिन इनसे हमेशा समस्या का समाधान नहीं हुआ और वे अद्यतित नहीं हैं। यहां तक ​​कि इस सुविधा का अनुरोध करने वाला एक Google इश्यू ट्रैकर भी है जो काफी समय से खुला है और समुदाय से काफी ध्यान आकर्षित कर रहा है। लेकिन आइए पहचानें कि हम कौन सी दीवारें तोड़ सकते हैं और कौन सी नहीं।

<पी> कल्पना कीजिए कि आपका प्रोजेक्ट पदानुक्रम इस तरह दिखता है:

-- App
|
 -- OuterLib
 |
 --- InnerLib
<पी> तो, चूंकि इनरलिब आपके मूल प्रोजेक्ट का हिस्सा नहीं हो सकता है, यह कहां रह सकता है? और यह भी कि इनरलिब के अंदर सुविधाओं को विकसित करते समय आप स्थानीय स्तर पर कैसे काम कर पाएंगे?

<पी> हम इस लेख में इन सवालों के जवाब देने जा रहे हैं।

गिट सबमॉड्यूल

<पी> अधिकांश तकनीकी समस्याओं के लिए, हमेशा केवल एक ही समाधान नहीं होता है। आमतौर पर, और भी हैं, लेकिन प्रत्येक समाधान की अपनी कमियां हैं। यह सब इस बात का सवाल है कि दिन के अंत में आप किन कमियों के साथ रहने में अधिक सहज महसूस करते हैं।

<पी> हमारे पहले प्रश्न का उत्तर देने के लिए, इनरलिब कहाँ रह सकता है, हमारे पास कई विकल्प हैं:

  1. इनरलिब को हमारे मूल प्रोजेक्ट का एक सबमॉड्यूल बनाएं
  2. इनरलिब को अपनी स्वयं की एक दूरस्थ निर्भरता बनाएं
<पी> यदि आप Git में सबमॉड्यूल के बारे में नहीं जानते हैं, तो Git का दस्तावेज़ीकरण उनसे परिचित होने के लिए एक अच्छी जगह है। इसे उद्धृत करते हुए (पहला पैराग्राफ):

<पी> अक्सर ऐसा होता है कि एक प्रोजेक्ट पर काम करते समय आपको उसके भीतर से दूसरे प्रोजेक्ट का उपयोग करने की आवश्यकता होती है। 👉 शायद यह एक लाइब्रेरी है जिसे किसी तीसरे पक्ष ने विकसित किया है या जिसे आप अलग से विकसित कर रहे हैं और कई मूल परियोजनाओं में उपयोग कर रहे हैं। 👈 इन परिदृश्यों में एक सामान्य समस्या उत्पन्न होती है:आप दो परियोजनाओं को अलग मानने में सक्षम होना चाहते हैं, फिर भी एक को दूसरे के भीतर से उपयोग करने में सक्षम होना चाहते हैं।

<पी> यह अनुच्छेद हमें दिखाता है कि यह बिल्कुल हमारा उपयोग मामला है। सबमॉड्यूल का उपयोग करने के अपने फायदे हैं। आपका सारा कोड एक ही स्थान पर है, प्रबंधित करना आसान है, और स्थानीय स्तर पर विकसित करना आसान है। <पी> लेकिन सबमॉड्यूल में कुछ कमजोरियां हैं। एक तथ्य यह है कि आपको हमेशा इस बात की जानकारी होनी चाहिए कि आपका सबमॉड्यूल किस शाखा की ओर इशारा कर रहा है। एक ऐसे परिदृश्य की कल्पना करें जहां आप अपने मुख्य भंडार में रिलीज शाखा पर हैं और आपका उप-मॉड्यूल एक फीचर शाखा पर है। यदि आप ध्यान नहीं देते हैं, तो आप अपने कोड का एक ऐसा संस्करण जारी करते हैं जो उत्पादन के लिए तैयार नहीं है। उफ़.

<पी> अब डेवलपर्स की एक टीम के भीतर इस बारे में सोचें। एक लापरवाही भरी गलती महंगी पड़ सकती है।

<पी> यदि पहला विकल्प आपके लिए समस्याग्रस्त लगता है, तो अपनी लाइब्रेरी को किसी अन्य रिपॉजिटरी में होस्ट करना आपकी दूसरी पसंद है। रिपॉजिटरी स्थापित करना बहुत आसान है, लेकिन अब आप स्थानीय स्तर पर कैसे काम करते हैं?

स्थानीय रूप से कार्य करना

<पी> अब जब हमने अपना प्रोजेक्ट ठीक से स्थापित कर लिया है, तो संभवतः हमारी आउटरलिब बिल्ड.ग्रेडल फ़ाइल में इसके समान एक लाइन होगी:

dependencies {
 implementation 'url_to_remote_inner_lib_repository'
}
<पी> हम विकास चक्र को कैसे कुशल और काम में आसान बना सकते हैं? यदि हम इनरलिब में कुछ सुविधा विकसित करते हैं, तो हम आउटरलिब में चीजों का परीक्षण कैसे करते हैं? या हमारे आवेदन में?

<पी> एक समाधान जो सामने आ सकता है वह यह है कि हमारे इनरलिब को हमारे आउटरलिब प्रोजेक्ट में स्थानीय रूप से आयात किया जाए, जबकि हमारे आउटरलिब प्रोजेक्ट में इनरलिब .gitignored हो। आप एंड्रॉइड स्टूडियो में बाईं ओर के मेनू में प्रोजेक्ट के नाम पर राइट क्लिक करके और न्यू → मॉड्यूल पर जाकर आसानी से ऐसा कर सकते हैं।

<पी> मल्टी-लाइब्रेरी एंड्रॉइड प्रोजेक्ट्स में महारत हासिल करना:स्थानीय और दूरस्थ विकास के लिए सर्वोत्तम अभ्यास मॉड्यूल कैसे आयात करें (चरण 1) <पी> फिर खुलने वाली विंडो में, आप नीचे बाईं ओर आयात विकल्प चुन सकते हैं:

<पी> मल्टी-लाइब्रेरी एंड्रॉइड प्रोजेक्ट्स में महारत हासिल करना:स्थानीय और दूरस्थ विकास के लिए सर्वोत्तम अभ्यास मॉड्यूल कैसे आयात करें (चरण 2) <पी> यह अब तक आसान और सरल लगता है, लेकिन इसमें दिक्कत क्या है?

<पी> हर बार जब आप इनरलिब से संबंधित फ़ाइल को संशोधित करते हैं, तो परिवर्तन इनरलिब के अंदर दिखाई नहीं देंगे क्योंकि इसे अनदेखा कर दिया गया है। इसलिए, आप जो भी परिवर्तन करना चाहते हैं वह इनरलिब के अंदर होना चाहिए और फिर परिवर्तनों को देखने के लिए आपको इसे आउटरलिब के अंदर फिर से आयात करना होगा।

<पी> ये सही नहीं लगता. ऐसा करने का कोई बेहतर तरीका होना चाहिए।

<पी> हमारी settings.gradle में बस कुछ पंक्तियों के साथ फ़ाइल, जब हम इनरलिब में परिवर्तन करते हैं तो हम यह सुनिश्चित कर सकते हैं कि हमारी फ़ाइलें सिंक में रहें। <पी> जब हमने इनरलिब को अपने प्रोजेक्ट में आयात किया, तो एंड्रॉइड स्टूडियो ने इनरलिब की एक प्रति बनाई और उसे कैश किया। इसीलिए हमें लाइब्रेरी में किए गए प्रत्येक परिवर्तन के लिए उसे पुनः आयात करने की आवश्यकता पड़ी। हम एंड्रॉइड स्टूडियो को बता सकते हैं कि projectDir का उपयोग करके फ़ाइलों को कहां संदर्भित किया जाए विशेषता. <पी> हमारी सेटिंग्स.ग्रेडल कुछ इस तरह दिख सकती है:

include ':outerLib', ':innerLib', ':app'
<पी> अपने इनरलिब को स्थानीय रूप से संदर्भित करने के लिए, हमें सेटिंग्स.ग्रेडल को इसमें बदलना होगा:

include ':outerLib', ':innerLib', ':app'
project('innerLib').projectDir = new File('PATH_TO_INNER_LIB')
<पी> इस दृष्टिकोण का उपयोग करते हुए, हमारी इनरलिब फाइलें हमारी कार्यशील निर्देशिका से जुड़ी होंगी, इसलिए हमारे द्वारा किया गया प्रत्येक परिवर्तन तुरंत प्रतिबिंबित होगा। <पी> लेकिन, इनरलिब के दूरस्थ संस्करण के साथ आउटरलिब पर स्थानीय रूप से काम करते समय हम लचीलापन चाहेंगे। हमने ऊपर सेटिंग्स.ग्रेडल फ़ाइल के अंदर जो लिखा है, वह हमें केवल स्थानीय रूप से काम करने की अनुमति देगा और निश्चित रूप से हम ऐसा नहीं करना चाहते हैं।

मेवेन लोकल

<पी> यदि उपरोक्त दृष्टिकोण आपके लिए सही नहीं बैठता है, तो आप कोई दूसरा तरीका अपना सकते हैं। जैसे आप अपनी लाइब्रेरी को मावेन के साथ सार्वजनिक रूप से प्रकाशित करेंगे, आप वही काम स्थानीय स्तर पर मावेन लोकल के साथ भी कर सकते हैं। मेवेन लोकल रिपॉजिटरी का एक सेट है जो आपकी मशीन पर स्थानीय रूप से बैठता है।

<पी> आपकी मशीन के ऑपरेटिंग सिस्टम के आधार पर MavenLocal के लिए पथ नीचे दिए गए हैं:

  • Mac → /Users/YOUR_USERNAME/.m2
  • लिनक्स → /home/YOUR_USERNAME/.m2
  • Windows → C:\Users\YOUR_USERNAME.m2
<पी> संक्षेप में आप अपनी लाइब्रेरी को स्थानीय रूप से प्रकाशित कर सकते हैं और फिर इसे अपने प्रोजेक्ट में लिंक कर सकते हैं। इस तरह से, हम अपने प्रोजेक्ट को इनरलिब से लिंक कर सकते हैं। <पी> अपने प्रोजेक्ट में इस कॉन्फ़िगरेशन को अनुमति देने के लिए, हमें निम्नलिखित कार्य करने होंगे:

  1. mavenLocal() जोड़ें हमारे रिपॉजिटरी क्लॉज के अंदर एक रिपॉजिटरी के रूप में। यह हमारे प्रोजेक्ट को स्थानीय स्तर पर रिपॉजिटरी खोजने की क्षमता प्रदान करने के लिए है
buildscript {
 repositories {
 mavenLocal()
 }
}
...
allprojects { 
 repositories { 
 mavenLocal() 
 }
}
  1. <पी> हमारे इनरलिब को संदर्भित करने के लिए हमारी निर्भरता खंड के अंदर हमारी कार्यान्वयन पंक्ति को बदलें जैसे कि हम इसे दूरस्थ रूप से संदर्भित कर रहे हों

  2. <पी> इनरलिब को स्थानीय रूप से प्रकाशित करने के लिए, हम पब्लिशिंगलोकली.ग्रेडल नामक एक फ़ाइल बनाएंगे जिसमें निम्नलिखित शामिल होंगे:

apply plugin: 'maven-publish' 
project.afterEvaluate {
 publishing { 
 publications {
 library(MavenPublication) { 
 setGroupId groupId //your library package
 setArtifactId artifactId 
 version versionName //I.E. 1.0
 artifact bundleDebugAar
 pom.withXml { 
 def dependenciesNode = asNode().appendNode('dependencies')
 def dependencyNode = dependenciesNode.appendNode('dependency')
 dependencyNode.appendNode('groupId', 'your_group_id')
 dependencyNode.appendNode('artifactId', 'your_artificat_id')
 dependencyNode.appendNode('version', 'your_version')
 } 
 }
 }
 }
}
  1. अपनी एप्लिकेशन लेवल बिल्ड.ग्रेडल फ़ाइल के अंदर, पंक्ति जोड़ें:
apply from: '/.publishingLocally.gradle
<पी> यदि यह विकल्प सच होने के लिए थोड़ा बहुत अच्छा लगता है, तो यह है . एक ओर, हम चीजों को स्थानीय स्तर पर निर्बाध रूप से विकसित कर सकते हैं जैसे कि हम किसी दूरस्थ पुस्तकालय के साथ काम कर रहे हों। दूसरी ओर, यदि हम स्थानीय स्तर पर काम करते हुए इनरलिब के अंदर कोई बदलाव करते हैं, तो उसे स्थानीय रूप से फिर से प्रकाशित करना आवश्यक है। हालाँकि यह कोई महंगा काम नहीं है, लेकिन इससे कठिन काम बार-बार करने की ज़रूरत पैदा होती है।

स्थानीय और दूरस्थ रूप से काम करने के लिए एक समाधान

<पी> जब भी हम स्थानीय स्तर पर कोई परिवर्तन करते हैं तो हम अपने इनरलिब पैकेज को पुनः प्रकाशित करने की निरंतर आवश्यकता से बचना चाहते हैं। हमें अपने प्रोजेक्ट को उन परिवर्तनों से अवगत कराने का एक तरीका निकालने की आवश्यकता है। <पी> वर्किंग लोकल सेक्शन में, हमें पता चला कि यह कैसे करना है, लेकिन हमें सेटिंग्स.ग्रेडल फ़ाइल को प्रतिबद्ध करने में एक समस्या थी। इस समस्या को हल करने के लिए ताकि हम अपने इनरलिब के साथ स्थानीय और दूरस्थ दोनों तरह से काम कर सकें, हम एक पैरामीटर का उपयोग करेंगे जिसे हम अपने gradle.properties में परिभाषित करेंगे। फ़ाइल.

<पी> Gradle.properties फ़ाइल एक ऐसी जगह है जहां आप प्रोजेक्ट स्तर की सेटिंग्स संग्रहीत कर सकते हैं जो आपके विकास वातावरण को कॉन्फ़िगर करती हैं। इससे यह सुनिश्चित करने में मदद मिलती है कि टीम के सभी डेवलपर्स के पास लगातार विकास का माहौल हो। <पी> कुछ सेटिंग्स जिनसे आप परिचित हो सकते हैं जो इस फ़ाइल के अंदर पाई जाती हैं वे हैं AndroidX समर्थन (android.useAndroidX=true) या JVM तर्क (org.gradle.jvmargs=-Xmx1536m)। <पी> अपनी स्थिति को हल करने में मदद के लिए, हम यहां एक पैरामीटर जोड़ सकते हैं जो यह इंगित करेगा कि हम स्थानीय स्तर पर काम करना चाहते हैं या नहीं। कुछ इस प्रकार:

workingLocally = false
<पी> यह पैरामीटर हमें यह अंतर करने की क्षमता प्रदान करेगा कि हम स्थानीय स्तर पर या उत्पादन कोड के साथ किन सेटिंग्स के साथ काम कर रहे हैं। सबसे पहले, आइए अपनी सेटिंग्स.ग्रेडल फ़ाइल में जो कुछ है उसे ऐसी स्थिति में लपेटकर बदलें जो यह जांच करे कि हमारा पैरामीटर सही है या नहीं:

include ':outerLib', ':innerLib', ':app'
if (workingLocally.booleanValue()) {
 project('innerLib').projectDir = new File('PATH_TO_INNER_LIB')
}
<पी> इस तरह, हम प्रोजेक्ट को हमारी मशीन से स्थानीय रूप से इनरलिब के लिए फ़ाइलें प्राप्त करने का संकेत देते हैं। <पी> एक अन्य स्थान जहां हमें अपना तर्क बदलने की आवश्यकता है वह हमारी बिल्ड.ग्रेडल फ़ाइल है। यहां, हमारे निर्भरता ब्लॉक में दूरस्थ रूप से हमारी लाइब्रेरी में कोड प्राप्त करने के बजाय, हम यह संकेत दे सकते हैं कि हम स्थानीय रूप से इस पर निर्भर हैं या नहीं।

dependencies {
 if (workingLocally.booleanValue()) {
 implementation 'innerLib'
 } else {
 implementation 'url_to_remote_repository'
 }
}
<पी> ⚠️ चेतावनी का शब्द:स्थानीय स्तर पर काम करते समय आपको कभी भी gradle.properties फ़ाइल को प्रतिबद्ध नहीं करना चाहिए। <पी> यात्रा लंबी थी और काफी थका देने वाली लग रही होगी। लेकिन अब हमारे पास मल्टीपल लाइब्रेरी प्रोजेक्ट पर स्थानीय और दूरस्थ रूप से काम करने के लिए एक फुल-प्रूफ सेटअप है।

<पी> यदि आपको कोई समस्या आती है या आप इस पर अपनी राय देना चाहते हैं, तो बेझिझक एक टिप्पणी छोड़ें।

<पी> मुफ़्त में कोड करना सीखें. फ्रीकोडकैंप के ओपन सोर्स पाठ्यक्रम ने 40,000 से अधिक लोगों को डेवलपर्स के रूप में नौकरी पाने में मदद की है। आरंभ करें


  1. एंटीवायरस का उपयोग किए बिना विंडोज 10 में कैसे सुरक्षित रहें एंटीवायरस का उपयोग किए बिना विंडोज 10 में कैसे सुरक्षित रहें

    एक नया कंप्यूटर प्राप्त करते समय, आप पूछते हैं कि क्या यह एंटीवायरस द्वारा सुरक्षित है या नए अधिग्रहण की सुरक्षा के लिए किस प्रकार का एंटीवायरस सबसे अच्छा है। वास्तव में, निर्माताओं द्वारा एक निश्चित एंटीवायरस प्राप्त करने के लिए अक्सर एक सूक्ष्म धक्का होता है। यह एक पूर्व-स्थापित परीक्षण संस्करण के

  1. क्या आपका मैकबुक ट्रैकपैड काम नहीं कर रहा है? यहाँ फिक्स हैं! क्या आपका मैकबुक ट्रैकपैड काम नहीं कर रहा है? यहाँ फिक्स हैं!

    Apple उत्पाद खरीदने का एक बड़ा कारण यह है कि वे बस काम करते हैं। हालाँकि, जब वे ऐसा नहीं करते हैं, तो यह एक दर्दनाक और निराशाजनक समय होता है। जबकि मैकबुक का लगभग कोई भी हिस्सा विफल हो सकता है, ट्रैकपैड त्रुटियों से ग्रस्त है। एक टूटा हुआ ट्रैकपैड ऐसा महसूस कराता है जैसे आप मुश्किल से अपने कंप्यूटर क

  1. विंडोज 11/10 में प्रिंट हेड को कैसे साफ करें विंडोज 11/10 में प्रिंट हेड को कैसे साफ करें

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