25

Google ने हाल ही में तत्काल ऐप्स के बारे में अपने सूचना पृष्ठ को अद्यतन किया: https://developer.android.com/topic/instant-apps/prepare.htmlएंड्रॉइड इंस्टेंट ऐप: यूआरएल एड्रेस करने योग्य मॉड्यूल कैसे बनाएं?

अधिकांश बिंदु स्पष्ट हैं "3. यदि आवश्यक हो तो अपने ऐप को दोबारा दोहराएं"। वे ब्राउज़, खोज, आइटम विवरण, और चेक आउट जैसे खुदरा मॉड्यूल के लिए सुझाव देते हैं।

प्रश्न: मैं ऐप को मॉड्यूल में कैसे विभाजित कर सकता हूं जो पूरी तरह कार्यात्मक & यूआरएल पता योग्य है? मैं यहां कई मुद्दों को देखता हूं: - अगर हम डैगर, बटरनाइफ जैसे पुस्तकालयों का उपयोग करते हैं ... सभी मॉड्यूल अन्य मॉड्यूल पर निर्भर होंगे - यदि हमारे मॉड्यूल में आवश्यकतानुसार (दृश्य) होते हैं, तो दूसरे दृश्य में संक्रमण कैसे होना चाहिए एक और मॉड्यूल) इस मॉड्यूल को आयात किए बिना कार्यान्वित किया जा सकता है?

क्या कोई अंधेरे में प्रकाश डाल सकता है? धन्यवाद!

+0

'अगर हम कटार की तरह पुस्तकालयों का उपयोग, butterknife, ... सभी मॉड्यूल अन्य modules' पर निर्भर होगा Digital Asset Links को पढ़ने सब। उन्हें क्यों चाहिए मैंने हाल ही में डैगर और बटरकिनीफ के व्यापक उपयोग के साथ एक विशाल कोडबेस पर इस तरह के रिफैक्टरिंग की है, और कह सकते हैं - यह मेरे लिए कोई मुद्दा नहीं था। अधिक जानकारी के लिए मेरा उत्तर देखें और मुझे smth अगर पता है। आपके लिए स्पष्ट नहीं है – Idolon

उत्तर

4

उचित मॉड्यूल जुदाई त्वरित ऐप्स के लिए आवश्यक आसानी से निम्न चरणों का उपयोग किया जा सकता है:

  1. एक साझा मॉड्यूल जो कोड और संसाधनों जो सुविधा मॉड्यूल भर में साझा किया जाना चाहिए शामिल होंगे बनाएँ।
  2. प्रत्येक प्रमुख सुविधा के लिए कई फीचर मॉड्यूल बनाएं (Google द्वारा प्रदान किए गए उदाहरण में: ब्राउज, सर्च, आइटम विवरण और चेकआउट)। ये मॉड्यूल पी.1 में बनाए गए साझा मॉड्यूल पर निर्भर कर सकते हैं, लेकिन उन्हें एक-दूसरे के बारे में कुछ नहीं पता होना चाहिए।
  3. विभिन्न मॉड्यूल से एक गतिविधि शुरू करने के लिए लक्ष्य गतिविधि यूआरएल-एड्रेसेबल बनाएं, और इसे अंतर्निहित इरादे से शुरू करें। इसके लिए ऐप लिंक का उपयोग करने के लिए Google suggests
  4. अपना नियमित एंड्रॉइड ऐप बनाने के लिए, एक एप्लीकेशन मॉड्यूल बनाएं जो फीचर मॉड्यूल पर निर्भर करता है।
  5. एक बार जब Google जनता के लिए अपने एंड्रॉइड इंस्टेंट ऐप एसडीके जारी करता है, तो आप अपने त्वरित ऐप्स (प्रति सुविधा एक) बना सकते हैं।
4

कृपया official docs का संदर्भ लें कि तत्काल ऐप्स आमतौर पर डेवलपर्स के लिए उपलब्ध हैं।

संक्षेप में, सभी तत्काल ऐप्स कम से कम एक मूल सुविधा मॉड्यूल कहलाएंगे जिसमें तत्काल ऐप में सामान्य कोड शामिल होगा। इसके शीर्ष पर, तत्काल ऐप्स वैकल्पिक रूप से 1 या अधिक अतिरिक्त फीचर लाइब्रेरीज़ हो सकते हैं जो बेस फीचर मॉड्यूल पर निर्भर करते हैं। प्रत्येक सुविधा मॉड्यूल में अपने स्वयं के प्रवेश बिंदु हो सकते हैं जो यूआरएल-एड्रेसेबल हैं, हालांकि फीचर मॉड्यूल को खुद को एक-दूसरे पर निर्भर रहने की आवश्यकता नहीं है। अगर किसी को दूसरे को फोन करने की ज़रूरत है, तो वह यूआरएल-आधारित इरादे के माध्यम से किया जा सकता है।

