2011-10-20 22 views
17

tôi sắp bắt đầu phát triển ứng dụng Android.android ndk vs sdk - nếu các tính năng có liên quan

Từ What is NDK? tài liệu tôi đã không thể để trích xuất thông tin sau:

Có sử dụng NDK thực sự giới thiệu tính năng mới so với SDK?

Tôi quan tâm đến điều này vì sử dụng NDK làm tăng đáng kể sự phức tạp của ứng dụng, vì vậy nếu tôi không quan tâm đến việc tăng hiệu suất, có lý do nào khác để tìm NDK không?

gì tôi có nghĩa là ví dụ:

điện thoại -restart

  • (Tôi biết không phải SDK hoặc NDK phép này, tôi chỉ cần sử dụng nó như là ví dụ về những gì tôi có nghĩa) cho phép nói java SDK làm không cho phép điều này, nhưng một số thư viện gốc làm - sau đó trả lời cho câu hỏi của tôi là có, NDK thêm một số chức năng

Thanx trước cho bất kỳ câu trả lời hữu ích nào.

+0

tôi không thấy làm thế nào đây là câu hỏi dựa trên ý kiến ​​ – hendrix

Trả lời

9

Lý do duy nhất để sử dụng NDK theo như tôi biết là để ép thêm hiệu suất ra khỏi ứng dụng của bạn và tiến gần hơn đến kim loại trần. Nếu bạn không cần phải làm một trong những điều này, có lẽ bạn nên tránh xa NDK.

Cũng lưu ý rằng VM Dalvik đã có một số hiệu suất khá tuyệt vời và tương đối đơn giản hơn.

+0

không phải Java, Dalvik VM – HaMMeReD

+0

@HaMMeReD cảm ơn bạn đã nắm bắt. Đã chỉnh sửa câu trả lời của tôi. –

+1

Hoặc bây giờ là máy ảo ART! – CorayThan

13

NDK bị hạn chế nhiều hơn về chức năng.

Những gì bạn nhận được từ NDK là khả năng viết ứng dụng của bạn bằng C++ và biên dịch nó thành mã ARM gốc. Nếu bạn thích C++ tốt hơn Java, nếu bạn có một ứng dụng C++ hiện có mà bạn muốn chuyển sang Android, hoặc nếu bạn chỉ cần hiệu năng phụ mà chỉ có mã nguồn gốc mới có thể cung cấp, thì bạn nên sử dụng NDK.

Tôi chưa tự làm điều này, nhưng một cách khác là viết ứng dụng lai, trong đó ứng dụng được viết chủ yếu bằng Java, với các hàm được chọn viết bằng C++ được gọi từ mã Java.

+4

Xin lỗi vì đã bình luận quá muộn vào câu hỏi này, nhưng tôi chỉ muốn chắc chắn rằng nó là rõ ràng rằng viết bằng C++ vì bạn thích nó không phải là một lý do chính đáng để sử dụng NDK. – DealerNextDoor

+1

@DealerNextDoor Bởi vì không ai nên thích C++, hoặc vì không ai nên sử dụng NDK? – CorayThan

+2

@CorayThan Không; viết bằng C++ hoàn toàn bởi vì bạn không muốn viết bằng Java là một lý do xấu. Như đã nêu trên trang tải xuống NDK, "Trước khi tải xuống NDK, bạn nên hiểu rằng NDK sẽ không mang lại lợi ích cho hầu hết các ứng dụng. Là nhà phát triển, bạn cần cân bằng lợi ích của nó so với các nhược điểm của nó. Kết quả là cải thiện hiệu suất đáng chú ý, nhưng nó luôn làm tăng độ phức tạp của ứng dụng của bạn. Nói chung, bạn chỉ nên sử dụng NDK nếu cần thiết cho ứng dụng của bạn — không bao giờ vì bạn chỉ thích chương trình trong C/C++. " – DealerNextDoor

17

Bạn thực sự nên sử dụng SDK, trừ khi bạn có lý do chính đáng để sử dụng NDK. Lý do chính đáng có thể khác nhau, nhưng ví dụ: bạn có thể sử dụng NDK:

  • Nếu bạn muốn sử dụng OpenGL ES 2.0 cho Android 2.1 (Eclair), nó chỉ sẵn có thông qua NDK. Hỗ trợ SDK cho OpenGL ES 2.0 bắt đầu bằng phiên bản Froyo.

  • Nếu bạn muốn sử dụng RenderScript

  • Nếu bạn có một phần lớn của logic của ứng dụng của bạn viết bằng C/C++

9

Đối với tôi, tôi nghĩ rằng điều quan trọng là phải biết NDK mà là một công cụ mạnh mẽ trong việc phát triển các ứng dụng di động. Đặc biệt là nếu bạn muốn phát triển một ứng dụng đa nền tảng, NDK là bất khả chiến bại trong miền này. Vì cùng một mã được viết bằng C + + cho Android có thể dễ dàng được chuyển và chạy theo cùng một cách trên iOS, Windows hoặc bất kỳ nền tảng nào khác mà không thay đổi mã gốc.Mà thực sự tiết kiệm rất nhiều thời gian trong việc phát triển các ứng dụng được phát triển để chạy trên nhiều nền tảng; như trò chơi và các ứng dụng cổ điển khác. Điều bạn không thể làm với SDK.

+1

Đồng ý. Ngày nay thật khó để tưởng tượng bất kỳ ứng dụng tốt nào muốn gặp khó khăn chỉ với một nền tảng như Android. Vì vậy, việc thực hành chung là để mọi thứ vượt quá lớp UI thành mã gốc để chúng có thể dễ dàng được chuyển sang các nền tảng khác, một số trong đó có thể là các nhà sản xuất được chỉ định. –

1

Phương pháp gốc là mã dành riêng cho nền tảng. Chúng thường được viết bằng các ngôn ngữ như C hoặc C++ và chứa trong các thư viện (dll's). Có thể tạo một ứng dụng Java lai có lợi từ các thư viện như vậy.

Lý do cho việc sử dụng Native Phương pháp

  1. Đạt tiếp cận với khả năng đặc biệt của điện thoại hoặc hoặc Android OS
  2. Đạt tốc độ thêm
  3. Đạt truy cập vào một cơ quan lớn của mã di sản hiện có

Thông thường, các trường hợp sử dụng tốt cho NDK là các ứng dụng chuyên sâu về CPU chẳng hạn như ga động cơ của tôi, xử lý tín hiệu và mô phỏng vật lý

bất lợi lớn phương pháp gốc là bạn sẽ không có khả năng đa nền tảng.

Bây giờ nếu bạn không biết mã gốc là gì thì có thể bạn không cần sử dụng mã gốc. Tài liệu NDK của Android giải thích rõ điều này:

..., bạn nên hiểu rằng NDK sẽ không mang lại lợi ích cho hầu hết các ứng dụng. Là một nhà phát triển, bạn cần phải cân bằng lợi ích của nó so với những hạn chế của nó. Đáng chú ý, việc sử dụng mã gốc trên Android thường không dẫn đến cải thiện hiệu suất đáng chú ý , nhưng nó luôn làm tăng ứng dụng của bạn phức tạp. Nói chung, bạn chỉ nên sử dụng NDK nếu cần thiết cho ứng dụng của bạn — không bao giờ vì bạn chỉ thích chương trình trong C/C++. Khi kiểm tra xem bạn có nên phát triển theo mã gốc hay không, hãy suy nghĩ về các yêu cầu của bạn và xem API khung Android có cung cấp chức năng bạn cần hay không .

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