{"id":55442,"date":"2020-01-21T00:00:00","date_gmt":"2020-01-20T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/podgotovka-sdl2-proekta-dlya-zapuska-na-android"},"modified":"2020-02-18T14:03:33","modified_gmt":"2020-02-18T11:03:33","slug":"podgotovka-sdl2-proekta-dlya-zapuska-na-android","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/podgotovka-sdl2-proekta-dlya-zapuska-na-android","title":{"rendered":"F\u00f6rberedelse av SDL2-projekt f\u00f6r att k\u00f6ras p\u00e5 android","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej alla. Idag ska vi titta p\u00e5 hur man f\u00f6rbereder ett projekt med hj\u00e4lp av sdl2-biblioteket f\u00f6r att k\u00f6ra ett spel p\u00e5 Android.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nF\u00f6rst m\u00e5ste vi ladda ner Android Studio, installera den och allt som kr\u00e4vs i denna utvecklingsmilj\u00f6. Till exempel har jag just nu Kde Neon, och i detta system finns en fil \/etc\/environment, samma fil finns \u00e4ven i ubuntu. D\u00e4r m\u00e5ste vi ange f\u00f6ljande variabler.<\/p>\n<pre><code class=\"plaintext\">ANDROID_HOME=\/home\/username\/Android\/Sdk\nANDROID_NDK_HOME=\/home\/username\/ndk\n<\/code><\/pre>\n<p>\nVi m\u00e5ste ocks\u00e5 ladda ner NDK fr\u00e5n den officiella webbplatsen, packa upp den i hemkatalogen och d\u00f6pa om den till NDK. D\u00e4refter beh\u00f6ver vi ladda ner sdl2-biblioteket fr\u00e5n sidan <noindex><a rel=\"nofollow\" href=\"https:\/\/www.libsdl.org\/\">libsdl.org<\/a><\/noindex>. F\u00f6r att anv\u00e4nda sdl2 f\u00f6r Android \u00e4r det viktigt att inte kompilera det f\u00f6r datorn, eftersom det d\u00e5 inte kommer att kompileras f\u00f6r Android. F\u00f6r att projektet ska kompilera m\u00e5ste vi skapa ett projekt i Android Studio, vilket som helst, f\u00f6r att godk\u00e4nna licensen, annars kommer SDL2 att beg\u00e4ra en licens vid kompilering.<\/p>\n<p>F\u00f6r att l\u00e4sa filer i Android fr\u00e5n assets beh\u00f6ver vi anv\u00e4nda SDL_RWops-funktioner. H\u00e4r \u00e4r ett exempel p\u00e5 anv\u00e4ndning i kod som arbetar med typsnitt. I detta fall kan vi inte anv\u00e4nda FT_New_Face, utan ist\u00e4llet kommer vi att anv\u00e4nda FT_New_Memory_Face f\u00f6r att anv\u00e4nda redan l\u00e4sta data.<\/p>\n<pre><code class=\"cpp\">#ifdef __ANDROID__\n        snprintf ( path, 254, &quot;fonts\/%s&quot;, file );\n        SDL_RWops *rw = SDL_RWFromFile(path, &quot;r&quot; );\n        char *memory = ( char * ) calloc ( rw-&gt;hidden.androidio.size, 1 );\n        SDL_RWread(rw, memory, 1, rw-&gt;hidden.androidio.size );\n\n        FT_New_Memory_Face(*this-&gt;ft_library, ( const FT_Byte  * )memory, rw-&gt;hidden.androidio.size, 0, &this;-&gt;face );\n        SDL_RWclose(rw);\n        free ( memory );\n#else\n        snprintf ( path, 254, &quot;%s\/fonts\/%s&quot;, DEFAULT_ASSETS, file );\n        if ( access ( path, F_OK ) ) {\n                fprintf ( stderr, &quot;not found font: %sn&quot;, path );\n                exit ( EXIT_FAILURE );\n        }\n        struct stat st;\n        stat ( path, &st; );\n        FILE *rw = fopen ( path, &quot;r&quot; );\n        char *memory = ( char * ) calloc ( st.st_size, 1 );\n        fread ( memory, 1, st.st_size, rw );\n\n        FT_New_Memory_Face ( *this-&gt;ft_library, ( const FT_Byte * ) memory, st.st_size, 0, &this;-&gt;face );\n        fclose ( rw );\n        free ( memory );\n#endif\n\n<\/code><\/pre>\n<p>\nJag har ocks\u00e5 skapat en headerfil f\u00f6r att inkludera SDL2-rubriker. NO_SDL_GLEXT beh\u00f6vs f\u00f6r att kompileringen ska lyckas f\u00f6r Android.<\/p>\n<pre><code class=\"cpp\">#ifdef __ANDROID__\n#include &quot;SDL.h&quot;\n#include &quot;SDL_video.h&quot;\n#include &quot;SDL_events.h&quot;\n#define NO_SDL_GLEXT \n#include &quot;SDL_opengl.h&quot;\n#include &quot;SDL_opengles2.h&quot;\n#else\n#include &lt;SDL2\/SDL.h&gt;\n#include &lt;SDL2\/SDL_video.h&gt;\n#include &lt;SDL2\/SDL_opengl.h&gt;\n#include &lt;SDL2\/SDL_opengles2.h&gt;\n#endif\n<\/code><\/pre>\n<p>\nS\u00e5 projektet \u00e4r klart, shaderarna \u00e4r klara f\u00f6r OpenGL ES 3.0. Nu m\u00e5ste vi skapa android-projektet. F\u00f6r detta packar vi upp SDL2-arkivet. Vi g\u00e5r in i build-scripts. Och k\u00f6r s\u00e5 h\u00e4r.<\/p>\n<pre><code class=\"bash\">.\/androidbuild.sh com.xverizex.test main.cpp\n<\/code><\/pre>\n<p>\nEtt meddelande som detta kommer att visas.<\/p>\n<pre><code class=\"bash\">F\u00f6r att bygga och installera p\u00e5 en enhet f\u00f6r testning, k\u00f6r f\u00f6ljande:\ncd \/home\/cf\/programs\/SDL2-2.0.10\/build\/com.xverizex.test\n.\/gradlew installDebug\n<\/code><\/pre>\n<p>\nVi g\u00e5r till com.xverizex.test. G\u00e5 in i com.xverizex.test\/app\/jni\/src. Kopiera ditt spelprojekt. Och \u00e4ndra filen Android.mk, i mitt fall ser den ut s\u00e5 h\u00e4r.<\/p>\n<pre><code class=\"cpp\">LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := main\n\nSDL_PATH := ..\/SDL\nFREETYPE_PATH := ..\/Freetype2\n\nLOCAL_C_INCLUDES := $(LOCAL_PATH)\/$(SDL_PATH)\/include $(LOCAL_PATH)\/$(FREETYPE_PATH)\/include\n\n# L\u00e4gg till dina applikationsk\u00e4llfiler h\u00e4r...\nLOCAL_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\n\nLOCAL_SHARED_LIBRARIES := SDL2 Freetype2\n\nLOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog \n\ninclude $(BUILD_SHARED_LIBRARY)\n<\/code><\/pre>\n<p>\nSom du kanske redan har noterat, inkluderar jag \u00e4ven biblioteket Freetype2. Jag hittade en f\u00e4rdig version p\u00e5 github f\u00f6r android, men den fungerade inte, n\u00e5got beh\u00f6vde \u00e4ndras. Skapa ocks\u00e5 katalogen app\/src\/main\/assets. Dit l\u00e4gger vi v\u00e5ra resurser (typsnitt, sprites, 3D-modeller).<\/p>\n<p>Nu konfigurerar vi Freetype2 f\u00f6r Android. Ladda ner fr\u00e5n min github. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/xverizex\/Android-Freetype2\">L\u00e4nk<\/a><\/noindex>, och kopiera katalogen Freetype2 till katalogen app\/jni\/. Allt \u00e4r klart. Nu k\u00f6r vi kommandot .\/${client_name}.installDebug i com.xverizex.test. F\u00f6r att kunna l\u00e4gga till spelet i android m\u00e5ste debug-l\u00e4get aktiveras. G\u00e5 till inst\u00e4llningarna, v\u00e4lj 'System', g\u00e5 till 'Om surfplattan' och tryck ungef\u00e4r sex g\u00e5nger p\u00e5 alternativet 'Byggnummer'. G\u00e5 tillbaka och ett alternativ f\u00f6r utvecklare kommer att visas. G\u00e5 in d\u00e4r och aktivera den samt aktivera alternativet 'USB-debbugering'. Nu m\u00e5ste vi f\u00e5 en nyckel f\u00f6r surfplattan. F\u00f6r detta installerar vi programmet adb. Starta adb shell i konsolen, och en nyckel dyker upp p\u00e5 surfplattan som m\u00e5ste accepteras. Klart, nu kan spel laddas ner till surfplattan.<br \/>\n<br \/>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/484526\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 sdl2 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u0433\u0440\u044b \u043d\u0430 android. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0434\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c Android Studio, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0451 \u0438 \u0432\u0441\u0451 \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432 \u044d\u0442\u043e\u0439 \u0441\u0440\u0435\u0434\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0443 \u043c\u0435\u043d\u044f \u0441\u0435\u0439\u0447\u0430\u0441 Kde Neon, \u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u0430\u0439\u043b \/etc\/environment, \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0444\u0430\u0439\u043b \u0435\u0441\u0442\u044c \u0438 \u0432 ubuntu. \u0422\u0430\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55442","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/podgotovka-sdl2-proekta-dlya-zapuska-na-android\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 SDL2-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 android | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/podgotovka-sdl2-proekta-dlya-zapuska-na-android\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-20T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:33+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47F\u00f6rberedelse av SDL2-projekt f\u00f6r k\u00f6rning p\u00e5 android | ProHoster","description":"Hej alla.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/podgotovka-sdl2-proekta-dlya-zapuska-na-android","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 SDL2-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 android | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/podgotovka-sdl2-proekta-dlya-zapuska-na-android","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-01-20T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:33+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55442","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:44:25","updated":"2022-10-04 17:24:27","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/55442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=55442"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/55442\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=55442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=55442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=55442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}