2012-07-30 27 views
7

Tôi đang làm việc trên một ứng dụng sử dụng ActionBarSherlock. Vì nó là documentation chỉ ra:Biên dịch với Android 4.X nhưng hỗ trợ API Cấp 9

[...] thư viện yêu cầu cả nó và dự án của bạn được biên soạn với Android 4.0 hoặc mới hơn. Dự án cũng yêu cầu rằng bạn đang biên soạn với JDK 1.6 trong cả trình soạn thảo của bạn và bất kỳ hệ thống nào xây dựng mà bạn có thể đang sử dụng.

Vì vậy, điều đó có nghĩa là tôi sẽ biên dịch ứng dụng của tôi (và thư viện) chống lại 4.X Android nhưng trong Manifest của tôi, tôi tuyên bố rằng tôi đang nhắm mục tiêu (ví dụ) API Cấp 9.

này tất cả hoạt động tốt và tốt nhưng có cái gì đó làm phiền tôi. Từ số FAQ:

Tôi nên nhắm mục tiêu mức API nào trong tệp kê khai khi sử dụng thư viện?

Targetting API cấp 11 hoặc mới hơn là bắt buộc vì nó sẽ khiến Android tự động thêm thanh tác vụ gốc khi chạy trên các thiết bị mới hơn. Vì bạn sẽ biên soạn các API mới nhưng ứng dụng của bạn có khả năng sẽ chạy trên các thiết bị có phiên bản cũ hơn của Android chăm sóc thêm để tránh sử dụng hoặc kiểm tra đúng cách và gọi bất kỳ phương thức nào được giới thiệu sau SDK tối thiểu của bạn phiên bản.

Điều đó có nghĩa, rằng tôi sẽ phải tay kiểm tra tất cả các cuộc gọi phương thức, vì vậy tôi không sử dụng bất kỳ mà không có sẵn trong API nhắm mục tiêu Cấp (9 trong trường hợp của tôi)? Điều này nghe có vẻ sai với tôi.

Có cách nào để nói với IDE của tôi (IntelliJ), rằng tôi chỉ sử dụng API cấp 9 (vì vậy tôi không nhận được bất kỳ tự động hoàn thành cho các phương pháp/lớp không tồn tại và không sử dụng chúng do tai nạn) và sau đó chọn biên dịch nó dựa trên phiên bản Android khác?

Hoặc tôi có thể sử dụng một số kiểm tra tự động (chạy lúc biên dịch) để kiểm tra điều đó không?

Trả lời

8

Tính năng lint của ADT sẽ giải quyết vấn đề này bằng cách cảnh báo khi các cuộc gọi API được thực hiện cho phiên bản API sai.

Bạn nên biên dịch cả ABS và dự án của mình bằng SDK mới nhất hiện có (hiện tại, 4.1). Tệp kê khai của bạn phải có số lượng targetSdkVersion càng cao càng tốt (lý tưởng phù hợp với SDK biên dịch của bạn) và minSdkVersion của bạn phải được đặt thành phiên bản thấp nhất bạn hỗ trợ.

Lint được tích hợp một phần với IntelliJ IDEA và cũng có sẵn dưới dạng công cụ dòng lệnh.

1

Bạn tạm thời đặt SDK mục tiêu của mình thành các SDK thấp hơn khác nhau và gỡ lỗi với nó. Công trình cuối cùng của bạn là với SDK mới nhất.

+0

Đây sẽ là phương pháp * thủ công *. –

+0

Ồ tôi nghĩ bạn có nghĩa là bằng tay bằng cách tra cứu từng cuộc gọi và kiểm tra. Tôi không nghĩ rằng nó làm những gì bạn muốn tự động. Đó là một ý tưởng tốt cho một cập nhật ADT trong tương lai nhưng tôi không nghĩ rằng nó có sẵn hiện tại. Nhưng tôi không chắc chắn! –

0

Đặt mục tiêu Xây dựng tương tự như bạn đã đề cập trong tệp kê khai của mình.

+0

Như đã đề cập bởi @GeeksOnHugs ... –

+0

đặt mục tiêu Xây dựng là khác nhau, sau đó đặt phiên bản SDK mục tiêu. Nó cũng không yêu cầu bất kỳ thay đổi nào trong tệp kê khai. Tôi biết ít nhất trong nhật thực thay đổi mục tiêu xây dựng sẽ sửa tất cả các thông báo lỗi. Bạn cũng có thể muốn bao gồm một minSdkVersion thấp hơn cũng là targetSdkVersion của bạn, do đó nó sẽ có sẵn dưới dạng minSdkVersion trên cửa hàng Play. – Stevy888

0

như mọi khi, bạn nên đặt targetSdk thành tối đa có sẵn trên cả tệp kê khai và dự án.tệp thuộc tính (như được đề xuất bởi google trên một trong các video của họ), do đó, ADT & SDK sẽ có thể tối ưu hóa ADK cho phù hợp.

đặt minSdk thành ứng dụng mà bạn muốn hỗ trợ ứng dụng của mình và để Lint cho bạn biết nếu có bất kỳ sự cố nào trong trường hợp bạn sử dụng các tính năng quá mới.

Các vấn đề liên quan