Kamusta kayong lahat. Ngayon ay titingnan natin kung paano maghanda ng isang proyekto gamit ang sdl2 library upang magpatakbo ng isang laro sa Android.
Una kailangan mong i-download ang Android Studio, i-install ito at lahat ng kailangan sa development environment na ito. Halimbawa, mayroon na akong Kde Neon, at sa sistemang ito mayroong isang file /etc/environment, ang parehong file ay umiiral sa ubuntu. Ang mga sumusunod na variable ay kailangang ipasok doon.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Kailangan mo ring i-download ang NDK mula sa opisyal na website, i-unpack ito sa iyong home directory at palitan ang pangalan nito sa NDK. Susunod na kailangan mong i-download ang SDL2 library mula sa website
Upang basahin ang mga file sa android mula sa mga asset, kailangan mong gamitin ang mga function ng SDL_RWops. Narito ang isang halimbawa ng paggamit sa code para sa pagtatrabaho sa isang font. Sa kasong ito, hindi namin magagamit ang FT_New_Face, ngunit sa halip ay gagamitin ang FT_New_Memory_Face upang gamitin ang data na nabasa na.
#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
Gumawa din ako ng isang header file upang ikonekta ang mga header ng SDL2. NO_SDL_GLEXT ang kailangan para magtagumpay ang compilation sa 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
Kaya handa na ang proyekto, handa na ang mga shader para sa Opengl Es 3.0. Ngayon kailangan naming lumikha ng isang android-proyekto. Upang gawin ito, i-unpack ang archive ng SDL2. Pumunta sa build-scripts. At ginagawa namin ito ng ganito.
./androidbuild.sh com.xverizex.test main.cpp
Lalabas ang sumusunod na mensahe.
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
Pumunta sa com.xverizex.test. Pumunta sa com.xverizex.test/app/jni/src. Kinopya namin ang aming proyekto sa laro. At binago namin ang Android.mk file, sa aking kaso ganito ang hitsura.
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)
Tulad ng maaaring napansin mo na, kasama ko rin ang Freetype2 library. Nakakita ako ng handa sa github para sa android, ngunit hindi ito gumana, kailangan kong baguhin ang isang bagay. Gumagawa din kami ng isang direktoryo na app/src/main/assets. Inilalagay namin ang aming mga mapagkukunan dito (mga font, sprite, 3D na modelo).
Ngayon ay i-configure natin ang Freetype2 para sa Android. I-download mula sa aking github
Pinagmulan: www.habr.com