Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

android apk is crashing after displaying splash screen on phone #2030

Closed
iruriksl opened this issue Nov 27, 2019 · 18 comments
Closed

android apk is crashing after displaying splash screen on phone #2030

iruriksl opened this issue Nov 27, 2019 · 18 comments

Comments

@iruriksl
Copy link

Versions

  • Python: 3.7.5
  • OS: MacOS High Sierra (10.13.6)
  • Kivy: 1.11.1
  • Cython: 0.29.13

Description

I am building basic python android app using buildozer and p4a and able to successfully build the apk. The build apk has been installed successfully over the usb connected MI Redmi phone and it runs. After splash screen the app crashes and found no clu of cause of crash in logcat logs.

buildozer.spec

Command:

buildozer -v android debug deploy run logcat

Spec file:

[app]

# (str) Title of your application
title = My Application

# (str) Package name
package.name = myapp

# (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) 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

# (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 = 0.2

# (str) Application versioning (method 2)
# version.regex = __version__ = ['"](.*)['"]
# version.filename = %(source.dir)s/main.py

# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
#requirements = kivy,python3
requirements = hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy

# (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, sensorLandscape, portrait or all)
orientation = all

# (list) List of service to declare
#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY

#
# OSX Specific
#

#
# author = © Copyright Info

# change the major version of python used by the app
osx.python_version = 3

# Kivy version to use
osx.kivy_version = 1.11.1

#
# Android specific
#

# (bool) Indicate if the application should be fullscreen or not
fullscreen = 0

# (string) Presplash background color (for new android toolchain)
# Supported formats are: #RRGGBB #AARRGGBB or one of the following names:
# red, blue, green, black, white, gray, cyan, magenta, yellow, lightgray,
# darkgray, grey, lightgrey, darkgrey, aqua, fuchsia, lime, maroon, navy,
# olive, purple, silver, teal.
#android.presplash_color = #FFFFFF

# (list) Permissions
#android.permissions = INTERNET

# (int) Target Android API, should be as high as possible.
android.api = 29

# (int) Minimum API your APK will support.
#android.minapi = 21

# (int) Android SDK version to use
#android.sdk = 20

# (str) Android NDK version to use
android.ndk = 19b

# (int) Android NDK API to use. This is the minimum API your app will support, it should usually match android.minapi.
#android.ndk_api = 21

# (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) ANT directory (if empty, it will be automatically downloaded.)
#android.ant_path =

# (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

# (bool) If True, then automatically accept SDK license
# agreements. This is intended for automation only. If set to False,
# the default, you will be shown the license when first running
# buildozer.
# android.accept_sdk_license = False

# (str) Android entry point, default is ok for Kivy-based app
#android.entrypoint = org.renpy.android.PythonActivity

# (list) Pattern to whitelist for the whole project
#android.whitelist =

# (str) Path to a custom whitelist file
#android.whitelist_src =

# (str) Path to a custom blacklist file
#android.blacklist_src =

# (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 =

# (list) Android AAR archives to add (currently works only with sdl2_gradle
# bootstrap)
#android.add_aars =

# (list) Gradle dependencies to add (currently works only with sdl2_gradle
# 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 master
#p4a.branch = master
p4a.branch = develop

# (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 <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
#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 =

# (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

# (str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86
android.arch = armeabi-v7a

#
# Python for android (p4a) specific
#

# (str) python-for-android git clone directory (if empty, it will be automatically cloned from github)
#p4a.source_dir =

# (str) The directory in which python-for-android should look for your own build recipes (if any)
#p4a.local_recipes =

# (str) Filename to the hook for p4a
#p4a.hook =

# (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
#

# (str) Path to a custom kivy-ios folder
#ios.kivy_ios_dir = ../kivy-ios
# Alternately, specify the URL and branch of a git checkout:
ios.kivy_ios_url = https://github.com/kivy/kivy-ios
ios.kivy_ios_branch = master

# Another platform dependency: ios-deploy
# Uncomment to use a custom checkout
#ios.ios_deploy_dir = ../ios_deploy
# Or specify URL and branch
ios.ios_deploy_url = https://github.com/phonegap/ios-deploy
ios.ios_deploy_branch = 1.7.0

# (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: <lastname> <firstname> (<hexstring>)"

# (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

# (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/*
#
#    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

Logs

Logcat logs are attached since the post becomes too long and the comment characters overflows.
[run_logcat_appcrash3_issue_aconda.txt](https://github.com/kivy/python-for-android/files/3897349/run_logcat_appcrash3_issue_aconda.txt)

@Narcolapser
Copy link

Can you post your code as well? That will make it easier to figure out what exactly is going wrong. Also if you call log cat with grep you can get more concise logs:

adb logcat | grep "python"

@iruriksl
Copy link
Author

iruriksl commented Dec 5, 2019

Can you post your code as well? That will make it easier to figure out what exactly is going wrong. Also if you call log cat with grep you can get more concise logs:

adb logcat | grep "python"

Thanks for the command for fine grained logs view of logcat. But this doesn't include complete log lines as many logs are not tagged with python which are of the app.

As requested following is the python code file with name main.py:
############################

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput

class MainApp(App):
    def build(self):
        self.operators = ["/", "*", "+", "-"]
        self.last_was_operator = None
        self.last_button = None
        main_layout = BoxLayout(orientation="vertical")
        self.solution = TextInput(
            multiline=False, readonly=True, halign="right", font_size=55
        )
        main_layout.add_widget(self.solution)
        buttons = [
            ["7", "8", "9", "/"],
            ["4", "5", "6", "*"],
            ["1", "2", "3", "-"],
            [".", "0", "C", "+"],
        ]
        for row in buttons:
            h_layout = BoxLayout()
            for label in row:
                button = Button(
                    text=label,
                    pos_hint={"center_x": 0.5, "center_y": 0.5},
                )
                button.bind(on_press=self.on_button_press)
                h_layout.add_widget(button)
            main_layout.add_widget(h_layout)

        equals_button = Button(
            text="=", pos_hint={"center_x": 0.5, "center_y": 0.5}
        )
        equals_button.bind(on_press=self.on_solution)
        main_layout.add_widget(equals_button)

        return main_layout

    def on_button_press(self, instance):
        current = self.solution.text
        button_text = instance.text

        if button_text == "C":
            # Clear the solution widget
            self.solution.text = ""
        else:
            if current and (
                self.last_was_operator and button_text in self.operators):
                # Don't add two operators right after each other
                return
            elif current == "" and button_text in self.operators:
                # First character cannot be an operator
                return
            else:
                new_text = current + button_text
                self.solution.text = new_text
        self.last_button = button_text
        self.last_was_operator = self.last_button in self.operators

    def on_solution(self, instance):
        text = self.solution.text
        if text:
            solution = str(eval(self.solution.text))
            self.solution.text = solution


if __name__ == "__main__":
    app = MainApp()
    app.run()

@Narcolapser
Copy link

Narcolapser commented Dec 6, 2019

if name == "main":

There is your problem. name is undefined you want:

if __name__ == '__main__':

Try that and see if it resolves the issue.

Here is some reading about __name__ and __main__.

@tshirtman
Copy link
Member

tshirtman commented Dec 6, 2019

that's already the case, it just wasn't rendering properly, i edited their post to fix it.

interesting part of the log seems to be

11-24 20:56:41.959 22574 22762 I python  : Preparing to initialize python
11-24 20:56:41.959 22574 22762 I python  : _python_bundle dir exists
11-24 20:56:41.959 22574 22762 I python  : calculated paths to be...
11-24 20:56:41.959 22574 22762 I python  : /data/user/0/org.test.myapp/files/app/_python_bundle/stdlib.zip:/data/user/0/org.test.myapp/files/app/_python_bundle/modules
11-24 20:56:41.963  1598  1598 W Looper  : Drained
11-24 20:56:41.965  2309  2504 I ThemeRuntimeManager: add pending job org.test.myapp.png
11-24 20:56:41.966 22574 22762 I python  : set wchar paths...
11-24 20:56:41.970 22629 22676 I ##XLogger##: com.miui.cloudservice.push.MiPushMessageReceiver::onCommandResult@MiPushMessageReceiver.java:55, thread:2025--onCommandResult is called, command: set-alias, resultCode: 0, reason: null, category: null
11-24 20:56:41.971  2309 22767 I ThemeRuntimeManager: saving icon for org.test.myapp.png
11-24 20:56:41.971   554  3425 D QSEECOMAPI: Loaded image: APP id = 2424836
11-24 20:56:41.972 22629 22676 I ##XLogger##: com.miui.cloudservice.push.MiPushMessageReceiver::onCommandResult@MiPushMessageReceiver.java:113, thread:2025--set_alias_success, ******************************************506c8d63
11-24 20:56:41.975  1598  1763 D CompatibilityInfo: mCompatibilityFlags - 0
11-24 20:56:41.975  1598  1763 D CompatibilityInfo: applicationDensity - 320
11-24 20:56:41.975  1598  1763 D CompatibilityInfo: applicationScale - 1.0
11-24 20:56:41.981   554  3425 D MTService: load app cardapp from /vendor/firmware_mnt/image OK
11-24 20:56:41.989 22721 22769 I MiPicks-LocalAppManager: load local apps from system : begin
11-24 20:56:42.003   463   464 E rpmb_emmc: ----------------------------rpmb_emmc_read-----------------------------
11-24 20:56:42.009   554  3425 D MTService: Response OK, size: 64
11-24 20:56:42.010   554  3425 D QSEECOMAPI: QSEECom_dealloc_memory 
11-24 20:56:42.010   554  3425 D QSEECOMAPI: QSEECom_shutdown_app, app_id = 2424836
11-24 20:56:42.010   554  3425 D QSEECOMAPI: QSEECom_dealloc_memory 
11-24 20:56:42.010   554  3425 E QSEECOMAPI: Error::Cannot de-alloc memory. priv handle is NULL!!.
11-24 20:56:42.013  2994  4117 I android_os_HwBinder: HwBinder: Starting thread pool for default::vendor.xiaomi.hardware.mtdservice@1.0::IMTService
11-24 20:56:42.014   554  3425 D QSEECOMAPI: QSEECom_get_handle sb_length = 0x2000
11-24 20:56:42.014   554  3425 D QSEECOMAPI: App is not loaded in QSEE
11-24 20:56:42.014   554  3425 D QSEECOMAPI: app_arch = 1, total_files = 8
11-24 20:56:42.028   554  3425 D QSEECOMAPI: Loaded image: APP id = 2490372
11-24 20:56:42.029 22721 22721 I MiPicks-LoginManager: account has login
11-24 20:56:42.031   554  3425 D MTService: load app cardapp from /vendor/firmware_mnt/image OK
11-24 20:56:42.037   463   464 E rpmb_emmc: ----------------------------rpmb_emmc_read-----------------------------
11-24 20:56:42.051   554  3425 D MTService: Response OK, size: 64
11-24 20:56:42.051   554  3425 D QSEECOMAPI: QSEECom_dealloc_memory 
11-24 20:56:42.051   554  3425 D QSEECOMAPI: QSEECom_shutdown_app, app_id = 2490372
11-24 20:56:42.052   554  3425 D QSEECOMAPI: QSEECom_dealloc_memory 
11-24 20:56:42.052   554  3425 E QSEECOMAPI: Error::Cannot de-alloc memory. priv handle is NULL!!.
11-24 20:56:42.070 22721 22769 I MiPicks-LocalAppManager: load local apps from system : finish
11-24 20:56:42.106 22574 22762 F libc    : Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 22762 (SDLThread), pid 22574 (org.test.myapp)
11-24 20:56:42.122  2994  4117 I android_os_HwBinder: HwBinder: Starting thread pool for default::vendor.xiaomi.hardware.mtdservice@1.0::IMTService
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQ] wait result 1
11-24 20:56:42.123   554   554 D QSEECOMAPI: QSEECom_get_handle sb_length = 0x2000
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQueueClientInfo] GTP-FDAL: read
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQueueClientInfo] just read 4 bytes
11-24 20:56:42.123   554   554 D QSEECOMAPI: App is not loaded in QSEE
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQ] wait result 1
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQueueClientInfo] GTP-FDAL: read
11-24 20:56:42.123   554   554 D QSEECOMAPI: app_arch = 1, total_files = 8
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQueueClientInfo] just read 76 bytes
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQueueClientInfo] card length 76 + 4 bytes, current size 80 bytes
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQ] lookupAndDeliver delivering message to client GTP-FDAL 
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQ] wait result 1
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQueueClientInfo] GTP-FDAL: write
11-24 20:56:42.123   941   965 D QCALOG  : [MessageQueueClientInfo] write to [GTP-FDAL], 80 bytes finished, 0 bytes left
11-24 20:56:42.137   554   554 D QSEECOMAPI: Loaded image: APP id = 2555908
11-24 20:56:42.138   554   554 D MTService: load app cardapp from /vendor/firmware_mnt/image OK
11-24 20:56:42.160   463   464 E rpmb_emmc: ----------------------------rpmb_emmc_read-----------------------------
11-24 20:56:42.166   554   554 D MTService: Response OK, size: 64
11-24 20:56:42.166   554   554 D QSEECOMAPI: QSEECom_dealloc_memory 
11-24 20:56:42.166   554   554 D QSEECOMAPI: QSEECom_shutdown_app, app_id = 2555908
11-24 20:56:42.166   554   554 D QSEECOMAPI: QSEECom_dealloc_memory 
11-24 20:56:42.166   554   554 E QSEECOMAPI: Error::Cannot de-alloc memory. priv handle is NULL!!.
11-24 20:56:42.180  1914  2184 D NetworkController.MobileSignalController(1): getDataNetTypeFromServiceState slotId=0  isUsingCarrierAggregation=false
11-24 20:56:42.180  1914  2184 D NetworkTypeUtils: getDataNetTypeFromServiceState:srcDataNetType = 13, destDataNetType 13
11-24 20:56:42.181  1914  2184 D MobileSignalController: updateDataType mSelectedDataTypeIcon[0]=2131232216, mSelectedDataActivityIndex=6
11-24 20:56:42.181  1914  2184 D TelephonyIcons: getSignalStrengthIcon: slot=0, inetCondition=1, level=4, roaming=false, signalstrength=SignalStrength: 99 0 -120 -160 -120 -160 -1 18 -105 -12 2 2147483647 0 2147483647 99 255 2147483647 gsm|lte use_rsrp_and_rssnr_for_lte_level  [-128, -115, -110, -105, -97] [-115, -105, -95, -85]
11-24 20:56:42.181  1914  2184 D TelephonyIcons: getDataActivity, slot=0, activity=1
11-24 20:56:42.183  1914  2184 D TelephonyIcons: null signal icon name: drawable/stat_sys_signal_null
11-24 20:56:42.183  1914  2184 D TelephonyIcons: getDataTypeIcon sub=0
11-24 20:56:42.218  1914  1914 I StatusBar: onNotificationPosted key:0|com.xiaomi.mipicks|208050263|null|10071 isUpdate:false
11-24 20:56:42.219  1914  1914 I StatusBar: handleNotification key:0|com.xiaomi.mipicks|208050263|null|10071 isUpdate:false
11-24 20:56:42.237  1914  1914 D StatusBar: filter Notification key=0|com.xiaomi.mipicks|208050263|null|10071
11-24 20:56:42.258 22779 22779 I crash_dump32: obtaining output fd from tombstoned, type: kDebuggerdTombstone
11-24 20:56:42.261   966   966 I /system/bin/tombstoned: received crash request for pid 22762
11-24 20:56:42.262 22779 22779 I crash_dump32: performing dump of process 22574 (target tid = 22762)
11-24 20:56:42.265 22721 22783 I MiPicks-AutoDownloadScheduler: [AutoDownload] scheduleAutoDownloadOnAppStart
11-24 20:56:42.277 22779 22779 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
11-24 20:56:42.277 22779 22779 F DEBUG   : Build fingerprint: 'xiaomi/onc/onc:9/PKQ1.181021.001/V11.0.3.0.PFFINXM:user/release-keys'
11-24 20:56:42.277 22779 22779 F DEBUG   : Revision: '0'
11-24 20:56:42.277 22779 22779 F DEBUG   : ABI: 'arm'
11-24 20:56:42.278 22779 22779 F DEBUG   : pid: 22574, tid: 22762, name: SDLThread  >>> org.test.myapp <<<
11-24 20:56:42.278 22779 22779 F DEBUG   : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
11-24 20:56:42.278 22779 22779 F DEBUG   :     r0  00000000  r1  000058ea  r2  00000006  r3  00000008
11-24 20:56:42.278 22779 22779 F DEBUG   :     r4  0000582e  r5  000058ea  r6  cc61786c  r7  0000010c
11-24 20:56:42.278 22779 22779 F DEBUG   :     r8  cbd78a50  r9  00000002  r10 e4bcd100  r11 cc617898
11-24 20:56:42.278 22779 22779 F DEBUG   :     ip  eab5e3d8  sp  cc617858  lr  eaacd621  pc  eaac4e5e
11-24 20:56:42.279 22779 22779 F DEBUG   : 
11-24 20:56:42.279 22779 22779 F DEBUG   : backtrace:
11-24 20:56:42.279 22779 22779 F DEBUG   :     #00 pc 0001ce5e  /system/lib/libc.so (abort+58)
11-24 20:56:42.279 22779 22779 F DEBUG   :     #01 pc 001ba620  /data/app/org.test.myapp-nd6pZVJ7QMuG5eEj_BldjA==/lib/arm/libpython3.7m.so (offset 0x83000)

