Ukulungiselela iprojekthi ye-SDL2 ukuze iqhutywe kwi-Android

Molweni nonke. Namhlanje siza kujonga indlela yokulungiselela iprojekthi usebenzisa ithala leencwadi le-sdl2 ukuqhuba umdlalo kwi-Android.

Okokuqala kufuneka ukhuphele i-Android Studio, uyifake kunye nayo yonke into efunekayo kule ndawo yophuhliso. Umzekelo, ngoku ndine Kde Neon, kwaye kule nkqubo kukho ifayile /etc/environment, ifayile efanayo ikhona kubuntu. Ezi ziguquguqukayo zilandelayo kufuneka zifakwe apho.

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

Kuya kufuneka kwakhona ukhuphele i-NDK kwiwebhusayithi esemthethweni, uyikhuphe kulawulo lwakho lwasekhaya kwaye uyiqambe ngokutsha ibe yi-NDK. Okulandelayo kufuneka ukhuphele ithala leencwadi leSDL2 kwiwebhusayithi libsdl.org. Ukusebenzisa i-sdl2 ye-android, kubalulekile ukuba ungayiqokeleli kwikhompyutheni, kuba ngoko ayiyi kuqulunqa i-android. Ukuze iprojekthi iqokelele, kufuneka udale iprojekthi kwi-studio ye-android, nayiphi na enye, ukuba yamkele ilayisenisi, ngaphandle koko i-SDL2 iya kucela ilayisenisi xa ukwakhiwa.

Ukufunda iifayile kwi-android kwii-asethi, kufuneka usebenzise imisebenzi ye-SDL_RWops. Nanku umzekelo wokusetyenziswa kwikhowudi yokusebenza ngefonti. Kule meko, asinakusebenzisa FT_New_Face, kodwa endaweni yoko siyakusebenzisa FT_New_Memory_Face ukusebenzisa idatha esele 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

Ndenze ifayile yeheader ukudibanisa iiheader zeSDL2. NO_SDL_GLEXT iyafuneka ukuze uqokelelo luphumelele kwi-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

Ke iprojekthi ilungile, i-shaders ilungele i-Opengl Es 3.0. Ngoku kufuneka senze iprojekthi ye-android. Ukwenza oku, khupha i-SDL2 yokugcina. Yiya kwi-build-scripts. Kwaye siyenza ngolu hlobo.

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

Lo myalezo ulandelayo uya kuvela.

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

Yiya ku-com.xverizex.test. Yiya ku-com.xverizex.test/app/jni/src. Sikopa iprojekthi yethu yomdlalo. Kwaye sitshintsha ifayile ye-Android.mk, kwimeko yam ibonakala ngathi.

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)

Njengoko usenokuba sele uqaphele, ndikwabandakanya nethala leencwadi leFreetype2. Ndifumene esele yenziwe kwi-github ye-android, kodwa ayizange isebenze, kufuneka nditshintshe into. Senza kwakhona uluhlu lwe-app/src/main/assets. Sibeka izixhobo zethu kuyo (iifonti, ii-sprites, iimodeli ze-3D).

Ngoku makhe siqwalasele iFreetype2 ye-Android. Khuphela kwi-github yam ikhonkco, kwaye ukhuphele ulawulo lweFreetype2 kwi-app/jni/ directory. Zonke zilungile. Ngoku sebenzisa umyalelo ./gradlew installDebug kwi com.xverizex.test. Ukuze ukwazi ukongeza lo mdlalo kwi-android, ukulungisa iimpazamo kufuneka kuvulwe kwi-android. Ukwenza oku, kufuneka uye kwisethingi, yiya kwi "System", yiya "Malunga nethebhulethi" kwaye ucofe inketho ethi "Yakha inombolo" malunga namaxesha amathandathu. Emva koko buyela umva kwaye ukhetho lwabaphuhlisi luya kuvela. Ngena kwaye uyivule, kwakhona uvule i "USB Debugging" ukhetho. Ngoku kufuneka ufumane isitshixo sethebhulethi. Ukwenza oku, faka inkqubo ye-adb. Siqalisa iqokobhe le-adb kwikhonsoli, kwaye isitshixo sivela kwithebhulethi ekufuneka yamkelwe. Yiyo loo nto, ngoku imidlalo inokukhutshelwa kwithebhulethi yakho.

umthombo: www.habr.com

Yongeza izimvo