From b26d26bb8aa7a6b5874f8be7cc121a4f3c94fd67 Mon Sep 17 00:00:00 2001 From: Andrzej Grymkowski Date: Thu, 11 Jun 2015 23:25:09 +0200 Subject: [PATCH 1/7] added proximity to facades --- README.rst | 1 + examples/proximity/buildozer.spec | 193 +++++++++++++++++++++++++++ examples/proximity/main.py | 76 +++++++++++ plyer/__init__.py | 7 +- plyer/facades/__init__.py | 5 +- plyer/facades/proximity.py | 42 ++++++ plyer/platforms/android/proximity.py | 64 +++++++++ 7 files changed, 384 insertions(+), 4 deletions(-) create mode 100644 examples/proximity/buildozer.spec create mode 100644 examples/proximity/main.py create mode 100644 plyer/facades/proximity.py create mode 100644 plyer/platforms/android/proximity.py diff --git a/README.rst b/README.rst index 3970e93d6..e728b003a 100755 --- a/README.rst +++ b/README.rst @@ -35,6 +35,7 @@ Gyroscope X X Battery X X X X X Native file chooser X X X Orientation X +Proximity X Audio recording X Flash X X Wifi X X X diff --git a/examples/proximity/buildozer.spec b/examples/proximity/buildozer.spec new file mode 100644 index 000000000..79df1dd7e --- /dev/null +++ b/examples/proximity/buildozer.spec @@ -0,0 +1,193 @@ +[app] + +# (str) Title of your application +title = Plyer Proximity Example + +# (str) Package name +package.name = proximity.example + +# (str) Package domain (needed for android/ios packaging) +package.domain = org.test + +# (str) Source code where the main.py live +source.dir = . + +# (list) Source files to include (let empty to include all the files) +source.include_exts = py,png,jpg,kv,atlas + +# (list) Source files to exclude (let empty to not exclude anything) +#source.exclude_exts = spec + +# (list) List of directory to exclude (let empty to not exclude anything) +#source.exclude_dirs = tests, bin + +# (list) List of exclusions using pattern matching +#source.exclude_patterns = license,images/*/*.jpg + +# (str) Application versioning (method 1) +#version.regex = __version__ = ['"](.*)['"] +#version.filename = %(source.dir)s/main.py + +# (str) Application versioning (method 2) +version = 0.1 + +# (list) Application requirements +# comma seperated e.g. requirements = sqlite3,kivy +requirements = kivy,plyer + +# (str) Custom source folders for requirements +# Sets custom source for any requirements with recipes +# requirements.source.kivy = ../../kivy + +# (list) Garden requirements +#garden_requirements = + +# (str) Presplash of the application +#presplash.filename = %(source.dir)s/data/presplash.png + +# (str) Icon of the application +#icon.filename = %(source.dir)s/data/icon.png + +# (str) Supported orientation (one of landscape, portrait or all) +orientation = portrait + +# (bool) Indicate if the application should be fullscreen or not +fullscreen = 0 + + +# +# Android specific +# + +# (list) Permissions +#android.permissions = RECORD_AUDIO,WAKE_LOCK + +# (int) Android API to use +#android.api = 14 + +# (int) Minimum API required (8 = Android 2.2 devices) +#android.minapi = 8 + +# (int) Android SDK version to use +#android.sdk = 21 + +# (str) Android NDK version to use +#android.ndk = 9c + +# (bool) Use --private data storage (True) or --dir public storage (False) +#android.private_storage = True + +# (str) Android NDK directory (if empty, it will be automatically downloaded.) +#android.ndk_path = + +# (str) Android SDK directory (if empty, it will be automatically downloaded.) +#android.sdk_path = + +# (str) python-for-android git clone directory (if empty, it will be automatically cloned from github) +#android.p4a_dir = + +# (list) python-for-android whitelist +#android.p4a_whitelist = + +# (str) Android entry point, default is ok for Kivy-based app +#android.entrypoint = org.renpy.android.PythonActivity + +# (list) List of Java .jar files to add to the libs so that pyjnius can access +# their classes. Don't add jars that you do not need, since extra jars can slow +# down the build process. Allows wildcards matching, for example: +# OUYA-ODK/libs/*.jar +#android.add_jars = foo.jar,bar.jar,path/to/more/*.jar + +# (list) List of Java files to add to the android project (can be java or a +# directory containing the files) +#android.add_src = + +# (str) python-for-android branch to use, if not master, useful to try +# not yet merged features. +#android.branch = master + +# (str) OUYA Console category. Should be one of GAME or APP +# If you leave this blank, OUYA support will not be enabled +#android.ouya.category = GAME + +# (str) Filename of OUYA Console icon. It must be a 732x412 png image. +#android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png + +# (str) XML file to include as an intent filters in tag +#android.manifest.intent_filters = + +# (list) Android additionnal libraries to copy into libs/armeabi +#android.add_libs_armeabi = libs/android/*.so +#android.add_libs_armeabi_v7a = libs/android-v7/*.so +#android.add_libs_x86 = libs/android-x86/*.so +#android.add_libs_mips = libs/android-mips/*.so + +# (bool) Indicate whether the screen should stay on +# Don't forget to add the WAKE_LOCK permission if you set this to True +#android.wakelock = False + +# (list) Android application meta-data to set (key=value format) +#android.meta_data = + +# (list) Android library project to add (will be added in the +# project.properties automatically.) +#android.library_references = + +# +# iOS specific +# + +# (str) Name of the certificate to use for signing the debug version +# Get a list of available identities: buildozer ios list_identities +#ios.codesign.debug = "iPhone Developer: ()" + +# (str) Name of the certificate to use for signing the release version +#ios.codesign.release = %(ios.codesign.debug)s + + +[buildozer] + +# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output)) +log_level = 2 + +# (int) Display warning if buildozer is run as root (0 = False, 1 = True) +warn_on_root = 1 + + +# ----------------------------------------------------------------------------- +# List as sections +# +# You can define all the "list" as [section:key]. +# Each line will be considered as a option to the list. +# Let's take [app] / source.exclude_patterns. +# Instead of doing: +# +#[app] +#source.exclude_patterns = license,data/audio/*.wav,data/images/original/* +# +# This can be translated into: +# +#[app:source.exclude_patterns] +#license +#data/audio/*.wav +#data/images/original/* +# + + +# ----------------------------------------------------------------------------- +# Profiles +# +# You can extend section / key with a profile +# For example, you want to deploy a demo version of your application without +# HD content. You could first change the title to add "(demo)" in the name +# and extend the excluded directories to remove the HD content. +# +#[app@demo] +#title = My Application (demo) +# +#[app:source.exclude_patterns@demo] +#images/hd/* +# +# Then, invoke the command line with the "demo" profile: +# +#buildozer --profile demo android debug diff --git a/examples/proximity/main.py b/examples/proximity/main.py new file mode 100644 index 000000000..21b914b6b --- /dev/null +++ b/examples/proximity/main.py @@ -0,0 +1,76 @@ +from kivy.app import App +from kivy.clock import Clock +from kivy.lang import Builder +from kivy.properties import BooleanProperty +from kivy.properties import ObjectProperty +from kivy.uix.boxlayout import BoxLayout + + +Builder.load_string(''' +#:import proximity plyer.proximity +: + proximity: proximity + orientation: 'vertical' + padding: '50dp' + spacing: '20dp' + + BoxLayout: + orientation: 'horizontal' + height: None + size_hint_y: 0.3 + Button: + id: button_enable + text: 'Enable' + disabled: False + on_release: + root.enable() + button_disable.disabled = not button_disable.disabled + button_enable.disabled = not button_enable.disabled + Button: + id: button_disable + text: 'Disable' + disabled: True + on_release: + root.disable() + button_disable.disabled = not button_disable.disabled + button_enable.disabled = not button_enable.disabled + + Label: + text: 'Does Proximity Sensor see something?' + Label: + text: 'Yes' if root.is_near else 'No' + + Widget: + Label: + text: 'Cover with hand your top part of phone to see result.' +''') + + +class ProximityInterface(BoxLayout): + '''Root Widget.''' + + proximity = ObjectProperty() + is_near = BooleanProperty() + + def enable(self): + self.proximity.enable() + Clock.schedule_interval(self.get_proxime, 1 / 20.) + + def disable(self): + self.proximity.disable() + Clock.unschedule(self.get_proxime) + + def get_proxime(self, dt): + self.is_near = self.proximity.proximity + + +class ProximityApp(App): + + def build(self): + return ProximityInterface() + + def on_pause(self): + return True + +if __name__ == "__main__": + ProximityApp().run() diff --git a/plyer/__init__.py b/plyer/__init__.py index 3dc9b77e0..e93637cf5 100644 --- a/plyer/__init__.py +++ b/plyer/__init__.py @@ -6,8 +6,8 @@ __all__ = ('accelerometer', 'audio', 'battery', 'call', 'camera', 'compass', 'email', 'filechooser', 'gps', 'gyroscope', 'irblaster', - 'orientation', 'notification', 'sms', 'tts', 'uniqueid', 'vibrator', - 'wifi') + 'orientation', 'notification', 'proximity', 'sms', 'tts', 'uniqueid', + 'vibrator', 'wifi') __version__ = '1.2.5dev' @@ -54,6 +54,9 @@ #: Notification proxy to :class:`plyer.facades.Notification` notification = Proxy('notification', facades.Notification) +#: Proximity proxy to :class:`plyer.facades.Proximity` +proximity = Proxy('proximity', facades.Proximity) + #: Sms proxy to :class:`plyer.facades.Sms` sms = Proxy('sms', facades.Sms) diff --git a/plyer/facades/__init__.py b/plyer/facades/__init__.py index a726c1687..99e57f64b 100644 --- a/plyer/facades/__init__.py +++ b/plyer/facades/__init__.py @@ -8,8 +8,8 @@ __all__ = ('Accelerometer', 'Audio', 'Battery', 'Call', 'Camera', 'Compass', 'Email', 'FileChooser', 'GPS', 'Gyroscope', 'IrBlaster', - 'Orientation', 'Notification', 'Sms', 'TTS', 'UniqueID', 'Vibrator', - 'Wifi', 'Flash') + 'Orientation', 'Notification', 'Proximity', 'Sms', 'TTS', 'UniqueID', + 'Vibrator', 'Wifi', 'Flash') from plyer.facades.accelerometer import Accelerometer from plyer.facades.audio import Audio @@ -22,6 +22,7 @@ from plyer.facades.gps import GPS from plyer.facades.gyroscope import Gyroscope from plyer.facades.irblaster import IrBlaster +from plyer.facades.proximity import Proximity from plyer.facades.orientation import Orientation from plyer.facades.notification import Notification from plyer.facades.sms import Sms diff --git a/plyer/facades/proximity.py b/plyer/facades/proximity.py new file mode 100644 index 000000000..cd02d89ba --- /dev/null +++ b/plyer/facades/proximity.py @@ -0,0 +1,42 @@ +class Proximity(object): + '''Proximity facade. + + The proximity sensor is commonly used to determine distance whether + phone is close to your head. Commonly is used when you have a call + and you stick your phone with your head. Then screen of phone turns off. + + Use method `enable` to turn on proximity sensor and method `disable` for + turn off. + + To check if some object (or your head) is near sensor check values from + property `proximity`. It returns `True` when object is close. + + .. versionadded:: 1.2.5 + ''' + + @property + def proximity(self): + '''Return True or False depending if there is an object or not. + + :return: True if there is an object. Otherwise False. + ''' + return self._get_proximity() + + def _enable(self, **kwargs): + raise NotImplementedError() + + def enable(self): + '''Enable the proximity sensor. + ''' + self._enable() + + def _disable(self, **kwargs): + raise NotImplementedError() + + def disable(self): + '''Disable the proximity sensor. + ''' + self._disable() + + def _get_proximity(self): + raise NotImplementedError() \ No newline at end of file diff --git a/plyer/platforms/android/proximity.py b/plyer/platforms/android/proximity.py new file mode 100644 index 000000000..0a339a2e1 --- /dev/null +++ b/plyer/platforms/android/proximity.py @@ -0,0 +1,64 @@ +from jnius import autoclass +from jnius import cast +from jnius import java_method +from jnius import PythonJavaClass + +from plyer.platforms.android import activity +from plyer.facades import Proximity + +ActivityInfo = autoclass('android.content.pm.ActivityInfo') +Context = autoclass('android.content.Context') +Sensor = autoclass('android.hardware.Sensor') +SensorManager = autoclass('android.hardware.SensorManager') + + +class ProximitySensorListener(PythonJavaClass): + __javainterfaces__ = ['android/hardware/SensorEventListener'] + + def __init__(self): + super(ProximitySensorListener, self).__init__() + service = activity.getSystemService(Context.SENSOR_SERVICE) + self.SensorManager = cast('android.hardware.SensorManager', service) + + self.sensor = self.SensorManager.getDefaultSensor( + Sensor.TYPE_PROXIMITY) + self.value = None + + def enable(self): + self.SensorManager.registerListener(self, self.sensor, + SensorManager.SENSOR_DELAY_NORMAL) + + def disable(self): + self.SensorManager.unregisterListener(self, self.sensor) + + @java_method('(Landroid/hardware/SensorEvent;)V') + def onSensorChanged(self, event): + self.value = event.values[0] + + @java_method('(Landroid/hardware/Sensor;I)V') + def onAccuracyChanged(self, sensor, accuracy): + pass + + +class AndroidProximity(Proximity): + + listener = None + + def _enable(self, **kwargs): + if not self.listener: + self.listener = ProximitySensorListener() + self.listener.enable() + + def _disable(self, **kwargs): + if self.listener: + self.listener.disable() + delattr(self, 'listener') + + def _get_proximity(self): + if self.listener and self.listener.value: + value = self.listener.value + return value < 30.0 + + +def instance(): + return AndroidProximity() From 8de740d126eb3fe92e173f9743039e188fed8fd2 Mon Sep 17 00:00:00 2001 From: Andrzej Grymkowski Date: Thu, 11 Jun 2015 23:40:05 +0200 Subject: [PATCH 2/7] buildozer spec changes --- examples/proximity/buildozer.spec | 87 +++++++++++++------------------ 1 file changed, 35 insertions(+), 52 deletions(-) diff --git a/examples/proximity/buildozer.spec b/examples/proximity/buildozer.spec index 79df1dd7e..9fac49ce2 100644 --- a/examples/proximity/buildozer.spec +++ b/examples/proximity/buildozer.spec @@ -4,7 +4,7 @@ title = Plyer Proximity Example # (str) Package name -package.name = proximity.example +package.name = plyer.proximity # (str) Package domain (needed for android/ios packaging) package.domain = org.test @@ -25,22 +25,14 @@ source.include_exts = py,png,jpg,kv,atlas #source.exclude_patterns = license,images/*/*.jpg # (str) Application versioning (method 1) -#version.regex = __version__ = ['"](.*)['"] -#version.filename = %(source.dir)s/main.py +# version.regex = __version__ = '(.*)' +# version.filename = %(source.dir)s/main.py # (str) Application versioning (method 2) version = 0.1 # (list) Application requirements -# comma seperated e.g. requirements = sqlite3,kivy -requirements = kivy,plyer - -# (str) Custom source folders for requirements -# Sets custom source for any requirements with recipes -# requirements.source.kivy = ../../kivy - -# (list) Garden requirements -#garden_requirements = +requirements = plyer,kivy # (str) Presplash of the application #presplash.filename = %(source.dir)s/data/presplash.png @@ -60,10 +52,10 @@ fullscreen = 0 # # (list) Permissions -#android.permissions = RECORD_AUDIO,WAKE_LOCK +#android.permissions = INTERNET # (int) Android API to use -#android.api = 14 +# android.api = 18 # (int) Minimum API required (8 = Android 2.2 devices) #android.minapi = 8 @@ -72,7 +64,7 @@ fullscreen = 0 #android.sdk = 21 # (str) Android NDK version to use -#android.ndk = 9c +#android.ndk = 9 # (bool) Use --private data storage (True) or --dir public storage (False) #android.private_storage = True @@ -81,14 +73,11 @@ fullscreen = 0 #android.ndk_path = # (str) Android SDK directory (if empty, it will be automatically downloaded.) -#android.sdk_path = +#android.sdk_path = # (str) python-for-android git clone directory (if empty, it will be automatically cloned from github) #android.p4a_dir = -# (list) python-for-android whitelist -#android.p4a_whitelist = - # (str) Android entry point, default is ok for Kivy-based app #android.entrypoint = org.renpy.android.PythonActivity @@ -114,13 +103,10 @@ fullscreen = 0 #android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png # (str) XML file to include as an intent filters in tag -#android.manifest.intent_filters = +#android.manifest.intent_filters = # (list) Android additionnal libraries to copy into libs/armeabi #android.add_libs_armeabi = libs/android/*.so -#android.add_libs_armeabi_v7a = libs/android-v7/*.so -#android.add_libs_x86 = libs/android-x86/*.so -#android.add_libs_mips = libs/android-mips/*.so # (bool) Indicate whether the screen should stay on # Don't forget to add the WAKE_LOCK permission if you set this to True @@ -150,44 +136,41 @@ fullscreen = 0 # (int) Log level (0 = error only, 1 = info, 2 = debug (with command output)) log_level = 2 -# (int) Display warning if buildozer is run as root (0 = False, 1 = True) -warn_on_root = 1 - -# ----------------------------------------------------------------------------- -# List as sections -# -# You can define all the "list" as [section:key]. -# Each line will be considered as a option to the list. -# Let's take [app] / source.exclude_patterns. -# Instead of doing: +# ----------------------------------------------------------------------------- +# List as sections +# +# You can define all the "list" as [section:key]. +# Each line will be considered as a option to the list. +# Let's take [app] / source.exclude_patterns. +# Instead of doing: # -#[app] -#source.exclude_patterns = license,data/audio/*.wav,data/images/original/* +# [app] +# source.exclude_patterns = license,data/audio/*.wav,data/images/original/* # -# This can be translated into: +# This can be translated into: # -#[app:source.exclude_patterns] -#license -#data/audio/*.wav -#data/images/original/* +# [app:source.exclude_patterns] +# license +# data/audio/*.wav +# data/images/original/* # -# ----------------------------------------------------------------------------- -# Profiles +# ----------------------------------------------------------------------------- +# Profiles # -# You can extend section / key with a profile -# For example, you want to deploy a demo version of your application without -# HD content. You could first change the title to add "(demo)" in the name -# and extend the excluded directories to remove the HD content. +# You can extend section / key with a profile +# For example, you want to deploy a demo version of your application without +# HD content. You could first change the title to add "(demo)" in the name +# and extend the excluded directories to remove the HD content. # -#[app@demo] -#title = My Application (demo) +# [app@demo] +# title = My Application (demo) # -#[app:source.exclude_patterns@demo] -#images/hd/* +# [app:source.exclude_patterns@demo] +# images/hd/* # -# Then, invoke the command line with the "demo" profile: +# Then, invoke the command line with the "demo" profile: # -#buildozer --profile demo android debug +# buildozer --profile demo android debug From 7b38d436ea2de5ea372852f4b230b687670769f4 Mon Sep 17 00:00:00 2001 From: Andrzej Grymkowski Date: Fri, 19 Jun 2015 23:33:37 +0200 Subject: [PATCH 3/7] fix for none errors --- examples/proximity/main.py | 9 +++++---- plyer/platforms/android/proximity.py | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/examples/proximity/main.py b/examples/proximity/main.py index 21b914b6b..5af3f02f9 100644 --- a/examples/proximity/main.py +++ b/examples/proximity/main.py @@ -16,7 +16,6 @@ BoxLayout: orientation: 'horizontal' - height: None size_hint_y: 0.3 Button: id: button_enable @@ -42,7 +41,9 @@ Widget: Label: - text: 'Cover with hand your top part of phone to see result.' + text: 'Cover with your hand' + Label: + text: 'a top part of phone to see result.' ''') @@ -50,7 +51,7 @@ class ProximityInterface(BoxLayout): '''Root Widget.''' proximity = ObjectProperty() - is_near = BooleanProperty() + is_near = BooleanProperty(False) def enable(self): self.proximity.enable() @@ -61,7 +62,7 @@ def disable(self): Clock.unschedule(self.get_proxime) def get_proxime(self, dt): - self.is_near = self.proximity.proximity + self.is_near = self.proximity.proximity or self.is_near class ProximityApp(App): diff --git a/plyer/platforms/android/proximity.py b/plyer/platforms/android/proximity.py index 0a339a2e1..ab8131620 100644 --- a/plyer/platforms/android/proximity.py +++ b/plyer/platforms/android/proximity.py @@ -57,7 +57,7 @@ def _disable(self, **kwargs): def _get_proximity(self): if self.listener and self.listener.value: value = self.listener.value - return value < 30.0 + return value < 3.0 def instance(): From a313fb7cd713bb1d58338aebfd3f25167a6967f1 Mon Sep 17 00:00:00 2001 From: Andrzej Grymkowski Date: Fri, 19 Jun 2015 23:39:27 +0200 Subject: [PATCH 4/7] fix for none errors --- plyer/platforms/android/proximity.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plyer/platforms/android/proximity.py b/plyer/platforms/android/proximity.py index ab8131620..fd01f931f 100644 --- a/plyer/platforms/android/proximity.py +++ b/plyer/platforms/android/proximity.py @@ -57,7 +57,9 @@ def _disable(self, **kwargs): def _get_proximity(self): if self.listener and self.listener.value: value = self.listener.value - return value < 3.0 + # value is None when proxime sensor is covered. In other case + # it returns some value. + return not value or value < 5.0 def instance(): From c07e3a1bbd44068cf0133304268eb1c10a1b403e Mon Sep 17 00:00:00 2001 From: malverick Date: Mon, 13 Feb 2017 23:09:06 +0530 Subject: [PATCH 5/7] Return and display correct value from proximity sensor --- examples/proximity/main.py | 4 ++-- plyer/platforms/android/proximity.py | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/examples/proximity/main.py b/examples/proximity/main.py index 5af3f02f9..1761a5437 100644 --- a/examples/proximity/main.py +++ b/examples/proximity/main.py @@ -35,7 +35,7 @@ button_enable.disabled = not button_enable.disabled Label: - text: 'Does Proximity Sensor see something?' + text: 'Does Proximity Sensor detect something?' Label: text: 'Yes' if root.is_near else 'No' @@ -62,7 +62,7 @@ def disable(self): Clock.unschedule(self.get_proxime) def get_proxime(self, dt): - self.is_near = self.proximity.proximity or self.is_near + self.is_near = self.proximity.proximity class ProximityApp(App): diff --git a/plyer/platforms/android/proximity.py b/plyer/platforms/android/proximity.py index fd01f931f..37c0ba7cd 100644 --- a/plyer/platforms/android/proximity.py +++ b/plyer/platforms/android/proximity.py @@ -55,11 +55,12 @@ def _disable(self, **kwargs): delattr(self, 'listener') def _get_proximity(self): - if self.listener and self.listener.value: + if self.listener: value = self.listener.value - # value is None when proxime sensor is covered. In other case - # it returns some value. - return not value or value < 5.0 + # value is 0.0 when proxime sensor is covered. In other case + # value is 5.0 because in smartphone, optical proximity sensors + # are used. + return value < 5.0 def instance(): From dd36b37dc572018716f0e591da2191a02c22d98a Mon Sep 17 00:00:00 2001 From: malverick Date: Tue, 14 Feb 2017 00:06:06 +0530 Subject: [PATCH 6/7] Pep8 fixes --- plyer/facades/proximity.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plyer/facades/proximity.py b/plyer/facades/proximity.py index cd02d89ba..eb0d32750 100644 --- a/plyer/facades/proximity.py +++ b/plyer/facades/proximity.py @@ -39,4 +39,4 @@ def disable(self): self._disable() def _get_proximity(self): - raise NotImplementedError() \ No newline at end of file + raise NotImplementedError() From d9a4a39303a4301d2fcf9f5804c8991d322c81fb Mon Sep 17 00:00:00 2001 From: malverick Date: Tue, 14 Feb 2017 00:17:29 +0530 Subject: [PATCH 7/7] Add new buildozer.spec --- examples/proximity/buildozer.spec | 137 +++++++++++++++++++++--------- 1 file changed, 97 insertions(+), 40 deletions(-) diff --git a/examples/proximity/buildozer.spec b/examples/proximity/buildozer.spec index 9fac49ce2..9d1cf20af 100644 --- a/examples/proximity/buildozer.spec +++ b/examples/proximity/buildozer.spec @@ -15,6 +15,9 @@ source.dir = . # (list) Source files to include (let empty to include all the files) source.include_exts = py,png,jpg,kv,atlas +# (list) List of inclusions using pattern matching +#source.include_patterns = assets/*,images/*.png + # (list) Source files to exclude (let empty to not exclude anything) #source.exclude_exts = spec @@ -25,14 +28,22 @@ source.include_exts = py,png,jpg,kv,atlas #source.exclude_patterns = license,images/*/*.jpg # (str) Application versioning (method 1) -# version.regex = __version__ = '(.*)' -# version.filename = %(source.dir)s/main.py +version = 0.1 # (str) Application versioning (method 2) -version = 0.1 +# version.regex = __version__ = ['"](.*)['"] +# version.filename = %(source.dir)s/main.py # (list) Application requirements -requirements = plyer,kivy +# comma seperated e.g. requirements = sqlite3,kivy +requirements = kivy, plyer + +# (str) Custom source folders for requirements +# Sets custom source for any requirements with recipes +#requirements.source.plyer = + +# (list) Garden requirements +#garden_requirements = # (str) Presplash of the application #presplash.filename = %(source.dir)s/data/presplash.png @@ -43,28 +54,37 @@ requirements = plyer,kivy # (str) Supported orientation (one of landscape, portrait or all) orientation = portrait -# (bool) Indicate if the application should be fullscreen or not -fullscreen = 0 +# (list) List of service to declare +#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY +# +# OSX Specific +# + +# +# author = © Copyright Info # # Android specific # +# (bool) Indicate if the application should be fullscreen or not +fullscreen = 0 + # (list) Permissions #android.permissions = INTERNET # (int) Android API to use -# android.api = 18 +#android.api = 19 -# (int) Minimum API required (8 = Android 2.2 devices) -#android.minapi = 8 +# (int) Minimum API required +#android.minapi = 9 # (int) Android SDK version to use -#android.sdk = 21 +#android.sdk = 20 # (str) Android NDK version to use -#android.ndk = 9 +#android.ndk = 9c # (bool) Use --private data storage (True) or --dir public storage (False) #android.private_storage = True @@ -73,10 +93,27 @@ fullscreen = 0 #android.ndk_path = # (str) Android SDK directory (if empty, it will be automatically downloaded.) -#android.sdk_path = +#android.sdk_path = + +# (str) ANT directory (if empty, it will be automatically downloaded.) +#android.ant_path = # (str) python-for-android git clone directory (if empty, it will be automatically cloned from github) -#android.p4a_dir = +#android.p4a_dir = + +# (str) The directory in which python-for-android should look for your own build recipes (if any) +#p4a.local_recipes = + +# (list) python-for-android whitelist +#android.p4a_whitelist = + +# (bool) If True, then skip trying to update the Android sdk +# This can be useful to avoid excess Internet downloads or save time +# when an update is due and you just want to test/build your package +# android.skip_update = False + +# (str) Bootstrap to use for android builds (android_new only) +# android.bootstrap = sdl2 # (str) Android entry point, default is ok for Kivy-based app #android.entrypoint = org.renpy.android.PythonActivity @@ -103,10 +140,13 @@ fullscreen = 0 #android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png # (str) XML file to include as an intent filters in tag -#android.manifest.intent_filters = +#android.manifest.intent_filters = # (list) Android additionnal libraries to copy into libs/armeabi #android.add_libs_armeabi = libs/android/*.so +#android.add_libs_armeabi_v7a = libs/android-v7/*.so +#android.add_libs_x86 = libs/android-x86/*.so +#android.add_libs_mips = libs/android-mips/*.so # (bool) Indicate whether the screen should stay on # Don't forget to add the WAKE_LOCK permission if you set this to True @@ -119,10 +159,19 @@ fullscreen = 0 # project.properties automatically.) #android.library_references = +# (str) Android logcat filters to use +#android.logcat_filters = *:S python:D + +# (bool) Copy library instead of making a libpymodules.so +#android.copy_libs = 1 + # # iOS specific # +# (str) Path to a custom kivy-ios folder +#ios.kivy_ios_dir = ../kivy-ios + # (str) Name of the certificate to use for signing the debug version # Get a list of available identities: buildozer ios list_identities #ios.codesign.debug = "iPhone Developer: ()" @@ -136,41 +185,49 @@ fullscreen = 0 # (int) Log level (0 = error only, 1 = info, 2 = debug (with command output)) log_level = 2 +# (int) Display warning if buildozer is run as root (0 = False, 1 = True) +warn_on_root = 1 -# ----------------------------------------------------------------------------- -# List as sections -# -# You can define all the "list" as [section:key]. -# Each line will be considered as a option to the list. -# Let's take [app] / source.exclude_patterns. -# Instead of doing: +# (str) Path to build artifact storage, absolute or relative to spec file +# build_dir = ./.buildozer + +# (str) Path to build output (i.e. .apk, .ipa) storage +# bin_dir = ./bin + +# ----------------------------------------------------------------------------- +# List as sections +# +# You can define all the "list" as [section:key]. +# Each line will be considered as a option to the list. +# Let's take [app] / source.exclude_patterns. +# Instead of doing: # -# [app] -# source.exclude_patterns = license,data/audio/*.wav,data/images/original/* +#[app] +#source.exclude_patterns = license,data/audio/*.wav,data/images/original/* # -# This can be translated into: +# This can be translated into: # -# [app:source.exclude_patterns] -# license -# data/audio/*.wav -# data/images/original/* +#[app:source.exclude_patterns] +#license +#data/audio/*.wav +#data/images/original/* # -# ----------------------------------------------------------------------------- -# Profiles +# ----------------------------------------------------------------------------- +# Profiles # -# You can extend section / key with a profile -# For example, you want to deploy a demo version of your application without -# HD content. You could first change the title to add "(demo)" in the name -# and extend the excluded directories to remove the HD content. +# You can extend section / key with a profile +# For example, you want to deploy a demo version of your application without +# HD content. You could first change the title to add "(demo)" in the name +# and extend the excluded directories to remove the HD content. # -# [app@demo] -# title = My Application (demo) +#[app@demo] +#title = My Application (demo) # -# [app:source.exclude_patterns@demo] -# images/hd/* +#[app:source.exclude_patterns@demo] +#images/hd/* # -# Then, invoke the command line with the "demo" profile: +# Then, invoke the command line with the "demo" profile: # -# buildozer --profile demo android debug +#buildozer --profile demo android debug