2013-06-12 8 views
8

ich für Lebkuchen Erstellen einer Anwendung und oben mit minSdkVersion=10 und targetSdkVersion=17 in meinem AndroidManifest.xml.Wie stelle ich sicher, dass eine nicht unterstützte (höhere) API in Android nicht aufgerufen wird?

Ich weiß, dass ich überprüfen sollten, wenn die API unterstützt wird, bevor ich es nennen, zum Beispiel:

private void removeRule(RelativeLayout.LayoutParams params, int rule) { 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { // API 17 
     params.removeRule(rule); 
    } else { 
     params.addRule(rule, 0); 
    } 
} 

Aber manchmal vergesse ich/oder nicht wissen, ich bin ein höheres Level-API aufrufen und gelegentlich Crash mein Programm mit NoSuchMethodError Ausnahme.

Also, bevor ich meine App veröffentlichen, habe ich immer mein Projekt Android SDK 2.3.3 zu verwenden und stellen Sie sicher, ich mache nicht illegal Methodenaufrufe (zB alle Fehler, die ich in einer if Anweisung Überprüfung der Android gewickelt bekommen SDK-Version) und setzen Sie das SDK dann wieder auf 4.2.2.

Gibt es einen besseren Weg, um sicherzustellen, dass die nicht unterstützte API nicht aufgerufen wird, ohne das SDK zu wechseln?

(P. S. Ich benutze IntelliJ)

+2

Die richtige Antwort ist "Use Lint" (http://developer.android.com/tools/debugging/improving-w-lint.html), da es Ihnen sagen wird, wenn Sie etwas neuer als Ihre 'android: minSdkVersion verwenden ', aber ich bin mir nicht sicher, ob es dafür noch eine IntelliJ-Integration gibt. Wenn nicht, müssten Sie es über die Befehlszeile ausführen. – CommonsWare

Antwort

7

Sie könnte (sollte) Android Lint laufen, das überprüfen:

rechts auf das Projekt klicken (oder Paket, Klasse)> Analysieren> Inspect-Code.

enter image description here

+0

Danke! Ich wusste nichts über Android Lint. Aber ich habe es gerade ausprobiert, es scheint, dass es nicht die falschen API-Aufrufe gefunden hat (unter Verwendung des obigen Beispiels, aber entferne die if-Anweisungsprüfung). :( –

+0

entfernen Sie die '@SuppressLint (" NewApi ")' aus Ihrem Code, sehen Sie, wo die Lint Fehler sind, dann setzen Sie die Unterdrückung zurück und fügen Sie die if-Anweisungen, wo erforderlich – LuckyMe

+0

Mögliche Gründe Lint fängt nicht die "NewAPI" -Fehler - https://code.google.com/p/android/issues/detail?id=56427 –

2

in Eclipse Eigenschaften -> Android Lint Einstellungen -> NewApi und den Schweregrad ändern, um Fehler.

Verwandte Themen