diff --git a/pythonforandroid/recipes/android/__init__.py b/pythonforandroid/recipes/android/__init__.py index 5174a69bfa..c6c15ec04a 100644 --- a/pythonforandroid/recipes/android/__init__.py +++ b/pythonforandroid/recipes/android/__init__.py @@ -1,11 +1,11 @@ -from pythonforandroid.recipe import CythonRecipe, IncludedFilesBehaviour +from pythonforandroid.recipe import PyProjectRecipe, IncludedFilesBehaviour from pythonforandroid.util import current_directory from pythonforandroid import logger from os.path import join -class AndroidRecipe(IncludedFilesBehaviour, CythonRecipe): +class AndroidRecipe(IncludedFilesBehaviour, PyProjectRecipe): # name = 'android' version = None url = None @@ -13,11 +13,12 @@ class AndroidRecipe(IncludedFilesBehaviour, CythonRecipe): src_filename = 'src' depends = [('sdl3', 'sdl2', 'genericndkbuild'), 'pyjnius'] + hostpython_prerequisites = ["Cython>=0.29,<3.1"] config_env = {} - def get_recipe_env(self, arch): - env = super().get_recipe_env(arch) + def get_recipe_env(self, arch, **kwargs): + env = super().get_recipe_env(arch, **kwargs) env.update(self.config_env) return env @@ -49,6 +50,10 @@ def prebuild_arch(self, arch): 'IS_SDL2': int(bootstrap_name == "sdl2"), 'IS_SDL3': int(bootstrap_name == "sdl3"), 'PY2': 0, + 'ANDROID_LIBS_DIR': "{}:{}".format( + self.ctx.get_libs_dir(arch.arch), + join(self.ctx.bootstrap.build_dir, 'obj', 'local', arch.arch) + ), 'JAVA_NAMESPACE': java_ns, 'JNI_NAMESPACE': jni_ns, 'ACTIVITY_CLASS_NAME': self.ctx.activity_class_name, diff --git a/pythonforandroid/recipes/android/src/setup.py b/pythonforandroid/recipes/android/src/setup.py index 0f5ceb1fd3..8bf4512e05 100755 --- a/pythonforandroid/recipes/android/src/setup.py +++ b/pythonforandroid/recipes/android/src/setup.py @@ -1,25 +1,35 @@ from distutils.core import setup, Extension +from Cython.Build import cythonize import os -library_dirs = ['libs/' + os.environ['ARCH']] +library_dirs = os.environ['ANDROID_LIBS_DIR'].split(":") lib_dict = { 'sdl2': ['SDL2', 'SDL2_image', 'SDL2_mixer', 'SDL2_ttf'], 'sdl3': ['SDL3', 'SDL3_image', 'SDL3_mixer', 'SDL3_ttf'], } sdl_libs = lib_dict.get(os.environ['BOOTSTRAP'], ['main']) -modules = [Extension('android._android', - ['android/_android.c', 'android/_android_jni.c'], - libraries=sdl_libs + ['log'], - library_dirs=library_dirs), - Extension('android._android_billing', - ['android/_android_billing.c', 'android/_android_billing_jni.c'], - libraries=['log'], - library_dirs=library_dirs)] +modules = [ + Extension('android._android', + ['android/_android.pyx', 'android/_android_jni.c'], + libraries=sdl_libs + ['log'], + library_dirs=library_dirs), + Extension('android._android_billing', + ['android/_android_billing.pyx', 'android/_android_billing_jni.c'], + libraries=['log'], + library_dirs=library_dirs), + Extension('android._android_sound', + ['android/_android_sound.pyx', 'android/_android_sound_jni.c'], + libraries=['log'], + library_dirs=library_dirs, + extra_compile_args=['-include', 'stdlib.h']) +] + +cythonized_modules = cythonize(modules, compiler_directives={'language_level': "3"}) setup(name='android', version='1.0', packages=['android'], package_dir={'android': 'android'}, - ext_modules=modules + ext_modules=cythonized_modules )