Android ನಲ್ಲಿ ರನ್ ಮಾಡಲು SDL2 ಪ್ರಾಜೆಕ್ಟ್ ಅನ್ನು ಸಿದ್ಧಪಡಿಸಲಾಗುತ್ತಿದೆ

ಎಲ್ಲರಿಗು ನಮಸ್ಖರ. ಇಂದು ನಾವು Android ನಲ್ಲಿ ಆಟವನ್ನು ಚಲಾಯಿಸಲು sdl2 ಲೈಬ್ರರಿಯನ್ನು ಬಳಸಿಕೊಂಡು ಯೋಜನೆಯನ್ನು ಹೇಗೆ ತಯಾರಿಸಬೇಕೆಂದು ನೋಡೋಣ.

ಮೊದಲು ನೀವು ಆಂಡ್ರಾಯ್ಡ್ ಸ್ಟುಡಿಯೋವನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ, ಅದನ್ನು ಸ್ಥಾಪಿಸಿ ಮತ್ತು ಈ ಅಭಿವೃದ್ಧಿ ಪರಿಸರದಲ್ಲಿ ಅಗತ್ಯವಿರುವ ಎಲ್ಲವನ್ನೂ. ಉದಾಹರಣೆಗೆ, ನಾನು ಈಗ Kde Neon ಅನ್ನು ಹೊಂದಿದ್ದೇನೆ ಮತ್ತು ಈ ಸಿಸ್ಟಂನಲ್ಲಿ ಫೈಲ್ /etc/environment ಇದೆ, ಅದೇ ಫೈಲ್ ಉಬುಂಟುನಲ್ಲಿ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ. ಕೆಳಗಿನ ವೇರಿಯೇಬಲ್‌ಗಳನ್ನು ಅಲ್ಲಿ ನಮೂದಿಸಬೇಕಾಗಿದೆ.

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

ನೀವು ಅಧಿಕೃತ ವೆಬ್‌ಸೈಟ್‌ನಿಂದ NDK ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ, ಅದನ್ನು ನಿಮ್ಮ ಹೋಮ್ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ಅನ್ಪ್ಯಾಕ್ ಮಾಡಿ ಮತ್ತು ಅದನ್ನು NDK ಎಂದು ಮರುಹೆಸರಿಸಿ. ಮುಂದೆ ನೀವು ವೆಬ್‌ಸೈಟ್‌ನಿಂದ SDL2 ಲೈಬ್ರರಿಯನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ libsdl.org. Android ಗಾಗಿ sdl2 ಅನ್ನು ಬಳಸಲು, ಅದನ್ನು ಕಂಪ್ಯೂಟರ್‌ಗೆ ಕಂಪೈಲ್ ಮಾಡದಿರುವುದು ಮುಖ್ಯ, ಏಕೆಂದರೆ ಅದು Android ಗಾಗಿ ಕಂಪೈಲ್ ಆಗುವುದಿಲ್ಲ. ಯೋಜನೆಯು ಕಂಪೈಲ್ ಮಾಡಲು, ನೀವು Android ಸ್ಟುಡಿಯೋದಲ್ಲಿ ಪ್ರಾಜೆಕ್ಟ್ ಅನ್ನು ರಚಿಸಬೇಕು, ಯಾವುದಾದರೂ ಒಂದು, ಪರವಾನಗಿಯನ್ನು ಸ್ವೀಕರಿಸಲು, ಇಲ್ಲದಿದ್ದರೆ SDL2 ನಿರ್ಮಿಸುವಾಗ ಪರವಾನಗಿಯನ್ನು ಕೇಳುತ್ತದೆ.

ಸ್ವತ್ತುಗಳಿಂದ Android ನಲ್ಲಿ ಫೈಲ್‌ಗಳನ್ನು ಓದಲು, ನೀವು 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

SDL2 ಹೆಡರ್‌ಗಳನ್ನು ಸಂಪರ್ಕಿಸಲು ನಾನು ಹೆಡರ್ ಫೈಲ್ ಅನ್ನು ಸಹ ರಚಿಸಿದ್ದೇನೆ. Android ನಲ್ಲಿ ಸಂಕಲನ ಯಶಸ್ವಿಯಾಗಲು 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 ಗಾಗಿ ಶೇಡರ್‌ಗಳು ಸಿದ್ಧವಾಗಿವೆ. ಈಗ ನಾವು ಆಂಡ್ರಾಯ್ಡ್-ಪ್ರಾಜೆಕ್ಟ್ ಅನ್ನು ರಚಿಸಬೇಕಾಗಿದೆ. ಇದನ್ನು ಮಾಡಲು, SDL2 ಆರ್ಕೈವ್ ಅನ್ನು ಅನ್ಪ್ಯಾಕ್ ಮಾಡಿ. ಬಿಲ್ಡ್-ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳಿಗೆ ಹೋಗಿ. ಮತ್ತು ನಾವು ಅದನ್ನು ಈ ರೀತಿ ಮಾಡುತ್ತೇವೆ.

