Chuẩn bị dự án SDL2 để chạy trên Android

Chào mọi người. Hôm nay chúng ta sẽ xem cách chuẩn bị một dự án sử dụng thư viện sdl2 để chạy trò chơi trên Android.

Trước tiên, bạn cần tải xuống Android Studio, cài đặt nó và mọi thứ cần thiết trong môi trường phát triển này. Ví dụ: bây giờ tôi có Kde Neon và trên hệ thống này có tệp /etc/environment, tệp tương tự tồn tại trong ubuntu. Các biến sau đây cần phải được nhập vào đó.

ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk

Bạn cũng cần tải xuống NDK từ trang web chính thức, giải nén nó vào thư mục chính của bạn và đổi tên thành NDK. Tiếp theo bạn cần tải thư viện SDL2 từ trang web libsdl.org. Để sử dụng sdl2 cho android, điều quan trọng là không biên dịch nó cho máy tính, vì khi đó nó sẽ không biên dịch cho android. Để biên dịch dự án, bạn cần tạo một dự án trong android studio, bất kỳ dự án nào, để chấp nhận giấy phép, nếu không SDL2 sẽ yêu cầu giấy phép khi xây dựng.

Để đọc tệp trong Android từ nội dung, bạn cần sử dụng hàm SDL_RWops. Đây là một ví dụ về cách sử dụng mã để làm việc với phông chữ. Trong trường hợp này, chúng tôi không thể sử dụng FT_New_Face mà thay vào đó sẽ sử dụng FT_New_Memory_Face để sử dụng dữ liệu đã được đọc.

#ifdef __ANDROID__
        snprintf ( path, 254, "fonts/%s", file );
        SDL_RWops *rw = SDL_RWFromFile(path, "r" );
        char *memory = ( char * ) calloc ( rw->hidden.androidio.size, 1 );
        SDL_RWread(rw, memory, 1, rw->hidden.androidio.size );

        FT_New_Memory_Face(*this->ft_library, ( const FT_Byte  * )memory, rw->hidden.androidio.size, 0, &this;->face );
        SDL_RWclose(rw);
        free ( memory );
#else
        snprintf ( path, 254, "%s/fonts/%s", DEFAULT_ASSETS, file );
        if ( access ( path, F_OK ) ) {
                fprintf ( stderr, "not found font: %sn", path );
                exit ( EXIT_FAILURE );
        }
        struct stat st;
        stat ( path, &st; );
        FILE *rw = fopen ( path, "r" );
        char *memory = ( char * ) calloc ( st.st_size, 1 );
        fread ( memory, 1, st.st_size, rw );

        FT_New_Memory_Face ( *this->ft_library, ( const FT_Byte * ) memory, st.st_size, 0, &this;->face );
        fclose ( rw );
        free ( memory );
#endif

Tôi cũng đã tạo một tệp tiêu đề để kết nối các tiêu đề SDL2. Cần có NO_SDL_GLEXT để biên dịch thành công trên Android.

#ifdef __ANDROID__
#include "SDL.h"
#include "SDL_video.h"
#include "SDL_events.h"
#define NO_SDL_GLEXT 
#include "SDL_opengl.h"
#include "SDL_opengles2.h"
#else
#include <SDL2/SDL.h>
#include <SDL2/SDL_video.h>
#include <SDL2/SDL_opengl.h>
#include <SDL2/SDL_opengles2.h>
#endif

Vậy là dự án đã sẵn sàng, các shader đã sẵn sàng cho Opengl Es 3.0. Bây giờ chúng ta cần tạo một dự án Android. Để thực hiện việc này, hãy giải nén kho lưu trữ SDL2. Chuyển đến tập lệnh xây dựng. Và chúng tôi làm điều đó như thế này.

./androidbuild.sh com.xverizex.test main.cpp

Thông báo sau sẽ xuất hiện.

To build and install to a device for testing, run the following:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug

Truy cập com.xverizex.test. Truy cập com.xverizex.test/app/jni/src. Chúng tôi sao chép dự án trò chơi của chúng tôi. Và chúng tôi thay đổi tệp Android.mk, trong trường hợp của tôi nó trông như thế này.

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := main

SDL_PATH := ../SDL
FREETYPE_PATH := ../Freetype2

LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include $(LOCAL_PATH)/$(FREETYPE_PATH)/include

# Add your application source files here...
LOCAL_SRC_FILES := ./engine/lang.cpp ./engine/actor.cpp ./engine/sprite.cpp ./engine/shaders.cpp ./engine/box.cpp ./engine/menubox.cpp ./engine/load_manager.cpp ./engine/main.cpp ./engine/font.cpp ./engine/model.cpp ./engine/button.cpp ./theme.cpp ./level_manager.cpp ./menu/menu.cpp

LOCAL_SHARED_LIBRARIES := SDL2 Freetype2

LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog 

include $(BUILD_SHARED_LIBRARY)

Như bạn có thể đã nhận thấy, tôi cũng đưa vào thư viện Freetype2. Tôi đã tìm thấy một cái làm sẵn trên github cho android, nhưng nó không hoạt động, tôi cần thay đổi một số thứ. Chúng tôi cũng tạo một thư mục app/src/main/assets. Chúng tôi đặt tài nguyên của mình vào đó (phông chữ, họa tiết, mô hình 3D).

Bây giờ hãy cấu hình Freetype2 cho Android. Tải xuống từ github của tôi liên kếtvà sao chép thư mục Freetype2 vào thư mục app/jni/. Tất cả đã sẵn sàng. Bây giờ hãy chạy lệnh ./gradlew installDebug trong com.xverizex.test. Để có thể thêm trò chơi này vào Android, tính năng gỡ lỗi phải được bật trong Android. Để thực hiện việc này, bạn cần vào cài đặt, đi tới “Hệ thống”, đi tới “Giới thiệu về máy tính bảng” và nhấp vào tùy chọn “Số bản dựng” khoảng sáu lần. Sau đó quay lại sẽ hiện ra tùy chọn dành cho nhà phát triển. Vào bật lên cũng bật tùy chọn “USB Debugging”. Bây giờ bạn cần lấy chìa khóa cho máy tính bảng. Để thực hiện việc này, hãy cài đặt chương trình adb. Chúng tôi khởi chạy shell adb trong bảng điều khiển và một khóa xuất hiện trong máy tính bảng phải được chấp nhận. Thế là xong, bây giờ trò chơi có thể được tải xuống máy tính bảng của bạn.

Nguồn: www.habr.com

Thêm một lời nhận xét