Halo semua. Hari ini kita akan melihat cara menyiapkan proyek menggunakan perpustakaan sdl2 untuk menjalankan game di Android.
Pertama, Anda perlu mengunduh Android Studio, menginstalnya dan semua yang diperlukan dalam lingkungan pengembangan ini. Misalnya saya sekarang punya Kde Neon, dan di sistem ini ada file /etc/environment, file yang sama ada di ubuntu. Variabel berikut perlu dimasukkan di sana.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Anda juga perlu mengunduh NDK dari situs resminya, mengekstraknya ke direktori home Anda dan mengganti namanya menjadi NDK. Selanjutnya Anda perlu mengunduh perpustakaan SDL2 dari situs web
Untuk membaca file di android dari aset, Anda perlu menggunakan fungsi SDL_RWops. Berikut adalah contoh penggunaan kode untuk bekerja dengan font. Dalam hal ini, kita tidak bisa menggunakan FT_New_Face, melainkan menggunakan FT_New_Memory_Face untuk menggunakan data yang sudah dibaca.
#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
Saya juga membuat file header untuk menghubungkan header SDL2. NO_SDL_GLEXT diperlukan agar kompilasi berhasil di 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
Jadi proyeknya sudah siap, shadernya sudah siap untuk Opengl Es 3.0. Sekarang kita perlu membuat proyek Android. Untuk melakukan ini, buka paket arsip SDL2. Buka skrip build. Dan kami melakukannya seperti ini.
./androidbuild.sh com.xverizex.test main.cpp
Pesan berikut akan muncul.
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
Buka com.xverizex.test. Buka com.xverizex.test/app/jni/src. Kami menyalin proyek game kami. Dan kita ubah file Android.mk, dalam kasus saya tampilannya seperti ini.
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)
Seperti yang mungkin sudah Anda ketahui, saya juga menyertakan perpustakaan Freetype2. Saya menemukan yang sudah jadi di github untuk android, tetapi tidak berhasil, saya perlu mengubah sesuatu. Kami juga membuat direktori app/src/main/assets. Kami menempatkan sumber daya kami di dalamnya (font, sprite, model 3D).
Sekarang mari kita konfigurasikan Freetype2 untuk Android. Unduh dari github saya
Sumber: www.habr.com