Skip to content

Commit 836327c

Browse files
author
bob
committed
added .aar bundle (binary distribution of an Android Library Project) support in recepies
1 parent d597dd4 commit 836327c

File tree

4 files changed

+101
-1
lines changed

4 files changed

+101
-1
lines changed

pythonforandroid/bootstraps/pygame/__init__.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
from pythonforandroid.toolchain import Bootstrap, shprint, current_directory, info, warning, ArchAndroid, logger, info_main, which
2-
from os.path import join, exists
2+
from os.path import join, exists, basename, splitext
33
from os import walk
44
import glob
55
import sh
6+
from tempfile import mkdtemp
7+
from shutil import rmtree
68

79

810
class PygameBootstrap(Bootstrap):
@@ -44,6 +46,35 @@ def run_distribute(self):
4446
if not exists('python-install'):
4547
shprint(sh.cp, '-a', self.ctx.get_python_install_dir(), './python-install')
4648

49+
info('Unpacking aars')
50+
for aar in glob.glob(join(self.ctx.aars_dir, '*.aar')):
51+
temp_dir = mkdtemp()
52+
name = splitext(basename(aar))[0]
53+
jar_name = name + '.jar'
54+
info("unpack {} jar".format(name))
55+
info(" from {}".format(aar))
56+
info(" to {}".format(temp_dir))
57+
shprint(sh.unzip, '-o', aar, '-d', temp_dir)
58+
59+
jar_src = join(temp_dir, 'classes.jar')
60+
jar_tgt = join('libs', jar_name)
61+
info("cp {} jar".format(name))
62+
info(" from {}".format(jar_src))
63+
info(" to {}".format(jar_tgt))
64+
shprint(sh.cp, '-a',jar_src, jar_tgt)
65+
66+
so_src_dir = join(temp_dir, 'jni', 'armeabi')
67+
so_tgt_dir = join('libs', 'armeabi')
68+
info("cp {} .so".format(name))
69+
info(" from {}".format(so_src_dir))
70+
info(" to {}".format(so_tgt_dir))
71+
shprint(sh.mkdir, '-p', so_tgt_dir)
72+
so_files = glob.glob(join(so_src_dir, '*.so'))
73+
for f in so_files:
74+
shprint(sh.cp, '-a', f, so_tgt_dir)
75+
76+
rmtree(temp_dir)
77+
4778
info('Copying libs')
4879
# AND: Hardcoding armeabi - naughty!
4980
shprint(sh.mkdir, '-p', join('libs', 'armeabi'))

pythonforandroid/bootstraps/sdl2/__init__.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from os import walk
44
import glob
55
import sh
6+
from tempfile import mkdtemp
7+
from shutil import rmtree
68

79
class SDL2Bootstrap(Bootstrap):
810
name = 'sdl2'
@@ -35,6 +37,35 @@ def run_distribute(self):
3537
if not exists('python-install'):
3638
shprint(sh.cp, '-a', self.ctx.get_python_install_dir(), './python-install')
3739

40+
info('Unpacking aars')
41+
for aar in glob.glob(join(self.ctx.aars_dir, '*.aar')):
42+
temp_dir = mkdtemp()
43+
name = splitext(basename(aar))[0]
44+
jar_name = name + '.jar'
45+
info("unpack {} jar".format(name))
46+
info(" from {}".format(aar))
47+
info(" to {}".format(temp_dir))
48+
shprint(sh.unzip, '-o', aar, '-d', temp_dir)
49+
50+
jar_src = join(temp_dir, 'classes.jar')
51+
jar_tgt = join('libs', jar_name)
52+
info("cp {} jar".format(name))
53+
info(" from {}".format(jar_src))
54+
info(" to {}".format(jar_tgt))
55+
shprint(sh.cp, '-a',jar_src, jar_tgt)
56+
57+
so_src_dir = join(temp_dir, 'jni', 'armeabi')
58+
so_tgt_dir = join('libs', 'armeabi')
59+
info("cp {} .so".format(name))
60+
info(" from {}".format(so_src_dir))
61+
info(" to {}".format(so_tgt_dir))
62+
shprint(sh.mkdir, '-p', so_tgt_dir)
63+
so_files = glob.glob(join(so_src_dir, '*.so'))
64+
for f in so_files:
65+
shprint(sh.cp, '-a', f, so_tgt_dir)
66+
67+
rmtree(temp_dir)
68+
3869
info('Copying libs')
3970
# AND: Hardcoding armeabi - naughty!
4071
shprint(sh.mkdir, '-p', join('libs', 'armeabi'))

pythonforandroid/bootstraps/sdl2python3/__init__.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from os import walk
44
import glob
55
import sh
6+
from tempfile import mkdtemp
7+
from shutil import rmtree
68

79
class SDL2Bootstrap(Bootstrap):
810
name = 'sdl2python3'
@@ -37,6 +39,35 @@ def run_distribute(self):
3739
if not exists('python-install'):
3840
shprint(sh.cp, '-a', join(self.ctx.build_dir, 'python-install'), '.')
3941

42+
info('Unpacking aars')
43+
for aar in glob.glob(join(self.ctx.aars_dir, '*.aar')):
44+
temp_dir = mkdtemp()
45+
name = splitext(basename(aar))[0]
46+
jar_name = name + '.jar'
47+
info("unpack {} jar".format(name))
48+
info(" from {}".format(aar))
49+
info(" to {}".format(temp_dir))
50+
shprint(sh.unzip, '-o', aar, '-d', temp_dir)
51+
52+
jar_src = join(temp_dir, 'classes.jar')
53+
jar_tgt = join('libs', jar_name)
54+
info("cp {} jar".format(name))
55+
info(" from {}".format(jar_src))
56+
info(" to {}".format(jar_tgt))
57+
shprint(sh.cp, '-a',jar_src, jar_tgt)
58+
59+
so_src_dir = join(temp_dir, 'jni', 'armeabi')
60+
so_tgt_dir = join('libs', 'armeabi')
61+
info("cp {} .so".format(name))
62+
info(" from {}".format(so_src_dir))
63+
info(" to {}".format(so_tgt_dir))
64+
shprint(sh.mkdir, '-p', so_tgt_dir)
65+
so_files = glob.glob(join(so_src_dir, '*.so'))
66+
for f in so_files:
67+
shprint(sh.cp, '-a', f, so_tgt_dir)
68+
69+
rmtree(temp_dir)
70+
4071
info('Copying libs')
4172
# AND: Hardcoding armeabi - naughty!
4273
shprint(sh.mkdir, '-p', join('libs', 'armeabi'))

pythonforandroid/toolchain.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,7 @@ class Context(object):
531531
dist_dir = None # the Android project folder where everything ends up
532532
libs_dir = None # where Android libs are cached after build but
533533
# before being placed in dists
534+
aars_dir = None
534535
javaclass_dir = None
535536
ccache = None # whether to use ccache
536537
cython = None # the cython interpreter name
@@ -566,6 +567,12 @@ def javaclass_dir(self):
566567
ensure_dir(dir)
567568
return dir
568569

570+
@property
571+
def aars_dir(self):
572+
dir = join(self.build_dir, 'aars', self.bootstrap.distribution.name)
573+
ensure_dir(dir)
574+
return dir
575+
569576
@property
570577
def python_installs_dir(self):
571578
dir = join(self.build_dir, 'python-installs')

0 commit comments

Comments
 (0)