enter image description here

सभी सुविधा मॉड्यूल नई com.android.feature प्लगइन, जिनमें से आप कैसे कर सकते हैं संदर्भ में पारंपरिक com.android.library प्लगइन करने के लिए एक समान तरीके से प्रयोग किया जाता है का उपयोग करें:

डॉक्स साइट से चित्र थोड़ा में मदद करता है इसे अपने एंड्रॉइड प्रोजेक्ट में उपयोग करें और इसलिए library docs को संदर्भ के रूप में उपयोग किया जा सकता है। यह अलग-अलग होने के संदर्भ में, यह आपके इंस्टॉल करने योग्य एप्लिकेशन मॉड्यूल के साथ उपयोग किए जाने पर नियमित AAR फ़ाइल आउटपुट करेगा, और नए इंस्टेंट ऐप मॉड्यूल के साथ उपयोग किए जाने पर एक विशेषता एपीके आउटपुट करेगा।

0

मुझे लगता है कि सुविधा मॉड्यूल मॉड्यूलर अवधारणा के साथ सब कुछ के साथ आते हैं। अंत में फीचर मॉड्यूल में प्रत्येक सुविधा संभव है।

मैं इस talk से परियोजना संरचना के नए तरीके को समझना शुरू कर देता हूं। यह मुझे कुछ बिंदु के लिए स्पष्ट बनाता है।

जैसा कि हम फीचर मॉड्यूल बनाते हैं और फीचर बेस मॉड्यूल से लिंक करना चाहते हैं, तो हमें शायद अप्रयुक्त androidTesttest और res संसाधनों को हटाने की आवश्यकता है।

इसके अलावा, नई संरचना here

के साथ सरल परियोजना बनाने यह रेपोस पर दस्तावेज़ निम्नलिखित सिरे से शुरू करने के लिए और इसके बाद के संस्करण मॉड्यूल की सुविधा है और codebase में तुरंत एप्लिकेशन मॉड्यूल जोड़ने के लिए आवेदन मॉड्यूल से बदलने की कोशिश।

+0

