Amadekirina projeyek SDL2 ku li ser Android-ê bixebite

Silav hemû. Îro em ê binihêrin ka meriv çawa bi karanîna pirtûkxaneya sdl2 projeyek amade dike da ku lîstikek li ser Android-ê bimeşîne.

Pêşî hûn hewce ne ku Android Studio dakêşin, wê saz bikin û her tiştê ku di vê hawîrdora pêşkeftinê de hewce dike. Mînakî, ez niha Kde Neon heye, û li ser vê pergalê pelek /etc/nvironment heye, heman pel di ubuntu de jî heye. Pêdivî ye ku guhêrbarên jêrîn li wir werin nivîsandin.

ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk

Her weha hûn hewce ne ku NDK-ê ji malpera fermî dakêşin, wê di pelrêça mala xwe de pak bikin û navê wê biguherînin NDK. Piştre hûn hewce ne ku pirtûkxaneya SDL2 ji malperê dakêşin libsdl.org. Ji bo karanîna sdl2 ji bo androidê, girîng e ku meriv wê ji bo komputerê berhev neke, ji ber ku wê hingê ew ê ji bo androidê berhev neke. Ji bo ku proje were berhev kirin, hûn hewce ne ku projeyek li studyoya android-ê, her yek, biafirînin ku destûrnameyê qebûl bike, wekî din SDL2 dê dema çêkirinê destûrnameyek bixwaze.

Ji bo xwendina pelên di android-ê de ji malûmilkan, hûn hewce ne ku fonksiyonên SDL_RWops bikar bînin. Li vir mînakek karanîna kodê ji bo xebitandina bi tîpek heye. Di vê rewşê de, em nikarin FT_New_Face bikar bînin, lê dê li şûna wê FT_New_Memory_Face bikar bînin da ku daneyên ku berê hatine xwendin bikar bînin.

#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

Min pelek sernavê jî çêkir da ku sernavên SDL2 ve girêbide. NO_SDL_GLEXT hewce ye ku berhevok li ser Android-ê biserkeve.

#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

Ji ber vê yekê proje amade ye, şader ji bo Opengl Es 3.0 amade ne. Naha divê em projeyek android-ê biafirînin. Ji bo vê yekê, arşîva SDL2 vekin. Herin build-scripts. Û em bi vî awayî dikin.

./androidbuild.sh com.xverizex.test main.cpp

Peyama jêrîn dê xuya bibe.

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

Biçe com.xverizex.test. Biçe com.xverizex.test/app/jni/src. Em projeya lîstika xwe kopî dikin. Û em pelê Android.mk diguherînin, di rewşa min de ew wusa xuya dike.

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)

Wekî ku we berê jî dîtiye, ez pirtûkxaneya Freetype2 jî vedigirim. Min li ser github-ê ji bo android-ek amade-yek amade dît, lê ew nexebitî, min hewce kir ku tiştek biguherim. Em di heman demê de serîlêdanek pelrêça/src/sereke/malî jî diafirînin. Em çavkaniyên xwe tê de cih digirin (font, sprites, modelên 3D).

Naha em werin Freetype2 ji bo Android-ê mîheng bikin. Ji githubê min dakêşin Pêvek, û pelrêça Freetype2 li pelrêça app/jni/ kopî bikin. Hemî amade ye. Niha emrê ./gradlew installDebug li com.xverizex.test bimeşîne. Ji bo ku hûn bikarin vê lîstikê li androidê zêde bikin, divê di androidê de xeletîkirin were çalak kirin. Ji bo vê yekê, hûn hewce ne ku biçin mîhengan, biçin "Pergalê", biçin "Derbarê tabletê" û bi qasî şeş caran vebijarka "Nimreya Avakirinê" bikirtînin. Dûv re vegerin û vebijarka ji bo pêşdebiran dê xuya bibe. Herin hundur û wê vekin, her weha vebijarka "Debugging USB" vekin. Naha hûn hewce ne ku mifteyek ji bo tabletê bistînin. Ji bo vê yekê, bernameya adb saz bikin. Em şêlê adb-ê di konsolê de dest pê dikin, û di tabletê de mifteyek xuya dike ku divê were pejirandin. Ew e, naha lîstik dikarin li tableta we werin dakêşandin.

Source: www.habr.com

Add a comment