Sveiki visiem. Å odien mÄs apskatÄ«sim, kÄ sagatavot projektu, izmantojot sdl2 bibliotÄku, lai palaistu spÄli operÄtÄjsistÄmÄ Android.
Vispirms jÄlejupielÄdÄ Android Studio, jÄinstalÄ un viss, kas nepiecieÅ”ams Å”ajÄ izstrÄdes vidÄ. PiemÄram, man tagad ir Kde Neon, un Å”ajÄ sistÄmÄ ir fails /etc/environment, tas pats fails pastÄv ubuntu. Tur jÄievada Å”Ädi mainÄ«gie.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Jums arÄ« jÄlejupielÄdÄ NDK no oficiÄlÄs vietnes, jÄizpako tas savÄ mÄjas direktorijÄ un jÄpÄrdÄvÄ par NDK. TÄlÄk no vietnes jÄlejupielÄdÄ SDL2 bibliotÄka
Lai Android ierÄ«cÄ nolasÄ«tu failus no lÄ«dzekļiem, jums ir jÄizmanto SDL_RWops funkcijas. Å eit ir piemÄrs izmantoÅ”anai kodÄ darbam ar fontu. Å ajÄ gadÄ«jumÄ mÄs nevaram izmantot FT_New_Face, bet tÄ vietÄ izmantosim FT_New_Memory_Face, lai izmantotu jau nolasÄ«tos datus.
#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
Es arÄ« izveidoju galvenes failu, lai savienotu SDL2 galvenes. NO_SDL_GLEXT ir nepiecieÅ”ams, lai kompilÄcija bÅ«tu veiksmÄ«ga operÄtÄjsistÄmÄ 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
TÄtad projekts ir gatavs, ÄnotÄji ir gatavi Opengl Es 3.0. Tagad mums ir jÄizveido android projekts. Lai to izdarÄ«tu, izsaiÅojiet SDL2 arhÄ«vu. Dodieties uz build-scripts. Un mÄs to darÄm Å”Ädi.
./androidbuild.sh com.xverizex.test main.cpp
Tiks parÄdÄ«ts Å”Äds ziÅojums.
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
Dodieties uz com.xverizex.test. Dodieties uz com.xverizex.test/app/jni/src. MÄs kopÄjam mÅ«su spÄles projektu. Un mÄs mainÄm Android.mk failu, manÄ gadÄ«jumÄ tas izskatÄs Å”Ädi.
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)
KÄ jÅ«s, iespÄjams, jau pamanÄ«jÄt, es iekļauju arÄ« Freetype2 bibliotÄku. Es atradu gatavu github for Android, bet tas nedarbojÄs, man vajadzÄja kaut ko mainÄ«t. MÄs arÄ« izveidojam direktoriju app/src/main/assets. MÄs tajÄ ievietojam savus resursus (fontus, spraitus, 3D modeļus).
Tagad konfigurÄsim Freetype2 operÄtÄjsistÄmai Android. LejupielÄdÄt no mana github
Avots: www.habr.com