Ana shirya aikin SDL2 don gudana akan Android

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 libsdl.org. Don amfani da sdl2 don android, yana da mahimmanci kada a haɗa ta don kwamfutar, saboda ba za ta haɗa ta android ba. Domin aikin ya tattara, kuna buƙatar ƙirƙirar aikin a cikin studio na android, kowane ɗayan, don karɓar lasisin, in ba haka ba SDL2 zai nemi lasisi lokacin gini.

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 link, da kwafi littafin Freetype2 zuwa app/jni/ directory. Duk a shirye. Yanzu gudanar da umurnin ./gradlew installDebug a cikin com.xverizex.test. Don samun damar ƙara wannan wasan zuwa android, dole ne a kunna debugging a android. Don yin wannan, kuna buƙatar zuwa saitunan, je zuwa "System", je zuwa "Game da kwamfutar hannu" kuma danna zaɓin "Gina lambar" kusan sau shida. Sa'an nan kuma komawa kuma zaɓi na masu haɓakawa zai bayyana. Ku shiga ku kunna shi, kuma kunna zaɓin "USB Debugging". Yanzu kuna buƙatar samun maɓalli don kwamfutar hannu. Don yin wannan, shigar da shirin adb. Mun ƙaddamar da harsashi adb a cikin na'ura wasan bidiyo, kuma maɓalli yana bayyana a cikin kwamfutar hannu wanda dole ne a karɓa. Shi ke nan, yanzu ana iya saukar da wasanni zuwa kwamfutar hannu.

source: www.habr.com

Add a comment