Im working on my budged app. it adds a row to my yearly budged plan I have no problems on Windows and Linux Mint, only after converting to .apk for Android it no longer recognizes a class in the dropdown menu. here is the .kv file: Screen: MDBoxLayout: adaptive_height: True padding: 40 spacing: 20 orientation: "vertical" MDLabel: text: "budged_app" halign: "center" MDLabel: id: today_label text: "Date: " MDLabel: text: "Description: " MDTextField: id: description_input text: "" MDLabel: text: "Category: " MDButton: id: category_selector # pos_hint: {"top": .98} # x: "12dp" pos_hint: {"center_x": .5, "center_y": .1} icon: "menu" on_release: app.open_menu() MDButtonText: id: category text: "Sonstiges" MDLabel: text: "Expense: " MDTextField: id: expense_input text: "" MDButton: id: upload_input on_press: app.upload() style: "elevated" pos_hint: {"center_x": .5, "center_y": .1} MDButtonIcon: icon: "plus" MDButtonText: text: "Upload" and here is the main.py: import gspread from google.oauth2.service_account import Credentials from datetime import date from kivy.lang import Builder from kivymd.app import MDApp from kivymd.uix.menu import MDDropdownMenu categories = {"c1": "Lebensbedarf", "c2": "Anschaffungen", "c3": "Freizeit", "c4": "Auto", "c5": "Spende", "c6": "Geschenke", "c7": "Garten", "c8": "Sonstiges"} class BudgedApp(MDApp): def on_start(self): self.root.ids.today_label.text = "Date: " + str(date.today().strftime('%y/%m/%d')) self.menu_items = [ { "text": f"{code}", "on_release": lambda x=f"{code}": self.set_category(x) } for code in categories.values() ] def open_menu(self): self.menu = MDDropdownMenu( caller=self.root.ids.category_selector, items=self.menu_items, position="center") self.menu.open() def set_category(self, category): self.root.ids.category.text = category self.menu.dismiss() def clear(self): self.root.ids.description_input.text = "" self.root.ids.expense_input.text = "" self.root.ids.category.text = "Sonstiges" def upload(self): try: float(self.root.ids.expense_input.text) except ValueError: self.root.ids.expense_input.text = "incorrect entry!" return def next_available_row(work_sheet: gspread.Worksheet): str_list = list(filter(None, work_sheet.col_values(1))) return str(len(str_list) + 1) scopes = [ "https://www.googleapis.com/auth/spreadsheets" ] creds = Credentials.from_service_account_file(filename="assets/credentials.json", scopes=scopes) client = gspread.authorize(creds) sheet = client.open_by_key("#############################################") variable_expenses = sheet.get_worksheet(3) # value_list = sheet.sheet1.row_values(50) next_row = next_available_row(variable_expenses) today = date.today().strftime('%y/%m/%d') variable_expenses.update_acell("A{}".format(next_row), str(today)) variable_expenses.update_acell("B{}".format(next_row), self.root.ids.description_input.text) variable_expenses.update_acell("C{}".format(next_row), self.root.ids.category.text) variable_expenses.update_acell("E{}".format(next_row), value=float(self.root.ids.expense_input.text)) self.clear() def build(self): self.theme_cls.theme_style = "Dark" self.theme_cls.primary_palette = "Gray" return Builder.load_file("budged_app_theme.kv") if __name__ == "__main__": BudgedApp().run() here is an excerpt from the buildozer.spec (probably more in there than I need...): requirements = python3,kivy,kivymd,gspread,oauth2client,httplib2,pyopenssl,google-auth-oauthlib,pyasn1,pyasn1-modules,rsa,requests,google-auth-httplib2,openssl,google-api-python-client,google-auth,credentials,oauth2,google,cachetools,urllib3,chardet,idna,requests_oauthlib,oauthlib,pyparsing Here's a snippet from the logcat: It could be due to the order, meaning that something is called before it has been defined. But unfortunately I can't figure it out. Continue reading...