{"id":811,"date":"2025-06-15T01:42:23","date_gmt":"2025-06-14T17:42:23","guid":{"rendered":"https:\/\/himpqblog.cn\/?p=811"},"modified":"2025-06-17T18:27:50","modified_gmt":"2025-06-17T10:27:50","slug":"buildozer-wsl-2-%e6%89%93%e5%8c%85python%e6%96%87%e4%bb%b6%e4%b8%baapk","status":"publish","type":"post","link":"https:\/\/himpqblog.cn\/index.php\/archives\/811","title":{"rendered":"Buildozer &amp; WSL 2 \u6253\u5305Python\u6587\u4ef6\u4e3aAPK"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5728\u7ebf\u6253\u5305<\/h2>\n\n\n\n<p><a href=\"https:\/\/threshhold.pythonanywhere.com\/post\/convert-pygame-code-to-android-apk-2f2cf8cd1802\">Convert Pygame code to android apk<\/a>\uff0c\u9009\u62e9<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"466\" src=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-8-1024x466.png\" alt=\"\" class=\"wp-image-817\" style=\"width:347px;height:auto\" srcset=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-8-1024x466.png 1024w, https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-8-300x137.png 300w, https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-8-768x350.png 768w, https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-8.png 1124w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u8c37\u6b4ccolab\u5728\u7ebf\u670d\u52a1\u5373\u53ef\u3002\u4f46\u662f\u56e0\u4e3a\u4f1a\u91cd\u7f6e\u6545\u9119\u4eba\u60f3\u8981\u5728\u672c\u5730\u90e8\u7f72\u5b8c\u6574\u7684buildozer\u6253\u5305\u6d41\u7a0b\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u672c\u5730\u6253\u5305 &#8211; \u6211\u7684\u73af\u5883<\/h2>\n\n\n\n<p>Windows 11 + WSL 2 (Ubuntu 22.04)<\/p>\n\n\n\n<p>\u6839\u636e\u4e0a\u6587\u5728\u7ebf\u6253\u5305\u7684colab\u63d0\u4f9b\u7684\u4ee3\u7801\u4e00\u6837\uff0c\u5728Ubuntu\u91cc\u4f9d\u6b21\u6267\u884c\u5373\u53ef\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4f9d\u8d56\u95ee\u9898<\/h2>\n\n\n\n<p>\u5728buildozer init\u540e\u627e\u5230buildozer.spec\u6587\u4ef6\uff0c\u5728\u91cc\u9762\u641c\u7d22<strong>requirements = <\/strong>\uff0c\u7136\u540e\u4fee\u6539\u4e3a\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>python3==3.10.12,kivy==2.3.0,pyjnius==1.5.0,hostpython3==3.10.12,pygame<\/strong><br><br>\u968f\u540e\u518d\u6839\u636e\u4f60\u9700\u8981\u7684\u4f9d\u8d56\u6dfb\u52a0\u5305\u540d\u5373\u53ef\uff0c\u65e0\u9700\u5728\u673a\u5668\u5185\u7684pip\u4e0b\u8f7d\u8be5\u6a21\u5757\uff0c\u6253\u5305\u65f6\u4f1a\u81ea\u52a8\u4e0b\u8f7d\u4e00\u904d\u3002<br><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u6709\u5173\u7f16\u8bd1<\/h2>\n\n\n\n<p>\u8fd9\u4e9b\u5305\u4f1a\u8fdb\u884c\u672c\u5730\u7f16\u8bd1\uff0c\u6240\u4ee5\u8017\u65f6\u6781\u957f\uff0c20~60\u5206\u949f\u8f83\u4e3a\u5408\u7406\uff0c\u82e5\u5361\u5728\u67d0\u4e9b\u6b65\u9aa4\u8bf7\u68c0\u67e5\u7f51\u7edc\u4ee3\u7406\u914d\u7f6e\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e00\u3001\u4ee3\u7406\u95ee\u9898<\/h2>\n\n\n\n<p>\u6709\u65f6\u65e0\u6cd5\u8bbf\u95eegithub.com\u3001python.org\u7b49\uff0c\u5bfc\u81f4git clone\u5361\u4f4f\u6700\u540e\u8d85\u65f6\u3002<\/p>\n\n\n\n<p>\u4f60\u65e0\u9700\u8bbe\u7f6eall_proxy\u3001http_proxy\u7b49\u73af\u5883\u53d8\u91cf\uff0c\u53ea\u9700\u5c06WSL2\u7684\u7f51\u7edc\u6a21\u5f0f\u8bbe\u7f6e\u4e3aNAT:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"172\" src=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-3-1024x172.png\" alt=\"\" class=\"wp-image-812\" srcset=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-3-1024x172.png 1024w, https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-3-300x50.png 300w, https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-3-768x129.png 768w, https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-3-1536x258.png 1536w, https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-3.png 1850w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u7136\u540e\u5f00\u542f\u4ee3\u7406\u8f6f\u4ef6\u7684TUN Mode:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"347\" height=\"75\" src=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-4.png\" alt=\"\" class=\"wp-image-813\" srcset=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-4.png 347w, https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-4-300x65.png 300w\" sizes=\"auto, (max-width: 347px) 100vw, 347px\" \/><\/figure>\n\n\n\n<p>\uff08\u6ce8\u610f\uff1aService Mode\u8981\u5b89\u88c5\uff09<\/p>\n\n\n\n<p>\u8fd9\u65f6\u5019\u5c31\u80fdping\u901a\u4e86\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"190\" src=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-5-1024x190.png\" alt=\"\" class=\"wp-image-814\" srcset=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-5-1024x190.png 1024w, https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-5-300x56.png 300w, https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-5-768x143.png 768w, https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-5.png 1137w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e8c\u3001Gradle\u6253\u5305\u65f6\u7684 Java heap space\u4e0e\u65e0\u6cd5\u56de\u6536\u5185\u5b58<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u65e0\u6cd5\u56de\u6536\u5185\u5b58(\u6ca1\u6709\u51fa\u73b0\u6b64\u95ee\u9898\u4e0d\u7528\u770b)<\/h3>\n\n\n\n<p><a href=\"https:\/\/github.com\/kivy\/python-for-android\/pull\/3006\">\u7531\u4e8e Gradle 8.x \u5bfc\u81f4 OpenJDK 11 \u4e0d\u517c\u5bb9 \/ \u65e0\u6cd5\u5728 WSL v1 \u4e0a\u6784\u5efa apk \u4f5c\u8005\uff1aMarcinosoft \u00b7\u62c9\u53d6\u8bf7\u6c42 #3006 \u00b7Kivy\/Android \u7248 Python<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/kivy\/python-for-android\/issues\/3000\">\u7531\u4e8e Gradle 8.x \u5bfc\u81f4 OpenJDK 11 \u4e0d\u517c\u5bb9 \/ \u65e0\u6cd5\u5728 WSL v1 \u4e0a\u6784\u5efa apk \u00b7\u95ee\u9898 #3000 \u00b7Kivy\/Android \u7248 Python<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/kivy\/python-for-android\/issues\/2984\">com.android.build.gradle.internal.tasks.CompressAssetsWorkAction\uff1aJava \u5806\u7a7a\u95f4 \u00b7\u95ee\u9898 #2984 \u00b7Kivy\/Android \u7248 Python<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/kivy\/buildozer\/issues\/1504\">\u65e0\u6cd5\u5206\u914d\u5185\u5b58 \u00b7\u95ee\u9898 #1504 \u00b7Kivy\/Buildozer<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>\u603b\u800c\u8a00\u4e4b\uff1a<\/p>\n\n\n\n<p>1.\u5207\u6362 OpenJDK \u7248\u672c\u81f311<\/p>\n\n\n\n<p>1.\u5c06 gradle-8.0.2 \u964d\u7ea7\u5230 gradle-7.6.2\uff0c\u5c06 gradle\uff1a8.1.1 \u964d\u7ea7\u5230 gradle\uff1a7.4.2 \u4ee5\u4fdd\u6301 JDK 11 \u517c\u5bb9\u6027<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">sudo apt install -y openjdk-11-jdk\nsudo update-alternatives --config java\n\uff08\u9009\u62e9JDK11\uff09<\/code><\/span><\/pre>\n\n\n<p>\u7136\u540e\u5728buildozer.spec\u4e2d\u627e\u5230<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"706\" height=\"112\" src=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-6.png\" alt=\"\" class=\"wp-image-815\" srcset=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-6.png 706w, https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-6-300x48.png 300w\" sizes=\"auto, (max-width: 706px) 100vw, 706px\" \/><\/figure>\n\n\n\n<p>\u4fee\u6539\u4e3a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"114\" src=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-7.png\" alt=\"\" class=\"wp-image-816\" srcset=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-7.png 400w, https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-7-300x86.png 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/figure>\n\n\n\n<p>\u8fd9\u6837\u5c31\u4f1a\u4f7f\u7528Gradle7.x\u6784\u5efa\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Java heap space<\/h3>\n\n\n\n<p>\u9020\u6210\u7684\u539f\u56e0\u662f\u8d44\u6e90\u6587\u4ef6\u4f53\u79ef\u8fc7\u5927\uff0c\u636e\u672c\u4eba\u7ecf\u9a8c\uff0c\u53ea\u8981\u6253\u5305\u7684\u8d44\u6e90\u6587\u4ef6\u8d85\u8fc7200MB\u5c31\u4f1a\u89e6\u53d1\u8be5\u9519\u8bef\u3002<\/p>\n\n\n\n<p>\u89e3\u51b3\u65b9\u6848\u662f\u538b\u7f29\u6587\u4ef6\u4f53\u79ef\uff0c\u6bd4\u5982\u6211\u6e38\u620f\u7684\u80cc\u666f\u56fe\u7247\u90fd\u662f\u76f8\u673a\u539fjpg\u56fe\uff0c\u6570\u5341\u5f20\u7167\u7247\u4f53\u79ef\u8d85\u8fc7100MB\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"346\" height=\"33\" src=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-9.png\" alt=\"\" class=\"wp-image-819\" srcset=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-9.png 346w, https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-9-300x29.png 300w\" sizes=\"auto, (max-width: 346px) 100vw, 346px\" \/><\/figure>\n\n\n\n<p>\u7ecf\u8fc7\u53ef\u63a5\u53d7\u7684\u538b\u7f29\uff0c\u5c06\u4f53\u79ef\u964d\u5230<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"250\" height=\"56\" src=\"https:\/\/himpqblog.cn\/wp-content\/uploads\/2025\/06\/image-10.png\" alt=\"\" class=\"wp-image-820\"\/><\/figure>\n\n\n\n<p>\u6210\u529f\u6253\u5305\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u6027\u80fd\u95ee\u9898<\/h2>\n\n\n\n<p>\u7531\u4e8epygame\u5bf9\u5b89\u5353\u5e73\u53f0\u5f88\u4e0d\u53cb\u597d\uff0c\u5bfc\u81f4\u53ea\u80fd\u4f7f\u7528cpu\u6e32\u67d3\uff0c\u6240\u4ee5\u5e27\u7387\u53ef\u8c13\u6781\u5176\u7f13\u6162\u3002<\/p>\n\n\n\n<p>\u89e3\u51b3\u65b9\u6848\u662f\u5728\u4f60\u7684\u7a0b\u5e8f\u4e2d\u627e\u5230\u6240\u6709\u9700\u8981\u8c03\u7528pygame\u7ed8\u5236\u7684\u5730\u65b9\uff0c\u6539\u4e3a\u4f7f\u7528pysdl2\u5b9e\u73b0\u3002\u4f60\u53ef\u4ee5\u6574\u5408\u4e00\u4e2apygame\u7684api\u8f6csdl2\u7684\u63a5\u53e3\uff0c\u7136\u540e\u5b9e\u73b0sdl2\u7ed8\u5236pygame\u7684\u76f8\u540c\u529f\u80fd\uff0c\u6700\u540e\u66ff\u6362\u5373\u53ef\u3002<\/p>\n\n\n\n<p>Example: <a href=\"https:\/\/github.com\/Himpq\/GalEngine\/\">https:\/\/github.com\/Himpq\/GalEngine\/<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u542f\u52a8\u754c\u9762\u95ee\u9898<\/h2>\n\n\n\n<p>Python for android(Kivy project)\u4f1a\u5728\u542f\u52a8\u65f6\u8c03\u7528kivy\u7684loading\u754c\u9762\uff0c\u5e76\u4e14\u5982\u679c\u4f60\u5728\u4f7f\u7528sdl\u6e32\u67d3\uff0c\u90a3\u4e48\u4f1a\u6709\u4e00\u6bb5\u65f6\u95f4\u5bfc\u81f4sdl\u6e32\u67d3\u548cloading\u754c\u9762\u91cd\u5408\uff0c\u5f53\u7136loading\u754c\u9762\u662f\u663e\u793a\u5728\u4e0a\u5c42\u7684\uff0c\u6240\u4ee5\u5982\u679c\u4f60\u7684\u7a0b\u5e8f\u6709\u4e00\u6bb5\u5165\u573a\u52a8\u753b\uff0c\u90a3\u4e48\u5b83\u5c06\u88abp4a\u7684\u52a0\u8f7d\u754c\u9762\u8986\u76d6\u4e00\u6bb5\u65f6\u95f4\u3002<\/p>\n\n\n\n<p>\u89e3\u51b3\u65b9\u6848\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">from<\/span> android <span class=\"hljs-keyword\">import<\/span> loadingscreen\nloadingscreen.hide_loading_screen()<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>\u5728\u7a0b\u5e8f\u542f\u52a8\u524d\u4f7f\u7528\u8be5\u4ee3\u7801\uff0c\u8fd9\u662fp4a\u63d0\u4f9b\u7684\u63a5\u53e3\uff0c\u80fd\u591f\u79fb\u9664\u52a0\u8f7d\u754c\u9762\u3002<\/p>\n\n\n\n<p><a href=\"https:\/\/python-for-android.readthedocs.io\/en\/latest\/apis.html\">\u5728 Android \u4e0a\u5de5\u4f5c &#8211; python-for-android 2024.01.21 \u6587\u6863<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u7ebf\u6253\u5305 Convert Pygame code to android apk\uff0c\u9009\u62e9 \u8c37\u6b4ccolab\u5728\u7ebf\u670d\u52a1\u5373 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-811","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/himpqblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/811","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/himpqblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/himpqblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/himpqblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/himpqblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=811"}],"version-history":[{"count":4,"href":"https:\/\/himpqblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/811\/revisions"}],"predecessor-version":[{"id":826,"href":"https:\/\/himpqblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/811\/revisions\/826"}],"wp:attachment":[{"href":"https:\/\/himpqblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=811"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/himpqblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=811"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/himpqblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=811"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}