በአንድሮይድ ላይ ለመስራት SDL2 ፕሮጀክት በማዘጋጀት ላይ

ሰላም ሁላችሁም። ዛሬ በአንድሮይድ ላይ ጨዋታን ለማስኬድ sdl2 ላይብረሪ በመጠቀም ፕሮጀክት እንዴት ማዘጋጀት እንዳለብን እንመለከታለን።

በመጀመሪያ አንድሮይድ ስቱዲዮን ማውረድ ፣ መጫን እና በዚህ የእድገት አካባቢ ውስጥ የሚፈለጉትን ሁሉ መጫን ያስፈልግዎታል። ለምሳሌ, አሁን Kde Neon አለኝ, እና በዚህ ስርዓት ላይ ፋይል / ወዘተ/ አካባቢ አለ, ተመሳሳይ ፋይል በ ubuntu ውስጥ አለ. የሚከተሉት ተለዋዋጮች እዚያ ውስጥ መግባት አለባቸው።

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

እንዲሁም ኤንዲኬን ከኦፊሴላዊው ድህረ ገጽ ማውረድ፣ ወደ ቤትዎ ማውጫ ውስጥ ያውጡት እና ወደ NDK እንደገና መሰየም ያስፈልግዎታል። በመቀጠል SDL2 ቤተ-መጽሐፍትን ከድር ጣቢያው ማውረድ ያስፈልግዎታል libsdl.org. ለ android sdl2 ን ለመጠቀም ለኮምፒዩተር አለማጠናቀር አስፈላጊ ነው ፣ ምክንያቱም ከዚያ ለ android አይሰበስብም። ፕሮጀክቱን ለማጠናቀር በ android ስቱዲዮ ውስጥ አንድ ፕሮጀክት መፍጠር አለብዎት, ማንኛውም, ፈቃዱን ለመቀበል, አለበለዚያ SDL2 በሚገነባበት ጊዜ ፍቃድ ይጠይቃል.

በአንድሮይድ ውስጥ ያሉ ፋይሎችን ከንብረቶች ለማንበብ የSDL_RWops ተግባራትን መጠቀም ያስፈልግዎታል። ከቅርጸ-ቁምፊ ጋር ለመስራት በኮድ ውስጥ የአጠቃቀም ምሳሌ እዚህ አለ። በዚህ አጋጣሚ FT_New_Faceን መጠቀም አንችልም፣ ይልቁንም ቀድሞ የተነበበውን ውሂብ ለመጠቀም FT_New_Memory_Faceን እንጠቀማለን።

#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

የኤስዲኤል 2 ራስጌዎችን ለማገናኘት የራስጌ ፋይል ፈጠርኩ። በአንድሮይድ ላይ ለማጠናቀር NO_SDL_GLEXT ያስፈልጋል።

#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

ስለዚህ ፕሮጀክቱ ዝግጁ ነው, ጥላዎች ለ Opengl Es 3.0 ዝግጁ ናቸው. አሁን አንድሮይድ-ፕሮጀክት መፍጠር አለብን. ይህንን ለማድረግ የኤስዲኤል 2 ማህደሩን ይክፈቱ። ወደ ግንባታ-ስክሪፕቶች ይሂዱ። እና እንደዚህ እናደርጋለን.

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

የሚከተለው መልእክት ይመጣል።

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

ወደ com.xverizex.test ይሂዱ። ወደ com.xverizex.test/app/jni/src ይሂዱ። የጨዋታ ፕሮጄክታችንን እንገለበጣለን። እና የ Android.mk ፋይልን እንለውጣለን, በእኔ ሁኔታ ይህ ይመስላል.

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)

አስቀድመህ እንዳስተዋለው፣ እኔም የፍሪታይፕ2 ቤተ-መጽሐፍትን አካትቻለሁ። ለ android በ github ላይ ዝግጁ የሆነ አገኘሁ ፣ ግን አልሰራም ፣ የሆነ ነገር መለወጥ ነበረብኝ። እንዲሁም ማውጫ መተግበሪያ/src/ዋና/ንብረቶች እንፈጥራለን። ሀብታችንን በእሱ ውስጥ እናስቀምጣለን (ቅርጸ ቁምፊዎች, ስፕሪቶች, 3 ዲ አምሳያዎች).

አሁን ፍሪታይፕ 2ን ለአንድሮይድ እናዋቅር። ከእኔ github አውርድ ማያያዣ, እና የFreetype2 ማውጫን ወደ app/jni/ ማውጫ ይቅዱ። ሁሉም ዝግጁ ነው። አሁን ትዕዛዙን ያሂዱ ./gradlew installDebug በ com.xverizex.test። ይህን ጨዋታ ወደ አንድሮይድ ለማከል፣ ማረም በአንድሮይድ ውስጥ መንቃት አለበት። ይህንን ለማድረግ ወደ ቅንብሮች መሄድ ያስፈልግዎታል, ወደ "ስርዓት" ይሂዱ, ወደ "ስለ ታብሌት" ይሂዱ እና "የግንባታ ቁጥር" አማራጭን ስድስት ጊዜ ያህል ጠቅ ያድርጉ. ከዚያ ይመለሱ እና የገንቢዎች አማራጭ ይመጣል። ይግቡ እና ያብሩት, እንዲሁም "USB Debugging" የሚለውን አማራጭ ያብሩ. አሁን ለጡባዊው ቁልፍ ማግኘት ያስፈልግዎታል. ይህንን ለማድረግ የ adb ፕሮግራሙን ይጫኑ. የ adb ሼል በኮንሶል ውስጥ እናስጀምራለን፣ እና መቀበል ያለበት ቁልፍ በጡባዊው ላይ ይታያል። ያ ብቻ ነው፣ አሁን ጨዋታዎች ወደ ጡባዊዎ ሊወርዱ ይችላሉ።

ምንጭ: hab.com

አስተያየት ያክሉ