Androidda ishlash uchun SDL2 loyihasi tayyorlanmoqda

Hammaga salom. Bugun biz Androidda o'yinni ishga tushirish uchun sdl2 kutubxonasidan foydalanib loyihani qanday tayyorlashni ko'rib chiqamiz.

Avval siz Android Studio-ni yuklab olishingiz, uni o'rnatishingiz va ushbu rivojlanish muhitida zarur bo'lgan barcha narsalarni o'rnatishingiz kerak. Misol uchun, menda hozir Kde Neon bor va bu tizimda /etc/environment fayli mavjud, xuddi shu fayl ubuntuda mavjud. U erda quyidagi o'zgaruvchilar kiritilishi kerak.

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

Shuningdek, NDK-ni rasmiy veb-saytdan yuklab olishingiz, uni uy katalogingizga ochishingiz va NDK nomini o'zgartirishingiz kerak. Keyin veb-saytdan SDL2 kutubxonasini yuklab olishingiz kerak libsdl.org. Android uchun sdl2 dan foydalanish uchun uni kompyuter uchun kompilyatsiya qilmaslik muhim, chunki u holda android uchun kompilyatsiya qilinmaydi. Loyihani kompilyatsiya qilish uchun siz litsenziyani qabul qilish uchun Android studio-da loyiha yaratishingiz kerak, aks holda SDL2 qurish paytida litsenziya so'raydi.

Android-dagi fayllarni aktivlardan o'qish uchun siz SDL_RWops funksiyalaridan foydalanishingiz kerak. Shrift bilan ishlash uchun kodda foydalanishga misol. Bunday holda, biz FT_New_Face-dan foydalana olmaymiz, balki allaqachon o'qilgan ma'lumotlardan foydalanish uchun FT_New_Memory_Face-dan foydalanamiz.

#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

Men SDL2 sarlavhalarini ulash uchun sarlavha faylini ham yaratdim. Androidda kompilyatsiya muvaffaqiyatli bo'lishi uchun NO_SDL_GLEXT kerak.

#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

Shunday qilib, loyiha tayyor, shaderlar Opengl Es 3.0 uchun tayyor. Endi biz android-loyiha yaratishimiz kerak. Buning uchun SDL2 arxivini oching. Qurilish skriptlariga o'ting. Va biz buni shunday qilamiz.

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

Quyidagi xabar paydo bo'ladi.

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 saytiga oβ€˜ting. com.xverizex.test/app/jni/src saytiga oβ€˜ting. Biz o'yin loyihamizdan nusxa ko'chiramiz. Va biz Android.mk faylini o'zgartiramiz, mening holimda u shunday ko'rinadi.

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)

Siz allaqachon sezganingizdek, men Freetype2 kutubxonasini ham o'z ichiga olaman. Men Android uchun github-da tayyor narsani topdim, lekin u ishlamadi, men nimanidir o'zgartirishim kerak edi. Shuningdek, biz ilova/src/main/assets katalogini yaratamiz. Unga resurslarimizni joylashtiramiz (shriftlar, spritlar, 3D modellar).

Endi Android uchun Freetype2 ni sozlaymiz. Mening github-dan yuklab oling aloqa, va Freetype2 katalogini app/jni/ katalogiga nusxalash. Hammasi tayyor. Endi com.xverizex.test da ./gradlew installDebug buyrug'ini bajaring. Ushbu o'yinni Android-ga qo'shish uchun Android-da disk raskadrovka funksiyasi yoqilgan bo'lishi kerak. Buni amalga oshirish uchun sozlamalarga o'ting, "Tizim" ga o'ting, "Planshet haqida" ga o'ting va "Yaratish raqami" opsiyasini taxminan olti marta bosing. Keyin orqaga qayting va ishlab chiquvchilar uchun variant paydo bo'ladi. Kiring va uni yoqing, shuningdek, "USB disk raskadrovka" opsiyasini yoqing. Endi siz planshet uchun kalitni olishingiz kerak. Buning uchun adb dasturini o'rnating. Biz konsolda adb qobig'ini ishga tushiramiz va planshetda qabul qilinishi kerak bo'lgan kalit paydo bo'ladi. Hammasi tugadi, endi o'yinlarni planshetingizga yuklab olish mumkin.

Manba: www.habr.com

a Izoh qo'shish