Why do build take more than an hour to build apk??? even when SDK and NDK aready downloaded.

514 views
Skip to first unread message

Himanshu Pharawal

unread,
Nov 23, 2019, 1:57:14 AM11/23/19
to Kivy users support
App is working fine but take too long to build apk.even  when SDK and NDK aready downloaded. Is it normal????

this is my buildozer.spec....... do i need to change something in Android Specific section.
i noticed that it spend too much time on building recipes for armeabi-v7a!!

[app]



# (str) Title of your application

title = Library Genesis



# (str) Package name

package.name = librarygenesis



# (str) Package domain (needed for android/ios packaging)

package.domain = org.libgen



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



# (list) List of exclusions using pattern matching

#source.exclude_patterns = license,images/*/*.jpg



# (str) Application versioning (method 1)

version = 1.1



# (str) Application versioning (method 2)

# version.regex = __version__ = ['"](.*)['"]

# version.filename = %(source.dir)s/main.py



# (list) Application requirements

requirements = kivy,pyjnius,requests,plyer,beautifulsoup4,lxml



# (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 = icon1.png



# (str) Icon of the application

icon.filename = icon1.png



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

orientation = portrait



# (list) List of service to declare

#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY



#

# OSX Specific

#



#

# author = © Copyright Info



# change the major version of python used by the app

osx.python_version = 3



# Kivy version to use

osx.kivy_version = 1.9.1



#

# Android specific

#



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

fullscreen = 0



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



# (list) Permissions

android.permissions = INTERNET



# (int) Target Android API, should be as high as possible.

android.api = 27



# (int) Minimum API your APK will support.

android.minapi = 21



# (int) Android SDK version to use

android.sdk = 20



# (str) Android NDK version to use

android.ndk = 17c



# (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) ANT directory (if empty, it will be automatically downloaded.)

#android.ant_path =



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



# (bool) If True, then automatically accept SDK license

# agreements. This is intended for automation only. If set to False,

# the default, you will be shown the license when first running

# buildozer.

# android.accept_sdk_license = False



# (str) Android entry point, default is ok for Kivy-based app

#android.entrypoint = org.renpy.android.PythonActivity



# (list) Pattern to whitelist for the whole project

#android.whitelist =



# (str) Path to a custom whitelist file

#android.whitelist_src =



# (str) Path to a custom blacklist file

#android.blacklist_src =



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



# (list) Android AAR archives to add (currently works only with sdl2_gradle

# bootstrap)

#android.add_aars =



# (list) Gradle dependencies to add (currently works only with sdl2_gradle

# bootstrap)

#android.gradle_dependencies =



# (list) Java classes to add as activities to the manifest.

#android.add_activites = com.example.ExampleActivity



# (str) python-for-android branch to use, defaults to master

#p4a.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 =



# (str) launchMode to set for the main activity

#android.manifest.launch_mode = standard



# (list) Android additional 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



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

android.arch = armeabi-v7a



#

# Python for android (p4a) specific

#



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

#p4a.source_dir =



# (str) The directory in which python-for-android should look for your own build recipes (if any)

#p4a.local_recipes =



# (str) Filename to the hook for p4a

#p4a.hook =



# (str) Bootstrap to use for android builds

# p4a.bootstrap = sdl2



# (int) port number to specify an explicit --port= p4a argument (eg for bootstrap flask)

#p4a.port =





#

# iOS specific

#



# (str) Path to a custom kivy-ios folder

#ios.kivy_ios_dir = ../kivy-ios

# Alternately, specify the URL and branch of a git checkout:

ios.kivy_ios_url = https://github.com/kivy/kivy-ios

ios.kivy_ios_branch = master



# Another platform dependency: ios-deploy

# Uncomment to use a custom checkout

#ios.ios_deploy_dir = ../ios_deploy

# Or specify URL and branch

ios.ios_deploy_url = https://github.com/phonegap/ios-deploy

ios.ios_deploy_branch = 1.7.0



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



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


Alexander Taylor

unread,
Nov 23, 2019, 7:30:46 AM11/23/19
to Kivy users support
If it was constantly doing things (which you should be able to see via the output log fairly frequently updating), it was probably going as fast as can be expected on your hardware.

If it looked like it was hanging somewhere, post the details of that.

The long compile should only be necessary when first building the apk, future runs should take just a few seconds unless you clean the build or add new requirements.

Robert Flatt

unread,
Nov 23, 2019, 9:34:34 PM11/23/19
to Kivy users support
FYI

My 6 year old i5-4250  builds this app https://groups.google.com/d/msg/kivy-users/5_vCJhhsfu4/p69Lp6a8BQAJ   using
requirements = python3,kivy,requests,plyer,beautifulsoup4,lxml  

