2014-11-15 5 views
5

मैं एंड्रॉइड एपीआई के आंतरिक कार्यों पर उलझन में हूं।

मेरे ऐप Android 5.0 के खिलाफ संकलित किया गया है, तो यह है कि एक डिवाइस पर निम्न काम करता चल रहा है Android 5.0 और ऊपर स्वीकार्य है:Build.VERSION_CODES संभवतः कैसे काम कर सकता है?

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 

बहरहाल, यह अभी से काम करता है अगर मैं एक डिवाइस चल रहा है पर चला एंड्रॉइड के पुराने संस्करण। मेरी धारणा यह है कि उस डिवाइस पर लाइब्रेरी में परिवर्तनीय Build.VERSION_CODES.LOLLIPOP की परिभाषा नहीं है। फिर जब ऐप इस कोड को चलाता है तो उन पुराने उपकरणों पर चर को कैसे हल किया जा सकता है?

उत्तर

14

फिर ऐप इस कोड को चलाने पर उन पुराने उपकरणों पर चर को कैसे हल किया जा सकता है?

सरल: कोई चर नहीं है।

Build.VERSION_CODES.LOLLIPOPstatic final int है। javac-जनरेटेड बाइटकोड int मान को इनलाइन करते हैं, जब आप Build.VERSION_CODES.LOLLIPOP को रनटाइम पर उस मान के लिए लुकअप करने के बजाय संदर्भित करते हैं। चूंकि बाइटकोड में int होता है, इसलिए आपके एपीके में int होता है, और इसलिए आप int को आपूर्ति करने के लिए ढांचे के डिवाइस के संस्करण पर निर्भर नहीं हैं।

Build.VERSION.SDK_INTनहीं एक static final int है, और इसलिए कि मान रनटाइम पर देखा जाता है।

+2

संशोधन: 'Build.VERSION.SDK_INT' एक ['स्थिर अंतिम int'] है (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/ 5.L_preview/एंड्रॉयड/ओएस/Build.java # 139)। लेकिन इसका मान एक [सिस्टम प्रॉपर्टी] पर निर्भर करता है (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.L_preview/android/os/Build.java # 503) इसलिए इसे रनटाइम पर गणना की जानी चाहिए, जबकि 'Build.VERSION_CODES.LOLLIPOP' केवल एक ['int'] है (http://grepcode.com/file/repository.grepcode.com/java/ext/com .google.android/एंड्रॉयड/5.L_preview/एंड्रॉयड/ओएस/Build.java # 503)। – futtetennista

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