Sveiki visiem. Šodien mēs apskatīsim, kā sagatavot projektu, izmantojot sdl2 bibliotēku, lai palaistu spēli operētājsistēmā Android.
Vispirms jālejupielādē Android Studio, jāinstalē un viss, kas nepieciešams šajā izstrādes vidē. Piemēram, man tagad ir Kde Neon, un šajā sistēmā ir fails /etc/environment, tas pats fails pastāv ubuntu. Tur jāievada šādi mainīgie.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Jums arī jālejupielādē NDK no oficiālās vietnes, jāizpako tas savā mājas direktorijā un jāpārdēvē par NDK. Tālāk no vietnes jālejupielādē SDL2 bibliotēka
Lai Android ierīcē nolasītu failus no līdzekļiem, jums ir jāizmanto SDL_RWops funkcijas. Šeit ir piemērs izmantošanai kodā darbam ar fontu. Šajā gadījumā mēs nevaram izmantot FT_New_Face, bet tā vietā izmantosim FT_New_Memory_Face, lai izmantotu jau nolasītos datus.
#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
Es arī izveidoju galvenes failu, lai savienotu SDL2 galvenes. NO_SDL_GLEXT ir nepieciešams, lai kompilācija būtu veiksmīga operētājsistēmā 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
Tātad projekts ir gatavs, ēnotāji ir gatavi Opengl Es 3.0. Tagad mums ir jāizveido android projekts. Lai to izdarītu, izsaiņojiet SDL2 arhīvu. Dodieties uz build-scripts. Un mēs to darām šādi.
./androidbuild.sh com.xverizex.test main.cpp
Tiks parādīts šāds ziņojums.
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
Dodieties uz com.xverizex.test. Dodieties uz com.xverizex.test/app/jni/src. Mēs kopējam mūsu spēles projektu. Un mēs mainām Android.mk failu, manā gadījumā tas izskatās šādi.
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)
Kā jūs, iespējams, jau pamanījāt, es iekļauju arī Freetype2 bibliotēku. Es atradu gatavu github for Android, bet tas nedarbojās, man vajadzēja kaut ko mainīt. Mēs arī izveidojam direktoriju app/src/main/assets. Mēs tajā ievietojam savus resursus (fontus, spraitus, 3D modeļus).
Tagad konfigurēsim Freetype2 operētājsistēmai Android. Lejupielādēt no mana github
Avots: www.habr.com