2013-06-12 24 views
8

Tôi đang tạo ứng dụng cho Gingerbread và lên với minSdkVersion=10targetSdkVersion=17 trong tệp AndroidManifest.xml của mình.Làm cách nào để đảm bảo API không được hỗ trợ (cấp cao hơn) không được gọi trong Android?

Tôi biết rằng tôi nên kiểm tra nếu các API được hỗ trợ trước khi tôi gọi nó, ví dụ:

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); 
    } 
} 

Nhưng đôi khi tôi quên/hoặc không biết tôi đang kêu gọi một mức độ cao hơn API và thỉnh thoảng làm hỏng chương trình của tôi với ngoại lệ NoSuchMethodError. Vì vậy, trước khi xuất bản ứng dụng, tôi luôn đặt dự án của mình sử dụng Android SDK 2.3.3 và đảm bảo rằng tôi không thực hiện các cuộc gọi phương pháp bất hợp pháp (ví dụ: tất cả các lỗi tôi nhận được được bao gồm trong câu hỏi if kiểm tra Android Phiên bản SDK), sau đó đặt SDK trở lại phiên bản 4.2.2.

Có cách nào tốt hơn để đảm bảo API không được hỗ trợ không được gọi mà không cần chuyển SDK?

(T.B. Tôi đang sử dụng IntelliJ)

+2

Câu trả lời đúng là "Sử dụng Lint" (http://developer.android.com/tools/debugging/improving-w-lint.html) vì nó sẽ cho bạn biết khi bạn sử dụng một cái gì đó mới hơn so với 'android: minSdkVersion của bạn ', nhưng tôi không chắc liệu có tích hợp IntelliJ cho điều đó chưa. Nếu không, bạn sẽ cần phải chạy nó từ dòng lệnh. – CommonsWare

Trả lời

7

Bạn có thể (nên) chạy Android Lint để kiểm tra xem:

Nhấp chuột phải vào dự án (hoặc gói, lớp)> Phân tích> Kiểm tra Mã.

enter image description here

+0

Cảm ơn! Tôi không biết về Android Lint. Nhưng tôi chỉ thử nó ra, có vẻ như nó đã không bắt các cuộc gọi API sai (sử dụng ví dụ trên, nhưng loại bỏ các kiểm tra nếu tuyên bố). :( –

+0

xóa '@SuppressLint (" NewApi ")' khỏi mã của bạn, xem vị trí của các lỗi Lint, sau đó đặt lùi lại và thêm các câu lệnh if nếu cần. – LuckyMe

+0

Lý do có thể khiến Lint không gặp lỗi "NewAPI" - https://code.google.com/p/android/issues/detail?id=56427 –

2

Trong Eclipse Properties -> Preferences Lint Android -> NewApi và thay đổi mức độ nghiêm trọng đến Lỗi.