Pag-andam sa usa ka proyekto sa SDL2 nga modagan sa android

Kumusta tanan. Karon atong tan-awon kon sa unsang paagi sa pag-andam sa usa ka proyekto sa paggamit sa sdl2 librarya sa pagpadagan sa duwa sa android.

Una kinahanglan nimo nga i-download ang Android Studio, i-install kini ug ang tanan nga gikinahanglan sa kini nga palibot sa pag-uswag. Pananglitan, ako karon adunay Kde Neon, ug adunay usa ka /etc/environment file niini nga sistema, ang parehas nga file anaa sa ubuntu. Didto gikinahanglan ang pagparehistro sa maong mga variable.

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

Kinahanglan usab nimo nga i-download ang NDK gikan sa opisyal nga site, unzip kini sa imong home directory ug ilisan kini sa ngalan sa NDK. Sunod, kinahanglan nimo nga i-download ang librarya sa SDL2 gikan sa site libsdl.org. Sa paggamit sa sdl2 alang sa android kini mao ang importante nga dili sa pag-compile niini alang sa computer tungod kay unya kini dili compile alang sa android. Aron ma-compile ang proyekto, kinahanglan nimo nga maghimo usa ka proyekto sa android studio, bisan kinsa, aron madawat ang lisensya, kung dili kung magtukod SDL2 mangayo kini usa ka lisensya.

Aron mabasa ang mga file sa android gikan sa mga kabtangan, kinahanglan nimo gamiton ang mga function sa SDL_RWops. Ania ang usa ka pananglitan sa paggamit niini sa code alang sa pagtrabaho sa usa ka font. Niini nga kaso, dili namo magamit ang FT_New_Face, apan gamiton hinuon namo ang FT_New_Memory_Face aron gamiton ang datos nga nabasa na.

#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

Naghimo usab ako usa ka file sa header aron makonektar ang mga ulohan sa SDL2. NO_SDL_GLEXT gikinahanglan para sa compilation nga molampos para sa 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

Busa ang proyekto andam na, ang mga shaders andam na alang sa Opengl Es 3.0. Karon kinahanglan namon nga maghimo usa ka proyekto sa android. Aron mahimo kini, i-unpack ang archive nga SDL2. Lakaw ngadto sa build-scripts. Ug gibuhat namo kini.

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

Kini nga mensahe makita.

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

Adto sa com.xverizex.test. Adto sa com.xverizex.test/app/jni/src. Kopyaha ang imong proyekto sa dula. Ug among giusab ang Android.mk file, sa akong kaso kini ingon niini.

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)

Sama sa imong namatikdan, gilakip usab nako ang Freetype2 library. Nakit-an nako ang usa nga andam na sa github para sa android, apan wala kini molihok, kinahanglan nako nga usbon ang usa ka butang. Gihimo usab namo ang direktoryo sa app/src/main/assets. Gibutang namon ang among mga kahinguhaan niini (mga font, sprite, 3d nga mga modelo).

Karon atong i-set up ang Freetype2 para sa Android. Pag-download gikan sa akong github link, ug kopyaha ang Freetype2 nga direktoryo sa app/jni/ direktoryo. Andam na ang tanan. Karon among gipadagan ang ./gradlew installDebug command sa com.xverizex.test. Aron madugang kini nga dula sa android, ang pag-debug kinahanglan nga mahimo sa android. Aron mahimo kini, kinahanglan ka nga moadto sa mga setting, adto sa "System", adto sa "About tablet" ug i-klik ang kapilian nga "Build number" mga unom ka beses. Unya balik ug ang kapilian alang sa mga developers makita. Kita moadto ug i-on kini, i-on usab ang opsyon nga "Pag-debug pinaagi sa USB". Karon kinahanglan namong makuha ang yawe alang sa tablet. Aron mahimo kini, i-install ang adb program. Gilunsad namo ang adb shell sa console, ug usa ka yawe ang makita sa tablet nga kinahanglang dawaton. Ang tanan, karon ang mga dula mahimong ma-download sa tablet.

Source: www.habr.com

Idugang sa usa ka comment