πŸ“±πŸΠšΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Android Π½Π° Python: пошаговоС руководство

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Android Π½Π° Python, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Kivy. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простого прилоТСния:

        
import kivy
kivy.require('1.11.1')

from kivy.app import App
from kivy.uix.button import Button

class MyApp(App):
    def build(self):
        return Button(text='ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!')

if __name__ == "__main__":
    MyApp().run()
        
    

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм класс MyApp, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ класса App ΠΈΠ· Kivy. ΠœΠ΅Ρ‚ΠΎΠ΄ build Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ с тСкстом "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!". Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ запускаСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ MyApp().run().

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Π°Π½Π΄Ρ€ΠΎΠΈΠ΄ Π½Π° python

ВсС большС людСй ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Android с использованиСм языка программирования Python. Python прСдоставляСт ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΈ простой синтаксис, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ спСктр Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ Android Π±ΠΎΠ»Π΅Π΅ доступной ΠΈ эффСктивной. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Android, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Python.

1. Установка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… инструмСнтов

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ шагом для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прилоТСния ΠΏΠΎΠ΄ Android Π½Π° Python являСтся установка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… инструмСнтов. Π’Π°ΠΌ понадобится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  • Python: УстановитС послСднюю Π²Π΅Ρ€ΡΠΈΡŽ Python с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сайта https://www.python.org.
  • Kivy: Kivy - это открытая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python, которая позволяСт Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Π΅ прилоТСния, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Android. УстановитС Kivy с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:
pip install kivy

2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ основного ΠΊΠΎΠ΄Π° прилоТСния

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ инструмСнты установлСны, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом являСтся созданиС основного ΠΊΠΎΠ΄Π° прилоТСния. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .py ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

from kivy.app import App
from kivy.uix.label import Label

class MyApp(App):
    def build(self):
        return Label(text='ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!')

if __name__ == '__main__':
    MyApp().run()

Π’ этом ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Kivy ΠΈ создаСм класс MyApp, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ класса App. Π’Π½ΡƒΡ‚Ρ€ΠΈ класса MyApp ΠΌΡ‹ опрСдСляСм ΠΌΠ΅Ρ‚ΠΎΠ΄ build, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Label с тСкстом "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!". Π’ самом Π½ΠΈΠΆΠ½Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π° ΠΌΡ‹ создаСм экзСмпляр класса MyApp ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ run для запуска прилоТСния.

3. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ интСрфСйса

Для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ Android Π½Π° Python ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» KV. KV - это язык Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Kivy, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ внСшний Π²ΠΈΠ΄ прилоТСния. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .kv ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

kivy:
    
    BoxLayout:
        orientation: "vertical"
        
        Label:
            text: "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!"
            font_size: 30
            
        Button:
            text: "НаТми мСня!"

4. Запуск прилоТСния

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ основной ΠΊΠΎΠ΄ прилоТСния ΠΈ Ρ„Π°ΠΉΠ» KV для создания интСрфСйса, ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ Π² Ρ„Π°ΠΉΠ» .py ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΊΠΎΠ΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

class MyApp(App):
    def build(self):
        return Builder.load_file('my.kv')

if __name__ == '__main__':
    MyApp().run()

Π’ этом ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ добавляСм ΠΈΠΌΠΏΠΎΡ€Ρ‚ модуля Builder ΠΈΠ· Kivy ΠΈ измСняСм ΠΌΠ΅Ρ‚ΠΎΠ΄ build, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π» Ρ„Π°ΠΉΠ» KV с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° load_file. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ интСрфСйс с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!" ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ "НаТми мСня!".

5. Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° прилоТСния для Android

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для Android. Для этого ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструмСнт KivyBuildozer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ прилоТСния Kivy для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Android.

Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ этим шагам, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:

  1. УстановитС Buildozer с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:
pip install buildozer
  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ buildozer.spec Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:
[app]

# (str) Title of your application
title = ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΠœΠΈΡ€App

# (str) Package name
package.name = hellomobileapp

# (str) Package domain (needed for android/ios packaging)
package.domain = org.test

# (str) Source code where the main.py live
source.dir = .

# (list) Source files to include (let empty to include all the files)
source.include_exts = py,png,jpg,kv,atlas

# (list) List of inclusions using pattern matching
#source.include_patterns = assets/*,images/*.png

