diff --git a/.buildozer b/.buildozer
new file mode 120000
index 0000000000000000000000000000000000000000..50ad1b4c8846dd0c4ab7ec34444fd35bfbab2448
--- /dev/null
+++ b/.buildozer
@@ -0,0 +1 @@
+/home/cse/.buildozer_share
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 992a27a3655d7bf345eb414cab412c0e3183ffb8..cd4671cc426262b4805a15c8dbc6ca97b9217b44 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,5 +2,4 @@
*.pyo
.idea
-.buildozer
bin
diff --git a/buildozer.spec b/buildozer.spec
index 4b2cfe28e597f244aaa1905e6675e397b6bc072f..df1b89fec3599561af0a32c0b340431bff4720fb 100644
--- a/buildozer.spec
+++ b/buildozer.spec
@@ -36,7 +36,7 @@ version = 1.0
# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
-requirements = kivy
+requirements = python3,kivy
# (str) Custom source folders for requirements
# Sets custom source for any requirements with recipes
@@ -88,16 +88,16 @@ fullscreen = 0
#android.permissions = INTERNET
# (int) Android API to use
-#android.api = 19
+android.api = 21
# (int) Minimum API required
-#android.minapi = 9
+android.minapi = 21
# (int) Android SDK version to use
#android.sdk = 20
# (str) Android NDK version to use
-#android.ndk = 9c
+android.ndk = 17c
# (bool) Use --private data storage (True) or --dir public storage (False)
#android.private_storage = True
@@ -146,8 +146,11 @@ fullscreen = 0
# bootstrap)
#android.gradle_dependencies =
+# (list) Java classes to add as activities to the manifest.
+#android.add_activites = com.example.ExampleActivity
+
# (str) python-for-android branch to use, defaults to stable
-#p4a.branch = stable
+p4a.branch = master
# (str) OUYA Console category. Should be one of GAME or APP
# If you leave this blank, OUYA support will not be enabled
@@ -159,6 +162,9 @@ fullscreen = 0
# (str) XML file to include as an intent filters in <activity> tag
#android.manifest.intent_filters =
+# (str) launchMode to set for the main activity
+#android.manifest.launch_mode = standard
+
# (list) Android additional libraries to copy into libs/armeabi
#android.add_libs_armeabi = libs/android/*.so
#android.add_libs_armeabi_v7a = libs/android-v7/*.so
@@ -201,6 +207,9 @@ android.arch = armeabi-v7a
# (str) Bootstrap to use for android builds
# p4a.bootstrap = sdl2
+# (int) port number to specify an explicit --port= p4a argument (eg for bootstrap flask)
+#p4a.port =
+
#
# iOS specific
@@ -220,7 +229,7 @@ android.arch = armeabi-v7a
[buildozer]
# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
-log_level = 2
+log_level = 1
# (int) Display warning if buildozer is run as root (0 = False, 1 = True)
warn_on_root = 1
diff --git a/demo.kv b/demo.kv
index d6b6a41c68dd1b2b5c1b666546bf05b0b8816764..5c6e9c75f867bbccd69be0534beda0bcd75d839c 100644
--- a/demo.kv
+++ b/demo.kv
@@ -3,7 +3,7 @@ BoxLayout:
BoxLayout:
id: fields
orientation: 'vertical'
- size_hint: (1, 6)
+ size_hint: (1.0, 6.0)
BoxLayout:
orientation: 'horizontal'
Button:
@@ -17,9 +17,9 @@ BoxLayout:
on_press: app.print_total()
<Field>:
- orientation: 'horizontal' # Field is a kind of BoxLayout
+ orientation: 'horizontal' # Field is a kind of BoxLayout.
Label:
- text: root.label_text # Refers to a property declared in the Field class
+ text: root.label_text # In a subwidget's Kv, `root.…` refers to a property of the Field widget.
TextInput:
id: input
multiline: False
diff --git a/main.py b/main.py
index 5c275528448e3d2982f6b0326c1f12a15d69b57f..558d3d5938409f64bd4de0b80bb508551897b6c5 100644
--- a/main.py
+++ b/main.py
@@ -10,23 +10,22 @@ class Field(BoxLayout):
class DemoApp(App):
def add_field(self):
container = self.root.ids.fields
- new_label_text = 'Field #{index}: '.format(index=len(container.children))
- container.add_widget(Field(label_text=new_label_text))
+ container.add_widget(Field(label_text=f'Field #{len(container.children)}: '))
def remove_field(self):
container = self.root.ids.fields
if len(container.children) > 0:
- container.remove_widget(container.children[0]) # children are indexed in reverse display order
+ container.remove_widget(container.children[0]) # Children are indexed in reverse display order.
def print_total(self):
container = self.root.ids.fields
total = 0
for field in container.children:
try:
- total += float(field.ids.input.text) # refer to a subwidget by id
+ total += float(field.ids.input.text) # `widget.ids.…` can be used to refer to a subwidget by ID.
except ValueError:
- pass # ignore non-numeric values
- print('Total of fields\' numeric values: {total}'.format(total=total))
+ pass # Ignore non-numeric values.
+ print(f'Total of fields\' numeric values: {total}')
if __name__ == '__main__':