Mempersiapkan proyek SDL2 untuk dijalankan di Android

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 libsdl.org. Untuk menggunakan sdl2 untuk android, penting untuk tidak mengkompilasinya untuk komputer, karena sdl2 tersebut tidak akan dikompilasi untuk android. Agar proyek dapat dikompilasi, Anda perlu membuat proyek di Android Studio, siapa saja, untuk menerima lisensinya, jika tidak, SDLXNUMX akan meminta lisensi saat membangun.

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 Link, dan salin direktori Freetype2 ke direktori app/jni/. Semuanya sudah siap. Sekarang jalankan perintah ./gradlew installDebug di com.xverizex.test. Untuk dapat menambahkan game ini ke android, debugging harus diaktifkan di android. Untuk melakukan ini, Anda perlu masuk ke pengaturan, pergi ke "Sistem", pergi ke "Tentang tablet" dan klik opsi "Build number" sekitar enam kali. Kemudian kembali dan opsi untuk pengembang akan muncul. Masuk dan hidupkan, aktifkan juga opsi “USB Debugging”. Sekarang Anda perlu mendapatkan kunci untuk tablet tersebut. Untuk melakukan ini, instal program adb. Kami meluncurkan adb shell di konsol, dan sebuah kunci muncul di tablet yang harus diterima. Itu saja, sekarang game dapat diunduh ke tablet Anda.

Sumber: www.habr.com

Tambah komentar