Android-เตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เด’เดฐเต SDL2 เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เตเดจเตเดจเต

เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เดนเดพเดฏเต. Android-เตฝ เด’เดฐเต เด—เต†เดฏเดฟเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต sdl2 เดฒเตˆเดฌเตเดฐเดฑเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดŽเด™เตเด™เดจเต† เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เดพเดฎเต†เดจเตเดจเต เด‡เดจเตเดจเต เดจเดฎเตเดฎเตพ เดจเต‹เด•เตเด•เตเด‚.

เด†เดฆเตเดฏเด‚ เดจเดฟเด™เตเด™เตพ เด†เตปเดกเตเดฐเต‹เดฏเดฟเดกเต เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดฃเด‚, เด…เดคเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•, เด•เต‚เดŸเดพเดคเต† เดˆ เดตเดฟเด•เดธเดจ เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเตฝ เด†เดตเดถเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพเด‚. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดŽเดจเดฟเด•เตเด•เต เด‡เดชเตเดชเต‹เตพ Kde Neon เด‰เดฃเตเดŸเต, เดˆ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเตฝ เด’เดฐเต เดซเดฏเตฝ เด‰เดฃเตเดŸเต /etc/environment, เด…เดคเต‡ เดซเดฏเตฝ เด‰เดฌเตเดฃเตเดŸเตเดตเดฟเตฝ เดจเดฟเดฒเดตเดฟเดฒเตเดฃเตเดŸเต. เดคเดพเดดเต† เดชเดฑเดฏเตเดจเตเดจ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เด…เดตเดฟเดŸเต† เดจเตฝเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

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

เดจเดฟเด™เตเด™เตพ เด”เดฆเตเดฏเต‹เด—เดฟเด• เดตเต†เดฌเตโ€Œเดธเตˆเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต NDK เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดนเต‹เด‚ เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เด…เตบเดชเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ NDK เดŽเดจเตเดจเต เดชเตเดจเตผเดจเดพเดฎเด•เดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดตเต‡เดฃเด‚. เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ เดจเดฟเด™เตเด™เตพ เดตเต†เดฌเตเดธเตˆเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต SDL2 เดฒเตˆเดฌเตเดฐเดฑเดฟ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดฃเด‚ libsdl.org. เด†เตปเดกเตเดฐเต‹เดฏเดฟเดกเดฟเดจเดพเดฏเดฟ sdl2 เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด•เดฎเตเดชเตเดฏเต‚เดŸเตเดŸเดฑเดฟเดจเดพเดฏเดฟ เด‡เดคเต เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเดพเดคเดฟเดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต, เด•เดพเดฐเดฃเด‚ เด…เดคเต android-เดจเดพเดฏเดฟ เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเดฟเดฒเตเดฒ. เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ, เดฒเตˆเดธเตปเดธเต เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพ android เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹เดฏเดฟเตฝ เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด’เดฐเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด…เดฒเตเดฒเดพเดคเตเดคเดชเด•เตเดทเด‚ SDL2 เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เด’เดฐเต เดฒเตˆเดธเตปเดธเต เด†เดตเดถเตเดฏเดชเตเดชเต†เดŸเตเด‚.

เด…เดธเดฑเตเดฑเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต android-เดฒเต† เดซเดฏเดฒเตเด•เตพ เดตเดพเดฏเดฟเด•เตเด•เดพเตป, เดจเดฟเด™เตเด™เตพ 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 เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเด•เตพ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดžเดพเตป เด’เดฐเต เดนเต†เดกเตผ เดซเดฏเดฒเตเด‚ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต. Android-เตฝ เด•เด‚เดชเตˆเดฒเต‡เดทเตป เดตเดฟเดœเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต 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 เดฎเต‹เดกเดฒเตเด•เตพ).

เด‡เดจเดฟ เดจเดฎเตเด•เตเด•เต เด†เตปเดกเตเดฐเต‹เดฏเดฟเดกเดฟเดจเดพเดฏเดฟ Freetype2 เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเดพเด‚. เดŽเตปเตเดฑเต† เด—เดฟเดคเตเดคเดฌเดฟเตฝ เดจเดฟเดจเตเดจเต เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด• เดฌเดจเตเดงเด‚, เด•เต‚เดŸเดพเดคเต† Freetype2 เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟ app/jni/ เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เดชเด•เตผเดคเตเดคเตเด•. เดŽเดฒเตเดฒเดพเด‚ เดคเดฏเตเดฏเดพเดฑเดพเดฃเต. เด‡เดชเตเดชเต‹เตพ com.xverizex.test-เตฝ ./gradlew installDebug เดŽเดจเตเดจ เด•เดฎเดพเตปเดกเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•. เด†เตปเดกเตเดฐเต‹เดฏเดฟเดกเดฟเดฒเต‡เด•เตเด•เต เดˆ เด—เต†เดฏเดฟเด‚ เดšเต‡เตผเด•เตเด•เดพเตป, เด†เตปเดกเตเดฐเต‹เดฏเดฟเดกเดฟเตฝ เดกเต€เดฌเด—เตเด—เดฟเด‚เด—เต เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, "เดธเดฟเดธเตเดฑเตเดฑเด‚" เดŽเดจเตเดจเดคเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด•, "เดŸเดพเดฌเตเดฒเต†เดฑเตเดฑเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต" เดŽเดจเตเดจเดคเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เดฏเดฟ "เดฌเดฟเตฝเดกเต เดจเดฎเตเดชเตผ" เด“เดชเตเดทเตป เด†เดฑเต เดคเดตเดฃ เด•เตเดฒเดฟเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด•. เดคเตเดŸเตผเดจเตเดจเต เดคเดฟเดฐเดฟเด•เต† เดชเต‹เด•เตเด•, เดกเต†เดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เตเดณเตเดณ เด“เดชเตเดทเตป เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเด‚. เด…เด•เดคเตเดคเต เดชเต‹เดฏเดฟ เด…เดคเต เด“เดฃเดพเด•เตเด•เตเด•, "USB เดกเต€เดฌเด—เตเด—เดฟเด‚เด—เต" เด“เดชเตโ€Œเดทเดจเตเด‚ เด“เดฃเดพเด•เตเด•เตเด•. เด‡เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŸเดพเดฌเตโ€Œเดฒเต†เดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต เด•เต€ เดฒเดญเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, adb เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•. เดžเด™เตเด™เตพ เด•เตบเดธเต‹เดณเดฟเตฝ adb เดทเต†เตฝ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เต‡เดฃเตเดŸ เด’เดฐเต เด•เต€ เดŸเดพเดฌเตโ€Œเดฒเต†เดฑเตเดฑเดฟเตฝ เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเด‚. เด…เดคเตเดฐเดฏเต‡เดฏเตเดณเตเดณเต‚, เด‡เดชเตเดชเต‹เตพ เด—เต†เดฏเดฟเดฎเตเด•เตพ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดŸเดพเดฌเตโ€Œเดฒเต†เดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเด‚.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•