2011-01-28 29 views
30

Vì vậy, chúng tôi đã thấy sdk xem trước và các công cụ mới gọn gàng như ActionBar và Fragments. Thực hiện rất nhiều cuộc gọi phương pháp sẽ không thể tránh khỏi để sử dụng chúng, vì vậy chiến lược nào có để duy trì 1 phiên bản của ứng dụng, điều này sẽ cho phép tôi sử dụng tất cả các công cụ mới nhưng cũng hoạt động trên các thiết bị chạy 2.3 trở xuống? Ứng dụng của tôi nhắm mục tiêu 1.5 - 2.3 vào lúc này.Chiến lược cho Tổ ong và khả năng tương thích ngược

Trả lời

27

API cùng một phân đoạn hiện khả dụng dưới dạng static library để sử dụng với các phiên bản Android cũ hơn; nó tương thích trở lại Android 1.6.

Có một vài thủ thuật bạn có thể sử dụng để xem liệu các API mới khác nhau có sẵn cho ứng dụng của bạn hay không. Nói chung, có thể bạn sẽ muốn tạo hai bộ hoạt động thay thế, một bộ sử dụng các API mới lạ (ActionBar, Animators, vv) - và một bộ khác không có.

Mã sau đây cho thấy cách bạn có thể sử dụng tính năng phản chiếu và ngoại lệ để xác định tính khả dụng của API phân đoạn và kiểm tra phiên bản để xác nhận xem các API Honeycomb khác có sẵn hay không.

private static boolean shinyNewAPIsSupported = android.os.Build.VERSION.SDK_INT > 10; 

    private static boolean fragmentsSupported = false; 

    private static void checkFragmentsSupported() throws NoClassDefFoundError { 
    fragmentsSupported = android.app.Fragment.class != null; 
    } 

    static { 
    try { 
     checkFragmentsSupported(); 
    } catch (NoClassDefFoundError e) { 
     fragmentsSupported = false; 
    } 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Intent startActivityIntent = null; 
    if (!shinyNewAPIsSupported) 
     startActivityIntent = new Intent(this, MainNonActionBarActivity.class); 
    else 
     startActivityIntent = new Intent(this, MainActionActivity.class); 

    startActivity(startActivityIntent); 
    finish(); 
    } 

Nói chung bạn có thể sử dụng cùng định nghĩa bố cục. Trong trường hợp Fragments có sẵn, bạn sẽ thổi phồng từng bố cục trong một Fragment khác, nơi chúng không phải là bạn có thể muốn sử dụng các thẻ <include> để nhúng một số trong chúng vào một bố cục Hoạt động phức tạp hơn.

Một tác phẩm chi tiết hơn thông qua làm thế nào để viết mã để hỗ trợ tương thích ngược trên Honeycomb có thể được tìm thấy ở đây: http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html

+5

Ngoài ra nếu API bổ sung duy nhất bạn yêu cầu là thanh tác vụ, hãy xem thư viện mà tôi đã viết, đó là phần mở rộng của thư viện tương thích bổ sung thêm điều đó. Nó cung cấp một API duy nhất cho thanh tác vụ và cho phép sử dụng một chủ đề duy nhất. Bạn có thể tìm thêm thông tin tại http://actionbarsherlock.com. –

2

Bạn có thể tìm thấy Reto Meier's article on backwards-compatibility hữu ích, đặc biệt là phần có tiêu đề "Xử lý các lớp bị thiếu".

Tôi chưa tự xem SDK Honeycomb nhưng tôi thích bạn, hy vọng nó dễ sử dụng và không phức tạp để sử dụng các tính năng mới mà không gây nguy hiểm cho tính tương thích với các thiết bị cũ.

+1

Ngoài ra kiểm tra bài này, cung cấp thêm ví dụ về cách làm việc với nhiều phiên bản nền tảng: http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html – adamp

+0

Tôi đã đọc cả hai, nhưng có vẻ như Honeycomb sẽ được tham gia nhiều hơn, đặc biệt là với những thứ như Fragments và ActionBar. Bạn có nghĩ rằng sử dụng những kỹ thuật này sẽ là đủ? –

3

Thuận tiện, Dianne Hackborne của Google đã đăng a blog entry bao gồm chủ đề chính xác này. Google cho biết họ sẽ cung cấp các thư viện tĩnh để các phiên bản Android cũ hơn cũng sẽ có thể sử dụng các mảnh vỡ.

1

Vâng google vừa công bố tổ ong sẽ chỉ máy tính bảng: http://www.pcmag.com/article2/0,2817,2379271,00.asp

Vì vậy, nếu thiết bị của bạn có nghĩa là cho điện thoại di động chỉ này có thể không còn là một vấn đề.

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