Ilungiselela iphrojekthi ye-SDL2 ezosebenza ku-Android

Sanibonani nonke. Namuhla sizobheka ukuthi ungayilungisa kanjani iphrojekthi usebenzisa umtapo wezincwadi we-sdl2 ukuqhuba umdlalo ku-Android.

Okokuqala udinga ukulanda i-Android Studio, uyifake nakho konke okudingekayo kule ndawo yokuthuthukiswa. Isibonelo, manje ngine-Kde Neon, futhi kulolu hlelo kukhona ifayela /etc/environment, ifayela elifanayo likhona ku-ubuntu. Okuguquguqukayo okulandelayo kudinga ukufakwa lapho.

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

Udinga futhi ukulanda i-NDK kuwebhusayithi esemthethweni, uyikhiphe ohlwini lwemibhalo yasekhaya bese uyiqambe kabusha ibe yi-NDK. Okulandelayo udinga ukulanda umtapo wezincwadi we-SDL2 kuwebhusayithi libsdl.org. Ukusebenzisa i-sdl2 ye-android, kubalulekile ukuthi ungayihlanganiseli ikhompuyutha, ngoba lapho-ke ngeke ihlanganiselwe i-android. Ukuze iphrojekthi ihlanganiswe, udinga ukudala iphrojekthi kusitudiyo se-android, noma yisiphi, ukuze wamukele ilayisense, ngaphandle kwalokho i-SDL2 izocela ilayisense lapho wakha.

Ukuze ufunde amafayela ku-android kusuka kumafa, udinga ukusebenzisa imisebenzi ye-SDL_RWops. Nasi isibonelo sokusetshenziswa kwekhodi yokusebenza ngefonti. Kulesi simo, asikwazi ukusebenzisa i-FT_New_Face, kodwa sizosebenzisa i-FT_New_Memory_Face ukuze sisebenzise idatha esivele ifundiwe.

#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

Ngiphinde ngakha ifayela likanhlokweni ukuze ngixhume izihloko ze-SDL2. I-NO_SDL_GLEXT iyadingeka ukuze ukuhlanganiswa kuphumelele ku-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

Ngakho-ke iphrojekthi isilungile, ama-shader alungele i-Opengl Es 3.0. Manje sidinga ukudala iphrojekthi ye-android. Ukuze wenze lokhu, vula ingobo yomlando ye-SDL2. Iya ku-build-scripts. Futhi sikwenza kanje.

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

Umlayezo olandelayo uzovela.

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

Iya ku-com.xverizex.test. Iya kokuthi com.xverizex.test/app/jni/src. Sikopisha iphrojekthi yethu yegeyimu. Futhi sishintsha ifayela le-Android.mk, esimweni sami libukeka kanje.

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)

Njengoba kungenzeka ukuthi usubonile, ngifaka nelabhulali yeFreetype2. Ngithole esenziwe ngomumo ku-github ye-android, kodwa ayizange isebenze, kwakudingeka ngishintshe okuthile. Futhi sakha uhlelo lokusebenza lwenkomba/src/main/assets. Sibeka izinsiza zethu kuyo (amafonti, ama-sprites, amamodeli e-3D).

Manje ake silungiselele i-Freetype2 ye-Android. Landa kusuka ku-github yami isixhumanisi, bese ukopisha uhla lwemibhalo lweFreetype2 kuhlelo lokusebenza/jni/ lwemibhalo. Konke sekulungile. Manje sebenzisa umyalo ./gradlew installDebug kokuthi com.xverizex.test. Ukuze ukwazi ukwengeza lo mdlalo ku-android, ukulungisa iphutha kumele kunikwe amandla ku-android. Ukuze wenze lokhu, udinga ukuya kuzilungiselelo, iya kokuthi "Isistimu", iya kokuthi "Mayelana nethebhulethi" bese uchofoza inketho ethi "Yakha inombolo" cishe izikhathi eziyisithupha. Bese ubuyela emuva futhi inketho yonjiniyela izovela. Ngena futhi uyivule, futhi uvule inketho "yokulungisa iphutha le-USB". Manje udinga ukuthola ukhiye wethebhulethi. Ukuze wenze lokhu, faka uhlelo lwe-adb. Sethula igobolondo le-adb kukhonsoli, bese kuvela ukhiye kuthebhulethi okufanele yamukelwe. Yilokho nje, manje imidlalo ingadawunilodeka kuthebhulethi yakho.

Source: www.habr.com

Engeza amazwana