Android'de çalıştırılacak bir SDL2 projesi hazırlama

Herkese selam. Bugün Android'de oyun çalıştırmak için sdl2 kütüphanesini kullanarak proje nasıl hazırlanır ona bakacağız.

Öncelikle Android Studio'yu indirmeniz, yüklemeniz ve bu geliştirme ortamında gereken her şeyi yapmanız gerekir. Örneğin, artık Kde Neon'um var ve bu sistemde /etc/environment dosyası var, aynı dosya ubuntu'da da mevcut. Buraya aşağıdaki değişkenlerin girilmesi gerekir.

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

Ayrıca NDK'yı resmi web sitesinden indirmeniz, paketini ana dizininize açmanız ve NDK olarak yeniden adlandırmanız gerekir. Daha sonra web sitesinden SDL2 kütüphanesini indirmeniz gerekiyor. libsdl.org. Android için sdl2'yi kullanmak için, onu bilgisayar için derlememek önemlidir, çünkü o zaman android için derlenmeyecektir. Projenin derlenebilmesi için Android stüdyosunda herhangi bir proje oluşturup lisansı kabul etmeniz gerekiyor, aksi halde SDL2 inşa ederken lisans isteyecektir.

Android'deki dosyaları varlıklardan okumak için SDL_RWops işlevlerini kullanmanız gerekir. Burada bir yazı tipiyle çalışmak için kodda kullanım örneği verilmiştir. Bu durumda FT_New_Face'i kullanamayız ancak bunun yerine daha önce okunmuş olan verileri kullanmak için FT_New_Memory_Face'i kullanacağız.

#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

Ayrıca SDL2 başlıklarını bağlamak için bir başlık dosyası oluşturdum. Derlemenin Android'de başarılı olması için NO_SDL_GLEXT gereklidir.

#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

Böylece proje hazır, gölgelendiriciler Opengl Es 3.0 için hazır. Şimdi bir Android projesi oluşturmamız gerekiyor. Bunu yapmak için SDL2 arşivini açın. Derleme komut dosyalarına gidin. Ve bunu şu şekilde yapıyoruz.

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

Aşağıdaki mesaj görünecektir.

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

Com.xverizex.test'e gidin. com.xverizex.test/app/jni/src adresine gidin. Oyun projemizi kopyalıyoruz. Ve Android.mk dosyasını değiştiriyoruz, benim durumumda şöyle görünüyor.

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)

Zaten fark etmiş olabileceğiniz gibi Freetype2 kütüphanesini de dahil ediyorum. Android için github'da hazır bir tane buldum ama işe yaramadı, bir şeyi değiştirmem gerekiyordu. Ayrıca bir app/src/main/assets dizini oluşturuyoruz. Kaynaklarımızı (fontlar, spritelar, 3D modeller) içine yerleştiriyoruz.

Şimdi Android için Freetype2'yi yapılandıralım. github'ımdan indir Linkve Freetype2 dizinini app/jni/ dizinine kopyalayın. Her şey hazır. Şimdi com.xverizex.test dosyasında ./gradlew installDebug komutunu çalıştırın. Bu oyunu Android'e ekleyebilmek için Android'de hata ayıklamanın etkinleştirilmesi gerekir. Bunu yapmak için ayarlara gitmeniz, "Sistem" e gitmeniz, "Tablet hakkında" ya gitmeniz ve yaklaşık altı kez "Yapı numarası" seçeneğine tıklamanız gerekir. Daha sonra geri döndüğünüzde geliştiricilere yönelik seçenek görünecektir. İçeri girin ve açın, ayrıca “USB Hata Ayıklama” seçeneğini de açın. Şimdi tablet için bir anahtar almanız gerekiyor. Bunu yapmak için adb programını yükleyin. Konsolda adb kabuğunu başlatıyoruz ve tablette kabul edilmesi gereken bir anahtar beliriyor. İşte bu, artık oyunlar tabletinize indirilebilir.

Kaynak: habr.com

Yorum ekle