finish buildozer android target (only debug build are supported right now.)

This commit is contained in:
Mathieu Virbel 2012-12-19 13:25:37 +01:00
parent 3dc42cb627
commit 2e68748411
3 changed files with 88 additions and 16 deletions

View file

@ -28,6 +28,12 @@ buildozer.spec
# Title of your application
title = My Application
# Package name
package.name = myapp
# Package domain (needed for android/ios packaging)
package.domain = org.test
# Source code where the main.py live
source.dir = .
@ -37,13 +43,26 @@ buildozer.spec
# Source files to exclude (let empty to not excluding anything)
#source.exclude_exts = spec
# Application versionning
# Application versionning (method 1)
version.regex = __version__ = '(.*)'
version.filename = %(source.dir)s/main.py
# Application versionning (method 2)
# version = 1.2.0
# Application requirements
requirements = twisted,kivy
#
# Android specific
#
# Permissions
android.permissions = INTERNET
# Minimum SDK allowed for installation
android.minsdk = 8
# Android SDK to use
android.sdk = 16

View file

@ -22,10 +22,6 @@ from os import environ, mkdir, unlink, rename, walk, sep
from copy import copy
from shutil import copyfile
class ConfigDict(dict):
def get(self, key, value, default):
print 'hello'
class Buildozer(object):
@ -35,7 +31,7 @@ class Buildozer(object):
self.targetname = target
self.specfilename = filename
self.state = None
self.config = SafeConfigParser({}, ConfigDict, allow_no_value=True)
self.config = SafeConfigParser()
self.config.getlist = self._get_config_list
self.config.getdefault = self._get_config_default
self.config.read(filename)
@ -123,6 +119,7 @@ class Buildozer(object):
self.mkdir(join(specdir, '.buildozer', self.targetname))
self.mkdir(join(specdir, '.buildozer', self.targetname, 'platform'))
self.mkdir(join(specdir, '.buildozer', self.targetname, 'app'))
self.mkdir(join(specdir, 'bin'))
self.state = shelve.open(join(self.platform_dir, 'state.db'))
def mkdir(self, dn):
@ -201,15 +198,17 @@ class Buildozer(object):
if has_filename and not has_regex:
raise Exception('version.regex is missing')
fn = c.get('app', 'filename')
with fn as fd:
fn = c.get('app', 'version.filename')
with open(fn) as fd:
data = fd.read()
regex = c.get('app', 'version.regex')
match = search(regex, data)
if not match:
raise Exception(
'Unable to found capture version in %r' % fn)
return match[0]
version = match.groups()[0]
self.log('Captured version: {0}'.format(version))
return version
raise Exception('Missing version or version.regex + version.filename')
@ -252,13 +251,20 @@ class Buildozer(object):
@property
def platform_dir(self):
return join(dirname(self.specfilename), '.buildozer',
self.targetname, 'platform')
return realpath(
join(dirname(self.specfilename), '.buildozer',
self.targetname, 'platform'))
@property
def app_dir(self):
return join(dirname(self.specfilename), '.buildozer',
self.targetname, 'app')
return realpath(join(
dirname(self.specfilename), '.buildozer',
self.targetname, 'app'))
@property
def bin_dir(self):
return realpath(join(
dirname(self.specfilename), 'bin'))
def run():
from optparse import OptionParser

View file

@ -12,9 +12,11 @@ APACHE_ANT_VERSION = '1.8.4'
import traceback
from sys import platform
from pipes import quote
from sys import platform, executable
from buildozer.target import Target
from os.path import join, realpath
from shutil import copyfile
class TargetAndroid(Target):
@ -235,8 +237,53 @@ class TargetAndroid(Target):
def build_package(self):
dist_dir = join(self.pa_dir, 'dist', 'default')
#cmd('./build.py --name {0} --private {1} '
# '--version {2}
config = self.buildozer.config
package_domain = config.getdefault('app', 'package.domain', '')
package = config.get('app', 'package.name')
if package_domain:
package = package_domain + '.' + package
version = self.buildozer.get_version()
build_cmd = (
'{python} build.py --name {name}'
' --version {version}'
' --package {package}'
' --private {appdir}'
' --sdk {androidsdk}'
' --minsdk {androidminsdk}').format(
python=executable,
name=quote(config.get('app', 'title')),
version=version,
package=package,
appdir=self.buildozer.app_dir,
androidminsdk=config.getdefault(
'app', 'android.minsdk', 8),
androidsdk=config.getdefault(
'app', 'android.sdk', ANDROID_API))
# add permissions
permissions = config.getlist('app',
'android.permissions', [])
for permission in permissions:
build_cmd += ' --permission {0}'.format(permission)
# build only in debug right now.
build_cmd += ' debug'
self.buildozer.cmd(build_cmd, cwd=dist_dir)
# XXX found how the apk name is really built from the title
bl = '\'" ,'
apktitle = ''.join([x for x in config.get('app', 'title') if x not in
bl])
apk = '{title}-{version}-debug.apk'.format(
title=apktitle, version=version)
# copy to our place
copyfile(join(dist_dir, 'bin', apk),
join(self.buildozer.bin_dir, apk))
self.buildozer.log('Android packaging done!')
self.buildozer.log('APK {0} available in the bin directory'.format(apk))
def get_target(buildozer):