Pershendetje te gjitheve. Sot do të shikojmë se si të përgatisim një projekt duke përdorur bibliotekën sdl2 për të ekzekutuar një lojë në Android.
Së pari ju duhet të shkarkoni Android Studio, ta instaloni atë dhe gjithçka që kërkohet në këtë mjedis zhvillimi. Për shembull, unë tani kam Kde Neon, dhe në këtë sistem ka një skedar /etc/environment, i njëjti skedar ekziston në ubuntu. Aty duhet të futen variablat e mëposhtëm.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Ju gjithashtu duhet të shkarkoni NDK nga faqja zyrtare e internetit, ta shpaketoni në direktorinë tuaj kryesore dhe ta riemërtoni në NDK. Më pas ju duhet të shkarkoni bibliotekën SDL2 nga faqja e internetit
Për të lexuar skedarë në android nga asetet, duhet të përdorni funksionet SDL_RWops. Këtu është një shembull i përdorimit të kodit për të punuar me një font. Në këtë rast, ne nuk mund të përdorim FT_New_Face, por në vend të kësaj do të përdorim FT_New_Memory_Face për të përdorur të dhënat që janë lexuar tashmë.
#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
Krijova gjithashtu një skedar kokë për të lidhur titujt SDL2. NO_SDL_GLEXT nevojitet që përpilimi të ketë sukses në 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
Pra, projekti është gati, shaders janë gati për Opengl Es 3.0. Tani duhet të krijojmë një projekt android. Për ta bërë këtë, shpaketoni arkivin SDL2. Shko te build-scripts. Dhe ne e bëjmë atë kështu.
./androidbuild.sh com.xverizex.test main.cpp
Mesazhi i mëposhtëm do të shfaqet.
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
Shkoni te com.xverizex.test. Shkoni te com.xverizex.test/app/jni/src. Ne kopjojmë projektin tonë të lojës. Dhe ne ndryshojmë skedarin Android.mk, në rastin tim duket kështu.
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)
Siç mund ta keni vënë re tashmë, unë gjithashtu përfshij bibliotekën Freetype2. Gjeta një të gatshme në github për android, por nuk funksionoi, më duhej të ndryshoja diçka. Ne gjithashtu krijojmë një aplikacion/src/kryesore/pasuri të drejtorisë. Ne vendosim burimet tona në të (fontet, spritet, modelet 3D).
Tani le të konfigurojmë Freetype2 për Android. Shkarkoni nga github-i im
Burimi: www.habr.com