Diyaarinta mashruuca SDL2 si uu ugu shaqeeyo Android

Salaamu caleykum Maanta waxaan eegi doonaa sida loo diyaariyo mashruuc iyadoo la adeegsanayo maktabadda sdl2 si loogu socodsiiyo ciyaarta Android.

Marka hore waxaad u baahan tahay inaad soo dejiso Android Studio, ku rakib iyo wax kasta oo looga baahan yahay deegaankan horumarinta. Tusaale ahaan, hadda waxaan haystaa Kde Neon, nidaamkanna waxaa ku jira fayl /etc/environment, isla faylka ayaa ku jira ubuntu. Doorsoomayaasha soo socda ayaa loo baahan yahay in la geliyo halkaas.

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

Waxaad sidoo kale u baahan tahay inaad ka soo dejiso NDK website-ka rasmiga ah, ka soo saar buug-tusaha guriga oo aad u magacowdo NDK. Marka xigta waxaad u baahan tahay inaad ka soo dejiso maktabadda SDL2 mareegaha libsdl.org. Si aad u isticmaasho sdl2 ee android, waxaa muhiim ah in aan loo diyaarin kombiyutarka, sababtoo ah markaa ma ururin doono android. Si mashruuca loo ururiyo, waxaad u baahan tahay inaad mashruuc ka samayso istuudiyaha android, mid kasta, si aad u aqbasho shatiga, haddii kale SDL2 waxay waydiin doontaa shatiga marka la dhisayo.

Si aad u akhrido faylalka android ka hantida, waxaad u baahan tahay inaad isticmaasho hawlaha SDL_RWops. Halkan waxaa ah tusaale isticmaalka koodka ee ku shaqaynta farta. Xaaladdan oo kale, ma isticmaali karno FT_New_Face, laakiin taa beddelkeeda waxaan isticmaali doonnaa FT_New_Memory_Face si aan u isticmaalno xogta horay loo akhriyay.

#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

Waxaan sidoo kale sameeyay faylka madaxa si aan ugu xidho madaxyada SDL2. NO_SDL_GLEXT ayaa loo baahan yahay si loo ururiyo si loogu guulaysto 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

Markaa mashruucu waa diyaar, hadhyadu waxay diyaar u yihiin Opengl Es 3.0. Hadda waxaan u baahanahay inaan abuurno android-project. Si taas loo sameeyo, fur kaydka SDL2. Tag dhis-scripts. Anaguna sidan ayaan u samaynaa.

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

Fariinta soo socota ayaa soo bixi doonta.

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

Tag com.xverizex.test. Tag com.xverizex.test/app/jni/src. Waxaan nuqul ka samaynaa mashruucayaga ciyaarta. Oo waxaan bedelnaa faylka Android.mk, xaaladdeyda waxay u egtahay sidan.

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)

Sida laga yaabo inaad horeba u aragtay, waxaan sidoo kale ku daray maktabadda Freetype2. Waxaan ka helay mid diyaarsan github ee android, laakiin ma aysan shaqayn, waxaan u baahday inaan wax ka beddelo. Waxaan sidoo kale abuurnaa hagaha abka/src/guud/hantida. Waxaan dhignaa agabkayaga (fonts, sprites, 3D model).

Hadda aan u habeyno Freetype2 ee Android. Ka soo deji github-kayga Link, oo koobi ka samee tusaha Freetype2 app/jni/ hagaha. Dhammaan waa diyaar. Hadda ku socodsii amarka ./gradlew installDebug gudaha com.xverizex.test. Si loo awoodo in lagu daro ciyaartan android, debugging waa in lagu furo android. Si tan loo sameeyo, waxaad u baahan tahay inaad tagto goobaha, aado "System", tag "About tablet" oo guji "lambarka dhismaha" doorashada qiyaastii lix jeer. Markaa dib u noqo oo ikhtiyaarka horumariyayaashu way soo muuqan doonaan. Gal oo shid, sidoo kale shid ikhtiyaarka "Debugging USB". Hadda waxaad u baahan tahay inaad hesho furaha kiniinka. Si tan loo sameeyo, ku rakib barnaamijka adb. Waxaan ku soo saarnay qolofka adb ee konsole, furahana wuxuu ka muuqdaa kiniinka oo ay tahay in la aqbalo. Taasi waa sidaas, hadda ciyaaraha waxaa lagu soo dejisan karaa tablet-kaaga.

Source: www.habr.com

Add a comment