and it takes 25 minutes for a first build and about 1 minute for subsequent builds

Mastlex Online

unread,
Oct 9, 2023, 4:32:05 PM10/9/23
to Kivy users support
Opening this topic again

Because in my case, the first time I compile or ad a new requirement it takes 80 minutes
When I do it again, t takes 40 minutes

The devices is not bad, Intel Core i7, 16 mb ram, and Nvidia graphic card, can play heavy games without problem

What could be the problem?

I would takem me 2 weeks to compile and run tests in the app with this rythm
As if the compilation process is in 5 minutes, it could take me 2-3 days to complete the app

I'm using a windows machine, with a Linux Subsistem, also ADB (Android Debug Bridge) for debbugging...

Can anyone please tell me another configuration in which the compilation goes faster?


Mastlex Online

unread,
Oct 9, 2023, 4:35:32 PM10/9/23
to Kivy users support
Using Ubunto Virtual Machine in windows

Tomek CEDRO

unread,
Oct 9, 2023, 4:48:10 PM10/9/23
to kivy-...@googlegroups.com
On Mon, Oct 9, 2023 at 10:35 PM Mastlex Online wrote:
> Using Ubunto Virtual Machine in windows
>
> El lunes, 9 de octubre de 2023 a las 17:32:05 UTC-3, Mastlex Online escribió:
>> Because in my case, the first time I compile or ad a new requirement it takes 80 minutes
>> When I do it again, t takes 40 minutes

VirtualMachine will always work slower than native environment.

You can try running Linux on the same machine and notice the difference :-)

Also check the vmachine settings, mainly CPU count and RAM (more CPU
cores and more RAM will speed things up but also make your host
computer hiccup).

On old MacBookPro 2015 (4x...@2.4GHz 8GB RAM) the first build takes
around 50 minutes.

On FreeBSD virtual machine using BHyve hypervisor (4x...@3.8GHz 20GB
RAM) with Debian11 inside the first build takes around 35 minutes.
Also I am accessing Android phone over adb using dedicated pci-e usb
3.0 card.

All dependencies needs to be built from sources so it will always take
some time :-(

When you make big changes in buildozer.spec often also you need to
`buildozer appclean` and start from scratch. I have that problem too.
But as a result you get optimized fast application.

--
CeDeROM, SQ7MHZ, http://www.tomek.cedro.info

Tomek CEDRO

unread,
Oct 9, 2023, 4:49:36 PM10/9/23
to kivy-...@googlegroups.com
Also when you rebuild a lot on the pre-built code ccache speed things a lot :-)

Robert

unread,
Oct 9, 2023, 5:13:41 PM10/9/23
to Kivy users support

Francisco Ponce

unread,
Oct 9, 2023, 8:36:12 PM10/9/23
to kivy-...@googlegroups.com
THANK YOU

I actually was using a windows partition

I will try again in Linux partition directly

--
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/f69c1ab6-a5bf-402b-a4b5-ceaf3fec4353n%40googlegroups.com.


--
Francisco Ponce

Mastlex Online

unread,
Oct 9, 2023, 11:47:06 PM10/9/23
to kivy-...@googlegroups.com
First time took 50 minutes
Second time 1 minute
The solution was to have the files for compiling in the wsl "linux" partition and not in the windows partition.

Thank you again Elliot

Revengers Zone

unread,
Oct 10, 2023, 2:48:15 AM10/10/23
to kivy-...@googlegroups.com
It must be converting it to dex.So use less weightage modules or turn off dex optimisation

Robert

unread,
Oct 10, 2023, 12:41:32 PM10/10/23
to Kivy users support
Its is a WSL2 thing, access times of NTFS from Linux are slow. 
WSL1 did not have the issue, but had other issues.

There are also problems with building some packages if a build is on NTFS.

Juan Sanchez

unread,
Oct 10, 2023, 1:42:13 PM10/10/23
to kivy-...@googlegroups.com
Hi,

WSL 2 can have have trouble keeping time on a laptop that has gone to sleep.  Resetting the time after wake up may fix some time dependent issues, especially when it comes to triggering rebuilds.

https://stackoverflow.com/questions/65086856/wsl2-clock-is-out-of-sync-with-windows

My laptop takes 7 times longer on the windows partition:

$ dd if=/dev/zero of=/mnt/c/Users/me/test.txt bs=10M count=1000

1000+0 records in
1000+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 42.2029 s, 248 MB/s

$ time dd if=/dev/zero of=/home/me/test.txt bs=10M count=1000 conv=fsync

1000+0 records in
1000+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 5.76907 s, 1.8 GB/s

real    0m6.335s
user    0m0.010s
sys     0m6.213s

Regards,

Juan


Reply all
Reply to author
Forward
0 new messages