In SDL2-projekt tariede om op Android te rinnen

Hoi allegearre. Hjoed sille wy sjen nei hoe't jo in projekt tariede mei de sdl2-bibleteek om in spultsje op Android út te fieren.

Earst moatte jo Android Studio downloade, it ynstallearje en alles dat nedich is yn dizze ûntwikkelingsomjouwing. Bygelyks, ik haw no Kde Neon, en op dit systeem is d'r in triem /etc/environment, itselde bestân bestiet yn ubuntu. De folgjende fariabelen moatte dêr ynfierd wurde.

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

Jo moatte ek NDK downloade fan 'e offisjele webside, it útpakke yn jo thúsmap en omneame it nei NDK. Folgjende moatte jo de SDL2-bibleteek downloade fan 'e webside libsdl.org. Om sdl2 foar Android te brûken, is it wichtich om it net te kompilearjen foar de kompjûter, om't it dan net kompilearret foar Android. Om it projekt te kompilearjen, moatte jo in projekt meitsje yn android studio, ien, om de lisinsje te akseptearjen, oars sil SDL2 om in lisinsje freegje by it bouwen.

Om bestannen yn Android te lêzen fan aktiva, moatte jo de SDL_RWops-funksjes brûke. Hjir is in foarbyld fan gebrûk yn koade foar wurkjen mei in lettertype. Yn dit gefal kinne wy ​​FT_New_Face net brûke, mar sille ynstee FT_New_Memory_Face brûke om de gegevens te brûken dy't al lêzen binne.

#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

Ik haw ek in kopteksttriem makke om SDL2-koppen te ferbinen. NO_SDL_GLEXT is nedich foar kompilaasje om te slagjen op 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

Dat it projekt is klear, de shaders binne klear foar Opengl Es 3.0. No moatte wy in android-projekt oanmeitsje. Om dit te dwaan, útpakke it SDL2-argyf. Gean nei build-skripts. En wy dogge it sa.

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

It folgjende berjocht sil ferskine.

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

Gean nei com.xverizex.test. Gean nei com.xverizex.test/app/jni/src. Wy kopiearje ús spultsje projekt. En wy feroarje it Android.mk-bestân, yn myn gefal sjocht it der sa út.

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)

Lykas jo miskien al opmurken hawwe, befetsje ik ek de Freetype2-bibleteek. Ik fûn in klear makke op github foar android, mar it wurke net, ik moast wat feroarje. Wy meitsje ek in mapapp/src/main/assets. Wy pleatse ús boarnen deryn (lettertypen, sprites, 3D-modellen).

Litte wy no Freetype2 foar Android konfigurearje. Download fan myn github Link, en kopiearje de Freetype2-map nei de app/jni/-map. Alles is klear. Laad no it kommando ./gradlew installDebug yn com.xverizex.test. Om dit spul oan Android ta te foegjen, moat debuggen yn android ynskeakele wurde. Om dit te dwaan, moatte jo gean nei ynstellings, gean nei "Systeem", gean nei "Oer tablet" en klik op de "Bou nûmer" opsje likernôch seis kear. Gean dan werom en de opsje foar ûntwikkelders sil ferskine. Gean yn en skeakelje it oan, skeakelje ek de opsje "USB Debuggen" oan. No moatte jo in kaai krije foar de tablet. Om dit te dwaan, ynstallearje it adb-programma. Wy lansearje de adb-shell yn 'e konsole, en in kaai ferskynt yn' e tablet dy't moat wurde akseptearre. Dat is it, no kinne spultsjes wurde downloade nei jo tablet.

Boarne: www.habr.com

Add a comment