{"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\/fr\/blog\/administrirovanie\/podgotovka-sdl2-proekta-dlya-zapuska-na-android","title":{"rendered":"Pr\u00e9paration d'un projet SDL2 pour une ex\u00e9cution sur android","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bonjour \u00e0 tous. Aujourd'hui, nous allons voir comment pr\u00e9parer un projet en utilisant la biblioth\u00e8que sdl2 pour lancer un jeu sur Android.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nTout d'abord, il faut t\u00e9l\u00e9charger Android Studio, l'installer et tout ce qui est n\u00e9cessaire dans cet environnement de d\u00e9veloppement. Par exemple, j'ai actuellement Kde Neon, et dans ce syst\u00e8me, il existe un fichier \/etc\/environment, un fichier similaire se trouve aussi dans ubuntu. Il faut y inscrire ces variables.<\/p>\n<pre><code class=\"plaintext\">ANDROID_HOME=\/home\/username\/Android\/Sdk\nANDROID_NDK_HOME=\/home\/username\/ndk\n<\/code><\/pre>\n<p>\nIl faut \u00e9galement t\u00e9l\u00e9charger le NDK depuis le site officiel, l'extraire dans le r\u00e9pertoire personnel et le renommer en NDK. Ensuite, il faut t\u00e9l\u00e9charger la biblioth\u00e8que SDL2 depuis le site <noindex><a rel=\"nofollow\" href=\"https:\/\/www.libsdl.org\/\">libsdl.org<\/a><\/noindex>. Pour utiliser sdl2 pour Android, il est important de ne pas le compiler pour un ordinateur, car sinon cela ne se compilera pas pour Android. Pour que le projet se compile, il faut cr\u00e9er un projet dans Android Studio, n'importe lequel, pour accepter la licence, sinon lors de la construction, SDL2 demandera la licence.<\/p>\n<p>Pour lire des fichiers dans Android \u00e0 partir des assets, il faut utiliser les fonctions SDL_RWops. Voici un exemple d'utilisation dans le code de gestion de la police. Dans ce cas, on ne peut pas utiliser FT_New_Face, mais \u00e0 la place, nous utiliserons FT_New_Memory_Face pour utiliser les donn\u00e9es d\u00e9j\u00e0 lues.<\/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>\nJ'ai \u00e9galement cr\u00e9\u00e9 un fichier d'en-t\u00eate pour inclure les en-t\u00eates SDL2. NO_SDL_GLEXT est n\u00e9cessaire pour que la compilation r\u00e9ussisse pour 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>\nAinsi, le projet est pr\u00eat, les shaders sont pr\u00eats pour OpenGL ES 3.0. Maintenant, il faut cr\u00e9er android-project. Pour cela, d\u00e9compressez l'archive SDL2. Allez dans build-scripts. Et ex\u00e9cutez ainsi.<\/p>\n<pre><code class=\"bash\">.\/androidbuild.sh com.xverizex.test main.cpp\n<\/code><\/pre>\n<p>\nUn message comme celui-ci appara\u00eetra.<\/p>\n<pre><code class=\"bash\">Pour construire et installer sur un appareil pour les tests, ex\u00e9cutez ce qui suit:\ncd \/home\/cf\/programs\/SDL2-2.0.10\/build\/com.xverizex.test\n.\/gradlew installDebug\n<\/code><\/pre>\n<p>\nAllez dans com.xverizex.test. Acc\u00e9dez \u00e0 com.xverizex.test\/app\/jni\/src. Copiez votre projet de jeu. Et modifiez le fichier Android.mk, dans mon cas, cela ressemble \u00e0 cela.<\/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# Ajoutez ici les fichiers sources de votre application...\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>\nComme vous avez peut-\u00eatre d\u00e9j\u00e0 remarqu\u00e9, j'inclus \u00e9galement la biblioth\u00e8que Freetype2. J'ai trouv\u00e9 une version pr\u00eate sur github pour Android, mais elle ne fonctionnait pas, il fallait modifier certaines choses. Cr\u00e9ez \u00e9galement le r\u00e9pertoire app\/src\/main\/assets. Nous y pla\u00e7ons nos ressources (polices, sprites, mod\u00e8les 3D).<\/p>\n<p>Nous allons maintenant configurer Freetype2 pour Android. T\u00e9l\u00e9chargez-le depuis mon GitHub. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/xverizex\/Android-Freetype2\">Link<\/a><\/noindex>, et copiez le r\u00e9pertoire Freetype2 dans le r\u00e9pertoire app\/jni\/. Tout est pr\u00eat. Maintenant, ex\u00e9cutez la commande .\/gradlew installDebug dans com.xverizex.test. Pour que ce jeu puisse \u00eatre ajout\u00e9 \u00e0 Android, le d\u00e9bogage doit \u00eatre activ\u00e9 dans Android. Pour cela, allez dans les param\u00e8tres, puis dans \u00ab Syst\u00e8me \u00bb, ensuite \u00ab \u00c0 propos de la tablette \u00bb et appuyez environ six fois sur l'option \u00ab Num\u00e9ro de build \u00bb. Revenez en arri\u00e8re et une option pour les d\u00e9veloppeurs appara\u00eetra. Acc\u00e9dez-y et activez-la, puis activez \u00e9galement l'option \u00ab D\u00e9bogage USB \u00bb. Maintenant, il faut obtenir une cl\u00e9 pour la tablette. Pour cela, installez le programme adb. Lancez adb shell dans la console, et une cl\u00e9 appara\u00eetra sur la tablette, que vous devez accepter. Voil\u00e0, vous pouvez maintenant charger des jeux sur la tablette.<br \/>\n<br \/>Source : <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.2 - 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\/fr\/blog\/administrirovanie\/podgotovka-sdl2-proekta-dlya-zapuska-na-android\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47Pr\u00e9paration du projet SDL2 pour le lancement sur Android | ProHoster","description":"Bonjour \u00e0 tous.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/podgotovka-sdl2-proekta-dlya-zapuska-na-android","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/55442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=55442"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/55442\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=55442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=55442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=55442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}