Android تي هلائڻ لاءِ SDL2 پروجيڪٽ تيار ڪري رهيو آهي

هيلو سڀ. اڄ اسان ڏسنداسين ته ڪيئن هڪ پروجيڪٽ تيار ڪجي sdl2 لائبريري استعمال ڪندي Android تي گيم هلائڻ لاءِ.

پهرين توهان کي Android اسٽوڊيو ڊائون لوڊ ڪرڻ جي ضرورت آهي، ان کي انسٽال ڪريو ۽ هر شي جيڪا هن ترقي واري ماحول ۾ گهربل آهي. مثال طور، مون وٽ هاڻي 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 اسٽوڊيو ۾ هڪ پروجيڪٽ ٺاهڻ جي ضرورت آهي، ڪنهن به هڪ، لائسنس کي قبول ڪرڻ لاءِ، ٻي صورت ۾ 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 هيڊرز کي ڳنڍڻ لاءِ هڪ هيڊر فائل پڻ ٺاهي آهي. NO_SDL_GLEXT جي ضرورت آهي تاليف لاءِ 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

تنهن ڪري پروجيڪٽ تيار آهي، شيڊرز Opengl Es 3.0 لاءِ تيار آهن. هاڻي اسان کي هڪ Android-پروجيڪٽ ٺاهڻ جي ضرورت آهي. هن کي ڪرڻ لاء، 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 ڊاريڪٽري کي ايپ/jni/ ڊاريڪٽري ۾. سڀ تيار آهي. ھاڻي com.xverizex.test ۾ ڪمانڊ ./gradlew installDebug هلايو. هن راند کي Android ۾ شامل ڪرڻ جي قابل ٿيڻ لاء، ڊيبگنگ کي Android ۾ فعال ٿيڻ گهرجي. هن کي ڪرڻ لاء، توهان کي سيٽنگون ڏانهن وڃڻ جي ضرورت آهي، "سسٽم" ڏانهن وڃو، "ٽيبلٽ جي باري ۾" ڏانهن وڃو ۽ ڇهه ڀيرا "تعمير نمبر" اختيار تي ڪلڪ ڪريو. پوء واپس وڃو ۽ ڊولپرز لاء اختيار ظاهر ٿيندو. اندر وڃو ۽ ان کي چالو ڪريو، "USB ڊيبگنگ" اختيار کي پڻ چالو ڪريو. ھاڻي توھان کي ٽيبليٽ لاءِ چاٻي حاصل ڪرڻ جي ضرورت آھي. هن کي ڪرڻ لاء، انسٽال ڪريو adb پروگرام. اسان ڪنسول ۾ adb شيل لانچ ڪريون ٿا، ۽ ٽيبليٽ ۾ هڪ چيڪ ظاهر ٿئي ٿو جيڪو قبول ڪيو وڃي. بس، هاڻي رانديون توهان جي ٽيبليٽ تي ڊائون لوڊ ڪري سگھجن ٿيون.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو