Android ပေါ်တွင်လည်ပတ်ရန် SDL2 ပရောဂျက်ကို ပြင်ဆင်နေသည်။

အားလုံးမင်္ဂလာပါ။ ယနေ့ကျွန်ုပ်တို့သည် Android တွင်ဂိမ်းတစ်ခုလည်ပတ်ရန် sdl2 စာကြည့်တိုက်ကိုအသုံးပြု၍ ပရောဂျက်တစ်ခုပြင်ဆင်နည်းကိုကြည့်ရှုပါမည်။

ပထမဦးစွာ သင်သည် Android Studio ကို ဒေါင်းလုဒ်လုပ်ရန်၊ ၎င်းကို ထည့်သွင်းရန်နှင့် ဤဖွံ့ဖြိုးတိုးတက်မှုပတ်ဝန်းကျင်တွင် လိုအပ်သည့်အရာအားလုံးကို လိုအပ်သည်။ ဥပမာအားဖြင့်၊ ယခု ကျွန်ုပ်တွင် Kde နီယွန်ရှိပြီး၊ ဤစနစ်တွင် ဖိုင် /etc/environment ရှိပါသည်၊ ထိုဖိုင်သည် ubuntu တွင် ရှိနေပါသည်။ အောက်ပါ variable များကို ထိုနေရာတွင် ထည့်သွင်းရန် လိုအပ်သည်။

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

တရားဝင်ဝဘ်ဆိုက်မှ NDK ကို ဒေါင်းလုဒ်လုပ်ရန်၊ ၎င်းကို သင်၏ပင်မလမ်းညွှန်တွင် ထုပ်ပိုးပြီး NDK သို့ အမည်ပြောင်းရန် လိုအပ်သည်။ ထို့နောက် သင်သည် ဝဘ်ဆိုက်မှ SDL2 စာကြည့်တိုက်ကို ဒေါင်းလုဒ်လုပ်ရန် လိုအပ်သည်။ libsdl.org. android အတွက် sdl2 ကိုအသုံးပြုရန်၊ ၎င်းကို ကွန်ပျူတာအတွက် compile မလုပ်မိရန် အရေးကြီးသောကြောင့် ၎င်းသည် android အတွက် compile မဟုတ်ပါ။ ပရောဂျက်ကို စုစည်းနိုင်ရန်၊ လိုင်စင်ကို လက်ခံရန် မည်သူမဆို 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 ခေါင်းစီးများကို ချိတ်ဆက်ရန် header ဖိုင်ကိုလည်း ဖန်တီးခဲ့သည်။ 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 archive ကိုဖွင့်ပါ။ build-scripts သို့သွားပါ။ ငါတို့ကဒီလိုလုပ်တယ်။

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

အောက်ပါ Message ပေါ်လာပါမည်။

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 တွင် အဆင်သင့်လုပ်ထားသော တစ်ခုကို တွေ့သော်လည်း အလုပ်မဖြစ်ပါ၊ တစ်ခုခုကို ပြောင်းလဲရန် လိုအပ်ပါသည်။ ကျွန်ုပ်တို့သည် directory app/src/main/assets တစ်ခုကိုလည်း ဖန်တီးပါသည်။ ကျွန်ုပ်တို့၏အရင်းအမြစ်များ (ဖောင့်များ၊ sprites၊ 3D မော်ဒယ်များ) တွင် ကျွန်ုပ်တို့ နေရာချထားပါသည်။

ယခု Android အတွက် Freetype2 ကို ပြင်ဆင်သတ်မှတ်ကြပါစို့။ ကျွန်ုပ်၏ github မှဒေါင်းလုဒ်လုပ်ပါ။ လင့်ခ်နှင့် Freetype2 directory ကို app/jni/ directory သို့ ကူးယူပါ။ အားလုံးအဆင်သင့်ဖြစ်နေပါပြီ။ ယခု com.xverizex.test တွင် ./gradlew installDebug ဟူသော အမိန့်ကို လုပ်ဆောင်ပါ။ ဤဂိမ်းကို android သို့ထည့်နိုင်စေရန်၊ အမှားရှာပြင်ခြင်းကို android တွင် ဖွင့်ထားရပါမည်။ ၎င်းကိုလုပ်ဆောင်ရန်၊ ဆက်တင်များသို့သွားရန်၊ "စနစ်"၊ "တက်ဘလက်အကြောင်း" သို့သွားကာ "တည်ဆောက်နံပါတ်" ရွေးချယ်မှုကို ခြောက်ကြိမ်ခန့်နှိပ်ရပါမည်။ ထို့နောက် ပြန်သွားပြီး developer များအတွက် ရွေးချယ်စရာ ပေါ်လာပါမည်။ ဝင်ပြီးဖွင့်ပါ၊ “USB Debugging” option ကိုဖွင့်ပါ။ ယခု သင်သည် တက်ဘလက်အတွက် သော့တစ်ခုရရန် လိုအပ်ပါသည်။ ဒီလိုလုပ်ဖို့ adb program ကို install လုပ်ပါ။ ကျွန်ုပ်တို့သည် ကွန်ဆိုးလ်တွင် adb shell ကိုဖွင့်ပြီး လက်ခံရမည့် တက်ဘလက်တွင် သော့တစ်ခုပေါ်လာသည်။ ဒါပဲ၊ အခု ဂိမ်းတွေကို သင့်တက်ဘလက်မှာ ဒေါင်းလုဒ်လုပ်နိုင်ပါပြီ။

source: www.habr.com

မှတ်ချက် Add