./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)

ನೀವು ಈಗಾಗಲೇ ಗಮನಿಸಿದಂತೆ, ನಾನು Freetype2 ಲೈಬ್ರರಿಯನ್ನು ಸಹ ಸೇರಿಸುತ್ತೇನೆ. ನಾನು Android ಗಾಗಿ ಗಿಥಬ್‌ನಲ್ಲಿ ಸಿದ್ಧವಾದ ಒಂದನ್ನು ಕಂಡುಕೊಂಡಿದ್ದೇನೆ, ಆದರೆ ಅದು ಕೆಲಸ ಮಾಡಲಿಲ್ಲ, ನಾನು ಏನನ್ನಾದರೂ ಬದಲಾಯಿಸಬೇಕಾಗಿದೆ. ನಾವು ಡೈರೆಕ್ಟರಿ ಅಪ್ಲಿಕೇಶನ್/src/main/assets ಅನ್ನು ಸಹ ರಚಿಸುತ್ತೇವೆ. ನಾವು ನಮ್ಮ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಅದರಲ್ಲಿ ಇರಿಸುತ್ತೇವೆ (ಫಾಂಟ್ಗಳು, ಸ್ಪ್ರೈಟ್ಗಳು, 3D ಮಾದರಿಗಳು).

ಈಗ Android ಗಾಗಿ Freetype2 ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡೋಣ. ನನ್ನ ಗಿಥಬ್‌ನಿಂದ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ ಲಿಂಕ್, ಮತ್ತು Freetype2 ಡೈರೆಕ್ಟರಿಯನ್ನು app/jni/ ಡೈರೆಕ್ಟರಿಗೆ ನಕಲಿಸಿ. ಎಲ್ಲಾ ಸಿದ್ಧವಾಗಿದೆ. ಈಗ com.xverizex.test ನಲ್ಲಿ ./gradlew installDebug ಆಜ್ಞೆಯನ್ನು ಚಲಾಯಿಸಿ. ಈ ಆಟವನ್ನು Android ಗೆ ಸೇರಿಸಲು, Android ನಲ್ಲಿ ಡೀಬಗ್ ಮಾಡುವುದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬೇಕು. ಇದನ್ನು ಮಾಡಲು, ನೀವು ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಹೋಗಬೇಕು, "ಸಿಸ್ಟಮ್" ಗೆ ಹೋಗಿ, "ಟ್ಯಾಬ್ಲೆಟ್ ಬಗ್ಗೆ" ಗೆ ಹೋಗಿ ಮತ್ತು "ಬಿಲ್ಡ್ ಸಂಖ್ಯೆ" ಆಯ್ಕೆಯನ್ನು ಸುಮಾರು ಆರು ಬಾರಿ ಕ್ಲಿಕ್ ಮಾಡಿ. ನಂತರ ಹಿಂತಿರುಗಿ ಮತ್ತು ಡೆವಲಪರ್‌ಗಳ ಆಯ್ಕೆಯು ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ. ಒಳಗೆ ಹೋಗಿ ಮತ್ತು ಅದನ್ನು ಆನ್ ಮಾಡಿ, "USB ಡೀಬಗ್ ಮಾಡುವಿಕೆ" ಆಯ್ಕೆಯನ್ನು ಸಹ ಆನ್ ಮಾಡಿ. ಈಗ ನೀವು ಟ್ಯಾಬ್ಲೆಟ್ಗಾಗಿ ಕೀಲಿಯನ್ನು ಪಡೆಯಬೇಕು. ಇದನ್ನು ಮಾಡಲು, adb ಪ್ರೋಗ್ರಾಂ ಅನ್ನು ಸ್ಥಾಪಿಸಿ. ನಾವು ಕನ್ಸೋಲ್‌ನಲ್ಲಿ adb ಶೆಲ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ ಮತ್ತು ಟ್ಯಾಬ್ಲೆಟ್‌ನಲ್ಲಿ ಕೀಲಿಯು ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ ಅದನ್ನು ಒಪ್ಪಿಕೊಳ್ಳಬೇಕು. ಅಷ್ಟೆ, ಈಗ ಆಟಗಳನ್ನು ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ಗೆ ಡೌನ್‌ಲೋಡ್ ಮಾಡಬಹುದು.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