crash in sdl initialisation? would be nice to know which function was called at this point, building p4a in debug mode could help to get the symbols.

@tshirtman
Copy link
Member

Anyway, my guess is that one of the libraries was incorrectly built because not all dependencies were present, and cleaning up (rm -rf .buildozer in the project dir) then building again buildozer android debug) would solve the problem.

@iruriksl
Copy link
Author

if name == 'main':

I did not actually understand your point. I have already used if name == 'main': in the code of app. I have gone through the link but found no clue of what you are referencing.
Kindly elaborate the needful to be done.

@iruriksl
Copy link
Author

that's already the case, it just wasn't rendering properly, i edited their post to fix it.

interesting part of the log seems to be

11-24 20:56:41.959 22574 22762 I python  : Preparing to initialize python
11-24 20:56:41.959 22574 22762 I python  : _python_bundle dir exists
11-24 20:56:41.959 22574 22762 I python  : calculated paths to be...
11-24 20:56:41.959 22574 22762 I python  : /data/user/0/org.test.myapp/files/app/_python_bundle/stdlib.zip:/data/user/0/org.test.myapp/files/app/_python_bundle/modules
11-24 20:56:41.963  1598  1598 W Looper  : Drained
11-24 20:56:41.965  2309  2504 I ThemeRuntimeManager: add pending job org.test.myapp.png
11-24 20:56:41.966 22574 22762 I python  : set wchar paths...
11-24 20:56:41.970 22629 22676 I ##XLogger##: com.miui.cloudservice.push.MiPushMessageReceiver::onCommandResult@MiPushMessageReceiver.java:55, thread:2025--onCommandResult is called, command: set-alias, resultCode: 0, reason: null, category: null
11-24 20:56:41.971  2309 22767 I ThemeRuntimeManager: saving icon for org.test.myapp.png
11-24 20:56:41.971   554  3425 D QSEECOMAPI: Loaded image: APP id = 2424836
11-24 20:56:41.972 22629 22676 I ##XLogger##: com.miui.cloudservice.push.MiPushMessageReceiver::onCommandResult@MiPushMessageReceiver.java:113, thread:2025--set_alias_success, ******************************************506c8d63
11-24 20:56:41.975  1598  1763 D CompatibilityInfo: mCompatibilityFlags - 0
11-24 20:56:41.975  1598  1763 D CompatibilityInfo: applicationDensity - 320
11-24 20:56:41.975  1598  1763 D CompatibilityInfo: applicationScale - 1.0
11-24 20:56:41.981   554  3425 D MTService: load app cardapp from /vendor/firmware_mnt/image OK
11-24 20:56:41.989 22721 22769 I MiPicks-LocalAppManager: load local apps from system : begin
11-24 20:56:42.003   463   464 E rpmb_emmc: ----------------------------rpmb_emmc_read-----------------------------
11-24 20:56:42.009   554  3425 D MTService: Response OK, size: 64
11-24 20:56:42.010   554  3425 D QSEECOMAPI: QSEECom_dealloc_memory 
11-24 20:56:42.010   554  3425 D QSEECOMAPI: QSEECom_shutdown_app, app_id = 2424836
11-24 20:56:42.010   554  3425 D QSEECOMAPI: QSEECom_dealloc_memory 
11-24 20:56:42.010   554  3425 E QSEECOMAPI: Error::Cannot de-alloc memory. priv handle is NULL!!.
11-24 20:56:42.013  2994  4117 I android_os_HwBinder: HwBinder: Starting thread pool for default::vendor.xiaomi.hardware.mtdservice@1.0::IMTService
11-24 20:56:42.014   554  3425 D QSEECOMAPI: QSEECom_get_handle sb_length = 0x2000
11-24 20:56:42.014   554  3425 D QSEECOMAPI: App is not loaded in QSEE
11-24 20:56:42.014   554  3425 D QSEECOMAPI: app_arch = 1, total_files = 8
11-24 20:56:42.028   554  3425 D QSEECOMAPI: Loaded image: APP id = 2490372
11-24 20:56:42.029 22721 22721 I MiPicks-LoginManager: account has login
11-24 20:56:42.031   554  3425 D MTService: load app cardapp from /vendor/firmware_mnt/image OK
11-24 20:56:42.037   463   464 E rpmb_emmc: ----------------------------rpmb_emmc_read-----------------------------
11-24 20:56:42.051   554  3425 D MTService: Response OK, size: 64
11-24 20:56:42.051   554  3425 D QSEECOMAPI: QSEECom_dealloc_memory 
11-24 20:56:42.051   554  3425 D QSEECOMAPI: QSEECom_shutdown_app, app_id = 2490372
11-24 20:56:42.052   554  3425 D QSEECOMAPI: QSEECom_dealloc_memory 
11-24 20:56:42.052   554  3425 E QSEECOMAPI: Error::Cannot de-alloc memory. priv handle is NULL!!.
11-24 20:56:42.070 22721 22769 I MiPicks-LocalAppManager: load local apps from system : finish
11-24 20:56:42.106 22574 22762 F libc    : Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 22762 (SDLThread), pid 22574 (org.test.myapp)
11-24 20:56:42.122  2994  4117 I android_os_HwBinder: HwBinder: Starting thread pool for default::vendor.xiaomi.hardware.mtdservice@1.0::IMTService
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQ] wait result 1
11-24 20:56:42.123   554   554 D QSEECOMAPI: QSEECom_get_handle sb_length = 0x2000
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQueueClientInfo] GTP-FDAL: read
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQueueClientInfo] just read 4 bytes
11-24 20:56:42.123   554   554 D QSEECOMAPI: App is not loaded in QSEE
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQ] wait result 1
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQueueClientInfo] GTP-FDAL: read
11-24 20:56:42.123   554   554 D QSEECOMAPI: app_arch = 1, total_files = 8
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQueueClientInfo] just read 76 bytes
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQueueClientInfo] card length 76 + 4 bytes, current size 80 bytes
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQ] lookupAndDeliver delivering message to client GTP-FDAL 
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQ] wait result 1
11-24 20:56:42.123   941   965 V QCALOG  : [MessageQueueClientInfo] GTP-FDAL: write
11-24 20:56:42.123   941   965 D QCALOG  : [MessageQueueClientInfo] write to [GTP-FDAL], 80 bytes finished, 0 bytes left
11-24 20:56:42.137   554   554 D QSEECOMAPI: Loaded image: APP id = 2555908
11-24 20:56:42.138   554   554 D MTService: load app cardapp from /vendor/firmware_mnt/image OK
11-24 20:56:42.160   463   464 E rpmb_emmc: ----------------------------rpmb_emmc_read-----------------------------
11-24 20:56:42.166   554   554 D MTService: Response OK, size: 64
11-24 20:56:42.166   554   554 D QSEECOMAPI: QSEECom_dealloc_memory 
11-24 20:56:42.166   554   554 D QSEECOMAPI: QSEECom_shutdown_app, app_id = 2555908
11-24 20:56:42.166   554   554 D QSEECOMAPI: QSEECom_dealloc_memory 
11-24 20:56:42.166   554   554 E QSEECOMAPI: Error::Cannot de-alloc memory. priv handle is NULL!!.
11-24 20:56:42.180  1914  2184 D NetworkController.MobileSignalController(1): getDataNetTypeFromServiceState slotId=0  isUsingCarrierAggregation=false
11-24 20:56:42.180  1914  2184 D NetworkTypeUtils: getDataNetTypeFromServiceState:srcDataNetType = 13, destDataNetType 13
11-24 20:56:42.181  1914  2184 D MobileSignalController: updateDataType mSelectedDataTypeIcon[0]=2131232216, mSelectedDataActivityIndex=6
11-24 20:56:42.181  1914  2184 D TelephonyIcons: getSignalStrengthIcon: slot=0, inetCondition=1, level=4, roaming=false, signalstrength=SignalStrength: 99 0 -120 -160 -120 -160 -1 18 -105 -12 2 2147483647 0 2147483647 99 255 2147483647 gsm|lte use_rsrp_and_rssnr_for_lte_level  [-128, -115, -110, -105, -97] [-115, -105, -95, -85]
11-24 20:56:42.181  1914  2184 D TelephonyIcons: getDataActivity, slot=0, activity=1
11-24 20:56:42.183  1914  2184 D TelephonyIcons: null signal icon name: drawable/stat_sys_signal_null
11-24 20:56:42.183  1914  2184 D TelephonyIcons: getDataTypeIcon sub=0
11-24 20:56:42.218  1914  1914 I StatusBar: onNotificationPosted key:0|com.xiaomi.mipicks|208050263|null|10071 isUpdate:false
11-24 20:56:42.219  1914  1914 I StatusBar: handleNotification key:0|com.xiaomi.mipicks|208050263|null|10071 isUpdate:false
11-24 20:56:42.237  1914  1914 D StatusBar: filter Notification key=0|com.xiaomi.mipicks|208050263|null|10071
11-24 20:56:42.258 22779 22779 I crash_dump32: obtaining output fd from tombstoned, type: kDebuggerdTombstone
11-24 20:56:42.261   966   966 I /system/bin/tombstoned: received crash request for pid 22762
11-24 20:56:42.262 22779 22779 I crash_dump32: performing dump of process 22574 (target tid = 22762)
11-24 20:56:42.265 22721 22783 I MiPicks-AutoDownloadScheduler: [AutoDownload] scheduleAutoDownloadOnAppStart
11-24 20:56:42.277 22779 22779 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
11-24 20:56:42.277 22779 22779 F DEBUG   : Build fingerprint: 'xiaomi/onc/onc:9/PKQ1.181021.001/V11.0.3.0.PFFINXM:user/release-keys'
11-24 20:56:42.277 22779 22779 F DEBUG   : Revision: '0'
11-24 20:56:42.277 22779 22779 F DEBUG   : ABI: 'arm'
11-24 20:56:42.278 22779 22779 F DEBUG   : pid: 22574, tid: 22762, name: SDLThread  >>> org.test.myapp <<<
11-24 20:56:42.278 22779 22779 F DEBUG   : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
11-24 20:56:42.278 22779 22779 F DEBUG   :     r0  00000000  r1  000058ea  r2  00000006  r3  00000008
11-24 20:56:42.278 22779 22779 F DEBUG   :     r4  0000582e  r5  000058ea  r6  cc61786c  r7  0000010c
11-24 20:56:42.278 22779 22779 F DEBUG   :     r8  cbd78a50  r9  00000002  r10 e4bcd100  r11 cc617898
11-24 20:56:42.278 22779 22779 F DEBUG   :     ip  eab5e3d8  sp  cc617858  lr  eaacd621  pc  eaac4e5e
11-24 20:56:42.279 22779 22779 F DEBUG   : 
11-24 20:56:42.279 22779 22779 F DEBUG   : backtrace:
11-24 20:56:42.279 22779 22779 F DEBUG   :     #00 pc 0001ce5e  /system/lib/libc.so (abort+58)
11-24 20:56:42.279 22779 22779 F DEBUG   :     #01 pc 001ba620  /data/app/org.test.myapp-nd6pZVJ7QMuG5eEj_BldjA==/lib/arm/libpython3.7m.so (offset 0x83000)

