Buildozer error : OSError: [Errno 26] Text file busy

319 views
Skip to first unread message

ΚΩΣΤΑΣ ΚΑΡΑΝΑΣΟΣ

unread,
Dec 14, 2020, 4:52:31 PM12/14/20
to Kivy users support

Hi

I am trying to build an apk with buildozer with Kivy_Complete_VM_0.7 and I am getting this error :

OSError: [Errno 26] Text file busy: '/media/sf_Shared/Mobile/build/buildozer-myapp/android/platform/build-armeabi-v7a/dists/apppackname'

This is my whole build log:
[INFO]:    Recipe kivy: version "1.11.1" requested
[INFO]:    Will compile for the following archs: armeabi-v7a
[INFO]:    Found Android API target in $ANDROIDAPI: 27
[INFO]:    Available Android APIs are (13, 19, 21, 26, 27)
[INFO]:    Requested API target 27 is available, continuing.
[INFO]:    Found NDK dir in $ANDROIDNDK: /home/kivy/Android/android-ndk-r19c
[INFO]:    Found NDK version 17c
[INFO]:    Getting NDK API version (i.e. minimum supported API) from user argument
[INFO]:    Found virtualenv at /home/kivy/.local/bin/virtualenv
[INFO]:    ccache is missing, the build will not be optimized in the future.
[INFO]:    Found the following toolchain versions: ['4.9']
[INFO]:    Picking the latest gcc toolchain, here 4.9
[INFO]:    No existing dists meet the given requirements!
Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/kivy/Repos/python-for-android/pythonforandroid/toolchain.py", line 1192, in <module>
    main()
  File "/home/kivy/Repos/python-for-android/pythonforandroid/entrypoints.py", line 18, in main
    ToolchainCL()
  File "/home/kivy/Repos/python-for-android/pythonforandroid/toolchain.py", line 668, in __init__
    getattr(self, args.subparser_name.replace('-', '_'))(args)
  File "/home/kivy/Repos/python-for-android/pythonforandroid/toolchain.py", line 150, in wrapper_func
    dist.delete()
  File "/home/kivy/Repos/python-for-android/pythonforandroid/distribution.py", line 165, in delete
    rmtree(self.dist_dir)
  File "/usr/lib/python3.6/shutil.py", line 490, in rmtree
    onerror(os.rmdir, path, sys.exc_info())
  File "/usr/lib/python3.6/shutil.py", line 488, in rmtree
    os.rmdir(path)
