En SDL2 Projet virbereeden fir op Android ze lafen

Moien alleguer. Haut wäerte mir kucken wéi e Projet mat der sdl2 Bibliothéik virbereet fir e Spill op Android ze lafen.

Als éischt musst Dir Android Studio eroflueden, installéieren an alles wat an dësem Entwécklungsëmfeld erfuerderlech ass. Zum Beispill hunn ech elo Kde Neon, an op dësem System gëtt et eng Datei /etc/environment, déi selwecht Datei existéiert op Ubuntu. Déi folgend Variabelen mussen do agefouert ginn.

ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk

Dir musst och NDK vun der offizieller Websäit eroflueden, et an Ärem Heemverzeichnis auspacken an et op NDK ëmbenennen. Als nächst musst Dir d'SDL2 Bibliothéik vun der Websäit eroflueden libsdl.org. Fir sdl2 fir Android ze benotzen, ass et wichteg et net fir de Computer ze kompiléieren, well et dann net fir Android kompiléiert gëtt. Fir de Projet ze kompiléieren, musst Dir e Projet am Android Studio erstellen, iergendeen, fir d'Lizenz ze akzeptéieren, soss freet SDL2 eng Lizenz beim Bauen.

Fir Dateien op Android aus Verméigen ze liesen, musst Dir d'SDL_RWops Funktiounen benotzen. Hei ass e Beispill vu Gebrauch am Code fir mat enger Schrëft ze schaffen. An dësem Fall kënne mir FT_New_Face net benotzen, mee wäerten amplaz FT_New_Memory_Face benotzen fir d'Donnéeën ze benotzen déi scho gelies goufen.

#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

Ech hunn och eng Headerdatei erstallt fir SDL2 Header ze verbannen. NO_SDL_GLEXT ass gebraucht fir d'Kompilatioun op Android erfollegräich ze sinn.

#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

Also de Projet ass prett, d'Shaders si prett fir Opengl Es 3.0. Elo musse mir en Android-Projet erstellen. Fir dëst ze maachen, packt de SDL2 Archiv aus. Gitt op Build-Skripte. A mir maachen et esou.

./androidbuild.sh com.xverizex.test main.cpp

De folgende Message wäert schéngen.

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

Gitt op com.xverizex.test. Gitt op com.xverizex.test/app/jni/src. Mir kopéieren eise Spillprojet. A mir änneren d'Android.mk Datei, a mengem Fall gesäit et esou aus.

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)

Wéi Dir vläicht scho gemierkt hutt, enthalen ech och d'Freetype2 Bibliothéik. Ech hunn e fäerdeg gemaach op github fir Android fonnt, awer et huet net geschafft, ech muss eppes änneren. Mir erstellen och eng Verzeechnes App/src/main/assets. Mir setzen eis Ressourcen dran (Schrëften, Sprites, 3D Modeller).

Loosst eis elo Freetype2 fir Android konfiguréieren. Download vu mengem Github Link, a kopéiert de Freetype2 Verzeichnis an den App/jni/ Verzeichnis. Alles ass prett. Fuert elo de Kommando ./gradlew installDebug an com.xverizex.test. Fir dëst Spill op Android ze addéieren, muss Debugging an Android aktivéiert sinn. Fir dëst ze maachen, musst Dir op d'Astellunge goen, op "System" goen, op "Iwwer Tablet" a klickt op d'Optioun "Build Number" ongeféier sechs Mol. Da gitt zréck an d'Optioun fir Entwéckler erschéngt. Gitt an a schalt et op, schalt och d'Optioun "USB Debugging" un. Elo musst Dir e Schlëssel fir den Tablet kréien. Fir dëst ze maachen, installéiert den adb Programm. Mir starten d'adb Shell an der Konsole, an e Schlëssel erschéngt am Tablet deen akzeptéiert muss ginn. Dat ass et, elo kënnen Spiller op Ärem Tablet erofgeluede ginn.

Source: will.com

Setzt e Commentaire