Tere kõigile. Täna vaatame, kuidas ette valmistada projekt sdl2 raamatukogu abil mängu käivitamiseks Androidil.
Esiteks tuleb alla laadida Android Studio, installida see ja kõik, mis on vajalik selle arenduskeskkonna jaoks. Näiteks mul on praegu Kde Neon ja selles süsteemis on olemas fail /etc/environment, sarnane fail on ka Ubuntu süsteemis. Seal tuleb määrata sellised muutujad.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Samuti tuleb alla laadida NDK ametlikult veebisaidilt, pakkida see lahti kodukatalooge ja nimetada ümber NDK-ks. Edasi tuleb alla laadida SDL2 raamatukogu veebisaidilt . Et sdl2-d Androidis kasutada, on oluline mitte kompileerida seda arvutite jaoks, sest siis see ei kompileeru Androidile. Projekti kompileerimiseks tuleb luua projekt Android Studio's, ükskõik milline, et aktsepteerida litsentsi, vastasel juhul küsib SDL2 kompileerimise ajal litsentse.
Androidis failide lugemiseks varadest tuleb kasutada funktsioone SDL_RWops. Siin on näide kasutamisest koodis, mis tegeleb fontidega. Sellisel juhul ei saa me kasutada FT_New_Face'i, vaid kasutame FT_New_Memory_Face'i, et kasutada juba loetud andmeid.
#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
Samuti lõin SDL2 peadokumendi ühendamiseks faili. NO_SDL_GLEXT on vajalik, et Androidi kompileerimine õnnestuks.
#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
Nii et projekt on valmis, varjendid on valminud Opengl Es 3.0 jaoks. Nüüd tuleb luua android-project. Selleks peaksite lahti pakkima SDL2 arhiivi. Minge build-scripts kausta ja tehke järgmist.
./androidbuild.sh com.xverizex.test main.cpp
Küboge välja selline sõnum.
Seadmise ja seadme jaoks testimiseks käivitage järgmine käsk:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug
Liigume kausta com.xverizex.test. Minge kausta com.xverizex.test/app/jni/src. Kopeerige oma mängu projekt. Ja muutke faili Android.mk, minu puhul näeb see välja nii.
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
# Lisage siia oma rakenduse allikafailid...
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)
Kuidas te juba võib-olla olete märganud, ühendan veel Freetype2 teegi. Leidsin selle jaoks valmis versiooni githubist Androidi jaoks, kuid see ei töötanud, midagi tuli muuta. Loome ka kausta app/src/main/assets. Sellesse paneme meie ressursid (fondid, sprite'id, 3D mudelid).
Nüüd seadistame Freetype2 Androidi jaoks. Laadige minu githubist alla , ja kopeerime Freetype2 kausta app/jni/. Kõik on valmis. Nüüd käivitame com.xverizex.test käsu ./gradlew installDebug. Et seda mängu Androidis lisada, peab Androidis olema lubatud silumist. Selleks minge seadete alla, avage "Süsteem", minge "Tahvelarvuti kohta" ja klõpsake umbes kuus korda valikul "Kogumi number". Seejärel minge tagasi ja arendajate valikud peaksid ilmuma. Läheme sisse ja aktiveerime, samuti lülitame sisse "USB silumise" valiku. Nüüd tuleb tahvlile saada võti. Selleks installime adb programmi. Käivitame konsoolis adb shell, ja tahvelarvutil ilmub võti, mille tuleb aktsepteerida. Kõik, nüüd saavad mängud tahvlisse laadimiseks minna.
Allikas: habr.com
