Skip to content

r-map/buildozer

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Buildozer

Buildozer is a tool for creating application packages easily.

The goal is to have one "buildozer.spec" file in your app directory, describing your application requirements and settings such as title, icon, included modules etc. Buildozer will use that spec to create a package for Android, iOS, Windows, OSX and/or Linux.

Buildozer currently supports packaging for Android via the python-for-android project, and for iOS via the kivy-ios project. Support for other operating systems is intended in the future.

Note that this tool has nothing to do with the eponymous online build service buildozer.io.

Installing Buildozer with python2 support:

  1. Install buildozer:

    # via pip (latest stable, recommended)
    sudo pip install buildozer
    
    # latest dev version
    sudo pip install https://github.com/kivy/buildozer/archive/master.zip
    
    # git clone, for working on buildozer
    git clone https://github.com/kivy/buildozer
    cd buildozer
    python setup.py build
    sudo pip install -e .
    
  2. Go into your application directory and run:

    buildozer init
    # edit the buildozer.spec, then
    buildozer android_new debug deploy run
    

Installing Buildozer with python3 support:

The pip package does not yet support python3.

  1. Install buildozer from source:

    git clone https://github.com/kivy/buildozer
    cd buildozer
    python setup.py build
    sudo pip install -e .
    
  2. Download and extract the Crystax NDK somewhere (~/.buildozer/crystax-ndk is one option): https://www.crystax.net/en/download

  3. Go into your application directory and execute:

    buildozer init
    
  4. Make sure the following lines are in your buildozer.spec file.:

    # Require python3crystax:
    requirements = python3crystax,kivy
    
    # Point to the directory where you extracted the crystax-ndk:
    android.ndk_path = <Your install path here.  Use ~ for home DIR>
    
  5. Finally, build, deploy and run the app on your phone:

    buildozer android_new debug deploy run
    
  6. Please note the "android_new" buildozer target, and use that for any and all buildozer commands you run (even if the docs just say "android"). Python3 only works with the android_new toolchain.

Examples of Buildozer commands:

# buildozer target command
buildozer android_new clean
buildozer android_new update
buildozer android_new deploy
buildozer android_new debug
buildozer android_new release

# or all in one (compile in debug, deploy on device)
buildozer android_new debug deploy

# set the default command if nothing set
buildozer setdefault android_new debug deploy run

Usage

Usage:
    buildozer [--profile <name>] [--verbose] [target] <command>...
    buildozer --version

Available targets:
  android            Android target, based on python-for-android project (old toolchain)
  ios                iOS target, based on kivy-ios project
  android_new        Android target, based on python-for-android project (new toolchain)

Global commands (without target):
  distclean          Clean the whole Buildozer environment.
  help               Show the Buildozer help.
  init               Create a initial buildozer.spec in the current directory
  serve              Serve the bin directory via SimpleHTTPServer
  setdefault         Set the default command to run when no arguments are given
  version            Show the Buildozer version

Target commands:
  clean      Clean the target environment
  update     Update the target dependencies
  debug      Build the application in debug mode
  release    Build the application in release mode
  deploy     Deploy the application on the device
  run        Run the application on the device
  serve      Serve the bin directory via SimpleHTTPServer

Target "android" commands:
  adb                Run adb from the Android SDK. Args must come after --, or
                     use --alias to make an alias
  logcat             Show the log from the device

Target "ios" commands:
  list_identities    List the available identities to use for signing.
  xcode              Open the xcode project.

Target "android_new" commands:
  adb                Run adb from the Android SDK. Args must come after --, or
                     use --alias to make an alias
  logcat             Show the log from the device
  p4a                Run p4a commands. Args must come after --, or use --alias
                     to make an alias

buildozer.spec

See buildozer/default.spec for an up-to-date spec file.

Default config

You can override the value of any buildozer.spec config token by setting an appropriate environment variable. These are all of the form $SECTION_TOKEN, where SECTION is the config file section and TOKEN is the config token to override. Dots are replaced by underscores.

For example, here are some config tokens from the [app] section of the config, along with the environment variables that would override them.

  • title -> $APP_TITLE
  • package.name -> $APP_PACKAGE_NAME
  • android.p4a_dir -> $APP_ANDROID_P4A_DIR

Buildozer Virtual Machine

The current virtual machine (available via https://kivy.org/downloads/) allow you to have a ready to use vm for building android application. But the current one have many flaw. We're in the process to deliver a new VM that fixes most of them.

Using shared folders

The Virtualbox Guest tools are outdated, install the latest one:

  • in the Virtualbox: Devices -> Install Guest Additions CD images
  • in the guest/linux: Go to the cdrom and run the installer

The kivy user is not in the vboxsf groups, so in a terminal:

  • sudo adduser kivy vboxsf
  • reboot the vm

VirtualBox filesystem doesn't support symlink anymore (don't try the setextradata solution, it doesn't work.). So you must do the build outside the shared folder. One solution:

  • sudo mkdir /build
  • sudo chown kivy /build
  • In your buildozer.spec, section [buildozer], set build_dir = /build/buildozer-myapp

No space left

If you build on the current VM, you'll hit the no space left on device:

  • Stop your VM
  • Adjust the disk size to 20GB: VBoxManage modifyhd ~/Downloads/Buildozer/Buildozer.vdi --resize 20000
  • Download the http://www.slitaz.org/en/get/#stable
  • In the virtualbox, Devices -> Optical Drive -> Select the slitaz iso
  • Reboot the VM
  • In slitaz, open a terminal, and unmount the swap: swapoff -a
  • Open gparted - delete sda2 - extend sda1 to 18000 - add a primary partition, set the format to linux-swap - you should have a sda2 partition - save
  • Unmount the slitaz iso Devices -> Optical Drive -> Eject
  • Reset/Restart the VM
  • Check your disk is 20GB: df -h

Using your devices via the VM

There is a little icon on the bottom left that represent an USB plug. Select it, and select your android device on it. Then you can check:

  • buildozer android_new adb -- devices

If it doesn't, use Google. They are so many differents way / issues depending your phone that Google will be your only source of information, not us :)

Support

If you need assistance, you can ask for help on our mailing list:

We also have an IRC channel:

  • Server : irc.freenode.net
  • Port : 6667, 6697 (SSL only)
  • Channel : #kivy

Contributing

We love pull requests and discussing novel ideas. Check out our contribution guide and feel free to improve buildozer.

The following mailing list and IRC channel are used exclusively for discussions about developing the Kivy framework and its sister projects:

IRC channel:

  • Server : irc.freenode.net
  • Port : 6667, 6697 (SSL only)
  • Channel : #kivy-dev

License

Buildozer is released under the terms of the MIT License. Please refer to the LICENSE file.

About

Generic Python packager for Android and iOS

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 94.4%
  • Ruby 4.8%
  • Shell 0.8%