ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ. Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ sdl2 Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ Π½Π° android.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°Π΄ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Android Studio, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΅Ρ ΠΈ Π²ΡΡ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π² ΡΡΠΎΠΉ ΡΡΠ΅Π΄Π΅ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΌΠ΅Π½Ρ ΡΠ΅ΠΉΡΠ°Ρ Kde Neon, ΠΈ Π² ΡΡΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΉΠ» /etc/environment, ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΡΠ°ΠΉΠ» Π΅ΡΡΡ ΠΈ Π² ubuntu. Π’Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Π’Π°ΠΊΠΆΠ΅ Π½Π°Π΄ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ NDK Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ° ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² Π΄ΠΎΠΌΠ°ΡΠ½ΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ Π² NDK. ΠΠ°Π»Π΅Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ SDL2 Ρ ΡΠ°ΠΉΡΠ° . Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ sdl2 Π΄Π»Ρ android, Π²Π°ΠΆΠ½ΠΎ Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π΄Π»Ρ android. Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΡΡ, Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Π² android studio, Π»ΡΠ±ΠΎΠΉ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ½ΡΡΡ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ, ΠΈΠ½Π°ΡΠ΅ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ SDL2 Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠΈΡΡ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ.
Π§ΡΠΎΠ±Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ Π² android ΠΈΠ· assets, Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ 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 Π½ΡΠΆΠ΅Π½, ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΡΠΎΡΠ»Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ Π΄Π»Ρ 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
ΠΡΠ°ΠΊ ΠΏΡΠΎΠ΅ΠΊΡ Π³ΠΎΡΠΎΠ², ΡΠ΅ΠΉΠ΄Π΅ΡΡ Π³ΠΎΡΠΎΠ²Ρ Π΄Π»Ρ Opengl Es 3.0. Π’Π΅ΠΏΠ΅ΡΡ Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ android-project. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅ΠΌ Π°ΡΡ ΠΈΠ² SDL2. ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ Π² build-scripts. Π Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠ°ΠΊ.
./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. Π― Π½Π°ΡΠ΅Π» ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΡΡ Π½Π° github Π΄Π»Ρ android, Π½ΠΎ ΠΎΠ½Π° Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π»Π°, Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΊΠΎΠ΅ ΡΡΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ. Π’Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ app/src/main/assets. Π Π½Π΅Π³ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π½Π°ΡΠΈ ΡΠ΅ΡΡΡΡΡ ( ΡΡΠΈΡΡΡ, ΡΠΏΡΠ°ΠΉΡΡ, 3d ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ ).
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΡΡΡΠΎΠΈΠΌ Freetype2 Π΄Π»Ρ Android. Π‘ΠΊΠ°ΡΠΈΠ²Π°Π΅ΠΌ Ρ ΠΌΠΎΠ΅Π³ΠΎ github , ΠΈ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Freetype2 Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ app/jni/. ΠΡΡ Π³ΠΎΡΠΎΠ²ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π² com.xverizex.test ΠΊΠΎΠΌΠ°Π½Π΄Ρ ./gradlew installDebug. Π§ΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² android ΡΡΡ ΠΈΠ³ΡΡ, Π² android Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΎΡΠ»Π°Π΄ΠΊΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² Β«Π‘ΠΈΡΡΠ΅ΠΌΠ°Β», ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² Β«Π ΠΏΠ»Π°Π½ΡΠ΅ΡΠ΅Β» ΠΈ Π½Π°ΠΆΠ°ΡΡ ΠΎΠΊΠΎΠ»ΠΎ ΡΠ΅ΡΡΠΈ ΡΠ°Π· ΠΎΠΏΡΠΈΡ Β«ΠΠΎΠΌΠ΅Ρ ΡΠ±ΠΎΡΠΊΠΈΒ». ΠΠΎΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π°Π·Π°Π΄ ΠΈ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ ΠΎΠΏΡΠΈΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ, ΡΠ°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΎΠΏΡΠΈΡ Β«ΠΡΠ»Π°Π΄ΠΊΠ° ΠΏΠΎ USBΒ». Π’Π΅ΠΏΠ΅ΡΡ Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠ»ΡΡ Π΄Π»Ρ ΠΏΠ»Π°Π½ΡΠ΅ΡΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ adb. ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ adb shell, ΠΈ Π² ΠΏΠ»Π°Π½ΡΠ΅ΡΠ΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π΄ΠΎ ΠΏΡΠΈΠ½ΡΡΡ. ΠΡΡ, ΡΠ΅ΠΏΠ΅ΡΡ ΠΈΠ³ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π½Π° ΠΏΠ»Π°Π½ΡΠ΅Ρ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com

