2013-08-05 22 views
13

Gần đây tôi sử dụng qt để viết một ứng dụng Android.
Nhưng tôi có một câu hỏi lớn, tôi có thể sử dụng/gọi một số APIS Android bản địa, chẳng hạn như gọi hoạt động đặc biệt không?[Gốc]: Sử dụng các hàm Java và thư viện của bên thứ ba trong Qt cho Android

ví dụ: Trong Android SDK, tôi gọi liên hệ bằng java:
Ý định mục đích = new Intent (Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult (ý định, PICK_CONTACT);

Có một số thư viện trình bao bọc C++ cho java sdk API java không?

Hoặc nếu tôi cần một số thành phần đặc biệt (đã viết bằng java), tôi có thể có nó trong chương trình android qt của mình không?
Hoặc tạo một chương trình với các trang/hoạt động hỗn hợp của "pure qt" và "standard java" hoặc "NDK android NDK"?

(Tôi đặt câu hỏi này vì tôi có kinh nghiệm với khung MOSYNC, đó là một câu hỏi hay nhưng bạn đã bị giới hạn ở thư viện riêng của mình, bạn không thể sử dụng bất kỳ thư viện bên ngoài hoặc API chuẩn Android nào, ...)

Xin cảm ơn trước.

EDIT: theo những cải tiến trong JNI ( http://qt-project.org/doc/qt-5/qtandroidextras-index.html), tôi có một câu hỏi: tôi có thể sử dụng 'bất kỳ' Java thư viện của bên thứ ba trong dự án android qt của tôi? Khi tôi sử dụng các thư viện đó trong các dự án Java SDK?

+2

QT sử dụng NDK của Android, cần có hàm bao bọc, phải không? –

+1

Có sebastian, NDK, nhưng điều này không có nghĩa là QT cũng có một wrapper để sử dụng android sdk/ndk. – paykoob

+0

Tôi không nghĩ có bất kỳ trình bao bọc đặc biệt nào cho các chức năng liên quan đến Android. Điều này vẫn sẽ được yêu cầu phải được thực hiện với các cuộc gọi NDK. QT sẽ có các chức năng "QT" chuẩn làm việc cho giao diện người dùng và các hoạt động cơ bản io, quản lý các đối tượng vv Nhưng việc truy cập các tính năng android đặc biệt vẫn sẽ bị bỏ quên. –

Trả lời

-1

Bạn có thể lập trình bằng C/C++ bằng NDK của Android. Bạn sẽ phải bọc codebase C++ của bạn trong một thư viện tĩnh và tải nó thông qua một trình bao bọc Java & JNI.

NDK chuẩn không hỗ trợ RTTI và rất nhiều chức năng của tiêu chuẩn C++ cũng không có sẵn như std :: string, v.v. Để giải quyết điều này, bạn có thể biên dịch lại NDK. Dmitry Moskalchuk cung cấp một phiên bản sửa đổi của NDK hỗ trợ điều này tại http://www.crystax.net/android/ndk-r3.php. Phiên bản sửa đổi này hoạt động trên tất cả các điện thoại Android chạy trên bộ xử lý ARM.

Lưu ý: Cuộc gọi JNI có thể giảm hiệu suất của bạn rất nhiều. Java không phải là điều khó khăn - nếu bạn biết cách lập trình trong C/C++. Ưu điểm của Java là ứng dụng có thể chạy trên bất kỳ thiết bị nào chạy Android, nơi mà các ứng dụng NDK phụ thuộc vào kiến ​​trúc mà nó đã được biên dịch.

+2

NDK không hỗ trợ RTTI, ngoại lệ và STL. Xem: http://developer.android.com/tools/sdk/ndk/index.html – Frohnzie

9

Để thực hiện những gì bạn muốn, bạn cần gọi mã Java từ mã C++ của bạn, thông qua JNI. Tôi không biết bất kỳ thư viện trình bao bọc C++ nào cho việc này. Bạn sẽ cần lấy Java VM từ JNI_OnLoad, và khi bạn muốn gọi một phương thức Java, bạn sẽ cần đính kèm VM vào luồng của bạn, với cung cấp cho bạn một JNIEnv, bạn có thể sử dụng nó để tìm lớp bạn muốn và các phương thức gọi trên đó. This link sẽ giúp với các chi tiết.

Việc sử dụng QT để phát triển ứng dụng Android, có, nếu bạn cần hỗ trợ đa nền tảng và muốn triển khai cùng một ứng dụng cho Android, Linux, Windows, v.v. Nếu bạn chỉ phát triển Android ứng dụng, sau đó theo kinh nghiệm của tôi, việc sử dụng Android trực tiếp trở nên dễ dàng và nhanh hơn.

3

Tôi không chắc chắn cách bạn đang tiếp tục với "Qt dành cho Android". Nhưng tại thời điểm này, ý tưởng này được hỗ trợ chính thức bởi nhóm KDE (K Desktop Environment). Họ gọi nó là dự án KDE Necessitas. Và họ đã phát hành bản beta đầu tiên của dự án này vào tháng 10 năm 2012.

Vì vậy, về cơ bản khi bạn cài đặt SDK Necessitas, bạn có thể cài đặt những thứ này.

  1. Qt Creator - Qt IDE được tùy chỉnh cho Android.
  2. NDK của Android - Để xây dựng đối tượng được chia sẻ ra khỏi mã Qt.
  3. SDK Android - Được tùy chỉnh với hỗ trợ Qt.

Sử dụng tùy chỉnh Qt Creator, bạn có thể

  1. Tạo một dự án giao diện người dùng Android.
  2. Thiết kế giao diện người dùng trong Thiết kế Qt tích hợp.
  3. Biên dịch mã C++ để tạo tệp .so và gói nó bằng mã Java.
  4. Tạo APK và triển khai.
  5. Gỡ lỗi APK.

Một mối quan tâm lớn mà tôi có với Qt dành cho Android là liên quan đến giao diện người dùng. Giao diện người dùng có giao diện và cảm giác bản địa của KDE 4.x (tương tự chạy trên máy tính để bàn). Chủ đề giao diện người dùng Android (Holo, v.v.) chưa hoàn toàn khả dụng.

Và vì dự án này vẫn còn là phiên bản beta, tôi không chắc về tính khả dụng của các lớp/hàm bao bọc cho các tính năng gốc của Android. Vui lòng xem tài liệu chính thức để biết thêm chi tiết.

Hy vọng điều này sẽ hữu ích.

+0

cảm ơn @gnuanu, thực sự tôi hỏi câu hỏi này để được đề cập chính thức! – paykoob

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