Outils pour utilisateurs

Outils du site


kivy_buildozer

Ceci est une ancienne révision du document !


Kivy 2020: Buildozer pour compiler une application Android en python

Le programme python kivy

hello_world.py
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
 
import kivy
kivy.require('1.11.1')
 
from kivy.app import App
from kivy.uix.label import Label
 
class MyApp(App):
    def build(self):
        return Label(text='Hello world')
 
if __name__ == '__main__':
    MyApp().run()

Compilation avec Buildozer

La page plus ancienne Kivy Comment créer une application android en python est en archive.

Installation

sudo dpkg --add-architecture i386
sudo apt-get update
 
sudo apt-get install libsdl2-dev zlib1g-dev pkg-config autoconf automake cmake dkms libtool libsdl2-2.0-0 ccache openjdk-11-jdk unzip ffmpeg libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev libswscale-dev libavformat-dev libavcodec-dev libgstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good libncurses5:i386 libstdc++6:i386 libgtk2.0-0:i386 libpangox-1.0-0:i386 libidn11:i386 zlib1g:i386 openjdk-11-source libssl-dev openssl gcc libpangoxft-1.0-0:i386 adb libtool build-essential python3-pip python3-dev python3-six libpython3-all-dev python3-all python3-all-dev python3-virtualenv virtualenv libncurses5-dev libncursesw5-dev libtinfo5
 
sudo pip3 install jinja2 appdirs sh colorama setuptools cython
sudo pip3 install pygame kivy buildozer pyjnius

Utilisation

Dans le dossier du projet:

buildozer init

crée le fichier buildozer.spec

buildozer.spec

Compilation

buildozer -v android debug

Le *.apk sera dans /bin

openjdk 11 vs 8

Ce problème se retrouve identiquement sur une Xubuntu18.04 !

# Installing/updating SDK platform tools if necessary
# Run '/home/serge/.buildozer/android/platform/android-sdk/tools/bin/sdkmanager tools platform-tools'
# Cwd /home/serge/.buildozer/android/platform/android-sdk
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
    at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
    at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
    at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
    at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
    at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 5 more
# Command failed: /home/serge/.buildozer/android/platform/android-sdk/tools/bin/sdkmanager tools platform-tools

Nous utiliserons la version 8: facile !

Installation de openjdk8: https://installvirtual.com/install-java-8-on-debian-10-buster/

wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -
sudo add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/
sudo apt update -y
sudo apt install adoptopenjdk-8-hotspot -y
java -version
sudo update-alternatives --config java

Choisir la version 8 !

Et à la fin c'est l'Allemagne qui gagne

Victoire ! Une application qui marche !

La compilation est longue, quelques heures, quelques Go téléchargés. Une recompilation suite à une nouvelle version serait bien sûr rapide.

13 Mo pour une application qui ne fais rien: myapp-0.13-armeabi-v7a-debug.apk.zip

Lorsque la compilation fini sur une erreur, je fais table rase: suppression des .android, .buildozer du home et du dossier du projet.

kivy_buildozer.1576840535.txt.gz · Dernière modification : 2019/12/20 11:15 de serge