2011-08-27 28 views
19

Sự khác nhau giữa targetSdkVersion được đặt trong tệp kê khai và mục tiêu xây dựng dự án được đặt trong môi trường xây dựng (ví dụ: Eclipse) là gì?Sự khác biệt giữa targetSdkVersion và Project build target

Tôi đã cố gắng tìm thêm thông tin về hai tính năng này, nhưng tôi không thể tìm thấy bất kỳ giải thích rõ ràng và cụ thể nào.

Dường như mục tiêu xây dựng Dự án quyết định mức độ tương thích API, được sử dụng trong quá trình biên soạn. Khi targetSdkVersion chỉ ảnh hưởng đến khả năng hiển thị của các phần tử tệp kê khai của cấp API đã cho.

Có ai có thể xác nhận/giải thích điều này không?

EDIT: Cảm ơn các bạn đã trả lời nhanh chóng. Tôi quên đề cập đến trong câu hỏi của tôi rằng tôi đã đọc tất cả các chủ đề trên Android Dev về các tính năng này và cũng googled nó và tìm kiếm nó trên Stack Overflow. Vì vậy, tôi hiểu mục đích cơ bản của min/target/maxSdkVersion sẽ được sử dụng trong Android Market và trong hệ thống Android. Tuy nhiên, theo các bài viết khác từ những người có vấn đề với tùy chọn Manifest này, có vẻ như sử dụng-sdk thực sự có tác động đến cách mức độ API được giải thích. Ít nhất đó là những gì tôi nghi ngờ.

Một thực sự tốt lời giải thích được đưa ra ở đây: http://developer.android.com/guide/appendix/api-levels.html

Tuy nhiên, nó vẫn chưa rõ ràng đối với tôi liệu targetSdkVersion không ảnh hưởng đến việc biên soạn/thời gian chạy của APK trên hệ thống Android? Hoặc nó chỉ là để xác nhận như các tài liệu sử dụng-sdk cho thấy?

+0

Tôi hiểu mục đích cơ bản của yếu tố sử dụng-sdk, nhưng câu hỏi của tôi là đúng hơn nếu targetSdkVersion thực sự tác động đến cách ứng dụng chạy trên Hệ thống Android. Hoặc có thể nó chỉ là để xác thực như các tài liệu cho thấy. – hnviet

Trả lời

27

Thuộc tính targetSdkVersion thực sự ảnh hưởng đến hành vi thời gian chạy của ứng dụng.

Tùy thuộc vào những gì bạn đặt để xác định xem tính năng tương thích có được bật/tắt trong khung Android hay không. Ví dụ, khi bạn đặt targetSdkVersion = 11, chủ đề mặc định của ứng dụng của bạn sẽ được đặt thành @android:style/Theme.Holo - nghĩa là ứng dụng của bạn sẽ có tiện ích con Giao diện người dùng kiểu Honeycomb, sẽ nhận được Thanh tác vụ và sẽ không có Trình đơn tùy chọn ở cuối màn hình.

Nếu bạn đặt targetSdkVersion thành giá trị thấp hơn, chủ đề mặc định của bạn sẽ tiếp tục là @android:style/Theme - bất kể cấp API bạn đang thực sự xây dựng dựa trên.

TargetSdkLevel cũng ảnh hưởng đến giá trị mặc định cho phần tử <supports-screens>, do đó sẽ xác định xem ứng dụng của bạn có chạy ở chế độ tương thích mật độ hay không.

Lưu ý thú vị: Android Market không thực sự sử dụng thuộc tính targetSdkLevel cho bất kỳ điều gì vào lúc này. Nó hoàn toàn được sử dụng trong thời gian chạy cho mục đích tương thích, và có thể tại thời gian biên dịch - mặc dù tôi đã không nhìn vào hành vi đó. Nếu mọi người tò mò về trình biên dịch, tôi có thể kiểm tra với nhóm SDK để biết thêm thông tin.

Tất nhiên, hoàn toàn có thể là thị trường có thể quyết định làm điều gì đó với điều này trong tương lai.

+0

Làm rõ tuyệt vời. Có quá nhiều thông tin sai lệch liên quan đến các thuộc tính này trên SO. Tôi chắc chắn sẽ quan tâm đến khía cạnh biên dịch thời gian. Cảm ơn! –

+0

Về chủ đề Holo - bạn nói rằng "chủ đề mặc định của ứng dụng của bạn sẽ được đặt thành @android: style/Theme.Holo". Điều này chỉ áp dụng cho các thiết bị có API cấp 11 trở lên? – MichalH

4

Mục tiêu xây dựng được sử dụng để biết SDK cần biên dịch APK của bạn. Điều này có nghĩa là nếu có bất kỳ Lớp học hoặc phương pháp nào không có sẵn trong phiên bản SDK tối thiểu của bạn, nhưng trong các phiên bản sau đó, các Lớp hoặc phương pháp đó sẽ vẫn có sẵn để sử dụng. Bạn sẽ phải đảm bảo kiểm tra khi nào bạn đang sử dụng chúng và thực hiện các cách tiếp cận thay thế nếu phiên bản SDK của người dùng không tương thích với các lớp/phương thức đó.

