Hi almal. Vandag sal ons sien hoe om 'n projek voor te berei deur die sdl2-biblioteek te gebruik om die speletjie op Android te laat loop.
Eerstens moet jy aflaai Android Studio, installeer dit, en alles anders wat vir hierdie ontwikkelomgewing benodig word. Byvoorbeeld, ek het tans KDE Neon, en in hierdie stelsel is daar 'n lêer /etc/environment, en dieselfde lêer bestaan in ubuntuJy moet die volgende veranderlikes daar registreer.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
U moet ook die NDK van die amptelike webwerf aflaai, dit na u tuisgids uitpak en dit na NDK hernoem. Vervolgens moet u die SDL2-biblioteek van die webwerf aflaai . Om sdl2 vir Android te gebruik is dit belangrik om dit nie vir rekenaar saam te stel nie, want dan sal dit nie vir Android saamstel nie. Om die projek saam te stel, moet jy 'n projek in Android-ateljee skep, enige een, om die lisensie te aanvaar, anders as jy SDL2 bou, sal dit vir 'n lisensie vra.
Om lêers in Android vanaf bates te lees, moet jy die SDL_RWops-funksies gebruik. Hier is 'n voorbeeld van die gebruik daarvan in kode om met 'n lettertipe te werk. In hierdie geval kan ons nie FT_New_Face gebruik nie, maar in plaas daarvan sal ons FT_New_Memory_Face gebruik om die data wat reeds gelees is, te gebruik.
#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
Ek het ook 'n koplêer geskep om SDL2-kopskrifte in te sluit. NO_SDL_GLEXT is nodig vir samestelling om te slaag. 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
So die projek is gereed, shaders is gereed vir Opengl Es 3.0. Nou moet ons 'n Android-projek skep. Om dit te doen, pak die argief SDL2 uit. Gaan na bou-skrifte. En ons doen so.
./androidbuild.sh com.xverizex.test main.cpp
Hierdie boodskap sal verskyn.
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
Gaan na com.xverizex.test. Gaan na com.xverizex.test/app/jni/src. Kopieer jou speletjieprojek. En verander die lêer. Android.mk, in my geval lyk dit so.
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)
Soos jy dalk opgemerk het, sluit ek ook die Freetype2-biblioteek in. Ek het 'n klaargemaakte een op github vir Android gekry, maar dit het nie gewerk nie, ek moes iets verander. Ons skep ook die toepassing/src/hoof/bates-gids. Ons sit ons hulpbronne daarin (lettertipes, sprites, 3D-modelle).
Nou laat ons Freetype2 opstel vir AndroidLaai af vanaf my GitHub , en kopieer die Freetype2-gids na die app/jni/-gids. Alles is gereed. Nou hardloop ons die ./gradlew installDebug-opdrag in com.xverizex.test. Om hierdie speletjie by Android te kan voeg, moet ontfouting in Android geaktiveer word. Om dit te doen, moet jy na die instellings gaan, gaan na "Stelsel", gaan na "Oor tablet" en klik op die "Bou nommer" opsie ongeveer ses keer. Gaan dan terug en die opsie vir ontwikkelaars sal verskyn. Ons gaan in en skakel dit aan, skakel ook die opsie "Debugging via USB" aan. Nou moet ons die sleutel vir die tablet kry. Om dit te doen, installeer die adb-program. Ons begin die adb-dop in die konsole, en 'n sleutel verskyn op die tablet wat aanvaar moet word. Alles, nou kan die speletjies na die tablet afgelaai word.
Bron: will.com
