CHƯƠNG 5 QUY TRÌNH CHUYỂN TRÒ CHƠI
5.1. Chuyển sang Android
5.1.2. Hoạt động của JNI và quy trình biên dịch
Như chúng ta đều biết, ứng dụng android chạy trên nền chính là Java. Muốn chạy C/C++ ta có hai giải pháp:
- Sử dụng JNI: từ android 1.5 trở về sau.
- Sử dụng Native Activity: từ android 2.3 trở về sau.
Native Activity là phương án lựa chọn tốt hơn, bởi vì chương trình sẽ không tốn chi phí giao dịch giữa máy ảo Java và C/C++. Tuy nhiên, tới thời điểm hiện tại, số lượng các thiết bị hổ trợ Android 2.3 tương đối hiếm nên chúng ta sẽ sử dụng giải pháp JNI.
Hoạt động của JNI được mô tả như sau:
- Các phương thức JNI được đánh dấu bằng từ khóa native.
- Các phương thức này được viết bằng C++ và biên dịch ra thư viện liên kết động .so.
- Thư viện liên kết động được Load lên trong chương trình Java bằng lời gọi
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 68
- Khi trong chương trình Java có lời gọi tới hàm native, máy ảo Java sẽ tìm kiếm trong thư viện động xem hàm này đã được cài đặt chưa, sau đó các đối tượng Java sẽ được chuyển thành C++ để thực hiện lời gọi tới C++.
- Trong C++ cũng cung cấp các thư viện cho phép giao tiếp tới máy ảo và chương trình Java. Quy trình xây dựng một chương trình có sử dụng JNI như sau:
- Khai báo phương thức native ở trong lớp Java.
- Khai báo và cài đặt phương thức này trong C. (Nếu C++ thì phải sử dụng extern “C” để tránh sửa tên trong C++). Quy tắc đặt tên hàm đó như sau:
tengoi_tenlop_tenphuongthuc
- Sau đó dùng NDK để biên dịch mã nguồn C thành thư viện liên kết động và thư viện này được tự động bỏ vào thư mục lib của dự án android.
- Viết chương trình java gọi các hàm native này. - Dùng bộ SDK để biên dịch thành ứng dụng apk.
Do các bước sử dụng NDK để biên dịch được thực hiện trên dấu nhắc lệnh, do đó chúng ta sẽ tạo tập tin lệnh để thực hiện điều này.
5.1.3. Đồ họa
Android hổ trợ OpenGLES 2.0 trong NDK từ phiên bản 2.1 trở về sau. Và trong ví dụ NDK có sẵn ví dụ thực thi với OpenGL ES 2.0 nên ta có thể sử dụng ví dụ này, sau đó thay đổi các thành phần trong đó để tải ứng dụng C++ và chạy lên.
Ngoài ra để biên dịch với OpenGL ES 2.0 thì trong make file của dự án NDK ta phải thêm dòng LOCAL_LDLIBS := -llog -lz -lGLESv2.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 69
5.1.4. Âm thanh
NDK không hổ trợ chơi âm thanh cho đến Android phiên bản 2.2 trở về sau. Do đó chúng ta sẽ sử dụng Java để chạy các tập tin âm thanh.
Phần tải các tập tin âm thanh, Play Sound và StopSound được cài đặt trong Java:
Trong C++, ta cài đặt các hàm PlaySound và Stop Sound bằng cách gọi tới hàm PlaySound trong đối tượng Java.
SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 70