OSError: [Errno 26] Text file busy: '/media/sf_Shared/Mobile/build/buildozer-myapp/android/platform/build-armeabi-v7a/dists/apppackname'
# Command failed: /usr/bin/python3 -m pythonforandroid.toolchain create --dist_name=apppackname --bootstrap=sdl2 --requirements=python3,kivy==1.11.1,requests,plyer,pygame,sqlite3 --arch armeabi-v7a --copy-libs --color=always --storage-dir="/media/sf_Shared/Mobile/build/buildozer-myapp/android/platform/build-armeabi-v7a" --ndk-api=21
# ENVIRONMENT:
#     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:*.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'
#     XDG_MENU_PREFIX = 'xfce-'
#     LANG = 'en_ZA.UTF-8'
#     GDM_LANG = 'en_US'
#     DISPLAY = ':0.0'
#     GTK_OVERLAY_SCROLLING = '0'
#     COLORTERM = 'truecolor'
#     JAVA_HOME = '/usr/lib/jvm/java-8-openjdk-amd64'
#     XDG_VTNR = '7'
#     SSH_AUTH_SOCK = '/run/user/1000/keyring/ssh'
#     MANDATORY_PATH = '/usr/share/gconf/xubuntu.mandatory.path'
#     GLADE_CATALOG_PATH = ':'
#     XDG_SESSION_ID = 'c1'
#     XDG_GREETER_DATA_DIR = '/var/lib/lightdm-data/kivy'
#     USER = 'kivy'
#     GLADE_MODULE_PATH = ':'
#     DESKTOP_SESSION = 'xubuntu'
#     DEFAULTS_PATH = '/usr/share/gconf/xubuntu.default.path'
#     QT_QPA_PLATFORMTHEME = 'gtk2'
#     PWD = '/media/sf_Shared/Mobile'
#     HOME = '/home/kivy'
#     SSH_AGENT_PID = '1316'
#     QT_ACCESSIBILITY = '1'
#     XDG_SESSION_TYPE = 'x11'
#     XDG_DATA_DIRS = '/usr/share/xubuntu:/usr/share/xfce4:/usr/local/share:/usr/share:/var/lib/snapd/desktop:/var/lib/snapd/desktop:/usr/share'
#     XDG_SESSION_DESKTOP = 'xubuntu'
#     GLADE_PIXMAP_PATH = ':'
#     CLUTTER_BACKEND = 'x11'
#     SHELL = '/bin/bash'
#     VTE_VERSION = '5202'
#     TERM = 'xterm-256color'
#     XDG_SEAT_PATH = '/org/freedesktop/DisplayManager/Seat0'
#     XDG_CURRENT_DESKTOP = 'XFCE'
#     GPG_AGENT_INFO = '/run/user/1000/gnupg/S.gpg-agent:0:1'
#     XDG_SEAT = 'seat0'
#     SHLVL = '1'
#     LANGUAGE = 'en_ZA:en'
#     WINDOWID = '58720259'
#     GDMSESSION = 'xubuntu'
#     LOGNAME = 'kivy'
#     DBUS_SESSION_BUS_ADDRESS = 'unix:path=/run/user/1000/bus'
#     XDG_RUNTIME_DIR = '/run/user/1000'
#     XAUTHORITY = '/home/kivy/.Xauthority'
#     XDG_SESSION_PATH = '/org/freedesktop/DisplayManager/Session0'
#     XDG_CONFIG_DIRS = '/etc/xdg/xdg-xubuntu:/etc/xdg:/etc/xdg'
#     PATH = '/home/kivy/.buildozer/android/platform/apache-ant-1.9.4/bin:/bin:/home/kivy/bin:/home/kivy/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'
#     SESSION_MANAGER = 'local/kivy-complete:@/tmp/.ICE-unix/1334,unix/kivy-complete:/tmp/.ICE-unix/1334'
#     LESSOPEN = '| /usr/bin/lesspipe %s'
#     _ = '/usr/local/bin/buildozer'
#     PACKAGES_PATH = '/home/kivy/.buildozer/android/packages'
#     ANDROIDSDK = '/home/kivy/Android/android-sdk-28'
#     ANDROIDNDK = '/home/kivy/Android/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

Can anyone help, please?

Thanks in advance

Kostas

Pranav Balaji Pooruli

unread,
Dec 14, 2020, 4:59:49 PM12/14/20
to kivy-...@googlegroups.com
Can you please share your buildozer.spec?

--
You received this message because you are subscribed to the Google Groups "Kivy users support" group.
To unsubscribe from this group and stop receiving emails from it, send an email to kivy-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/kivy-users/9a4367ac-e35d-462f-b20e-4430bf345eb2n%40googlegroups.com.

planckp...@gmail.com

unread,
Dec 14, 2020, 6:55:35 PM12/14/20
to Kivy users support
It is not the current issue, but this is using an obsolete version of Kivy.
It is also possible this is using an obsolete NDK version (and also not the current issue).

There was a time when the CompleteVM was helpful. Now it is best to install Buildozer and Kivy standalone.
And use the defaults to start.
You don't need Kivy installed to run Buildozer, but:

Probably best to generate a new buildozer.spec after the install.

This seems to be the issue at hand, it is where Buildozer keeps its state files.
--storage-dir="/media/sf_Shared/Mobile/build/buildozer-myapp/android/platform/build-armeabi-v7a"
Since nobody else should access there, something is corrupted, impossible to guess what.

And this location is not the default. Normally this would be of this form:
--storage-dir="<where ever main.py is>/.buildozer/android/platform/build-armeabi-v7"
and I would say delete     <where ever main.py is>/.buildozer
Since this directory is specified by your configuration, you'll have to figure out if that makes sense.

KOSTAS KARANASOS

unread,
Dec 15, 2020, 1:05:17 AM12/15/20
to Kivy users support
Hi

This is my buildozer.spec file

[app]

# (str) Title of your application
title = PydraMobile

# (str) Package name
package.name = apppackname

# (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,jpeg

# (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

# (list) List of exclusions using pattern matching
#source.exclude_patterns = license,images/*/*.jpg

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

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

# (list) Application requirements
# comma seperated e.g. requirements = sqlite3,kivy
requirements = python3,kivy==1.11.1,requests,plyer,pygame,sqlite3

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

# (list) Garden requirements
#garden_requirements =

# (str) Presplash of the application
#presplash.filename = %(source.dir)s/data/presplash.png
presplash.filename = %(source.dir)s/img/water-drop.png