crash in sdl initialisation? would be nice to know which function was called at this point, building p4a in debug mode could help to get the symbols.

HI,

I am unable to figure out the edited patr in the post which you have mentioned in the comment to fix the issue. Kindly highlight the edited part.
Moreover, I am using buildozer to build the apk file and since I am not very expert in this stuff thus I don't know how to enable debug in p4a commands to further get more logs to help frill down the exact issue.
Kindly guide me to do the needful.

@iruriksl
Copy link
Author

Anyway, my guess is that one of the libraries was incorrectly built because not all dependencies were present, and cleaning up (rm -rf .buildozer in the project dir) then building again buildozer android debug) would solve the problem.

Hi, I have removed .buildozer dir and then try re-building the apk but no it is still crashing after displaying the default splash screen of the app. Kindly help me out.

@tshirtman
Copy link
Member

tshirtman commented Dec 10, 2019

11-24 20:56:42.277 22779 22779 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
11-24 20:56:42.277 22779 22779 F DEBUG : Build fingerprint: 'xiaomi/onc/onc:9/PKQ1.181021.001/V11.0.3.0.PFFINXM:user/release-keys'
11-24 20:56:42.277 22779 22779 F DEBUG : Revision: '0'
11-24 20:56:42.277 22779 22779 F DEBUG : ABI: 'arm'
11-24 20:56:42.278 22779 22779 F DEBUG : pid: 22574, tid: 22762, name: SDLThread >>> org.test.myapp <<<
11-24 20:56:42.278 22779 22779 F DEBUG : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
11-24 20:56:42.278 22779 22779 F DEBUG : r0 00000000 r1 000058ea r2 00000006 r3 00000008
11-24 20:56:42.278 22779 22779 F DEBUG : r4 0000582e r5 000058ea r6 cc61786c r7 0000010c
11-24 20:56:42.278 22779 22779 F DEBUG : r8 cbd78a50 r9 00000002 r10 e4bcd100 r11 cc617898
11-24 20:56:42.278 22779 22779 F DEBUG : ip eab5e3d8 sp cc617858 lr eaacd621 pc eaac4e5e
11-24 20:56:42.279 22779 22779 F DEBUG :
11-24 20:56:42.279 22779 22779 F DEBUG : backtrace:
11-24 20:56:42.279 22779 22779 F DEBUG : #00 pc 0001ce5e /system/lib/libc.so (abort+58)
11-24 20:56:42.279 22779 22779 F DEBUG : #1 pc 001ba620 /data/app/org.test.myapp-nd6pZVJ7QMuG5eEj_BldjA==/lib/arm/libpython3.7m.so (offset 0x83000)

This is the crash, it's not in python, it's in C, and it doesn't give a lot of information, it would require investigation with a debugger with a debug build to understand, which is not really to step you through.

So i'm curious about your list of requirements

requirements = hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy

Did you add all that because of specific problems? Did you have the same or different issues before that? because a much shorter list should be enough.

requirements = python3, kivy

Kindly help me out.

I don't know if you think it's polite to say that, but that's not how i read it, we are already kindly helping you out, no need to insist on that.

@iruriksl
Copy link
Author

11-24 20:56:42.277 22779 22779 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
11-24 20:56:42.277 22779 22779 F DEBUG : Build fingerprint: 'xiaomi/onc/onc:9/PKQ1.181021.001/V11.0.3.0.PFFINXM:user/release-keys'
11-24 20:56:42.277 22779 22779 F DEBUG : Revision: '0'
11-24 20:56:42.277 22779 22779 F DEBUG : ABI: 'arm'
11-24 20:56:42.278 22779 22779 F DEBUG : pid: 22574, tid: 22762, name: SDLThread >>> org.test.myapp <<<
11-24 20:56:42.278 22779 22779 F DEBUG : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
11-24 20:56:42.278 22779 22779 F DEBUG : r0 00000000 r1 000058ea r2 00000006 r3 00000008
11-24 20:56:42.278 22779 22779 F DEBUG : r4 0000582e r5 000058ea r6 cc61786c r7 0000010c
11-24 20:56:42.278 22779 22779 F DEBUG : r8 cbd78a50 r9 00000002 r10 e4bcd100 r11 cc617898
11-24 20:56:42.278 22779 22779 F DEBUG : ip eab5e3d8 sp cc617858 lr eaacd621 pc eaac4e5e
11-24 20:56:42.279 22779 22779 F DEBUG :
11-24 20:56:42.279 22779 22779 F DEBUG : backtrace:
11-24 20:56:42.279 22779 22779 F DEBUG : #00 pc 0001ce5e /system/lib/libc.so (abort+58)
11-24 20:56:42.279 22779 22779 F DEBUG : #1 pc 001ba620 /data/app/org.test.myapp-nd6pZVJ7QMuG5eEj_BldjA==/lib/arm/libpython3.7m.so (offset 0x83000)

