Tích hợp java SDK vào cocos2dx game

Mở đầu

Dự án gần đây khách hàng yêu cầu làm 1 sdk để tích hợp vào các game của các developer khác nhau, sdk được ưu tiên viết bằng java native nhưng yêu cầu phải tích hợp được cho game xây dựng cả bằng Native, cocos2dx, unity... Thấy ace khá lo lắng vấn đề tích hợp này nên quyết định viết guilde hướng dẫn cách gọi java method từ C++(cocos2dx) thông qua signature của Jni.

Các bước tiến hành

chuẩn bị môi trường

  1. download cocos2dx ver3.0 tại đây
  2. unzip vào thư mục workspace của bạn
  3. tạo new game với cocos2dx có thể tham khảo tại đây trong ví dụ này tôi dùng 1 project đã được chuẩn bị trước download here
  4. import project to android studio : có thể xem tại đây
  5. mở terminal và build android project:

cd Project_Directory\JniTest\proj.android Python build_native.py

  1. reopen android studio bây giờ bạn đã có thể chạy project một cách bình thường.

Edit code để gọi java method qua Jini

  1. Tạo method java trong Activity.java

public static void alertJNI() { String tag = "JniTest"; String message = "call me from C++ cocos2dx"; Log.d(tag, "Showing alert dialog: " + message); }

chú ý :đối với khi sử dụng thư viện ta cần viết các method wrapper đặt trong Activity.java sau đó gọi lại các method từ trong thư viện.Cocos2dx không thể gọi trực tiếp method từ file .jar được.

  1. sửa file phía cocos2dx để gọi method Tại SceneGame cần gọi java method, ta thực hiện import Jni

#include "platform/android/jni/JniHelper.h" #include <jni.h>

Tại function C++ muốn gọi java code, ta khởi tạo Jni

cocos2d::JniMethodInfo methodInfo;

Thực hiện gọi Java Method

cocos2d::JniHelper::getStaticMethodInfo(methodInfo,"org/cocos2dx/cpp/AppActivity", "alertJNI", "()V"))

trong đó alertJNI là signature của Wrapped method đặt ở Activity.java "()V là phần param của method.Trong trường hợp này method không có param nên phần trong ngoặc để trống.Nếu có param thì lần lượt truyền param theo thứ tự và cách nhau bởi dấu phẩy.

  1. Lưu code lại và build lại android project bằng lệnh

Python build_native.py

  1. Mở AndroidStudio lên build project ,debug tại function C++ để confirm javacode được gọi.

Kết luận và chú ý

  1. Jni cung cấp cho chúng ta phương pháp để gọi được các method từ java do đó có thể tích hợp được nhiều thư viện viết bằng java (quảng cáo,thống kê,xử lý ảnh...) của bên thứ 3 vào game cocos2dx cho Android.
  2. Tùy theo phiên bản của cocos2dx mà cách build project có khác nhau có thể tham khảo tại đây
  3. Chúc ace thành công khi sử dụng Java lib trong cocos2dx.