Berei tans 'n SDL2-projek voor om op Android te loop

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 Android Studio aflaai, dit installeer en alles wat nodig is in hierdie ontwikkelingsomgewing. Byvoorbeeld, ek het tans Kde Neon, en daar is 'n /etc/environment lΓͺer op hierdie stelsel, dieselfde lΓͺer bestaan ​​in ubuntu. Daar is dit nodig om sulke veranderlikes te 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 libsdl.org. 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-opskrifte aan te sluit. NO_SDL_GLEXT word vereis vir samestelling om vir Android te slaag.

#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 ons verander die Android.mk-lΓͺer, 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).

Kom ons stel nou Freetype2 vir Android op. Laai van my github af Link, 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

Voeg 'n opmerking