Npaj ib qhov project SDL2 los khiav ntawm Android

Nyob zoo sawv daws. Niaj hnub no peb yuav saib yuav ua li cas npaj ib qhov project siv lub tsev qiv ntawv sdl2 los khiav kev ua si ntawm Android.

Ua ntej koj yuav tsum rub tawm Android Studio, nruab nws thiab txhua yam uas yuav tsum tau ua hauv qhov kev txhim kho no. Piv txwv li, tam sim no kuv muaj Kde Neon, thiab ntawm qhov system no muaj cov ntaub ntawv /etc/environment, tib cov ntaub ntawv muaj nyob hauv ubuntu. Cov kev hloov pauv hauv qab no yuav tsum tau nkag mus rau ntawd.

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

Koj kuj yuav tsum rub tawm NDK los ntawm lub vev xaib official, qhib nws rau hauv koj lub tsev teev npe thiab hloov npe rau NDK. Tom ntej no koj yuav tsum rub tawm lub tsev qiv ntawv SDL2 los ntawm lub vev xaib libsdl.org. Txhawm rau siv sdl2 rau hauv, nws yog ib qho tseem ceeb tsis txhob muab tso ua ke rau lub computer, vim hais tias tom qab ntawd nws yuav tsis suav rau hauv. Txhawm rau ua kom tiav qhov project, koj yuav tsum tsim ib qhov project hauv android studio, txhua tus, kom lees txais daim ntawv tso cai, txwv tsis pub SDL2 yuav thov daim ntawv tso cai thaum tsim.

Txhawm rau nyeem cov ntaub ntawv hauv Android los ntawm cov cuab yeej cuab tam, koj yuav tsum siv cov haujlwm SDL_RWops. Ntawm no yog ib qho piv txwv ntawm kev siv code rau kev ua haujlwm nrog font. Hauv qhov no, peb tsis tuaj yeem siv FT_New_Face, tab sis yuav siv FT_New_Memory_Face siv cov ntaub ntawv uas twb tau nyeem lawm.

#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

Kuv kuj tau tsim cov ntaub ntawv header los txuas SDL2 headers. NO_SDL_GLEXT xav tau kev tso ua ke kom ua tiav ntawm 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

Yog li qhov project tau npaj txhij, cov shaders tau npaj rau Opengl Es 3.0. Tam sim no peb yuav tsum tau tsim ib qho haujlwm hauv Android. Txhawm rau ua qhov no, qhib lub SDL2 archive. Mus rau build-scripts. Thiab peb ua li no.

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

Cov lus hauv qab no yuav tshwm sim.

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

Mus rau com.xverizex.test. Mus rau com.xverizex.test/app/jni/src. Peb luam peb qhov project game. Thiab peb hloov cov ntaub ntawv Android.mk, hauv kuv rooj plaub nws zoo li qhov no.

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)

Raws li koj tau pom lawm, kuv kuj suav nrog Freetype2 lub tsev qiv ntawv. Kuv pom ib qho kev npaj ua tiav ntawm github rau Android, tab sis nws tsis ua haujlwm, Kuv xav tau hloov qee yam. Peb kuj tsim ib daim ntawv teev npe app/src/main/assets. Peb tso peb cov peev txheej hauv nws (fonts, sprites, 3D qauv).

Tam sim no cia peb teeb tsa Freetype2 rau Android. Download tau ntawm kuv github txuas, thiab luam cov Freetype2 directory rau lub app/jni/ directory. Txhua yam yog npaj txhij. Tam sim no khiav cov lus txib ./gradlew installDebug hauv com.xverizex.test. Yuav kom ntxiv tau qhov kev ua si no rau hauv, debugging yuav tsum tau enabled hauv android. Txhawm rau ua qhov no, koj yuav tsum mus rau qhov chaw, mus rau "System", mus rau "Hais txog cov ntsiav tshuaj" thiab nyem rau "Tsim tus lej" xaiv txog rau lub sijhawm. Tom qab ntawd rov qab mus thiab qhov kev xaiv rau cov neeg tsim khoom yuav tshwm sim. Mus rau hauv thiab tig nws, kuj qhib rau "USB Debugging" kev xaiv. Tam sim no koj yuav tsum tau txais tus yuam sij rau lub ntsiav tshuaj. Txhawm rau ua qhov no, nruab qhov program adb. Peb tso lub plhaub adb hauv lub console, thiab ib qho tseem ceeb tshwm hauv cov ntsiav tshuaj uas yuav tsum tau txais. Qhov ntawd yog nws, tam sim no kev ua si tuaj yeem rub tawm rau koj lub ntsiav tshuaj.

Tau qhov twg los: www.hab.com

Ntxiv ib saib