android:targetSdkVersion 

Một số nguyên chỉ định cấp API mà ứng dụng đang nhắm mục tiêu.

Với thuộc tính này được thiết lập, ứng dụng nói rằng nó có thể chạy trên các phiên bản cũ hơn (xuống đến minSdkVersion), nhưng đã được thử nghiệm rõ ràng để làm việc với phiên bản được chỉ định tại đây. Chỉ định phiên bản đích này cho phép nền tảng tắt cài đặt tương thích không cần thiết cho phiên bản đích (có thể được bật để duy trì tính tương thích) hoặc bật các tính năng mới hơn không có sẵn cho các ứng dụng cũ hơn. Điều này không có nghĩa là bạn có thể lập trình các tính năng khác nhau cho các phiên bản khác nhau của nền tảng - nó chỉ đơn giản là thông báo nền tảng mà bạn đã thử nghiệm với phiên bản đích và nền tảng không nên thực hiện thêm bất kỳ công việc nào để duy trì tính tương thích về phía trước với phiên bản đích.

Bạn có thể tìm thêm thông tin bằng cách tham khảo URL này:

http://developer.android.com/guide/topics/manifest/uses-sdk-element.html

Ngoài ra còn có một bài viết tốt bằng văn bản của google trên kiểm tra để chắc chắn rằng bạn đang sử dụng hiện nay hệ điều hành Android phiên bản sẽ sử dụng lớp thích hợp/phương pháp

http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html

+0

Khi Trever nêu rõ câu trả lời của mình, targetSdkVersion không được Market sử dụng tại thời điểm này. Tôi có thể tải lên một ứng dụng có targetSdkVersion = 10 và tôi vẫn có thể thấy ứng dụng đó trong Market trên máy tính bảng HC của mình. Bạn có thể nghĩ đến maxSdkVersion, không nên thiết lập/sử dụng. –

+0

Trong câu trả lời của tôi, tôi không bao giờ nói nó đã được sử dụng cho thị trường, nhưng trong ứng dụng của bạn. – hooked82

+0

Vâng, nó được đặt trong tệp kê khai của bạn. Tôi có thể nhầm lẫn nhưng dòng đầu tiên của bạn "Your targetSdkVersion được sử dụng cho Android Market để biết thiết bị nào hiển thị/không hiển thị ứng dụng của bạn" có vẻ ngụ ý rằng Market sử dụng điều này để xác định xem có hiển thị ứng dụng cho người dùng đang chạy cấp API hay không so với những gì bạn đặt targetSdkVersion. Trong thực tế, thị trường cơ bản bỏ qua nó. Mọi thứ khác trong câu trả lời của bạn đều là vàng. –

1

trong bạn "Create Project" -dialog trong Eclipse, bạn chỉ định minSdkVersion.Đây là cấp API được yêu cầu để chạy ứng dụng của bạn.

targetSdkVersion -giống chỉ cho Android Market biết rằng Ứng dụng của bạn đã được phát triển (và có thể được tối ưu hóa) để chạy theo API cấp cụ thể.

1

Mục tiêu xây dựng là mục tiêu mà bạn sẽ thử nghiệm ứng dụng. targetSdkVersion là ứng dụng của bạn được phát triển cụ thể. Cả hai đều giống nhau hầu hết thời gian.

Bạn sẽ tìm thấy giải thích chi tiết here.

0

targetSdkVersion thuộc tính thông báo cho hệ thống mà bạn đã thử nghiệm ứng dụng của bạn so với phiên bản đã cho (cấp api) và hệ thống không nên bật bất kỳ hành vi tương thích nào để duy trì tính tương thích về phía trước của ứng dụng với phiên bản đích. Ứng dụng vẫn có thể chạy trên các phiên bản cũ hơn (xuống đến minSdkVersion).

Mọi chi tiết - http://developer.android.com/guide/topics/manifest/uses-sdk-element.html

0

Câu hỏi này đã được trả lời đầy đủ, nhưng tôi muốn chỉ ra rằng nó không còn hoàn toàn đúng khi cho rằng các cửa hàng Google Play không sử dụng targetSdkVersion ở tất cả.

Trong trường hợp cụ thể nơi bạn đặt targetSdkVersion thành 23 (Marshmallow 6.0) và tải APK của bạn lên, ngay cả khi bạn đang tải lên phiên bản Beta, bạn sẽ không bao giờ có thể gửi APK cho ứng dụng có targetSdkVersion hơn 23.

Điều này là do những thay đổi đối với quyền giữa 22 và 23 không được phép đảo ngược cho một ứng dụng nhất định.

Điều này có thể là một chút bẫy nếu bạn chỉ đang thử 23 trong bản Beta và không chắc bạn đã sẵn sàng hỗ trợ chưa.

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