Pozdravljeni vsi. Danes bomo pogledali, kako pripraviti projekt z uporabo knjižnice sdl2 za zagon igre na androidu.
Najprej morate prenesti Android Studio, ga namestiti in vse, kar potrebujete v tem okolju za razvoj. Na primer, trenutno imam Kde Neon, v tem sistemu obstaja datoteka /etc/environment, enaka datoteka je tudi v ubuntu. Tam morate zapisati te spremenljivke.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Prav tako morate prenesti NDK s uradne spletne strani, ga razpakirati v domači imenik in preimenovati v NDK. Nato morate prenesti knjižnico SDL2 s spletne strani . Da bi lahko uporabljali sdl2 za android, je pomembno, da je ne kompajlirate za računalnik, saj se tako ne bo skompajlirala za android. Da se projekt skompajliira, morate ustvariti projekt v android studio, kakršen koli, da sprejmete licenco, sicer bo SDL2 pri gradnji zahteval licenco.
Za branje datotek v androidu iz assets morate uporabiti funkcije SDL_RWops. Tukaj je primer uporabe v kodi za delo s pisavami. V tem primeru ne moremo uporabiti FT_New_Face, ampak namesto tega bomo uporabili FT_New_Memory_Face, da uporabimo že prebrane podatke.
#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
Prav tako sem ustvaril naslovno datoteko za povezovanje SDL2 glav. NO_SDL_GLEXT je potreben, da se kompilacija uspešno izvede za 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
Torej je projekt pripravljen, shadri so pripravljeni za Opengl Es 3.0. Zdaj morate ustvariti android-project. To storite tako, da razpakirate arhiv SDL2. Vstopite v build-scripts. In izvede to.
./androidbuild.sh com.xverizex.test main.cpp
Pojavilo se bo takšno sporočilo.
Za gradnjo in namestitev na napravo za testiranje zaženite naslednje:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug
Preidite v com.xverizex.test. Pojdite v com.xverizex.test/app/jni/src. Kopirajte svoj projekt igre. In spremenite datoteko Android.mk, v mojem primeru izgleda tako.
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
# Dodajte svoje datoteke izvorne aplikacije tukaj...
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)
Kot ste morda že opazili, dodajam tudi knjižnico Freetype2. Našel sem že pripravljeno na githubu za android, vendar ni delovala, potrebne so bile nekatere spremembe. Prav tako ustvarite imenik app/src/main/assets. Vanj bomo postavili naše vire (pisave, sprite, 3D modeli).
Sedaj bomo konfigurirali Freetype2 za Android. Prenesite z mojega githuba. , in kopirajte mapo Freetype2 v mapo app/jni/. Vse je pripravljeno. Zdaj zaženite ukaz ./gradlew installDebug v com.xverizex.test. Da bi lahko dodali to igro v Android, mora biti odkrivanje napak omogočeno. Za to pojdite v nastavitve, izberite 'Sistem', nato 'O tabličnem računalniku' in šestkrat pritisnite na opcijo 'Številka gradnje'. Nato se vrnite nazaj in pojavila se bo opcija za razvijalce. Vstopite in omogočite to možnost ter tudi omogočite možnost 'Odkrivanje napak prek USB'. Zdaj potrebujete ključ za tablični računalnik. Za to namestite program adb. V konzoli zaženite adb shell in na tabličnem računalniku se prikaže ključ, ki ga je treba sprejeti. Vse, zdaj lahko nalagate igre na tablični računalnik.
Izvor: habr.com
