2013-02-08 18 views
5

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

मैं जानना चाहता हूं कि इन उल्लंघनों में से कुछ का पता लगाने का कोई तरीका है या नहीं।

इस ऐप के AndroidManifest.xml फ़ाइल में, यह निर्दिष्ट करता है:

<uses-sdk android:minSdkVersion="8" 
      android:targetSdkVersion="17" /> 

NDK-निर्माण मुझे इस बारे में एक चेतावनी दे रही है किया जा रहा है (या एक और कारण के लिए यह चेतावनी है?):

Android NDK: Found stable platform levels: 14 3 4 5 8 9 
Android NDK: Found max platform level: 14 
Android NDK: Parsing ./jni/Application.mk 
Android NDK: Found APP_PLATFORM=android-17 in ./project.properties 
Android NDK: Adjusting APP_PLATFORM android-17 to android-14 and enabling -fPIE 
/android-ndk/build/core/add-application.mk:128: Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml  

जबकि मुझे लगता है कि किसी भी उपकरण रनटाइम प्रेषण के कारण 100% सटीक नहीं हो सकता है,

  • एक पूर्ण औ स्रोत कोड के DIT, या
  • minSdkVersion चलाने वाले डिवाइस पर सभी कोड पथ का एक पूरा परीक्षण (इस मामले में एंड्रॉयड-8 = 2.2 = Froyo)

... वहाँ एक बत्ती की तरह उपकरण है , निर्माण सेटिंग में परिवर्तन, या कम से कम सबसे स्पष्ट/स्पष्ट उल्लंघन की पहचान करने के लिए मैं और कुछ भी उपयोग कर सकता हूं?

यदि ऐसी कोई चीज़ मौजूद नहीं है, तो क्या कोई व्यापक API सूची या कुछ ऐसा है जो ऑडिट को आसान बना देगा?

+0

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

+1

इसके लिए अधिकांश फोकस एसडीके पर रहा है - लिंट आपको उन मामलों के बारे में बताएगा जहां आप अपने 'minSdkVersion' से नए चीजों का उपयोग कर रहे हैं। हालांकि, एनडीके में इस समय इस तरह की चीजें नहीं हैं। – CommonsWare

+0

मैंने अभी पाया '[javac] नोट: एक्सक्लिंट के साथ पुन: संकलित करें: विवरण के लिए बहिष्करण।' जो मुझे चाहिए ... – leander

उत्तर

4

यह एंड्रॉयड lint उपकरण इन चेकों के कुछ करता है (धन्यवाद @CommonsWare ऊपर टिप्पणी में) दिखता है:

$ which lint 
/android-sdk-macosx/tools/lint 

$ lint myProjectDir --check NewApi 

Scanning .: ..... 

No issues found. 

ऐसा प्रतीत होता है कि आप भी एसडीके उपकरण संशोधन के रूप में ant lint के रूप में इस चला सकते हैं 21.

लिंट के पास कई अच्छे आउटपुट प्रारूप हैं, ऐसा लगता है!

java.compilerargs=-Xlint:all 

यह है कि क्या स्पष्ट नहीं है: आदि --xml के माध्यम से जेनकींस, के साथ एकीकरण ...


इसके अलावा, ant.properties में, आप javac द्वारा किया कुछ फाहा-तरह जांच के लिए कुछ इस तरह सेट कर सकते हैं javac लिंट की जांच की घटनाएं - चेक न्यूएपी करता है, लेकिन यह कम से कम [deprecation] प्रविष्टियों की रिपोर्ट करता है। (यदि आपको जवाक रिपोर्ट के लिए कोई संदर्भ मिलता है, तो कृपया एक टिप्पणी पोस्ट करें।

$ lint --show NewApi 
NewApi 
------ 
Summary: Finds API accesses to APIs that are not supported in all targeted API 
versions 

Priority: 6/10 
Severity: Error 
Category: Correctness 

This check scans through all the Android API calls in the application and 
warns about any calls that are not available on all versions targeted by this 
application (according to its minimum SDK attribute in the manifest). 

If you really want to use this API and don't need to support older devices 
just set the minSdkVersion in your AndroidManifest.xml file. 
If your code is deliberately accessing newer APIs, and you have ensured (e.g. 
with conditional execution) that this code will only ever be called on a 
supported platform, then you can annotate your class or method with the 
@TargetApi annotation specifying the local minimum SDK to apply, such as 
@TargetApi(11), such that this check considers 11 rather than your manifest 
file's minimum SDK as the required API level. 

कुछ उपयोगी लिंक lint के बारे में कर रहे हैं और यहाँ:)


भावी पीढ़ी के लिए, यहाँ फाहा के NewApi चेकर का विवरण दिया गया है

2

सबसे आसान समाधान मैंने पाया लिए किया गया था फ़ाइल Application.mk में यह पंक्ति जोड़

ओवरराइड APP_MIN_PLATFORM_LEVEL = 99

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