This is the crash, it's not in python, it's in C, and it doesn't give a lot of information, it would require investigation with a debugger with a debug build to understand, which is not really to step you through.

So i'm curious about your list of requirements

requirements = hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy

Did you add all that because of specific problems? Did you have the same or different issues before that? because a much shorter list should be enough.

requirements = python3, kivy

Kindly help me out.

I don't know if you think it's polite to say that, but that's not how i read it, we are already kindly helping you out, no need to insist on that.

Yes! I understand that crash logs are of C not python might be because of the cythonizing while building.

There is nothing special for using huge requirements. I was just trying with different options. I also build with requirements = python3, kivy but the issue is same with that too.

I am stuck at this since a month almost and trying and trying to build successful apk

@iruriksl
Copy link
Author

if name == 'main':

I did not actually understand your point. I have already used if name == 'main': in the code of app. I have gone through the link but found no clue of what you are referencing.
Kindly elaborate the needful to be done.

I identified that I have used double quotes ("") and you have mentioned single quote to enclose main. I tried with this too but the problem remain. Guide further to resolve.

@AndreMiras
Copy link
Member

I think he was mentioning the underscore __main__ but that's a markdown formatting issue. Use back quotes to share the code so it doesn't happen

@robertpfeiffer
Copy link
Contributor

A pygame user has the exact same problem, with the pygame fork of p4a, but it happens only on a mac, and can't be reproduced on Linux.

@iruriksl
Copy link
Author

I think he was mentioning the underscore __main__ but that's a markdown formatting issue. Use back quotes to share the code so it doesn't happen

Yes! I am still trying with double quotes itself and more than 100 times with different versions as per follows:
PFA the source code in use
main.txt

I am able to build app successfully and installed on Samsung Galaxy A5 (2016). It is crashing on run.
The error in crash references to libpython3.7m.so which means some library modules linking is missing can you tell me what all lib**.so should be available in app to successfully run the app on mobile. Below is the one I found in the app build on my Mac as per following specifications:

Building environment:
Python: 3.7.[1-7]
OS: MacOS High Sierra (10.13.6)
Kivy: 1.11.1
Cython: 0.29.[9-13]

buildozer.spec: requirements python3,kivy

libs in APK:
/lib/armeabi-v7a/
/lib/armeabi-v7a/libssl1.1.so
/lib/armeabi-v7a/libsqlite3.so
/lib/armeabi-v7a/libpython3.7m.so
/lib/armeabi-v7a/libmain.so
/lib/armeabi-v7a/libhidapi.so
/lib/armeabi-v7a/libffi.so
/lib/armeabi-v7a/libcrypto1.1.so
/lib/armeabi-v7a/libSDL2_ttf.so
/lib/armeabi-v7a/libSDL2_mixer.so
/lib/armeabi-v7a/libSDL2_image.so
/lib/armeabi-v7a/libSDL2.so

