āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄā§‡ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ SDL2 āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

āĻšāĻžāχ āϏāĻŦ. āφāϜ āφāĻŽāϰāĻž āĻĻ⧇āĻ–āĻŦ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ sdl2 āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Android-āĻ āĻāĻ•āϟāĻŋ āϗ⧇āĻŽ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤

āĻĒā§āϰāĻĨāĻŽā§‡ āφāĻĒāύāĻžāϕ⧇ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄ āĻ¸ā§āϟ⧁āĻĄāĻŋāĻ“ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇, āĻāϟāĻŋ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻāχ āωāĻ¨ā§āύāϝāĻŧāύ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϏāĻŦāĻ•āĻŋāϛ⧁āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āφāĻŽāĻžāϰ āĻ•āĻžāϛ⧇ āĻāĻ–āύ āϕ⧇āĻĄāĻŋ āύāĻŋāϝāĻŧāύ āφāϛ⧇, āĻāĻŦāĻ‚ āĻāχ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻāĻ•āϟāĻŋ āĻĢāĻžāχāϞ āφāϛ⧇ /etc/environment, āĻāĻ•āχ āĻĢāĻžāχāϞ āωāĻŦ⧁āĻ¨ā§āϟ⧁āϤ⧇ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύāĨ¤ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞāϗ⧁āϞāĻŋ āϏ⧇āĻ–āĻžāύ⧇ āĻĒā§āϰāĻŦ⧇āĻļ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

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

āφāĻĒāύāĻžāϕ⧇ āĻ…āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻĨ⧇āϕ⧇ NDK āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇, āĻāϟāĻŋāϕ⧇ āφāĻĒāύāĻžāϰ āĻšā§‹āĻŽ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋāϤ⧇ āφāύāĻĒā§āϝāĻžāĻ• āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ NDK āĻāϰ āύāĻžāĻŽ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāϰāĻĒāϰ āφāĻĒāύāĻžāϕ⧇ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻĨ⧇āϕ⧇ SDL2 āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ libsdl.org. āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄā§‡āϰ āϜāĻ¨ā§āϝ sdl2 āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āĻāϟāĻŋ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻ•āĻŽā§āĻĒāĻžāχāϞ āύāĻž āĻ•āϰāĻž āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ, āĻ•āĻžāϰāĻŖ āϤāĻ–āύ āĻāϟāĻŋ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄā§‡āϰ āϜāĻ¨ā§āϝ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻŦ⧇ āύāĻžāĨ¤ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϟāĻŋ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āϞāĻžāχāϏ⧇āĻ¨ā§āϏ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻžāϕ⧇ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄ āĻ¸ā§āϟ⧁āĻĄāĻŋāĻ“āϤ⧇ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇, āĻ…āĻ¨ā§āϝāĻĨāĻžāϝāĻŧ SDL2 āύāĻŋāĻ°ā§āĻŽāĻžāϪ⧇āϰ āϏāĻŽāϝāĻŧ āϞāĻžāχāϏ⧇āĻ¨ā§āϏ⧇āϰ āϜāĻ¨ā§āϝ āϜāĻŋāĻœā§āĻžāĻžāϏāĻž āĻ•āϰāĻŦ⧇āĨ¤

āϏāĻŽā§āĻĒāĻĻ āĻĨ⧇āϕ⧇ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄā§‡ āĻĢāĻžāχāϞ āĻĒāĻĄāĻŧāϤ⧇, āφāĻĒāύāĻžāϕ⧇ SDL_RWops āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāĻ–āĻžāύ⧇ āĻāĻ•āϟāĻŋ āĻĢāĻ¨ā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϕ⧋āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖāĨ¤ āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āφāĻŽāϰāĻž FT_New_Face āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ āύāĻž, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ FT_New_Memory_Face āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ āϝ⧇ āĻĄā§‡āϟāĻž āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻĒāĻĄāĻŧāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

#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

āφāĻŽāĻŋ SDL2 āĻšā§‡āĻĄāĻžāϰ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻšā§‡āĻĄāĻžāϰ āĻĢāĻžāχāϞāĻ“ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĻ›āĻŋāĨ¤ NO_SDL_GLEXT āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄā§‡ āϏāĻĢāϞ āĻšāĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āϏāĻ‚āĻ•āϞāύ⧇āϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧎

#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

āϏ⧁āϤāϰāĻžāĻ‚ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ, āĻļ⧇āĻĄāĻžāĻ°ā§āϏ Opengl Es 3.0 āĻāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤāĨ¤ āĻāĻ–āύ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄ-āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāϟāĻŋ āĻ•āϰāϤ⧇, SDL2 āϏāĻ‚āϰāĻ•ā§āώāĻŖāĻžāĻ—āĻžāϰāϟāĻŋ āφāύāĻĒā§āϝāĻžāĻ• āĻ•āϰ⧁āύāĨ¤ āĻŦāĻŋāĻ˛ā§āĻĄ-āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡ āϝāĻžāύāĨ¤ āĻāĻŦāĻ‚ āφāĻŽāϰāĻž āĻāχ āĻŽāϤ āĻāϟāĻŋ.

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

āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻŦāĻžāĻ°ā§āϤāĻž āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšāĻŦ⧇.

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

