2012-04-03 18 views
8

मैं समझने की कोशिश कर रहा हूं कि एंड्रॉइड ऐप को दो हिस्सों में विभाजित करना संभव है (एक एपीके से स्थापित)। मैं इसे डिवाइस मेमोरी और एसडी-कार्ड पर दूसरे भाग पर एक भाग स्थापित करने के लिए देख रहा हूं। दोनों भाग एक साथ हैं और अलग से स्थापित नहीं किया जाना चाहिए।दो हिस्सों में एंड्रॉइड ऐप को विभाजित करें

नोट: मुझे न केवल संसाधनों को अलग करने की आवश्यकता है, बल्कि गतिविधियों को भी APK Expansion Files समाधान नहीं है, क्योंकि ऐसी कार्यक्षमता प्रदान नहीं करते हैं।

+0

"अलग से इंस्टॉल करें" के साथ आपका क्या मतलब है? मुझे लगता है कि आपके पास स्मृति समस्याओं के लिए एसडी कार्ड में स्थापित करने के लिए कुछ संसाधन (छवियों, वीडियो) हैं, है ना? या तुम्हारा क्या मतलब है? –

+0

मेरा मतलब है कि डिवाइस के लिए दो भागों को एक साथ स्थापित/हटाया जाना चाहिए। जिस एप्लिकेशन के बारे में मैं सोच रहा हूं उसके पास एक हिस्सा है जो मैं हमेशा उपलब्ध होना चाहता हूं (डिवाइस मेमोरी पर इंस्टॉल करें) और एक हिस्सा जिसे उपयोगकर्ता एसडी-कार्ड को हटाकर अनुपलब्ध (अस्थायी) कर सकता है। साथ ही जब उपयोगकर्ता एसडी-कार्ड से ऐप को स्थानांतरित करने का निर्णय लेता है, तो वह भाग जिसे मैं डिवाइस मेमोरी में स्थापित करना चाहता हूं, हमेशा वहां रहना चाहिए। – Louis

+0

यह एक ऐप के साथ संभव नहीं है। लेकिन आप इसे 2 अलग-अलग ऐप्स के साथ करने में सक्षम होना चाहिए। –

उत्तर

0

आप अपने कारण के लिए, लेकिन नहीं कर सकते हैं। एकाधिक एपीके यह सुनिश्चित करने के लिए हैं कि आपका ऐप एकाधिक उपकरणों के लिए काम करता है - आंतरिक मेमोरी और एसडी कार्ड के बीच अपना कुल आकार विभाजित नहीं करना है।

Multiple APK Support

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

एकाधिक APK के साथ अपने एप्लिकेशन को प्रकाशित करके, आप: प्रत्येक APK के साथ

समर्थन विभिन्न ओपन बनावट संपीड़न प्रारूपों।

प्रत्येक एपीके के साथ विभिन्न स्क्रीन कॉन्फ़िगरेशन का समर्थन करें।

प्रत्येक एपीके के साथ विभिन्न प्लेटफ़ॉर्म संस्करणों का समर्थन करें।

वर्तमान में, ये एकमात्र डिवाइस विशेषताएं हैं जो Google Play एक ही एप्लिकेशन के रूप में एकाधिक एपीके प्रकाशित करने के लिए समर्थन करती हैं।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद, लेकिन मेरा मतलब यह नहीं है। मेरे ऐप में दो भाग हैं जो हमेशा उपलब्ध रहना चाहिए और एक हिस्सा जो अनुपलब्ध हो सकता है जब उपयोगकर्ता ने अपना एसडी-कार्ड हटा दिया और बाद में कार्ड फिर से डाला जाने पर उपलब्ध हो जाता है। – Louis

0

आपका ऐप सिर्फ गीलेर की जांच कर सकता है कि एसडी कार्ड वर्तमान में उपलब्ध है ("प्लग-इन") या नहीं। यदि यह उपलब्ध है तो आपका ऐप सामान्य की तरह काम करता है और यदि एसडी कार्ड उपलब्ध नहीं है तो ऐप स्वचालित रूप से पॉप-अप/लॉन्च विभिन्न गतिविधियों/जो कुछ भी दिखाएगा/दिखाएगा।

+0

"चलती" प्रक्रिया के दौरान केवल चयनित गतिविधियों और सेवाओं के लिए एसडी कार्ड को कैसे धक्का देना है? – msangel

+0

क्षमा करें, मैं आपकी वाक्य को पूरी तरह से समझ नहीं पा रहा हूं: लेखक की टिप्पणी से x – jdstaerk

+0

: "जिस एप्लिकेशन के बारे में मैं सोच रहा हूं वह एक हिस्सा है जिसे मैं हमेशा उपलब्ध होना चाहता हूं (डिवाइस मेमोरी पर इंस्टॉल करें) और एक हिस्सा जो उपयोगकर्ता कर सकता है एसडी-कार्ड को हटाकर अनुपलब्ध (अस्थायी)। " – msangel

0

यदि आप बाहरी ड्राइव पर एप्लिकेशन संसाधनों को रखने का कोई तरीका ढूंढ रहे हैं, तो Harry's answer उपयोगी होगा।

अन्यथा एक ऐप स्थापना को दो हिस्सों में विभाजित करना संभव नहीं है। आप android:installLocation मैनिफेस्ट विशेषता का उपयोग यह परिभाषित करने के लिए कर सकते हैं कि आप इसे कहां स्थापित करना चाहते हैं और आप इसे पर भी मजबूर कर सकते हैं, केवल डिवाइस पर आंतरिक रूप से इंस्टॉल करें, लेकिन इसे विभाजित करने का कोई विकल्प नहीं है।

वैकल्पिक

दो Apps का

आप दो अलग-अलग दो ऐप्स बनाने और उनमें से किसी की शुरुआत पर जांच, अगर एक दूसरे को स्थापित किया गया है।यदि नहीं, तो आप उपयोगकर्ता को दूसरे को स्थापित करने और उपयोगकर्ता को ऐप स्टोर में अग्रेषित करने के लिए कहते हैं।

एक ऐप बाह्य भंडारण

की जाँच करता है मैं आपके उपयोग के मामले पता नहीं है, लेकिन अपनी टिप्पणी से यह लग रहा है आप गलत समाधान की तलाश कर रहे हैं।

जिस अनुप्रयोग के बारे में मैं सोच रहा हूं वह एक हिस्सा है जिसे मैं हमेशा उपलब्ध होना चाहता हूं (डिवाइस मेमोरी पर स्थापित करें) और एक हिस्सा जिसे उपयोगकर्ता एसडी-कार्ड को हटाकर अनुपलब्ध (अस्थायी) कर सकता है। साथ ही जब उपयोगकर्ता एसडी-कार्ड से ऐप को स्थानांतरित करने का निर्णय लेता है, तो वह भाग जिसे मैं डिवाइस मेमोरी में स्थापित करना चाहता हूं, हमेशा वहां रहना चाहिए।

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

निष्कर्ष

आपका समाधान शायद बहुत जटिल है और आप विकल्पों के लिए दिखना चाहिए।

1

APK विस्तार फ़ाइल

Google Play वर्तमान में है कि अपनी APK फ़ाइल 100 एमबी से अधिक नहीं होना चाहिए। अधिकांश अनुप्रयोगों के लिए, यह सभी एप्लिकेशन के कोड और संपत्तियों के लिए बहुत अधिक जगह है। हालांकि, कुछ ऐप्स को उच्च-निष्ठा ग्राफिक्स, मीडिया फ़ाइलों या अन्य बड़ी संपत्तियों के लिए अधिक स्थान की आवश्यकता होती है। पहले, यदि आपका ऐप 100 एमबी से अधिक हो गया है, तो उपयोगकर्ता को ऐप खोलने पर आपको अतिरिक्त संसाधनों को होस्ट और डाउनलोड करना होगा। अतिरिक्त फ़ाइलों को होस्ट करना और उनकी सेवा करना महंगा हो सकता है, और उपयोगकर्ता का अनुभव अक्सर आदर्श से कम होता है। इस प्रक्रिया को आपके लिए आसान बनाने और उपयोगकर्ताओं के लिए अधिक सुखद बनाने के लिए, Google Play आपको दो एपीके को पूरक करने वाली दो बड़ी विस्तार फ़ाइलों को संलग्न करने की अनुमति देता है।

Google Play आपके एप्लिकेशन के लिए विस्तार फ़ाइलों को होस्ट करता है और उन्हें बिना किसी कीमत के डिवाइस परोसता है। विस्तार फ़ाइलों को डिवाइस के साझा भंडारण स्थान (एसडी कार्ड या यूएसबी-माउंटेबल विभाजन; "बाहरी" भंडारण के रूप में भी जाना जाता है) में सहेजा जाता है जहां आपका ऐप उन्हें एक्सेस कर सकता है। अधिकांश उपकरणों पर, Google Play एक ही समय में विस्तार फ़ाइल को डाउनलोड करता है, साथ ही यह एपीके डाउनलोड करता है, इसलिए जब उपयोगकर्ता इसे पहली बार खोलता है तो आपके एप्लिकेशन में इसकी हर चीज होती है। कुछ मामलों में, हालांकि, आपका आवेदन शुरू होने पर आपके एप्लिकेशन को Google Play से फ़ाइलों को डाउनलोड करना होगा।

विस्तार फ़ाइलों

ज्यादातर मामलों में डाउनलोड कर रहा है, Google Play से डाउनलोड और एक ही समय में यह स्थापित करता है या अद्यतन करता APK पर डिवाइस के लिए अपनी विस्तार फ़ाइलों को बचाता है। इस तरह, जब आपका एप्लिकेशन पहली बार लॉन्च होता है तो विस्तार फ़ाइलें उपलब्ध होती हैं। हालांकि, कुछ मामलों में आपके ऐप को Google Play की एप्लिकेशन लाइसेंसिंग सेवा से प्रतिक्रिया में आपको प्रदान किए गए यूआरएल से अनुरोध करके विस्तार फाइलें डाउनलोड करनी होंगी।

आपका आवेदन शुरू होता है, (साझा संग्रहण स्थान पर विस्तार फ़ाइलों के लिए देखो एंड्रॉयड में/obb // निर्देशिका:

बुनियादी तर्क आप अपने विस्तार फ़ाइलों को डाउनलोड करने की जरूरत है निम्नलिखित है)। यदि विस्तार फाइलें हैं, तो आप सभी सेट हैं और आपका एप्लिकेशन जारी रख सकता है। यदि विस्तार फ़ाइलें नहीं हैं: अपने ऐप के विस्तार फ़ाइल नाम, आकार और यूआरएल प्राप्त करने के लिए Google Play के एप्लिकेशन लाइसेंसिंग का उपयोग करके एक अनुरोध करें। विस्तार फ़ाइलों को डाउनलोड करने और विस्तार फ़ाइलों को सहेजने के लिए Google Play द्वारा प्रदान किए गए यूआरएल का प्रयोग करें। आपको फ़ाइलों को साझा स्टोरेज स्थान (एंड्रॉइड/ओबीबी //) में सहेजना होगा और Google Play की प्रतिक्रिया द्वारा प्रदान किए गए सटीक फ़ाइल नाम का उपयोग करना होगा।

Source

+0

विस्तार फाइलें ऐसी गतिविधियों के लिए हैं जो कार्यक्रम कोड जैसे गतिविधियों के लिए नहीं हैं। –

0

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

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

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

3

मुझे लगता है कि यह संभव होगा। क्या आप निम्नलिखित दृष्टिकोण का प्रयास कर सकते हैं?

  1. दो क्षुधा
  2. पहला APK की मैनिफ़ेस्ट फ़ाइल में बनाएं, तो आप एक गतिविधि मुख्य और लॉन्चर श्रेणी का है कि होना चाहिए। इस प्रकार आपका ऐप लॉन्चर सूची
  3. में दिखाई देगा, आपको 2 एपीके में मुख्य और लॉन्चर श्रेणी की कोई गतिविधि नहीं होनी चाहिए, लेकिन आपको पता है कि आपको दूसरी ऐप की लॉन्चर गतिविधि के रूप में कौन सी गतिविधि खोलनी है क्योंकि यह आपका स्वयं का ऐप है। इस तरह से अपने दूसरे एप्लिकेशन कभी नहीं क्षुधा की लांचर सूची में दिखाई देगा
  4. जब भी अपने मुख्य अनुप्रयोग, 2 app से सामग्री का उपयोग संपत्ति फ़ोल्डर से 2 एप्लिकेशन इंस्टॉल करना चाहता है पहला APK
  5. की संपत्ति फ़ोल्डर में 2 APK रखो (as mentioned here) स्थापित करने के साथ इस तरह sdcard पर स्थापना स्थान: android:installLocation="preferExternal" और फिर

मैं अभी तक इस कोशिश की नहीं गए दूसरे अनुप्रयोग के अपने वांछित गतिविधि का शुभारंभ पर सैद्धांतिक रूप से कानूनी है।

अगर यह काम करता है तो मुझे बताएं। धन्यवाद!

+0

शायद आपको पहले सुरक्षा विकल्पों में एपीके "अज्ञात स्रोतों से इंस्टॉलेशन" सक्षम करना होगा। –

+0

शायद हां। लेकिन मेरा मानना ​​है कि यह लुई के सवाल का निकटतम समाधान होगा। – Shrikant

0

आप मैनिफेस्ट में दो मुख्य लॉन्चर प्रविष्टियों को परिभाषित करके एक एपीके से दो अलग-अलग लॉन्चिंग गतिविधियां बना सकते हैं।एक्सएमएल

<activity android:name=".ChooserActivity" 
      android:label="Auth Firebase"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 


     <activity android:name=".GoogleSignInActivity" 
      android:label="Auth Google" 
      android:installLocation="preferExternal"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

यह एक एप्लिकेशन के लिए दो प्रवेश द्वारों का निर्माण करेगा, दो अलग अलग लांचर प्रतीक एक "प्रमाणीकरण Firebase" और अन्य नाम "प्रमाणीकरण गूगल" दोनों विभिन्न गतिविधियों खुलेगा नाम दिया है।

+0

मुझे लगता है कि आप इस सवाल को गलत समझते हैं। –

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