Android මත ධාවනය කිරීමට SDL2 ව්‍යාපෘතියක් සූදානම් කරමින්

ආයුබෝවන් සියල්ලටම. අද අපි Android මත ක්‍රීඩාවක් ධාවනය කිරීම සඳහා sdl2 පුස්තකාලය භාවිතයෙන් ව්‍යාපෘතියක් සකස් කරන්නේ කෙසේදැයි බලමු.

මුලින්ම ඔබට Android Studio බාගත කර, එය ස්ථාපනය කිරීම සහ මෙම සංවර්ධන පරිසරය තුළ අවශ්ය සියල්ල. උදාහරණයක් ලෙස, මා සතුව දැන් Kde Neon ඇත, මෙම පද්ධතියේ ගොනුව /etc/environment ඇත, එම ගොනුව ubuntu හි පවතී. පහත විචල්‍යයන් එහි ඇතුළත් කළ යුතුය.

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

ඔබ නිල වෙබ් අඩවියෙන් NDK බාගත කර එය ඔබගේ මුල් නාමාවලියට ඉවත් කර NDK ලෙස නැවත නම් කළ යුතුය. ඊළඟට ඔබ වෙබ් අඩවියෙන් SDL2 පුස්තකාලය බාගත කළ යුතුය libsdl.org. android සඳහා sdl2 භාවිතා කිරීම සඳහා, එය පරිගණකය සඳහා සම්පාදනය නොකිරීම වැදගත්ය, මන්ද එවිට එය android සඳහා සම්පාදනය නොකරනු ඇත. ව්‍යාපෘතිය සම්පාදනය කිරීම සඳහා, බලපත්‍රය පිළිගැනීමට ඔබ android studio හි ව්‍යාපෘතියක් නිර්මාණය කළ යුතුය, ඕනෑම එකක්, එසේ නොමැතිනම් 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 සඳහා සූදානම්. දැන් අපි android-project එකක් හදන්න ඕන. මෙය සිදු කිරීම සඳහා, SDL2 සංරක්ෂිතය ඉවත් කරන්න. build-scripts වෙත යන්න. ඒ වගේම අපි එය කරන්නේ මේ ආකාරයටයි.

./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 සඳහා github මත සූදානම් කළ එකක් සොයා ගත්තෙමි, නමුත් එය වැඩ කළේ නැත, මට යමක් වෙනස් කිරීමට අවශ්‍ය විය. අපි නාමාවලි යෙදුමක් / src / ප්රධාන / වත්කම් ද නිර්මාණය කරමු. අපි අපේ සම්පත් එහි තබමු (අකුරු, ස්ප්‍රයිට්, ත්‍රිමාණ ආකෘති).

දැන් අපි Android සඳහා Freetype2 වින්‍යාස කරමු. මගේ github එකෙන් බාගන්න ලින්ක්, සහ Freetype2 නාමාවලිය app/jni/ බහලුම වෙත පිටපත් කරන්න. සියල්ල සූදානම්. දැන් com.xverizex.test හි ./gradlew installDebug විධානය ක්‍රියාත්මක කරන්න. මෙම ක්‍රීඩාව android වෙත එක් කිරීමට හැකි වීමට නම්, android හි නිදොස්කරණය සක්‍රීය කළ යුතුය. මෙය සිදු කිරීම සඳහා, ඔබට සැකසීම් වෙත ගොස්, "පද්ධතිය" වෙත ගොස්, "ටැබ්ලටය ගැන" වෙත ගොස් හය වතාවක් පමණ "බිල්ඩ් අංකය" විකල්පය ක්ලික් කරන්න. ඉන්පසු ආපසු ගොස් සංවර්ධකයින් සඳහා විකල්පය දිස්වනු ඇත. ඇතුළට ගොස් එය සක්රිය කරන්න, "USB නිදොස්කරණය" විකල්පය ද සක්රිය කරන්න. දැන් ඔබට ටැබ්ලටය සඳහා යතුරක් ලබා ගත යුතුය. මෙය සිදු කිරීම සඳහා, adb වැඩසටහන ස්ථාපනය කරන්න. අපි කොන්සෝලය තුළ adb කවචය දියත් කරන අතර, පිළිගත යුතු යතුරක් ටැබ්ලටයේ දිස්වේ. එපමණයි, දැන් ක්‍රීඩා ඔබගේ ටැබ්ලටයට බාගත කළ හැකිය.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න