crash logcat error:
04-11 12:32:35.636 6647 6647 V pythonutil: Loading library: python3.7m
04-11 12:32:35.641 6647 6647 V pythonutil: Loading library: main
04-11 12:32:35.644 6647 6647 V pythonutil: Failed to load _io.so or unicodedata.so...but that's okay.
04-11 12:32:35.645 6647 6647 V pythonutil: Unsatisfied linker when loading ctypes
04-11 12:32:35.645 6647 6647 V pythonutil: Loaded everything!
04-11 12:32:35.645 6647 6647 V SDL : nativeSetupJNI()
04-11 12:32:35.645 6647 6647 V SDL : AUDIO nativeSetupJNI()
04-11 12:32:35.645 6647 6647 V SDL : CONTROLLER nativeSetupJNI()
04-11 12:32:35.670 6647 6647 D hidapi : Initializing Bluetooth
04-11 12:32:35.671 6647 6647 D hidapi : Couldn't initialize Bluetooth, missing android.permission.BLUETOOTH
04-11 12:32:35.701 6647 6647 V PythonActivity: Setting env vars for start.c and Python to use
04-11 12:32:35.702 6647 6647 V PythonActivity: Access to our meta-data...
04-11 12:32:35.703 6647 6647 I PythonActivity: Surface will NOT be transparent
04-11 12:32:35.703 6647 6647 V PythonActivity: onResume()
04-11 12:32:35.703 6647 6647 V SDL : onResume()
04-11 12:32:35.706 2873 17007 V WindowManager: Relayout Window{38b5f99d0 u0 org.kvcalc.kvcalc/org.kivy.android.PythonActivity}: viewVisibility=0 req=1080x1920 WM.LayoutParams{(0,0)(fillxfill) sim=#20 ty=1 fl=#1810100 pfl=0x20000 fmt=-3 wanim=0x1030001 vsysui=0x400 sysuil=true needsMenuKey=2 naviIconColor=0}
04-11 12:32:35.707 2308 2308 I SurfaceFlinger: id=1091 createSurf (1080x1920),1 flag=4, org.kvcalc.kvcalc/org.kivy.android.PythonActivity
04-11 12:32:35.714 6647 6647 D ViewRootImpl@1d0bff0[PythonActivity]: Relayout returned: oldFrame=[0,0][1080,1920] newFrame=[0,0][1080,1920] result=0x7 surface={isValid=true -984893440} surfaceGenerationChanged=true
04-11 12:32:35.731 6647 6715 D mali_winsys: EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000, [1080x1920]-format:1
04-11 12:32:35.731 6647 6647 D ViewRootImpl@1d0bff0[PythonActivity]: mHardwareRenderer.updateSurface() mSurface={isValid=true -984893440}
04-11 12:32:35.737 2873 11571 D WindowManager: addWindow: android.view.IWindow$Stub$Proxy@2f60f6c displayId=0
04-11 12:32:35.739 2873 3016 V WindowManager: Relayout Window{a6761cad0 u0 SurfaceView - org.kvcalc.kvcalc/org.kivy.android.PythonActivity}: viewVisibility=0 req=1080x1848 WM.LayoutParams{(0,72)(1080x1848) gr=#800033 ty=1001 fl=#4218 pfl=0x10040 fmt=4 naviIconColor=0}
04-11 12:32:35.740 2308 2308 I SurfaceFlinger: id=1092 createSurf (1080x1848),4 flag=404, SurfaceView - org.kvcalc.kvcalc/org.kivy.android.PythonActivity
04-11 12:32:35.741 2308 2308 I SurfaceFlinger: id=1093 createSurf (1080x1848),-1 flag=20404, SurfaceView - org.kvcalc.kvcalc/org.kivy.android.PythonActivity
04-11 12:32:35.748 6647 6647 D SurfaceView: Relayout returned: oldFrame=[0,0][0,0] newFrame=[0,72][1080,1920] result=0x7 surface={Surface(name=null)/@0xb350e87 isValid=true -984834048}
04-11 12:32:35.748 6647 6647 V SDL : surfaceCreated()
04-11 12:32:35.748 6647 6647 V SDL : surfaceChanged()
04-11 12:32:35.748 6647 6647 V SDL : pixel format RGB_565
04-11 12:32:35.749 6647 6647 V SDL : Window size: 1080x1848
04-11 12:32:35.749 6647 6647 V SDL : Device size: 1080x1920
04-11 12:32:35.753 2873 4071 I bsthal : bhy_batch: handle=1, flags=0, period_ns=20000000, timeout=0
04-11 12:32:35.753 2873 4071 D bsthal : Replace timeout to 0
04-11 12:32:35.756 2873 4071 I bsthal : bhy_activate: handle=1, enabled=1
04-11 12:32:35.756 6647 6647 D SensorManager: registerListener :: 7184, BOSCH Accelerometer Sensor, 20000, 0,
04-11 12:32:35.757 6647 6647 V SDL : nativeResume()
04-11 12:32:35.757 6647 6647 D SensorManager: registerListener fail :: 7184, BOSCH Accelerometer Sensor, 20000, 0,
04-11 12:32:35.757 2873 3000 D WindowManager: finishDrawingWindow: Window{a6761cad0 u0 SurfaceView - org.kvcalc.kvcalc/org.kivy.android.PythonActivity} mDrawState=DRAW_PENDING
04-11 12:32:35.758 6647 6827 V SDL : Running main function SDL_main from library /data/app/org.kvcalc.kvcalc-1/lib/arm/libmain.so
04-11 12:32:35.758 6647 6827 V PythonActivity: appConfirmedActive() -> preparing loading screen removal
04-11 12:32:35.758 6647 6827 V SDL : nativeRunMain()
04-11 12:32:35.761 6647 6827 I python : Initializing Python for Android
04-11 12:32:35.761 6647 6827 I python : Setting additional env vars from p4a_env_vars.txt
04-11 12:32:35.762 6647 6827 I python : Changing directory to the one provided by ANDROID_ARGUMENT
04-11 12:32:35.762 6647 6827 I python : /data/user/0/org.kvcalc.kvcalc/files/app
04-11 12:32:35.762 6647 6827 I python : Preparing to initialize python
04-11 12:32:35.762 6647 6827 I python : _python_bundle dir exists
04-11 12:32:35.762 6647 6827 I python : calculated paths to be...
04-11 12:32:35.762 6647 6827 I python : /data/user/0/org.kvcalc.kvcalc/files/app/_python_bundle/stdlib.zip:/data/user/0/org.kvcalc.kvcalc/files/app/_python_bundle/modules
04-11 12:32:35.763 6647 6827 I python : set wchar paths...
04-11 12:32:35.774 2873 2927 I bsthal : Sensor [1] sample rate changed, type is 254
04-11 12:32:35.775 2873 2890 V WindowOrientationListener: OrientationSensorJudge.onSensorChanged, Rotation: -1
04-11 12:32:35.775 2873 2890 V WindowOrientationListener: OrientationSensorJudge.onSensorChanged, Rotation: -1
04-11 12:32:35.776 2873 2890 V WindowOrientationListener: OrientationSensorJudge.getProposedRotation, Rotation: 0
04-11 12:32:35.776 2873 2890 V WindowOrientationListener: OrientationSensorJudge.getProposedRotation, Rotation: 0
04-11 12:32:35.776 2873 2890 V WindowManager: rotationForOrientationLw(orient=1, last=0); user=0 sensorRotation=0 mLidState=-1 mDockMode=0 mHdmiPlugged=false
04-11 12:32:35.783 2873 4160 D WindowManager: finishDrawingWindow: Window{38b5f99d0 u0 org.kvcalc.kvcalc/org.kivy.android.PythonActivity} mDrawState=DRAW_PENDING
04-11 12:32:35.784 6647 6647 V InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@6ca41dd nm : org.kvcalc.kvcalc ic=null
04-11 12:32:35.784 6647 6647 I InputMethodManager: [IMM] startInputInner - mService.startInputOrWindowGainedFocus
04-11 12:32:35.792 2873 11577 D InputTransport: Input channel constructed: fd=406
04-11 12:32:35.792 2873 11577 D InputTransport: Input channel destroyed: fd=406
04-11 12:32:35.793 3710 3710 I SKBD : SamsungKeypad onFinishInput took nanoTime: 327000
04-11 12:32:35.793 3710 3710 I SKBD : SamsungKeypad [IMI] onStartInput - caller packageName : org.kvcalc.kvcalc
04-11 12:32:35.793 6647 6647 D InputTransport: Input channel constructed: fd=70
04-11 12:32:35.793 6647 6647 D InputTransport: Input channel destroyed: fd=59
04-11 12:32:35.797 2873 2897 I WindowManager_SurfaceController: Destroying surface Surface(name=org.kvcalc.kvcalc/org.kivy.android.PythonActivity) called by com.android.server.wm.WindowStateAnimator.destroyDeferredSurfaceLocked:1182 com.android.server.wm.WindowStateAnimator.destroyPreservedSurfaceLocked:807 com.android.server.wm.WindowManagerService.destroyPreservedSurfaceLocked:10254 com.android.server.wm.WindowAnimator.animateLocked:1221 com.android.server.wm.WindowAnimator.-wrap0:-1 com.android.server.wm.WindowAnimator$1.doFrame:181 android.view.Choreographer$CallbackRecord.run:957 android.view.Choreographer.doCallbacks:734
04-11 12:32:35.797 2308 2356 I SurfaceFlinger: id=1090 Removed org.kvcalc.kvcalc/org.kivy.android.PythonActivity (5/7)
04-11 12:32:35.798 2308 3091 I SurfaceFlinger: id=1090 Removed org.kvcalc.kvcalc/org.kivy.android.PythonActivity (-2/7)
04-11 12:32:35.798 2873 461 V WindowManager: Relayout Window{a6761cad0 u0 SurfaceView - org.kvcalc.kvcalc/org.kivy.android.PythonActivity}: viewVisibility=0 req=1080x1848 WM.LayoutParams{(0,72)(1080x1848) gr=#800033 ty=1001 fl=#4218 pfl=0x10040 fmt=4 naviIconColor=0}
04-11 12:32:35.802 6647 6647 D SurfaceView: Relayout returned: oldFrame=[0,72][1080,1920] newFrame=[0,72][1080,1920] result=0x1 surface={Surface(name=null)/@0xb350e87 isValid=true -984832000}
04-11 12:32:35.802 2873 12505 D WindowManager: finishDrawingWindow: Window{a6761cad0 u0 SurfaceView - org.kvcalc.kvcalc/org.kivy.android.PythonActivity} mDrawState=HAS_DRAWN
04-11 12:32:35.806 2873 4009 V WindowManager: Relayout Window{38b5f99d0 u0 org.kvcalc.kvcalc/org.kivy.android.PythonActivity}: viewVisibility=0 req=1080x1920 WM.LayoutParams{(0,0)(fillxfill) sim=#20 ty=1 fl=#1810900 pfl=0x20000 fmt=-3 wanim=0x1030001 vsysui=0x500 sysuil=true needsMenuKey=2 naviIconColor=0}
04-11 12:32:35.807 2308 2308 D SurfaceFlinger: Display[0] configurations (* current):
04-11 12:32:35.807 2308 2308 D SurfaceFlinger: * 0: 1080x1920, xdpi=422.029999, ydpi=424.069000, refresh=16949152
04-11 12:32:35.807 2308 2308 D SurfaceFlinger: numHwLayers=4, flags=00000000
04-11 12:32:35.807 2308 2308 D SurfaceFlinger: type | handle | hint | flag | tr | blnd | format | source crop (l,t,r,b) | frame | name
04-11 12:32:35.807 2308 2308 D SurfaceFlinger: -----------+----------+------+------+----+------+-------------+--------------------------------+------------------------+------
04-11 12:32:35.807 2308 2308 D SurfaceFlinger: GLES | 00000000 | 0000 | 0220 | 00 | 0105 | ? ffffffff | 0.0, 0.0, -1.0, -1.0 | 0, 72, 1080, 1920 | SurfaceView - org.kvcalc.kvcalc/org.kivy.android.PythonActivity
04-11 12:32:35.807 2308 2308 D SurfaceFlinger: HWC | ec38d0e0 | 0000 | 0000 | 00 | 0105 | RGBA_8888 | 0.0, 0.0, 1080.0, 1920.0 | 0, 0, 1080, 1920 | org.kvcalc.kvcalc/org.kivy.android.PythonActivity
04-11 12:32:35.807 2308 2308 D SurfaceFlinger: HWC | ec877180 | 0000 | 0000 | 00 | 0105 | RGBA_8888 | 0.0, 0.0, 1080.0, 72.0 | 0, 0, 1080, 72 | StatusBar
04-11 12:32:35.807 2308 2308 D SurfaceFlinger: FB TARGET | ec876280 | 0000 | 0000 | 00 | 0105 | RGBA_8888 | 0.0, 0.0, 1080.0, 1920.0 | 0, 0, 1080, 1920 | HWC_FRAMEBU
04-11 12:32:35.807 2308 2308 D SurfaceFlinger: FFER_TARGET
04-11 12:32:35.808 2873 2890 D WindowManager: set systemUiVisibility of statusbar : systemUiFlags= 0x508 fullscreenStackSysUiFlag= 0x0
04-11 12:32:35.810 2873 24443 D WindowManager: adjustSystemUiVisibilityLw : vis= 0x508
04-11 12:32:35.811 6647 6647 D ViewRootImpl@1d0bff0[PythonActivity]: Relayout returned: oldFrame=[0,0][1080,1920] newFrame=[0,0][1080,1920] result=0x1 surface={isValid=true -984893440} surfaceGenerationChanged=false
04-11 12:32:35.827 6647 6827 F libc : Fatal signal 6 (SIGABRT), code -6 in tid 6827 (SDLThread)
04-11 12:32:35.829 2227 2227 W : debuggerd: handling request: pid=6647 uid=10184 gid=10184 tid=6827
04-11 12:32:35.934 6830 6830 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
04-11 12:32:35.935 6830 6830 F DEBUG : Build fingerprint: 'samsung/a5xeltexx/a5xelte:7.0/NRD90M/A510FXXS8CSI4:user/release-keys'
04-11 12:32:35.935 6830 6830 F DEBUG : Revision: '9'
04-11 12:32:35.935 6830 6830 F DEBUG : ABI: 'arm'
04-11 12:32:35.935 6830 6830 F DEBUG : pid: 6647, tid: 6827, name: SDLThread >>> org.kvcalc.kvcalc <<<
04-11 12:32:35.935 6830 6830 F DEBUG : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
04-11 12:32:35.935 6830 6830 F DEBUG : r0 00000000 r1 00001aab r2 00000006 r3 00000008
04-11 12:32:35.935 6830 6830 F DEBUG : r4 c8a80978 r5 00000006 r6 c8a80920 r7 0000010c
04-11 12:32:35.935 6830 6830 F DEBUG : r8 c8d56a50 r9 00000002 sl c8968100 fp c8a7f958
04-11 12:32:35.935 6830 6830 F DEBUG : ip 00000000 sp c8a7f8f8 lr e73c04c7 pc e73c2d30 cpsr 600f0010
04-11 12:32:35.942 6830 6830 F DEBUG :
04-11 12:32:35.942 6830 6830 F DEBUG : backtrace:
04-11 12:32:35.942 6830 6830 F DEBUG : #00 pc 0004ad30 /system/lib/libc.so (tgkill+12)
04-11 12:32:35.942 6830 6830 F DEBUG : #1 pc 000484c3 /system/lib/libc.so (pthread_kill+34)
04-11 12:32:35.942 6830 6830 F DEBUG : #2 pc 0001dd99 /system/lib/libc.so (raise+10)
04-11 12:32:35.942 6830 6830 F DEBUG : #3 pc 00019521 /system/lib/libc.so (__libc_android_abort+34)
04-11 12:32:35.942 6830 6830 F DEBUG : #4 pc 00017160 /system/lib/libc.so (abort+4)
04-11 12:32:35.942 6830 6830 F DEBUG : #5 pc 001ba620 /data/app/org.kvcalc.kvcalc-1/lib/arm/libpython3.7m.so (offset 0x83000)
04-11 12:32:36.152 3528 3922 D EPDG -- [EPDGService]: onDataActivity: direction=3

@kden416
Copy link

kden416 commented May 2, 2020

same problem, but after many taps on screen while app is loading, application starts successfully.
python 3.8
kivy and kivymd from master
test application with two buttons and do nothing.

@abdullahahmad-creator
Copy link

Check my app problem

python file

import pymysql
from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from datetime import date
from kivymd.uix.button import MDFlatButton
from kivymd.uix.dialog import MDDialog
from kivymd.uix.datatables import MDDataTable
from kivy.metrics import dp

screen_helper = """

variables

ScreenManager:
Main_Screen:
Login_Screen:
Signup_Screen:
Navigation_Screen:
pro:
ser:
acc:
dis:
pay:

for adding pic

MyTile@SmartTile

main screen

<Main_Screen>:
name: 'main_s'

MDCard:
    size_hint: None, None
    size: root.width, root.height
    pos_hint: {"center_x": 0.5, "center_y": 0.5}
    elevation: 10
    padding: 25
    spacing: 25
    orientation: 'vertical'

    #MDGridLayout:
    #    cols: 1
    #    adaptive_height: True
    #    padding: dp(4), dp(4)
    #    spacing: dp(4)

    # MyTile:
    #     source: "ico.png"
    Image:
        source: "ico.png"

    MDRoundFlatButton:
        text: 'Login'
        pos_hint: {'center_x':0.5,'center_y':0.6}
        on_press: root.manager.current = 'login_s'
    MDRoundFlatButton:
        text: 'Signup'
        pos_hint: {'center_x':0.5,'center_y':0.5}
        on_press: root.manager.current = 'signup_s'

    MDRoundFlatButton:
        text: 'Theme'
        pos_hint: {'center_x':0.5,'center_y':0.5}
        on_press: app.theme()

login screen

<Login_Screen>:
name: 'login_s'
ScrollView:
MDCard:
size_hint: None, None
size: root.width, root.height
pos_hint: {"center_x": 0.5, "center_y": 0.5}
elevation: 10
padding: 25
spacing: 25
orientation: 'vertical'

        MDLabel:
            id: welcome_label
            text: "WELCOME BACK"
            font_size: 40
            halign: 'center'
            size_hint_y: None
            height: self.texture_size[1]
            padding_y: 15

        MDTextFieldRound:
            id: em
            hint_text: "E-Mail"
            icon_right: "account"
            size_hint_x: None
            width: 200
            font_size: 18
            pos_hint: {"center_x": 0.5}

        MDTextFieldRound:
            id: ps
            hint_text: "Password"
            icon_right: "eye-off"
            size_hint_x: None
            width: 200
            font_size: 18
            pos_hint: {"center_x": 0.5}
            password: True

        MDRoundFlatButton:
            text: "Login"
            font_size: 12
            pos_hint: {"center_x": 0.5}
            on_press: root.login()

        MDLabel:
            id: simple_text
            text: "Don't Have An Account"
            font_size: 12
            halign: 'center'
            size_hint_y: None
            height: self.texture_size[1]
            padding_y: 15

        MDRoundFlatButton:
            text: "Signup"
            font_size: 12
            pos_hint: {"center_x": 0.5} 
            on_press: root.signup()           

        Widget:
            size_hint_y: None
            height: 10

signup screen

<Signup_Screen>:
name: 'signup_s'
MDCard:
size_hint: None, None
size: root.width, root.height
pos_hint: {"center_x": 0.5, "center_y": 0.5}
elevation: 10
padding: 25
spacing: 25
orientation: 'vertical'

    ScrollView:
        MDCard:
            size_hint: None, None
            size: root.width-50, 800
            pos_hint: {"center_x": 0.5, "center_y": 0.5}
            elevation: 10
            padding: 25
            spacing: 25
            orientation: 'vertical'

            MDLabel:
                id: welcome_label
                text: "Create New Account"
                font_size: 40
                halign: 'center'
                size_hint_y: None
                height: self.texture_size[1]
                padding_y: 15

            MDTextFieldRound:
                id: fn
                hint_text: "First Name"
                icon_right: "account"
                size_hint_x: None
                width: 200
                font_size: 18
                pos_hint: {"center_x": 0.5}

            MDTextFieldRound:
                id: ln
                hint_text: "Last Name"
                icon_right: "account"
                size_hint_x: None
                width: 200
                font_size: 18
                pos_hint: {"center_x": 0.5}

            MDTextFieldRound:
                id: em
                hint_text: "E-Mail"
                icon_right: "email"
                size_hint_x: None
                width: 200
                font_size: 18
                pos_hint: {"center_x": 0.5}

            MDTextFieldRound:
                id: ps
                hint_text: "Password"
                icon_right: "eye-off"
                size_hint_x: None
                width: 200
                font_size: 18
                pos_hint: {"center_x": 0.5}
                password: True

            MDTextFieldRound:
                id: ct
                hint_text: "Country"
                icon_right: "city"
                size_hint_x: None
                width: 200
                font_size: 18
                pos_hint: {"center_x": 0.5}

            MDTextFieldRound:
                id: cn
                hint_text: "Contact"
                icon_right: "contacts"
                size_hint_x: None
                width: 200
                font_size: 18
                pos_hint: {"center_x": 0.5}

            MDTextFieldRound:
                id: gn
                hint_text: "Gender"
                icon_right: "gender-male-female"
                size_hint_x: None
                width: 200
                font_size: 18
                pos_hint: {"center_x": 0.5}

            MDRoundFlatButton:
                text: "Create Account"
                font_size: 12
                pos_hint: {"center_x": 0.5}
                on_press: root.signup()

            MDLabel:
                id: simple_text
                text: "If You Already Have"
                font_size: 12
                halign: 'center'
                size_hint_y: None
                height: self.texture_size[1]
                padding_y: 15

            MDRoundFlatButton:
                text: "Login"
                font_size: 12
                pos_hint: {"center_x": 0.5} 
                on_press: root.login()           

            Widget:
                size_hint_y: None
                height: 10

navigation drawer

:
ScrollView:
MDList:
OneLineListItem:
text: "Profile"
on_press:
root.nav_drawer.set_state("close")
app.root.current = "pro"
OneLineListItem:
text: "Services"
on_press:
root.nav_drawer.set_state("close")
app.root.current = "ser"
OneLineListItem:
text: "Account Info"
on_press:
root.nav_drawer.set_state("close")
app.root.current = "acc"
# OneLineListItem:
# text: "Discount"
# on_press:
# root.nav_drawer.set_state("close")
# app.root.current = "dis"
OneLineListItem:
text: "Paymount"
on_press:
root.nav_drawer.set_state("close")
app.root.current = "pay"
OneLineListItem:
text: 'Theme'
on_press:
app.theme()

navigation screen

<Navigation_Screen>:
name: 'navigation_s'
MDToolbar:
id: toolbar
pos_hint: {"top": 1}
elevation: 10
title: 'FDM'
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]

MDNavigationLayout:
    # id: nl
    x: toolbar.height
    ScreenManager:
        id: screen_manager

    MDNavigationDrawer:
        id: nav_drawer
        ContentNavigationDrawer:
            screen_manager: screen_manager
            nav_drawer: nav_drawer 

:
name: "pro"
on_pre_enter: root.fetch()
MDCard:
size_hint: None, None
size: root.width, root.height
pos_hint: {"center_x": 0.5, "center_y": 0.5}
elevation: 10
# padding: 25
# spacing: 25
orientation: 'vertical'
MDToolbar:
id: toolbar
pos_hint: {"top": 1}
elevation: 10
title: 'Profile'
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]

    ScrollView:
        MDCard:
            size_hint: None, None
            size: root.width, 500
            pos_hint: {"center_x": 0.5, "center_y": 0.5}
            elevation: 10
            padding: 25
            spacing: 25
            orientation: 'vertical'
            MDLabel:
                id: bl
                text: "Balance: 0"
                font_size: 20
                halign: "left"
                height: self.texture_size[1]
                padding_y: 15
            MDLabel:
                id: op
                text: "Order Pending: 0"
                font_size: 20
                halign: "left"
                height: self.texture_size[1]
                padding_y: 15
            MDLabel:
                id: de
                text: "Pending Order: No Order 0"
                font_size: 20
                halign: "left"
                height: self.texture_size[1]
                padding_y: 15
            MDLabel:
                id: pa
                text: "Pending Amount: 0"
                font_size: 20
                halign: "left"
                height: self.texture_size[1]
                padding_y: 15
            MDLabel:
                id: oc
                text: "Order Completed: 0"
                font_size: 20
                halign: "left"
                height: self.texture_size[1]
                padding_y: 15
            MDLabel:
                id: ca
                text: "Completed Amount: 0"
                font_size: 20
                halign: "left"
                height: self.texture_size[1]
                padding_y: 15
            MDLabel:
                id: tor
                text: "Total Order: 0"
                font_size: 20
                halign: "left"
                height: self.texture_size[1]
                padding_y: 15
            MDLabel:
                id: tora
                text: "Total Order Amount: 0"
                font_size: 20
                halign: "left"
                height: self.texture_size[1]
                padding_y: 15

            MDRoundFlatButton:
                text: 'Refresh'
                pos_hint: {'center_x':0.5,'center_y':0.5}
                on_press: root.refresh()                

MDNavigationLayout:
    x: toolbar.height
    ScreenManager:
        id: screen_manager
    MDNavigationDrawer:
        id: nav_drawer
        ContentNavigationDrawer:
            screen_manager: screen_manager
            nav_drawer: nav_drawer 

:
name: 'ser'
on_pre_enter: root.build()
MDCard:
id: mdcar
size_hint: None, None
size: root.width, root.height
pos_hint: {"center_x": 0.5, "center_y": 0.5}
elevation: 10
# padding: 25
# spacing: 25
orientation: 'vertical'
MDToolbar:
id: toolbar
pos_hint: {"top": 1}
elevation: 10
title: 'Services'
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]

MDNavigationLayout:
    # id: nl
    x: toolbar.height
    ScreenManager:
        id: screen_manager
    MDNavigationDrawer:
        id: nav_drawer
        ContentNavigationDrawer:
            screen_manager: screen_manager
            nav_drawer: nav_drawer 

:
name: "acc"
on_pre_enter: root.refresh()
MDCard:
size_hint: None, None
size: root.width, root.height
pos_hint: {"center_x": 0.5, "center_y": 0.5}
elevation: 10
# padding: 25
# spacing: 25
orientation: 'vertical'
MDToolbar:
id: toolbar
pos_hint: {"top": 1}
elevation: 10
title: 'Account Info'
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]
ScrollView:
MDCard:
size_hint: None, None
size: root.width, 550
pos_hint: {"center_x": 0.5, "center_y": 0.5}
elevation: 10
padding: 25
spacing: 25
orientation: 'vertical'

            MDLabel:
                id: welcome_label
                text: "Account Details"
                font_size: 40
                halign: 'center'
                size_hint_y: None
                height: self.texture_size[1]
                padding_y: 15

            MDTextFieldRound:
                id: fn
                hint_text: "First Name"
                icon_right: "account"
                size_hint_x: None
                width: 200
                font_size: 18
                pos_hint: {"center_x": 0.5}

            MDTextFieldRound:
                id: ln
                hint_text: "Last Name"
                icon_right: "account"
                size_hint_x: None
                width: 200
                font_size: 18
                pos_hint: {"center_x": 0.5}

            # MDTextFieldRound:
            #     id: ps
            #     hint_text: "Password"
            #     icon_right: "eye-off"
            #     size_hint_x: None
            #     width: 200
            #     font_size: 18
            #     pos_hint: {"center_x": 0.5}
            #     password: True

            MDTextFieldRound:
                id: ct
                hint_text: "Country"
                icon_right: "city"
                size_hint_x: None
                width: 200
                font_size: 18
                pos_hint: {"center_x": 0.5}

            MDTextFieldRound:
                id: cn
                hint_text: "Contact"
                icon_right: "contacts"
                size_hint_x: None
                width: 200
                font_size: 18
                pos_hint: {"center_x": 0.5}

            MDTextFieldRound:
                id: gn
                hint_text: "Gender"
                icon_right: "gender-male-female"
                size_hint_x: None
                width: 200
                font_size: 18
                pos_hint: {"center_x": 0.5}

            MDLabel:
                id: simple_text
                text: ""
                font_size: 12
                halign: 'center'
                size_hint_y: None
                height: self.texture_size[1]
                padding_y: 15

            MDRoundFlatButton:
                text: "Save"
                font_size: 12
                pos_hint: {"center_x": 0.5} 
                on_press: root.save()           

            Widget:
                size_hint_y: None
                height: 10
    
MDNavigationLayout:
    # id: nl
    x: toolbar.height
    ScreenManager:
        id: screen_manager
    MDNavigationDrawer:
        id: nav_drawer
        ContentNavigationDrawer:
            screen_manager: screen_manager
            nav_drawer: nav_drawer 

:
name: "dis"
MDCard:
size_hint: None, None
size: root.width, root.height
pos_hint: {"center_x": 0.5, "center_y": 0.5}
elevation: 10
# padding: 25
# spacing: 25
orientation: 'vertical'
MDToolbar:
id: toolbar
pos_hint: {"top": 1}
elevation: 10
title: 'Discount'
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]
MDLabel:
text: "Screen 2"
halign: "center"

MDNavigationLayout:
    # id: nl
    x: toolbar.height
    ScreenManager:
        id: screen_manager
    MDNavigationDrawer:
        id: nav_drawer
        ContentNavigationDrawer:
            screen_manager: screen_manager
            nav_drawer: nav_drawer 

:
name: "pay"
MDCard:
size_hint: None, None
size: root.width, root.height
pos_hint: {"center_x": 0.5, "center_y": 0.5}
elevation: 10
# padding: 25
# spacing: 25
orientation: 'vertical'
MDToolbar:
id: toolbar
pos_hint: {"top": 1}
elevation: 10
title: 'Payment'
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]

    ScrollView:
        MDCard:
            size_hint: None, None
            size: root.width, root.height
            pos_hint: {"center_x": 0.5, "center_y": 0.5}
            elevation: 10
            padding: 25
            spacing: 25
            orientation: 'vertical'
            MDFloatLayout:
                MDRoundFlatButton:
                    text: "Payoneer"
                    pos_hint: {'center_x': .5, 'center_y': .5}
                    font_size: 25
                    on_release: root.payoneer()
            MDFloatLayout:
                MDRoundFlatButton:
                    text: "Jazzcash"
                    pos_hint: {'center_x': .5, 'center_y': .5}
                    font_size: 25
                    on_release: root.jazzcash()
            MDFloatLayout:
                MDRoundFlatButton:
                    text: "easypaisa"
                    pos_hint: {'center_x': .5, 'center_y': .5}
                    font_size: 25
                    on_release: root.easypaisa()
            # MDLabel:
            #     id: easypaisa
            #     text: "easypaisa"
            #     font_size: 25
            #     halign: 'center'
            #     size_hint_y: None
            #     height: self.texture_size[1]
            #     padding_y: 15
            # MDLabel:
            #     id: easyno
            #     text: "031334061349"
            #     font_size: 20
            #     halign: 'center'
            #     size_hint_y: None
            #     height: self.texture_size[1]
            #     padding_y: 15
            # MDLabel:
            #     id: payoneer
            #     text: "Payoneer"
            #     font_size: 25
            #     halign: 'center'
            #     size_hint_y: None
            #     height: self.texture_size[1]
            #     padding_y: 15
            # MDLabel:
            #     id: payaccount
            #     text: "abdullahahmad12488421@gmail.com"
            #     font_size: 20
            #     halign: 'center'
            #     size_hint_y: None
            #     height: self.texture_size[1]
            #     padding_y: 15

MDNavigationLayout:
    # id: nl
    x: toolbar.height
    ScreenManager:
        id: screen_manager
    MDNavigationDrawer:
        id: nav_drawer
        ContentNavigationDrawer:
            screen_manager: screen_manager
            nav_drawer: nav_drawer 

"""

main screen class

class Main_Screen(Screen):
pass

navigation screen class

class Navigation_Screen(Screen):
def init(self,**kwargs):
super (Navigation_Screen,self).init(**kwargs)

navigation drawer class

class ContentNavigationDrawer(BoxLayout):
screen_manager = ObjectProperty()
nav_drawer = ObjectProperty()
def init(self,**kwargs):
super (ContentNavigationDrawer,self).init(**kwargs)

def abcd(self,*args):
    Login_Screen.abcd(self)

login screen class

class Login_Screen(Screen):
def init(self,**kwargs):
super (Login_Screen,self).init(**kwargs)

def abcd(self,*args):
    Screen.manager.current = 'pro'

def login(self,*args):
    self.ids.simple_text.text = "Wait Please\nLook Like Your Internet Is slow"
    em = self.ids.em.text
    ps = self.ids.ps.text
    em1 = str()
    ps1 = str()
    correct = False

    try:
        if em =='':
            self.ids.simple_text.text = "Error E-Mail is Empty"
        elif ps =='':
            self.ids.simple_text.text = "Error Password is Empty"
        else:
            connection = pymysql.connect(host="sql6.freemysqlhosting.net",user="sql6422502",passwd="pX74cR7NxP",database="sql6422502" )
            cursor = connection.cursor()
            retrive = "select em,ps from login;"
            #executing the quires
            cursor.execute(retrive)
            rows = cursor.fetchall()
            for row in rows:
                em1=row[0]
                ps1=row[1]
                if em == em1 and ps == ps1:
                    correct = True
                    text = open('important.txt','w')
                    text.write(em+"|#$#|"+ps)
                    text.close()
            if correct == True:
                connection.commit()
                connection.close()
                self.manager.current = 'pro'
            else:
                self.ids.simple_text.text = "Wrong Password\nContact 03150490481 for Password Reset"
    except:
        self.ids.simple_text.text = "Error Make Sure You Connected To Internet"
    
def signup(self,*args):
    self.manager.current = 'signup_s'

signup screen class

class Signup_Screen(Screen):
def init(self,**kwargs):
super (Signup_Screen,self).init(**kwargs)

def login(self,*args):
    self.manager.current = 'login_s'

def signup(self,*args):
    self.ids.simple_text.text = "Wait Please\nLook Like Your Internet Is slow"
    # variables
    a = str(date.today())

    date_ = a
    fn = self.ids.fn.text
    ln = self.ids.ln.text
    em = self.ids.em.text
    ps = self.ids.ps.text
    ct = self.ids.ct.text
    cn = self.ids.cn.text
    gn = self.ids.gn.text

    try:
        if fn =='':
            self.ids.simple_text.text = "Error First Name is Empty"
        elif em =='':
            self.ids.simple_text.text = "Error E-Mail is Empty"
        elif ps =='':
            self.ids.simple_text.text = "Error Password is Empty"
        elif cn =='':
            self.ids.simple_text.text = "Error Contact No is Empty"
        else:
            connection = pymysql.connect(host="sql6.freemysqlhosting.net",user="sql6422502",passwd="pX74cR7NxP",database="sql6422502" )
            cursor = connection.cursor()
            acc_d = open('acc.txt','w')
            acc_d.write(fn+'|&*&|'+ln+"|&*&|"+ps+"|&*&|"+ct+"|&*&|"+cn+"|&*&|"+gn)
            acc_d.close()
            retrive = "INSERT INTO login(date,fn,ln,em,ps,ct,cn,gn) VALUES('"+date_+"', '"+fn+"', '"+ln+"', '"+em+"', '"+ps+"', '"+ct+"', '"+cn+"', '"+gn+"' );"
            cursor.execute(retrive)
            rows = cursor.fetchall()
            connection.commit()
            connection.close()
            self.manager.current = 'login_s'
    except:
        self.ids.simple_text.text = "Error Make Sure You Connected To Internet"

pro screen class

class pro(Screen):

def __init__(self,**kwargs):
    super (pro,self).__init__(**kwargs)

def fetch(self,*args):
    text = open('important1.txt','r')
    tex_r = text.read()
    self.ids.bl.text,self.ids.op.text,self.ids.oc.text,self.ids.tor.text,self.ids.pa.text,self.ids.ca.text,self.ids.tora.text,self.ids.de.text = tex_r.split("|#$#|")
    text.close()

def refresh(self,*args):
    bl = self.ids.bl.text
    op = self.ids.op.text
    oc = self.ids.oc.text
    tor = self.ids.tor.text
    pa = self.ids.pa.text
    ca = self.ids.ca.text
    tora = self.ids.tora.text
    de = self.ids.de.text
    text = open('important.txt','r')
    tex_r = text.read()
    em,ps = tex_r.split("|#$#|")
    text.close()
    try:
        connection = pymysql.connect(host="sql6.freemysqlhosting.net",user="sql6422502",passwd="pX74cR7NxP",database="sql6422502" )
        cursor = connection.cursor()
        retrive = "select bl,op,oc,tor,pa,ca,tora,de from login where em='"+em+"' and ps='"+ps+"';"
        #executing the quires
        cursor.execute(retrive)
        rows = cursor.fetchall()
        for row in rows:
            self.ids.bl.text='Balance: '+row[0]
            self.ids.op.text='Order Pending: '+row[1]
            self.ids.oc.text='Order Completed: '+row[2]
            self.ids.tor.text='Total Order: '+row[3]
            self.ids.pa.text='Pending Amount: '+row[4]
            self.ids.ca.text='Completed Amount: '+row[5]
            self.ids.tora.text='Total Order Amount: '+row[6]
            self.ids.de.text='Pending Order: '+row[7]
            text1 = open('important1.txt','w')
            text1.write(self.ids.bl.text+"|#$#|"+self.ids.op.text+"|#$#|"+self.ids.oc.text+"|#$#|"+self.ids.tor.text+"|#$#|"+self.ids.pa.text+"|#$#|"+self.ids.ca.text+"|#$#|"+self.ids.tora.text+"|#$#|"+self.ids.de.text)
            text1.close()
            
    except:
        text = open('important1.txt','r')
        tex_r = text.read()
        self.ids.bl.text,self.ids.op.text,self.ids.oc.text,self.ids.tor.text,self.ids.pa.text,self.ids.ca.text,self.ids.tora.text,self.ids.de.text = tex_r.split("|#$#|")
        text.close()

ser screen class

class ser(Screen):
dialog=None
dialog1=None
def build(self):
connection = pymysql.connect(host="sql6.freemysqlhosting.net",user="sql6422502",passwd="pX74cR7NxP",database="sql6422502" )
cursor = connection.cursor()
retrive = "select pl,ca,pr from ser;"

    #executing the quires
    cursor.execute(retrive)
    rows = cursor.fetchall()
    # a = []
    # for row in rows:
    #     a.append(row[0],row[1],row[2])
    #commiting the connection then closing it.
    connection.commit()
    connection.close()
    table = MDDataTable(pos_hint = {'center_x':0.5,'center_y':0.5},size_hint = (0.9,0.6),check = True,rows_num=7,
                            column_data =[
                                ("Plateform",dp(30)),
                                ('Categories',dp(30)),
                                ('Price',dp(30)),],
                            row_data = rows )
    table.bind(on_check_press = self.check_press)
    table.bind(on_row_press = self.row_press)
    self.ids.mdcar.add_widget(table)  
def check_press(self,instance_table,current_row):
    text = open('important.txt','r')
    tex_r = text.read()
    em,ps = tex_r.split("|#$#|")
    text.close()
    try:
        connection = pymysql.connect(host="sql6.freemysqlhosting.net",user="sql6422502",passwd="pX74cR7NxP",database="sql6422502" )
        cursor = connection.cursor()
        retrive = "INSERT INTO orders(pl,ca,pr,em,ps) VALUES('"+current_row[0]+"', '"+current_row[1]+"', '"+current_row[2]+"', '"+em+"', '"+ps+"' );"
        cursor.execute(retrive)
        rows = cursor.fetchall()
        connection.commit()
        connection.close()
        if not self.dialog1:
            self.dialog1 = MDDialog(
                text="You Buy This Service Successfully",
                buttons=[
                    MDFlatButton(
                        text="Ok, Thanks",on_release=self.close_error1
                    ),
                ],
            )
        self.dialog1.open()
        
    except:
        if not self.dialog:
            self.dialog = MDDialog(
                text="Check Your Internet",
                buttons=[
                    MDFlatButton(
                        text="Ok",on_release=self.close_error
                    ),
                ],
            )
        self.dialog.open()
def close_error1(self, *args):
    self.dialog1.dismiss(force=True)
def close_error(self, *args):
    self.dialog.dismiss(force=True)
def row_press(self,instance_table,current_row):
    pass

acc screen class

class acc(Screen):
def init(self,**kwargs):
super (acc,self).init(**kwargs)

def refresh(self, *args):
    try:
        acc_d = open('acc.txt','r')
        a = acc_d.read()
        acc_d.close()
        self.ids.fn.text,self.ids.ln.text,ps,self.ids.ct.text,self.ids.cn.text,self.ids.gn.text = a.split('|&*&|')
    except:
        print('e')
        acc_d1 = open('important.txt','r')
        a = acc_d1.read()
        em,ps = a.split('|#$#|')
        acc_d1.close()
        connection = pymysql.connect(host="sql6.freemysqlhosting.net",user="sql6422502",passwd="pX74cR7NxP",database="sql6422502" )
        cursor = connection.cursor()
        retrive = "select fn,ln,ps,ct,cn,gn from login where em='"+em+"' and ps='"+ps+"';"
        cursor.execute(retrive)
        rows = cursor.fetchall()
        for i in rows:
            acc_d = open('acc.txt','w')
            acc_d.write(i[0]+'|&*&|'+i[1]+"|&*&|"+i[2]+"|&*&|"+i[3]+"|&*&|"+i[4]+"|&*&|"+i[5])
            acc_d.close()

def save(self, *args):
    fn = self.ids.fn.text
    ln = self.ids.ln.text
    ct = self.ids.ct.text
    cn = self.ids.cn.text
    gn = self.ids.gn.text
    acc_d1 = open('important.txt','r')
    a = acc_d1.read()
    em,ps = a.split('|#$#|')
    acc_d1.close()
    try:
        connection = pymysql.connect(host="sql6.freemysqlhosting.net",user="sql6422502",passwd="pX74cR7NxP",database="sql6422502" )
        cursor = connection.cursor()
        retrive = "update login set fn='"+fn+"',ln='"+ln+"',ps='"+ps+"',ct='"+ct+"',cn='"+cn+"',gn='"+gn+"' where em='"+em+"' and ps='"+ps+"';"
        acc_d = open('acc.txt','w')
        acc_d.write(fn+'|&*&|'+ln+"|&*&|"+ps+"|&*&|"+ct+"|&*&|"+cn+"|&*&|"+gn)
        acc_d.close()
        cursor.execute(retrive)
        rows = cursor.fetchall()
        connection.commit()
        connection.close()
    except:
        self.ids.simple_text.text = "Error Make Sure You Connected To Internet"

dis screen class

class dis(Screen):
pass

pay screen class

class pay(Screen):
dialog = None
dialog1 = None
dialog2 = None
def init(self,**kwargs):
super (pay,self).init(**kwargs)

def payoneer(self, *args):
    if not self.dialog:
        self.dialog = MDDialog(
            text="E-Mail: abdullahahmad12488421@gmail.com",
            buttons=[
                MDFlatButton(
                    text="Ok",on_release=self.payoneer_dialog_close
                ),
            ],
        )
    self.dialog.open()
def payoneer_dialog_close(self, *args):
    self.dialog.dismiss(force=True)

def jazzcash(self, *args):
    if not self.dialog1:
        self.dialog1 = MDDialog(
            text="Jazzcash: 03059977037",
            buttons=[
                MDFlatButton(
                    text="Ok",on_release=self.jazzcash_dialog_close
                ),
            ],
        )
    self.dialog1.open()
def jazzcash_dialog_close(self, *args):
    self.dialog1.dismiss(force=True)

def easypaisa(self, *args):
    if not self.dialog2:
        self.dialog2 = MDDialog(
            text="Easypaisa: 031334061349",
            buttons=[
                MDFlatButton(
                    text="Ok",on_release=self.easypaisa_dialog_close
                ),
            ],
        )
    self.dialog2.open()
def easypaisa_dialog_close(self, *args):
    self.dialog2.dismiss(force=True)

Create the screen manager

sm = ScreenManager()
sm.add_widget(Main_Screen(name='main_s'))
sm.add_widget(Login_Screen(name='login_s'))
sm.add_widget(Signup_Screen(name='signup_s'))
sm.add_widget(Navigation_Screen(name='navigation_s'))
sm.add_widget(pro(name='pro'))
sm.add_widget(ser(name='ser'))
sm.add_widget(acc(name='acc'))
sm.add_widget(dis(name='dis'))
sm.add_widget(pay(name='pay'))

count = 0

main class

class DemoApp(MDApp):
def build(self):
screen = Builder.load_string(screen_helper)
return screen

def theme(self):
    global count
    if count == 0:
        count = 1
        self.theme_cls.theme_style = "Dark"
        self.theme_cls.primary_palette = "BlueGray"
    else: 
        count = 0
        self.theme_cls.theme_style = "Light"
        self.theme_cls.primary_palette = "Blue"

def variable(self):
    global count

DemoApp().run()

buildozer.spec

[app]

(str) Title of your application

title = FDM

(str) Package name

package.name = com.icd.fdm

(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,txt

(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 = ico.png

(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 = 0.1

(str) Application versioning (method 2)

version.regex = version = '"['"]

version.filename = %(source.dir)s/main.py

(list) Application requirements

comma separated e.g. requirements = sqlite3,kivy

requirements = python3,kivy,pymysql,kivymd,datetime,kivmob,datetime

(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 = ico.png

(str) Icon of the application

icon.filename = ico.png

(str) Supported orientation (one of landscape, sensorLandscape, portrait or all)

orientation = portrait

(list) List of service to declare

#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY,WRITE_EXTERNAL_STORAGE

OSX Specific

author = ICDeveloper© Copyright Info

change the major version of python used by the app

osx.python_version = 3

Kivy version to use

osx.kivy_version = 1.9.1

Android specific

(bool) Indicate if the application should be fullscreen or not

fullscreen = 0

(string) Presplash background color (for new android toolchain)

Supported formats are: #RRGGBB #AARRGGBB or one of the following names:

red, blue, green, black, white, gray, cyan, magenta, yellow, lightgray,

darkgray, grey, lightgrey, darkgrey, aqua, fuchsia, lime, maroon, navy,

olive, purple, silver, teal.

#android.presplash_color = #FFFFFF

(list) Permissions

android.permissions = INTERNET, ACCESS_NETWORK_STATE

(int) Target Android API, should be as high as possible.

#android.api = 27

(int) Minimum API your APK will support.

#android.minapi = 21

(int) Android SDK version to use

#android.sdk = 20

(str) Android NDK version to use

#android.ndk = 19b

(int) Android NDK API to use. This is the minimum API your app will support, it should usually match android.minapi.

#android.ndk_api = 21

(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) ANT directory (if empty, it will be automatically downloaded.)

#android.ant_path =

android.gradle_dependencies = 'com.google.firebase:firebase-ads:10.2.0'
p4a.branch = master

For test ads, use application ID ca-app-pub-3940256099942544~3347511713

android.meta_data = com.google.android.gms.ads.APPLICATION_ID={pub-2946877806572624}

(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

(bool) If True, then automatically accept SDK license

agreements. This is intended for automation only. If set to False,

the default, you will be shown the license when first running

buildozer.

android.accept_sdk_license = False

(str) Android entry point, default is ok for Kivy-based app

#android.entrypoint = org.renpy.android.PythonActivity

(str) Android app theme, default is ok for Kivy-based app

android.apptheme = "@android:style/Theme.NoTitleBar"

(list) Pattern to whitelist for the whole project

#android.whitelist =

(str) Path to a custom whitelist file

#android.whitelist_src =

(str) Path to a custom blacklist file

#android.blacklist_src =

(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 =

(list) Android AAR archives to add (currently works only with sdl2_gradle

bootstrap)

#android.add_aars =

(list) Gradle dependencies to add (currently works only with sdl2_gradle

bootstrap)

#android.gradle_dependencies =

(list) add java compile options

this can for example be necessary when importing certain java libraries using the 'android.gradle_dependencies' option

see https://developer.android.com/studio/write/java8-support for further information

android.add_compile_options = "sourceCompatibility = 1.8", "targetCompatibility = 1.8"

(list) Gradle repositories to add {can be necessary for some android.gradle_dependencies}

please enclose in double quotes

e.g. android.gradle_repositories = "maven { url 'https://kotlin.bintray.com/ktor' }"

#android.add_gradle_repositories =

(list) packaging options to add

see https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.PackagingOptions.html

can be necessary to solve conflicts in gradle_dependencies

please enclose in double quotes

e.g. android.add_packaging_options = "exclude 'META-INF/common.kotlin_module'", "exclude 'META-INF/*.kotlin_module'"

#android.add_gradle_repositories =

(list) Java classes to add as activities to the manifest.

#android.add_activities = com.example.ExampleActivity

(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 =

(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
#android.add_libs_arm64_v8a = libs/android-v8/.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 =

(list) Android shared libraries which will be added to AndroidManifest.xml using tag

#android.uses_library =

(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

(str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86, x86_64

android.arch = armeabi-v7a

(int) overrides automatic versionCode computation (used in build.gradle)

this is not the same as app version and should only be edited if you know what you're doing

android.numeric_version = 1

Python for android (p4a) specific

(str) python-for-android fork to use, defaults to upstream (kivy)

#p4a.fork = kivy

(str) python-for-android branch to use, defaults to master

#p4a.branch = master

(str) python-for-android git clone directory (if empty, it will be automatically cloned from github)

#p4a.source_dir =

(str) The directory in which python-for-android should look for your own build recipes (if any)

#p4a.local_recipes =

(str) Filename to the hook for p4a

#p4a.hook =

(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

(str) Path to a custom kivy-ios folder

#ios.kivy_ios_dir = ../kivy-ios

Alternately, specify the URL and branch of a git checkout:

ios.kivy_ios_url = https://github.com/kivy/kivy-ios
ios.kivy_ios_branch = master

Another platform dependency: ios-deploy

Uncomment to use a custom checkout

#ios.ios_deploy_dir = ../ios_deploy

Or specify URL and branch

ios.ios_deploy_url = https://github.com/phonegap/ios-deploy
ios.ios_deploy_branch = 1.7.0

(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

(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/

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

@Igbana
Copy link

Igbana commented Nov 1, 2021

What I noticed was that kivy projects were building well, but kivymd projects were crashing after the splashscreen. This worked for me

requirements = python3,kivy==2.0.0,https://github.com/kivymd/KivyMd/archive/master.zip,pygments,sdl2_ttf==2.0.15,pillow,docutils,plyer

@Julian-O
Copy link
Contributor

Closing as a support issue that's got out of control.

@Julian-O Julian-O closed this as not planned Won't fix, can't repro, duplicate, stale Nov 19, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants