Search code examples
pythonkivybuildozer

Kivy application building apk-file not possible?


i try to build an apk-file using buildozer - (i created a seperate file with the py-file called main.py, buildozer.spec - i ran the building under Ubuntu)

but when i run:

buildozer -v android debug

i get the following error after running the command (it works for sometime but at the end i get this error-message and the apk is not created)

# Command failed: /usr/bin/python3 -m pythonforandroid.toolchain create --dist_name=testKivy --bootstrap=sdl2 --requirements=python3,kivy==2.0.0,kivymd==0.104.2.dev0,pillow --arch armeabi-v7a --copy-libs --color=always --storage-dir="/mnt/c/TEMPKIVY/.buildozer/android/platform/build-armeabi-v7a" --ndk-api=21
# ENVIRONMENT:
#     SHELL = '/bin/bash'
#     WSL_DISTRO_NAME = 'Ubuntu'
#     NAME = 'Rapid1898'
#     PWD = '/mnt/c/TEMPKIVY'
#     LOGNAME = 'rapid1898'
#     MOTD_SHOWN = 'update-motd'
#     HOME = '/home/rapid1898'
#     LANG = 'C.UTF-8'
#     WSL_INTEROP = '/run/WSL/10_interop'
#     LS_COLORS = 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'
#     LESSCLOSE = '/usr/bin/lesspipe %s %s'
#     TERM = 'xterm-256color'
#     LESSOPEN = '| /usr/bin/lesspipe %s'
#     USER = 'rapid1898'
#     SHLVL = '1'
#     WSLENV = ''
#     XDG_DATA_DIRS = '/usr/local/share:/usr/share:/var/lib/snapd/desktop'
#     PATH = ('/home/rapid1898/.buildozer/android/platform/apache-ant-1.9.4/bin:/home/rapid1898/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Program '
 'Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2021.825.0_x64__79rhkp1fndgsc:/mnt/c/Program '
 'Files/Oculus/Support/oculus-runtime:/mnt/c/Program Files (x86)/Common '
 'Files/Intel/Shared '
 'Libraries/redist/intel64/compiler:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program '
 'Files (x86)/NVIDIA Corporation/PhysX/Common:/mnt/c/Program '
 'Files/Calibre2/:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/ProgramData/chocolatey/bin:/mnt/c/Users/Polzi/AppData/Local/Programs/Python/Python37:/mnt/c/Program '
 'Files/Microsoft SQL Server/120/Tools/Binn/:/mnt/c/Program Files/Common '
 'Files/Autodesk Shared/:/mnt/c/Program Files/Git/cmd:/mnt/c/Program '
 'Files/PuTTY/:/mnt/c/Program '
 'Files/nodejs/:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Program '
 'Files/Docker/Docker/resources/bin:/mnt/c/ProgramData/DockerDesktop/version-bin:/mnt/c/Users/Polzi/AppData/Local/Programs/Python/Python39/Scripts/:/mnt/c/Users/Polzi/AppData/Local/Programs/Python/Python39/:/mnt/c/Program '
 'Files/MySQL/MySQL Shell '
 '8.0/bin/:/mnt/c/Users/Polzi/AppData/Local/Microsoft/WindowsApps:/mnt/c/Program '
 'Files/JetBrains/PyCharm '
 '2019.3.3/bin:/mnt/c/Users/Polzi/AppData/Local/GitHubDesktop/bin:/mnt/c/Program '
 'Files/JetBrains/IntelliJ IDEA '
 '2019.3.4/bin:/mnt/c/Users/Polzi/AppData/Local/atom/bin:/mnt/c/tools/dart-sdk/bin:/mnt/c/Users/Polzi/AppData/Roaming/Pub/Cache/bin:/mnt/c/flutter/bin:/mnt/c/Users/Polzi/AppData/Local/Programs/Microsoft '
 'VS Code/bin:/mnt/c/Users/Polzi/AppData/Roaming/npm:/mnt/c/Program '
 'Files/JetBrains/IntelliJ IDEA 2020.1/bin:/mnt/c/Program '
 'Files/heroku/bin:/mnt/c/xampp/php:/mnt/c/Users/Polzi/AppData/Local/Markdown '
 'Monster:/snap/bin')
#     HOSTTYPE = 'x86_64'
#     OLDPWD = '/mnt/c'
#     _ = '/home/rapid1898/.local/bin/buildozer'
#     PACKAGES_PATH = '/home/rapid1898/.buildozer/android/packages'
#     ANDROIDSDK = '/home/rapid1898/.buildozer/android/platform/android-sdk'
#     ANDROIDNDK = '/home/rapid1898/.buildozer/android/platform/android-ndk-r19c'
#     ANDROIDAPI = '27'
#     ANDROIDMINAPI = '21'
#
# Buildozer failed to execute the last command
# The error might be hidden in the log above this error
# Please read the full log, and search for it before
# raising an issue with buildozer itself.
# In case of a bug report, please add a full log with log_level = 2

This is the file i want to convert:

import kivy

from kivy.app import App
from kivy.lang import Builder
from kivy.config import Config
from kivy.core.window import Window

Window.size = (800,230)

from kivy.uix.boxlayout import BoxLayout

class LblTxt(BoxLayout):
    from kivy.properties import ObjectProperty
    theTxt = ObjectProperty(None)

class MyApp(App):
    def build(self):
        self.root = Builder.load_file('simpleForm.kv')
        return self.root

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

Why is buidling the apk-file not possible?


Solution

  • The Problem

    Looking at the log, there's not much info, but I can assume from it that you were using WSL or something similar on Windows, not using an actual Ubuntu device. The reason why buildozer doesn't work, I don't know, the log doesn't go far back enough for me to find out, but it is very likely that is because WSL is not a full-fledged Linux distribution

    The Solution

    The solution for me was to use an online virtual machine called Google Colaboratory

    Press cancel to the popup to open a new notebook

    Initialize the VM by pressing Connect in the top-right part of the page

    Then add a new Code Cell by pressing +Code

    To set up buildozer and other commands, paste into the cell and press the play icon

    !pip install buildozer
    !pip install cython==0.29.19
    !apt install -y \
        python3-pip \
        build-essential \
        git \
        python3 \
        python3-dev \
        ffmpeg \
        libsdl2-dev \
        libsdl2-image-dev \
        libsdl2-mixer-dev \
        libsdl2-ttf-dev \
        libportmidi-dev \
        libswscale-dev \
        libavformat-dev \
        libavcodec-dev \
        zlib1g-dev
    !apt install -y \
        libgstreamer1.0 \
        gstreamer1.0-plugins-base \
        gstreamer1.0-plugins-good
    !apt install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev zlib1g-dev libssl-dev openssl libgdbm-dev libgdbm-compat-dev liblzma-dev libreadline-dev libncursesw5-dev libffi-dev uuid-dev libffi6
    !apt install libffi-dev
    !pip install kivy
    !apt install ldd
    

    Then upload your files to the files page

    Make another cell and run !buildozer init

    Refresh the files screen by right-clicking and going to refresh

    Open and edit the buildozer.spec file as you wish

    Finally, make a new cell and run !buildozer -v android debug and wait for it to complete, you may need to accept a few licenses on the way

    When done, refresh the file page again and then navigate to the bin directory that should now appear, press on the three dots of your apk, and press download