Tere kõigile. Täna näeme, kuidas sdl2 teegi abil projekti ette valmistada, et mäng Androidis käitada.
Esmalt tuleb alla laadida Android Studio, installida see ja kõik, mis selles arenduskeskkonnas nõutav. Näiteks praegu on mul Kde Neon ja selles süsteemis on fail /etc/environment, sama fail on olemas ka ubuntus. Seal on vaja sellised muutujad registreerida.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Samuti peate NDK ametlikult saidilt alla laadima, lahti pakkima oma kodukataloogi ja nimetama ümber NDK-ks. Järgmisena peate saidilt alla laadima SDL2 teegi
Androidis failide lugemiseks varadest peate kasutama SDL_RWopsi funktsioone. Siin on näide selle kasutamisest koodis fondiga töötamiseks. Sel juhul ei saa me kasutada FT_New_Face, kuid selle asemel kasutame juba loetud andmete kasutamiseks FT_New_Memory_Face.
#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
Samuti lõin päisefaili SDL2 päiste ühendamiseks. Androidi jaoks koostamise õnnestumiseks on vaja NO_SDL_GLEXT.
#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
Seega on projekt valmis, varjutajad Opengl Es 3.0 jaoks valmis. Nüüd peame looma android-projekti. Selleks pakkige arhiiv SDL2 lahti. Minge ehitusskriptide juurde. Ja me teeme seda.
./androidbuild.sh com.xverizex.test main.cpp
See teade ilmub.
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
Minge saidile com.xverizex.test. Minge aadressile com.xverizex.test/app/jni/src. Kopeerige oma mänguprojekt. Ja me muudame faili Android.mk, minu puhul näeb see välja selline.
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)
Nagu olete märganud, lisan ka Freetype2 teegi. Leidsin githubist androidile valmis, aga see ei töötanud, pidin midagi muutma. Samuti loome kataloogi app/src/main/assets. Me paneme sellesse oma ressursid (fondid, spraidid, 3D-mudelid).
Nüüd seadistame Androidi jaoks Freetype2. Laadige alla minu githubist
Allikas: www.habr.com