जब भी आप किसी ब्लॉग पोस्ट, लाइब्रेरी या अन्य बाहरी संसाधन से जुड़े होते हैं जिसमें आप शामिल होते हैं (जैसे आपका रेपो), [आपको स्पष्ट रूप से यह इंगित करना होगा] (https://stackoverflow.com/help/promotion)। –

2

इस आरेख पर विचार करें। enter image description here

प्रश्न: मैं मॉड्यूल जो पूरी तरह से कार्य कर रहे हैं & यूआरएल पता है जिसे आप एप्लिकेशन को विभाजित करते हैं?

बेस मॉड्यूल: में आपके ऐप द्वारा आवश्यक सभी सामान्य संसाधन शामिल हैं। तो हमारे मामले में, फीचर 1 और फीचर 2 की सभी गतिविधियां आधार मॉड्यूल से साझा आरएस का उपयोग कर रही हैं। इसमें पुस्तकालयों जैसे डैगर, बटरनाइफ हो सकते हैं।

अब आपके पूरे ऐप को फीचर नामक छोटी इकाई में तोड़ने का समय है। एक सुविधा में कई गतिविधियां हो सकती हैं जो आपके ऐप के बारे में एक झलक दे सकती हैं या एक लक्ष्य पूरा कर सकती हैं जो उपयोगकर्ताओं को उस ऐप को इंस्टॉल करने के लिए प्रेरित करती है। अब यह पूरी तरह से आप पर निर्भर करता है कि आप उस उपयोगकर्ता को क्या वितरित करना चाहते हैं जो उन्हें आपके ऐप को डाउनलोड करने का आग्रह करता है।

फ़ीचर 1: इसलिए हमने ऐप को फीचर 1 और फीचर 2 में विभाजित किया है। इस सुविधा में हम उपयोगकर्ताओं को वस्तुओं की खोज और ब्राउज़ करने के लिए दे रहे हैं। जब भी आइटम पर उपयोगकर्ता क्लिक हम feature2 से आइटम विवरण लोड करने के लिए इतना ब्राउज़ गतिविधि से आइटम के क्लिक पर हम जैसे

Intent intent = new Intent(Intent.ACTION_VIEW, 
       Uri.parse("https://yourdomain.com/itemdetail")); 
     intent.setPackage(getPackageName()); 
     intent.addCategory(Intent.CATEGORY_BROWSABLE); 
     startActivity(intent); 

फोन करेगा क्योंकि जरूरत है: Activity1 feature1 सीधे feature2 में activity2 कॉल नहीं कर सकते से। ऐसा करने के लिए आपको गतिविधि 1 से गतिविधि 2 के यूआरएल पते का अनुरोध करना होगा।

फ़ीचर 2: अब, फ़ीचर 2 तत्काल ऐप में लोड हो गया है, इसलिए अब हम आइटम विवरण गतिविधि देख सकते हैं।

नोट: आपको एप कार्यक्षमता को विभाजित करते समय अपने फीचर आकार पर भी विचार करना चाहिए क्योंकि प्रत्येक सुविधा 4 एमबी आकार से अधिक नहीं होनी चाहिए अन्यथा सत्यापन खेलने के लिए एपीके अपलोड करते समय सत्यापन होता है।

1

मुझे यकीन नहीं है कि मैं आपके प्रश्न को गलत समझ रहा हूं, लेकिन मैं इसमें एक दरार लेने की कोशिश करूंगा। मेरे नीचे दिए गए स्पष्टीकरण के लिए, मैं कई बार this code sample by Google का संदर्भ दूंगा। I अत्यधिक क्लोनिंग का सुझाव देता है कि इसके साथ रेपो और खेलना, क्योंकि मुझे लगता है कि यह आपके प्रश्न का उत्तर देगा।

अगर हम डैगर, तितली, जैसे पुस्तकालयों का उपयोग करते हैं ...सभी मॉड्यूल अन्य मॉड्यूल पर निर्भर होंगे

जैसा कि अन्य लोगों द्वारा उल्लिखित किया गया है, आपकी सभी सुविधाओं द्वारा उपयोग की जाने वाली किसी भी पुस्तकालय को आपके बेस फ़ीचर में जाना होगा।

यदि हमारे मॉड्यूल में आवश्यकतानुसार (दृश्य) होते हैं, तो इस मॉड्यूल को आयात किए बिना किसी अन्य दृश्य (किसी अन्य मॉड्यूल से) में संक्रमण कैसे कार्यान्वित किया जाना चाहिए?

This answer इसके अवलोकन को शामिल करता है - लेकिन यह हिस्सा आपके प्रश्न की जड़ प्रतीत होता है, इसलिए मैं थोड़ा गहराई में खोदने की कोशिश करूंगा।

मान लें कि फ़ीचर 1 (BrowseActivity) फ़ीचर 2 (ItemDetailActivity) खोलना चाहता है। फ़ीचर 1 के बजाय startActivity(ItemDetailActivity.class) सीधे कॉल करने के बजाय, इसे नीचे विधि कॉल का उपयोग करना होगा (ऐसा इसलिए है क्योंकि फ़ीचर 1 के पास फ़ीचर 2 के ItemDetailActivity.class तक पहुंच नहीं है क्योंकि वे एक-दूसरे पर निर्भर नहीं हैं)। Here is the code sample provided by Google

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://example.com/itemdetail")); 
intent.setPackage(getPackageName()); 
intent.addCategory(Intent.CATEGORY_BROWSABLE); 
startActivity(intent); 

अब लापता बात यह है कि Feature2 के AndroidManifest में आप घोषित करने के लिए है कि ItemDetailActivityhttps://example.com/itemdetail लिंक के लिए सुन रहा है की जरूरत है। बिल्कुल नहीं - Here is the relevant code sample from Google

<activity android:name=".ItemDetailActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
    <intent-filter android:autoVerify="true"> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.BROWSABLE" /> 
     <data android:scheme="http" /> 
     <data android:scheme="https" /> 
     <data android:host="example.com" /> 
     <!-- IMPORTANT --> 
     <data android:pathPrefix="/itemdetail"/> 
    </intent-filter> 
    <meta-data 
     android:name="default-url" 
     android:value="https://www.example.com/itemdetail" /> 
</activity> 

किसी भी अधिक जानकारी के लिए, साथ ही सामान्य रूप Deep Linking

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