Ceci est une ancienne révision du document !
Table des matières
Kivy: Buildozer pour créer une application Android avec un script python
Cette page ne concerne que python 3.5 Pour python 2.7, voir la page Buildozer avec python 2.7
En décembre 2018, buildozer compile officiellement avec python 3, ne plus utiliser Crystax
Bigre: Impossible de compiler un Hello World ! en décembre 2018, en python 3 !
Utiliser VirtualBox avec 2 systèmes invités différents si vous utilisez python3.5 et python2.7 pour divers projets.
Installation de Kivy
Buildozer
Installation
Dépendances suffisantes mais peut-être pas nécessaires:
sudo apt-get install python3-dev zlib1g-dev pkg-config python3-colorama python3-sh python3-appdirs python3-jinja2 python3-six autoconf automake libtool build-essential cmake libav-tools dkms
Cython
Vérifier la version de cython à installer:
En décembre 2018, version = 0.29.1
sudo pip3 install cython
Pour imposer une version:
sudo pip3 install --upgrade cython==0.23
Mais quelle version est nécessaire ?
Les lib32 pour un 64 bits
sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install build-essential ccache git libncurses5:i386 libstdc++6:i386 libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 openjdk-8-jdk unzip zlib1g-dev zlib1g:i386
En décembre 2018 sur debian stretch
Version stable:
sudo pip3 install buildozer
retourne en
Successfully installed buildozer-0.37 virtualenv-16.1.0
Ressources
Compilation d'un projet
Init
buildozer init
Edition de buildozer.spec
Points importants
# (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,ogg # (list) List of inclusions using pattern matching source.include_patterns = data/*.png, sound/*.ogg # (list) Application requirements # comma seperated e.g. requirements = sqlite3,kivy requirements = python3,kivy,openssl # (str) Presplash of the application presplash.filename = %(source.dir)s/data/logo_labomedia.png # (str) Icon of the application icon.filename = %(source.dir)s/data/multipong.png # (str) Supported orientation (one of landscape, portrait or all) orientation = landscape # (list) Permissions android.permissions = INTERNET,CHANGE_WIFI_MULTICAST_STATE,ACCESS_NETWORK_STATE,ACCESS_WIFI_STATE # (str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86 android.arch = armeabi-v7a
Version
Il faut définir une version pour l'application que vous compilez.
Version Méthode 1
Cette ligne doit être la première ligne de code du fichier main.py; les versions seront gérées dans ce fichier.
__version__ = '0.67'
# (str) Application versioning (method 1) version.regex = __version__ = ['"](.*)['"] version.filename = %(source.dir)s/main.py # (str) Application versioning (method 2) # version = 1.2.0
Version Méthode 2
La version est définie dans ce fichier buildozer.spec:
# (str) Application versioning (method 1) #version.regex = __version__ = ['"](.*)['"] #version.filename = %(source.dir)s/main.py # (str) Application versioning (method 2) version = 1.2.0
Exemple
Compilation du apk
buildozer -v android debug
Quand ça plante
- buildozer android clean
- Détruire /home/user/.local/share/python-for-android
- .buildozer du home
- .buildozer de votre dossier
- .android du home
Debug de l'*.apk
Si l'application ne se lance pas
Kivy Launcher
Cette méthode n'exécute pas le apk, mais lance le main.py. Utilisez logcat.
Suivre tout ce qui se passe sur le téléphone avec logcat
sudo apt-get install adb adb root adb shell kminilte:/sdcard/kivy/TapOSC $ logcat
Problème avec UTF-8 dans .kv
* A vérifier si c'est toujours actuel en 2019 avec python 3 par défaut !
Dans truc.kv:
Label: id: Titre font_size: root.width/28 text: self.titre.text
Dans main.py:
class Machin(Screen): titre = ObjectProperty() # Dans le __init__() ou ailleurs self.titre.text = "éèàùê"