# (str) Icon of the application
icon.filename = %(source.dir)s/img/water-drop.png
#presplash.filename = %(source.dir)s/img/water-drop.png

# (str) Supported orientation (one of landscape, portrait or all)
orientation = portrait

# (list) List of service to declare
#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY

#
# OSX Specific
#
osx.python_version = 3

#
# author = © Copyright Info

#
# Android specific
#

# (bool) Indicate if the application should be fullscreen or not
fullscreen = 0

# (list) Permissions
android.permissions = INTERNET,VIBRATE,ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION,CAMERA

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

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

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

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

# (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 = /home/kivy/Android/android-ndk-r19c/

# (str) Android SDK directory (if empty, it will be automatically downloaded.)
android.sdk_path = /home/kivy/Android/android-sdk-28/
# (str) ANT directory (if empty, it will be automatically downloaded.)
#android.ant_path =

# (str) python-for-android git clone directory (if empty, it will be automatically cloned from github)
#android.p4a_dir =

# (str) Semicolon separated list of Java .jar files to add to the libs so
# that pyjnius can access their classes. Don't add jars that you do not need,
# since extra jars can slow down the build process. Allows wildcards matching,
# for example: OUYA-ODK/libs/*.jar
#android.add_jars = foo.jar;bar.jar;path/to/more/*.jar
# library for barcode
# android.add_jars = libs/android/zbar.jar

