finish buildozer android target (only debug build are supported right now.)
This commit is contained in:
parent
3dc42cb627
commit
2e68748411
3 changed files with 88 additions and 16 deletions
21
README.rst
21
README.rst
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Add table
Reference in a new issue