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
Để đọ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
Nguồn: www.habr.com