# (list) Source files to exclude (let empty to not exclude anything)
#source.exclude_exts = spec

# (list) List of directory to exclude (let empty to not exclude anything)
#source.exclude_dirs = tests, bin

# (str) Application versioning (method 1)
version = 0.1
version.requirements = ==0.1

# (str) Custom source folders for requirements
# Sets custom source for any requirements with recipes
# requirements.source.kivy = ../../kivy

# (str) python-for-android branch to use, defaults to master
#p4a.branch = develop

# (str) python-for-android revision to use (ignored if remote is set)
#p4a.revision = master

# (str) How to build the application, current options are apk (default) or sdist
#p4a.build_mode = apk

# (str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86, x86_64
#arch = armeabi-v7a

# (int) Android API to use
#android.api = 27

# (int) Minimum API required
#android.minapi = 21

# (int) Android SDK version to use
#android.sdk = 20

# (str) Android NDK version to use
#android.ndk = r19c

# (int) Android NDK API to use. This is the minimum API your app will support, it should usually match android.minapi.
#android.ndk_api = 21

# (bool) Use --private data storage (True) or --dir public storage (False)
#android.private_storage = True

# (str) Android NDK directory (if empty, it will be automatically downloaded.)
#android.ndk_path =

# (str) Android SDK directory (if empty, it will be automatically downloaded.)
#android.sdk_path =

# (str) build.prop should be recreate (tweak recipe for that, if False you should have your build.prop tweaked in your system)
#android.remove_buildprop = True

# (bool) allows to use packages which are only available on the host building the android project
#android.allow_backends_apis = False

# (str) The name of the OUYA console
#android.console_otg_device =

# (str) Python2 branch to use, defaults to the latest stable 2.x branch
#py2.branch = stable

# (str) Python3 branch to use, defaults to the latest stable 3.x branch
#py3.branch = stable

# (str) A comma separated list of bootstraps to build for the application
#bootstrap = sdl2

# (int) Port override for the default bootstrap
#android.bootstrap_port = 5046

# (int) Minimum memory size (in MB) required to build sdl2/pygame bootstrap
#use_pgs4a = False

# (int) Target Android architecture to compile your app against, this does not restrict deployment or require API level limitations
#archs = armeabi-v7a

# (str) add java object files
#android.add_objects = %(source.dir)s/android/src/org/test/helloworld/obj

# (str) Gradle dependencies to append
#android.gradle_dependencies =

# (list) Permissions
#android.permissions = INTERNET

# (str) mobile-sdk to use for building (android)
#sdk = 20

# (str) Android logcat filter expression to use
#logcat_filter = *:S python:D

# (str) Android additionnal libraries to copy into libs/armeabi
#android.add_libs_armeabi = libs/android/*.so

# (str) Android additionnal libraries to copy into libs/x86
#android.add_libs_x86 = libs/android_x86/*.so

# (bool) Indicate if the screen should stay on
#android.wakelock = False

# (bool) Indicate if the screen orientation should be kept
# (the default layout only allow portrait orientations)
#android.allow_orientation_change = False

# (str) Application needs a cursor (mouse cursor for instance)
#android.presplash.cursor = True

# (int) Target DPI for cursor to work.
#android.presplash.cursor_dpi = 64

# (str) Presplash of the application
#android.presplash.filename = %(source.dir)s/data/logo/kivy-icon-64.png

# (str) Icon of the application
# Icon filename for application
# Default is android/android/Icon.png
#android.icon.filename = %(source.dir)s/data/logo/kivy-icon-32.png

# (str) Supported orientation (one of landscape, sensorLandscape, etc)
# android.orientation = landscape

# (list) List of application features (separated by commas)
# android.features = android.hardware.usb.host

# (str) Permissions for android
# android.permissions =

# (str) Launch mode to use for the activity (singleTop, singleTask, etc)
# android.launch_mode = standard

# (bool) If you need to insert variables
# android.template_ext_whitelist =

# (str) Path to a custom blacklist file
#android.blacklist =

# (bool) If you want to disable autocapturing of any keyboard
# android.allow_capture_keys = False

# (bool) If the application should be fullscreen without a statusbar
# fullscreen = 1

# (bool) Turn on the --virtualenv option on Android, default is False
# If jnius is required this must be set to True
#android.virtualenv = False