# (list) python-for-android whitelist
android.whitelist = sqlite3/*,lib-dynload/_sqlite3.so

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

# (bool) If True, then skip trying to update the Android sdk
# This can be useful to avoid excess Internet downloads or save time
# when an update is due and you just want to test/build your package
# android.skip_update = False

# (str) Android entry point, default is ok for Kivy-based app
#android.entrypoint = org.renpy.android.PythonActivity

# (list) List of Java .jar files to add to the libs so that pyjnius can access
# their classes. Don't add jars that you do not need, since extra jars can slow
# down the build process. Allows wildcards matching, for example:
# OUYA-ODK/libs/*.jar
#android.add_jars = foo.jar,bar.jar,path/to/more/*.jar

# (list) List of Java files to add to the android project (can be java or a
# directory containing the files)
#android.add_src =

# (str) python-for-android branch to use, if not master, useful to try
# not yet merged features.
#android.branch = master

# (str) OUYA Console category. Should be one of GAME or APP
# If you leave this blank, OUYA support will not be enabled
#android.ouya.category = GAME

# (str) Filename of OUYA Console icon. It must be a 732x412 png image.
#android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png

# (str) XML file to include as an intent filters in <activity> tag
#android.manifest.intent_filters =

# (list) Android additionnal libraries to copy into libs/armeabi
#android.add_libs_armeabi = libs/android/*.so
#android.add_libs_armeabi_v7a = libs/android-v7/*.so
#android.add_libs_x86 = libs/android-x86/*.so
#android.add_libs_mips = libs/android-mips/*.so

# (bool) Indicate whether the screen should stay on
# Don't forget to add the WAKE_LOCK permission if you set this to True
#android.wakelock = False

# (list) Android application meta-data to set (key=value format)
#android.meta_data =

# (list) Android library project to add (will be added in the
# project.properties automatically.)
#android.library_references =

# (str) Android logcat filters to use
#android.logcat_filters = *:S python:D

# (bool) Copy library instead of making a libpymodules.so
#android.copy_libs = 1

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

# (str) python-for-android git clone directory (if empty, it will be automatically cloned from github)
p4a.source_dir = /home/kivy/Repos/python-for-android/

# (str) Path to a custom kivy-ios folder
#ios.kivy_ios_dir = ../kivy-ios

# (str) Name of the certificate to use for signing the debug version
# Get a list of available identities: buildozer ios list_identities
#ios.codesign.debug = "iPhone Developer: <lastname> <firstname> (<hexstring>)"

# (str) Name of the certificate to use for signing the release version
#ios.codesign.release = %(ios.codesign.debug)s


[buildozer]

# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
log_level = 2

# (int) Display warning if buildozer is run as root (0 = False, 1 = True)
warn_on_root = 1
build_dir = /media/sf_Shared/Mobile/build/buildozer-myapp
# (str) Path to build artifact storage, absolute or relative to spec file
# build_dir = ./.buildozer

# (str) Path to build output (i.e. .apk, .ipa) storage
# bin_dir = ./bin

#    -----------------------------------------------------------------------------
#    List as sections
#
#    You can define all the "list" as [section:key].
#    Each line will be considered as a option to the list.
#    Let's take [app] / source.exclude_patterns.
#    Instead of doing:
#
#[app]
#source.exclude_patterns = license,data/audio/*.wav,data/images/original/*
#
#    This can be translated into:
#
#[app:source.exclude_patterns]
#license
#data/audio/*.wav
#data/images/original/*
#


#    -----------------------------------------------------------------------------
#    Profiles
#
#    You can extend section / key with a profile
#    For example, you want to deploy a demo version of your application without
#    HD content. You could first change the title to add "(demo)" in the name
#    and extend the excluded directories to remove the HD content.
#
#[app@demo]
#title = My Application (demo)
#
#[app:source.exclude_patterns@demo]
#images/hd/*
#
#    Then, invoke the command line with the "demo" profile:
#
#buildozer --profile demo android debug



Thanks a lot

Kostas

Pranav Balaji Pooruli

unread,
Dec 15, 2020, 1:19:40 AM12/15/20
to kivy-...@googlegroups.com
I think the package.name set to apppackname might be causing the error. Maybe it’s a "reserved keyword" or something. You could try changing it to something like pydramobilev1.0.

planckp...@gmail.com

unread,
Dec 15, 2020, 1:52:34 AM12/15/20
to Kivy users support
Do NOT create a package name containing a period. See:
"The Package name is one word with only ASCII characters and/or numbers. It should not contain any special characters."
The special character will cause Gradle to fail.

KOSTAS KARANASOS

unread,
Dec 15, 2020, 1:55:32 AM12/15/20
to Kivy users support
I tried an Utubu clean installation to make an apk
I finally made an apk but I am getting errors when I rum it to my android device. I use the old version of Buildozer VM until now and it works fine, but it works with python2

I don't know if it is the wright group to place theese errors


Thanks

Kostas


Στις Τρίτη, 15 Δεκεμβρίου 2020 στις 1:55:35 π.μ. UTC+2, ο χρήστης planckp...@gmail.com έγραψε:

Pranav Balaji Pooruli

unread,
Dec 15, 2020, 2:01:41 AM12/15/20
to kivy-...@googlegroups.com
Sorry, I didn't know that.

planckp...@gmail.com

unread,
Dec 15, 2020, 2:06:46 AM12/15/20
to Kivy users support
This group is here to discuss Kivy user issues, which includes Android and iOS ports.

These tools are a moving target, we have to adapt ;)

As I understand it:
You have past Buildozer experience.
You can build an apk with the current Buildozer.
But there is a run time crash.

Is that correct?

If yes then use the debugger to look at the logcat output. The issue will probably be after the word Traceback.

planckp...@gmail.com

unread,
Dec 15, 2020, 2:08:07 AM12/15/20
to Kivy users support
Sorry, I didn't know that.
That is OK, no damage done. And I learned about the period the hard way ;)

planckp...@gmail.com

unread,
Dec 15, 2020, 2:25:57 AM12/15/20
to Kivy users support
One thing to check, if this is an old app run time permission is required in addition to manifest permissions.

Add a call  android.permissions.request_permissions()  in build()
Only the "dangerous" permissions are required, probably just  CAMERA, ACCESS_FINE_LOCATION
If you already know this just forget this post.

KOSTAS KARANASOS

unread,
Dec 15, 2020, 5:14:33 AM12/15/20
to Kivy users support
Hi

I build up a Ubuntu 20.04 and a Buildozer enviroment
I had better luck with building ( after a few errors) but I can't run the application on my android device
I stucked on this error:

PermissionError: [Errno 13] Permission denied: '/storage/emulated/0/DCIM/Kivy/ini/app.ini'

app tries to read this file in Internal Shared Storage of my android device

my android permissions in buildoser.spec are

android.permissions = INTERNET,VIBRATE,ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION,CAMERA,WRITE_EXTERNAL_STORAGE,READ_EXTERNAL_STORAGE

does anyone has any clue what permission is ?

Thanks a lot

KOSTAS KARANASOS

unread,
Dec 15, 2020, 10:56:33 AM12/15/20
to kivy-...@googlegroups.com
Hi
In case someone is interesting in the solution I updated the Android SDK version to 29 to builder.spec file and it works.
I found the solution from another forum

Thanks

Kostas

You received this message because you are subscribed to a topic in the Google Groups "Kivy users support" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/kivy-users/PO5FmxPrJWA/unsubscribe.
To unsubscribe from this group and all its topics, send an email to kivy-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/kivy-users/aecd0b03-3309-4fe6-ae41-797f84c66884n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages