2012-01-12 17 views
8

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

पढ़ना this मुझे पता चला कि एंड्रॉइड 3.0 और बाद में (आईसीएस समेत) के लिए समस्याओं को कैसे हल किया जाए, लेकिन अब यह बड़ा सवाल है ... अगर मैं आईसीएस के साथ अपनी परियोजना को संगत करता हूं तो मुझे निर्देश का उपयोग करना होगा, लेकिन फिर मैं जिंजरब्रेड पर नहीं दौड़ूंगा।

कुछ और अधिक जानकारी प्रदान करने के लिए ... कोड की समस्या पैदा करने वाले टुकड़ा इस एक है:

android:hardwareAccelerated="true" 

जो एक संपत्ति है कि एंड्रॉयड 3.0 में शामिल किया गया है।

तो, क्या मैं कुछ अलग-अलग एपीके बनाने से बचने के लिए कुछ भी कर सकता हूं (कुछ हनीकॉम्ब एपीके और पोस्ट-हनीकॉम्ब एपीके की तरह कुछ)?

<application android:label="@string/app_name" 
      android:icon="@drawable/elabora" 
      android:theme="@android:style/Theme.NoTitleBar"> 
    <activity android:name="es.fundacionvodafone.elabora.android.controlador.InicioElaboraTest" 
       android:label="@string/app_name" 
       android:noHistory="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name="es.fundacionvodafone.elabora.android.controlador.InicioElabora" 
       android:configChanges="orientation|keyboardHidden" 
       android:label="@string/app_name" 
       android:hardwareAccelerated="true"> 
      <!--    
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      --> 
    </activity> 

अग्रिम धन्यवाद:

यह मेरा एंड्रॉयड प्रकट का एक टुकड़ा है।

अद्यतन: मैं पहले से ही माइक समझाया गया था, यह कहने के लिए, minsdk और targetSdk को ठीक से परिभाषित करना है, लेकिन मैं निम्नलिखित तथ्य से उलझन में था। इस तरह के एक प्रोजेक्ट कॉन्फ़िगरेशन के साथ, जब आप ग्रहण में प्रोजेक्ट चलाते हैं, तो यह निम्न विंडो को इंगित करता है: Capture of eclipse running a project with a targetSdk above the device api level लाल क्रॉस का अर्थ है कि प्रोजेक्ट लक्ष्य एसडीके स्तर डिवाइस एपीआई स्तर से ऊपर है। तो मैंने सोचा कि यह सिर्फ इस डिवाइस में काम नहीं कर रहा था, लेकिन बात यह है कि आप वास्तव में इसे चला सकते हैं, और उम्मीद के अनुसार काम करता है।

+0

आप क्यों मानते हैं कि आप "जिंजरब्रेड पर नहीं चलेंगे।" आपके पास न्यूनतम sdk = 8 हो सकता है, लक्षित एसडीके और लक्ष्य निर्माण परियोजना निर्माण एसडी = 15. बस सुनिश्चित करें कि प्रत्येक संस्करण के लिए जो कुछ भी काम करता है उसे सक्षम करना सुनिश्चित करें। आप संस्करण निर्भर बुलियन गुणों का उपयोग कर सकते हैं जो चीजों को चालू और बंद कर देंगे। – user1076637

+0

@ user1076637, मैंने अभी गलती की है कि ... जैसा कि मैंने अपने उत्तर पर अपडेट किया है, उचित minSdk और targetSdk सेट करना एक वैध समाधान है। – mdelolmo

उत्तर

8

ओपी द्वारा उनके प्रश्न के नीचे पोस्ट की गई टिप्पणी (मूल रूप से यह बताती है कि लक्ष्य एसडीके किसी ऐप के संकलन को प्रभावित नहीं करता है) पूरी तरह गलत है! कुचलने के लिए खेद है।

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

उदाहरण देने के लिए, मान लें कि आप एक ऐप लिख रहे हैं जो इशारा पहचान का व्यापक उपयोग करता है। हालांकि, प्रत्येक आदेश जिसे एक इशारा द्वारा पहचाना जा सकता है उसे बटन या मेनू से भी किया जा सकता है। इस मामले में, इशारे एक 'शांत अतिरिक्त' हैं लेकिन इसकी आवश्यकता नहीं है। इसलिए आप लक्ष्य एसडीके को 7 ("एक्लेयर" सेट करेंगे जब जेस्चरडिटेक्शन लाइब्रेरी पेश की गई थी), और न्यूनतम एसडीके स्तर 3 ("कपकेक") ताकि वास्तव में पुराने फोन वाले लोग भी आपके ऐप का उपयोग कर सकें। आपको बस इतना करना होगा कि आपके ऐप ने एंड्रॉइड के संस्करण की जांच की है, यह इशारा लाइब्रेरी का उपयोग करने से पहले चल रहा था, अगर इसका अस्तित्व नहीं था तो इसका उपयोग करने से बचने के लिए। (माना जाता है कि यह एक दिनांकित उदाहरण है क्योंकि शायद ही कभी किसी के पास v1.5 फोन है, लेकिन एक समय था जब v1.5 के साथ संगतता बनाए रखना वास्तव में महत्वपूर्ण था।)

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

इस सुविधा का उपयोग करने के तरीके के बारे में Android developer's blog से वास्तव में एक अच्छा लेख है, और विशेष रूप से, ऊपर वर्णित कोड "इसका उपयोग करने से पहले सुविधा जांचें" कोड को कैसे डिज़ाइन किया जाए।

ओपी को: मैंने इसे मुख्य रूप से भविष्य में इस प्रश्न पर ठोकर खाने वाले किसी भी व्यक्ति के लाभ के लिए लिखा है।

+0

क्षमा करें, मैं थोड़ा खो गया हूं, किस सवाल पर टिप्पणी है? वैसे भी, जिस तरह से मैं minSdk और targetSdk का उपयोग कर रहा हूं, वर्णन करने के मामलों में से एक है, मुझे विश्वास है। यह एक ऐसी सुविधा है जिसे एक केटेन संपत्ति द्वारा सक्षम किया जाना चाहिए जिसमें जिंजरब्रेड शामिल था। इससे पहले, चीज को काम करने के लिए उस संपत्ति की आवश्यकता नहीं थी। – mdelolmo

3

मुझे एंड्रॉइड मेनिफेस्ट संस्करण के साथ समान समस्या है। पुराने फोन के लिए मैं कुछ पूर्वनिर्धारित आकारों में विगेट्स रखना चाहता हूं, नए फोन के लिए जो आकार बदलने का समर्थन करते हैं, मैं एक ही आकार बदलने योग्य विजेट चाहता हूं। इसे करने का अभी तक कोई रास्ता नहीं मिला। संभवतः यही कारण है कि Google multiple APK support के साथ आया था।

ऊपर वर्णित एडम पॉवेल लेख इस तरह के संस्करण को संबोधित नहीं करता है। (महान लेख बीटीडब्ल्यू)।

संपादित करें: समाधान मिला। एंड्रॉइड मेनिफेस्ट में विजेट्स परिभाषा में बुलियन 'सक्षम' एटिब्यूट होता है जिसे बूलियन संसाधन मानों से सेट किया जा सकता है। संसाधन मान मानक संस्करण योग्य संसाधन निर्देशिका नामों का उपयोग कर प्रति संस्करण मान हो सकते हैं। समस्या सुलझ गयी।

+0

अच्छा, धन्यवाद। यह रिसीवर के लिए भी काम करता है, जिसे मुझे ओरेओ के लिए अक्षम करने की आवश्यकता होगी –

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