# (str) Verbose level (0-2)
# It will display in the standard output what commandlines are used and the output of those commands
#android.verbose = False

# (bool) If debug is False, the app will not run
debug = False

# (str) Path to a directory containing external requirements
#android.requirements_source_dir = %(source.dir)s/requirements

# (str) Patches to the build
#android.build_patches = 

# (str) Path to a custom -android.mk file use this version instead of the default one
#android.custom_mk = 

# (str) Path to a custom AndroidManifest.tmpl.xml file, must be relative to the main.py file
#android.manifest_src = 

# (str) Path to a custom blacklist file
#android.predex.blacklist =

# (str) Path to a custom whitelist file
#p4a.whitelist =

# (str) Path to a custom obb files dir (default is .)
#android.add_obb =

# (str) Bootstraps to remove
#p4a.remove_bootstraps =

# (str) Whether to run sdl2 bootstrap
#run_sd2_bootstrap = False

# (str) Title of the application
#title = ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния

# (str) Package name
#package.name = ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

# (str) Application versioning (method 2)
# version.regex = __version__ = ['"](.*)['"]
# version.filename = %(source.dir)s/main.py

# (str) Application icon
# Icon filename for application
# Default is %(source.dir)s/icon.png
#icon.filename = %(source.dir)s/data/logo/kivy-icon-32.png

# (str) Presplash background color (for new android toolchain)
# Supported formats are: #RRGGBB #AARRGGBB or one of the following names:
# red, blue, green, black, white, gray, cyan, magenta, yellow, lightgray,
# darkgray, grey, lightgrey, darkgrey, aqua, fuchsia, lime, maroon, navy,
# olive, purple, silver, teal.
#android.presplash_color = #FFFFFF

# (str) Presplash background image to use
#android.presplash.filename = %(source.dir)s/data/images/presplash.png

# (str) Presplash background image to use (simple version)
#android.presplash.filename = presplash.png

# (str) Gradle dependencies to add
# after.main = 'compile "org.robovm:robopods-google-mobile-ads-ios:3.14.0"'

# (str) Android logcat filters to use
#  Some users want to get "only" the Kivy log entries via logcat because
#  they use a Kivy GUI.
# USAGE: (list of str) ['-S', '*:S', 'python:D', 'python:E', ...]
#android.logcat_filters = *:S python:D python:E

# (str) Android key.store
# Alias for key.store.filename
#android.keyalias =

# (str) Android key.store.password
# Password for the key store
# android.key.store.password = mypass

# (str) Android key.alias
# Alias for the key
# android.key.alias = myalias

# (str) Android key.alias.password
# Password for the key
# android.key.alias.password = mypass
  1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для сборки ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ прилоТСния:
buildozer android debug

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» APK, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π° устройствС с Android.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрСли, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Android Π½Π° языкС программирования Python. ΠœΡ‹ установили Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ инструмСнты, написали основной ΠΊΠΎΠ΄ прилоТСния, создали интСрфСйс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π°ΠΉΠ»Π° KV ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Android с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Buildozer. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ вас Π΅ΡΡ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ знания, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ св

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ своС ANDROID ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° PYTHON

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Android ΠΈΠ³Ρ€Ρƒ Π·Π° 10 ΠΌΠΈΠ½ΡƒΡ‚ Π½Π° языкС Python!

Π‘ΠžΠ—Π”ΠΠΠ˜Π• ANDROID ΠŸΠ Π˜Π›ΠžΠ–Π•ΠΠ˜Π― Π½Π° PYTHON | KIVY

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

Как Π½Π°ΠΉΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Python: подробная инструкция

Бколько Π½Π°Π΄ΠΎ ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° программиста Python? πŸ€”πŸ’»πŸ“š

πŸ€– Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ своСго Π±ΠΎΡ‚Π° Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅: ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π³ΠΈΠ΄ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

πŸ“±πŸΠšΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Android Π½Π° Python: пошаговоС руководство

πŸ“ Как ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ мСню Π½Π° Python: ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ руководство с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ

πŸ”§ΠšΠ°ΠΊ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΈΠ»Π»ΠΎΡƒ ΠŸΠΈΡ‚ΠΎΠ½: простая инструкция для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ²

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ rfind Π² Python? πŸ” Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ rfind для строки Π² Python