Assalamu alaikum. A yau za mu dubi yadda ake shirya wani aiki ta amfani da sdl2 library don gudanar da wasa akan Android.
Da farko kuna buƙatar saukar da Android Studio, shigar da shi da duk abin da ake buƙata a cikin wannan yanayin haɓakawa. Misali, yanzu ina da Kde Neon, kuma akan wannan tsarin akwai fayil /etc/environment, fayil iri ɗaya yana cikin ubuntu. Ana buƙatar shigar da masu canji masu zuwa a wurin.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Hakanan kuna buƙatar zazzage NDK daga gidan yanar gizon hukuma, cire kayan cikin gidan ku kuma sake suna zuwa NDK. Na gaba kuna buƙatar zazzage ɗakin karatu na SDL2 daga gidan yanar gizon
Don karanta fayiloli a cikin android daga kadarorin, kuna buƙatar amfani da ayyukan SDL_RWops. Anan akwai misalin amfani a lamba don aiki tare da font. A wannan yanayin, ba za mu iya amfani da FT_New_Face ba, amma maimakon haka za mu yi amfani da FT_New_Memory_Face don amfani da bayanan da aka riga aka karanta.
#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
Na kuma ƙirƙiri fayil na kai don haɗa masu kai SDL2. Ana buƙatar NO_SDL_GLEXT don haɗawa don yin nasara akan 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
Don haka an shirya aikin, shaders suna shirye don Opengl Es 3.0. Yanzu muna buƙatar ƙirƙirar aikin android-project. Don yin wannan, cire kayan tarihin SDL2. Je zuwa rubutun-rubutun. Kuma muna yin haka kamar haka.
./androidbuild.sh com.xverizex.test main.cpp
Sakon mai zuwa zai bayyana.
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
Jeka zuwa com.xverizex.test. Je zuwa com.xverizex.test/app/jni/src. Muna kwafin aikin wasanmu. Kuma muna canza fayil ɗin Android.mk, a cikin akwati na yana kama da wannan.
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)
Kamar yadda wataƙila kun riga kun lura, Ni kuma na haɗa da ɗakin karatu na Freetype2. Na sami wanda aka shirya akan github don android, amma bai yi aiki ba, ina buƙatar canza wani abu. Mun kuma ƙirƙiri directory app/src/main/kadara. Muna sanya albarkatun mu a ciki (fonts, sprites, 3D model).
Yanzu bari mu saita Freetype2 don Android. Zazzage daga github dina
source: www.habr.com