com.xverizex.test āĻ āϝāĻžāύāĨ¤ com.xverizex.test/app/jni/src-āĻ āϝāĻžāύāĨ¤ āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ āϖ⧇āϞāĻž āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ. āĻāĻŦāĻ‚ āφāĻŽāϰāĻž Android.mk āĻĢāĻžāχāϞ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻŋ, āφāĻŽāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻāϟāĻŋ āĻāχāϰāĻ•āĻŽ āĻĻ⧇āĻ–āĻžāϝāĻŧāĨ¤

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)

āφāĻĒāύāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āϞāĻ•ā§āĻˇā§āϝ āĻ•āϰ⧇āϛ⧇āύ āϝ⧇, āφāĻŽāĻŋ Freetype2 āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāĻ“ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰāĻŋāĨ¤ āφāĻŽāĻŋ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄā§‡āϰ āϜāĻ¨ā§āϝ āĻ—āĻŋāĻĨ⧁āĻŦ⧇ āĻāĻ•āϟāĻŋ āϰ⧇āĻĄāĻŋāĻŽā§‡āĻĄ āϖ⧁āρāĻœā§‡ āĻĒ⧇āϝāĻŧ⧇āĻ›āĻŋ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϟāĻŋ āĻ•āĻžāϜ āĻ•āϰ⧇āύāĻŋ, āφāĻŽāĻžāϕ⧇ āĻ•āĻŋāϛ⧁ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āĻ…ā§āϝāĻžāĻĒ/src/main/assets āϤ⧈āϰāĻŋ āĻ•āϰāĻŋāĨ¤ āφāĻŽāϰāĻž āĻāϟāĻŋāϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻ‚āĻ¸ā§āĻĨāĻžāύ āϰāĻžāĻ–āĻŋ (āĻĢāĻ¨ā§āϟ, āĻ¸ā§āĻĒā§āϰāĻžāχāϟ, 3D āĻŽāĻĄā§‡āϞ)āĨ¤

āĻāĻ–āύ Android āĻāϰ āϜāĻ¨ā§āϝ Freetype2 āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻž āϝāĻžāĻ•āĨ¤ āφāĻŽāĻžāϰ āĻ—āĻŋāĻĨ⧁āĻŦ āĻĨ⧇āϕ⧇ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰ⧁āύ āϞāĻŋāĻ‚āĻ•, āĻāĻŦāĻ‚ app/jni/ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋāϤ⧇ Freetype2 āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āĻ•āϰ⧁āύāĨ¤ āϏāĻŦ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ. āĻāĻ–āύ com.xverizex.test-āĻ ./gradlew installDebug āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϚāĻžāϞāĻžāύāĨ¤ āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄā§‡ āĻāχ āϗ⧇āĻŽāϟāĻŋ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ, āĻ…ā§āϝāĻžāĻ¨ā§āĻĄā§āϰāϝāĻŧ⧇āĻĄā§‡ āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚ āϏāĻ•ā§āώāĻŽ āĻ•āϰāĻž āφāĻŦāĻļā§āϝāϕ⧎ āĻāϟāĻŋ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻžāϕ⧇ āϏ⧇āϟāĻŋāĻ‚āϏ⧇ āϝ⧇āϤ⧇ āĻšāĻŦ⧇, "āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ" āĻ āϝ⧇āϤ⧇ āĻšāĻŦ⧇, "āĻŸā§āϝāĻžāĻŦāϞ⧇āϟ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇" āĻ āϝ⧇āϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻĒā§āϰāĻžāϝāĻŧ āĻ›āϝāĻŧāĻŦāĻžāϰ "āĻŦāĻŋāĻ˛ā§āĻĄ āύāĻŽā§āĻŦāϰ" āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āϤāĻžāϰāĻĒāϰ⧇ āĻĢāĻŋāϰ⧇ āϝāĻžāύ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāϟāĻŋ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻšāĻŦ⧇āĨ¤ āĻ­āĻŋāϤāϰ⧇ āϝāĻžāύ āĻāĻŦāĻ‚ āĻāϟāĻŋ āϚāĻžāϞ⧁ āĻ•āϰ⧁āύ, "USB āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚" āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāϟāĻŋāĻ“ āϚāĻžāϞ⧁ āĻ•āϰ⧁āύāĨ¤ āĻāĻ–āύ āφāĻĒāύāĻžāϕ⧇ āĻŸā§āϝāĻžāĻŦāϞ⧇āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϕ⧀ āĻĒ⧇āϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāϟāĻŋ āĻ•āϰāϤ⧇, adb āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϟāĻŋ āχāύāĻ¸ā§āϟāϞ āĻ•āϰ⧁āύāĨ¤ āφāĻŽāϰāĻž āĻ•āύāϏ⧋āϞ⧇ adb āĻļ⧇āϞ āϚāĻžāϞ⧁ āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āĻŸā§āϝāĻžāĻŦāϞ⧇āĻŸā§‡ āĻāĻ•āϟāĻŋ āϕ⧀ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻšāϝāĻŧ āϝāĻž āĻ…āĻŦāĻļā§āϝāχ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāϟāĻžāχ, āĻāĻ–āύ āϗ⧇āĻŽāϗ⧁āϞāĻŋ āφāĻĒāύāĻžāϰ āĻŸā§āϝāĻžāĻŦāϞ⧇āĻŸā§‡ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āωāĻ¤ā§āϏ: www.habr.com

āĻāĻ•āϟāĻŋ āĻŽāĻ¨ā§āϤāĻŦā§āϝ āϜ⧁āĻĄāĻŧ⧁āύ