Plyer ModuleNotFoundError

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

Hallo Forum
Ich habe auf meinem Windows 11-System VirtualBox mit Ubuntu 22.04 installiert, in der ich dann Python3.10.12 zusammen mit PyCharm installiert habe.
Damit habe ich meine erste kleine Android-App mit kivy und buildozer erstellt (Hello world-App) und sauber an mein Handy übertragen.
Jetzt wollte ich meiner ersten App weiteres Leben einhauchen, in dem ich auf meinem Handy aktuelle GPS-Koordinaten ausgeben lasse.
Je nach dem wo ich rumlaufe, sollen GPS Lat und Lon angezeigt werden. Das versuche ich mit dem Modul plyer umzusetzen.
Dazu habe ich nach sudo apt-get update && sudo apt-get upgrade den Befehl sudo apt-get install plyer ausgeführt und auch in den PyCharm-Settings
zusätzlich noch mal plyer installiert.
Nachdem ich meinen Code laufen lasse

Code: Alles auswählen

from kivy.app import App
from kivy.clock import Clock
from plyer import gps


class TestApp(App):

    def start_gps(self):
        gps.configure(on_location=self.on_location)
        gps.start(1000, 0)  # GPS-Updates alle 1 Sekunde

    @staticmethod
    def stop_gps():
        gps.stop()

    @staticmethod
    def on_location(**kwargs):
        lat = kwargs['lat']
        lon = kwargs['lon']
        # self.gps_label.text = f"GPS-Koordinaten: Lat {lat}, Lon {lon}"
        print(f"GPS-Koordinaten: Lat {lat}, Lon {lon}")


if __name__ == '__main__':
    TestApp().run()
erhalte ich aber nun diesen Fehler:

Code: Alles auswählen

[INFO   ] [Logger      ] Record log in /home/dmd/.kivy/logs/kivy_23-10-07_0.txt
[INFO   ] [Kivy        ] v2.2.1
[INFO   ] [Kivy        ] Installed at "/home/dmd/Dokumente/GPS-App/venv/lib/python3.10/site-packages/kivy/__init__.py"
[INFO   ] [Python      ] v3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0]
[INFO   ] [Python      ] Interpreter at "/home/dmd/Dokumente/GPS-App/venv/bin/python"
[INFO   ] [Logger      ] Purge log fired. Processing...
[INFO   ] [Logger      ] Purge finished!
[INFO   ] [Factory     ] 190 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2 (img_pil, img_ffpyplayer ignored)
[INFO   ] [Window      ] Provider: sdl2
[INFO   ] [GL          ] Using the "OpenGL" graphics system
[INFO   ] [GL          ] Backend used <sdl2>
[INFO   ] [GL          ] OpenGL version <b'4.5 (Compatibility Profile) Mesa 23.0.4-0ubuntu1~22.04.1'>
[INFO   ] [GL          ] OpenGL vendor <b'Mesa'>
[INFO   ] [GL          ] OpenGL renderer <b'llvmpipe (LLVM 15.0.7, 256 bits)'>
[INFO   ] [GL          ] OpenGL parsed version: 4, 5
[INFO   ] [GL          ] Shading version <b'4.50'>
[INFO   ] [GL          ] Texture max size <16384>
[INFO   ] [GL          ] Texture max units <32>
[INFO   ] [Window      ] auto add sdl2 input provider
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [Text        ] Provider: sdl2
WARNING: running xinput against an Xwayland server. See the xinput man page for details.
WARNING: running xinput against an Xwayland server. See the xinput man page for details.
WARNING: running xinput against an Xwayland server. See the xinput man page for details.
WARNING: running xinput against an Xwayland server. See the xinput man page for details.
WARNING: running xinput against an Xwayland server. See the xinput man page for details.
WARNING: running xinput against an Xwayland server. See the xinput man page for details.
WARNING: running xinput against an Xwayland server. See the xinput man page for details.
WARNING: running xinput against an Xwayland server. See the xinput man page for details.
WARNING: running xinput against an Xwayland server. See the xinput man page for details.
[INFO   ] [Base        ] Start application main loop
[INFO   ] [GL          ] NPOT texture support is available
 Traceback (most recent call last):
   File "/home/dmd/Dokumente/GPS-App/venv/lib/python3.10/site-packages/plyer/utils.py", line 96, in _ensure_obj
     mod = __import__(module, fromlist='.')
 ModuleNotFoundError: No module named 'plyer.platforms.linux.gps'
[INFO   ] [Base        ] Leaving application in progress...
 Traceback (most recent call last):
   File "/home/dmd/Dokumente/GPS-App/client/app/main.py", line 25, in <module>
     TestApp().run()
   File "/home/dmd/Dokumente/GPS-App/venv/lib/python3.10/site-packages/kivy/app.py", line 956, in run
     runTouchApp()
   File "/home/dmd/Dokumente/GPS-App/venv/lib/python3.10/site-packages/kivy/base.py", line 574, in runTouchApp
     EventLoop.mainloop()
   File "/home/dmd/Dokumente/GPS-App/venv/lib/python3.10/site-packages/kivy/base.py", line 339, in mainloop
     self.idle()
   File "/home/dmd/Dokumente/GPS-App/venv/lib/python3.10/site-packages/kivy/base.py", line 383, in idle
     self.dispatch_input()
   File "/home/dmd/Dokumente/GPS-App/venv/lib/python3.10/site-packages/kivy/base.py", line 334, in dispatch_input
     post_dispatch_input(*pop(0))
   File "/home/dmd/Dokumente/GPS-App/venv/lib/python3.10/site-packages/kivy/base.py", line 302, in post_dispatch_input
     wid.dispatch('on_touch_up', me)
   File "kivy/_event.pyx", line 731, in kivy._event.EventDispatcher.dispatch
   File "/home/dmd/Dokumente/GPS-App/venv/lib/python3.10/site-packages/kivy/uix/behaviors/button.py", line 179, in on_touch_up
     self.dispatch('on_release')
   File "kivy/_event.pyx", line 727, in kivy._event.EventDispatcher.dispatch
   File "kivy/_event.pyx", line 1307, in kivy._event.EventObservers.dispatch
   File "kivy/_event.pyx", line 1191, in kivy._event.EventObservers._dispatch
   File "/home/dmd/Dokumente/GPS-App/venv/lib/python3.10/site-packages/kivy/lang/builder.py", line 55, in custom_callback
     exec(__kvlang__.co_value, idmap)
   File "/home/dmd/Dokumente/GPS-App/client/app/test.kv", line 12, in <module>
     on_release: app.start_gps()
   File "/home/dmd/Dokumente/GPS-App/client/app/main.py", line 9, in start_gps
     gps.configure(on_location=self.on_location)
   File "/home/dmd/Dokumente/GPS-App/venv/lib/python3.10/site-packages/plyer/facades/gps.py", line 70, in configure
     self._configure()
   File "/home/dmd/Dokumente/GPS-App/venv/lib/python3.10/site-packages/plyer/facades/gps.py", line 90, in _configure
     raise NotImplementedError()
 NotImplementedError
Ich habe also einen ModuleNotFoundError: No module named 'plyer.platforms.linux.gps'
Kann mir jmd sagen, wie ich diesen Fehler beheben kann?
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

@DMD-OL: Offensichtlich läuft in der VM ein Linux. Das hast du verschwiegen. Und wie genau soll das Programm, wenn es in dieser VM läuft, GPS-Koordinaten erhalten?

plyer stellte daher das gps-Modul nut unter android und iOS zur Verfügung.
Steht auch ein bisschen in der Fehlermeldung: "NotImplementedError".
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

GPS hat dein Computer nicht. Also läuft der in eine nicht implementierte Funktionalität rein. Zum einen würde ich mal versuchen, den Code trotzdem auf Android zu bekommen & zu schauen, was da passiert. Und dann musst du in deinen Code eine Schicht einfügen, die den GPS-Kram abstrahiert & simulierte Daten liefert. Damit dein Programm weiter läuft. Auf Systemen, die echte Daten liefern, werden die dann genommen.
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

Danke für eure Anteilnahme. Lässt sich das auch so einrichten (mit einem GPS-Tracker für meinen Laptop z.B.), dass ich alles an meinem Laptop machen kann, und dann alles fertig in mein Handy laden kann?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das bezweifele ich, weil es dafuer keine Standardapis gibt. Frickeln kann man immer was, dann musst du eben de Code in gps.py anschauen & tun, was zu tun ist. Aber wie gesagt, das weg zu abstrahieren ist trivial, und ein schnellerer Weg zum Erfolg.
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

Ich habe den Code oben jetzt mal wie er da steht an das Anrdroid übergeben (habe im erstellten spec-File bei requirements plyer hinzugefügt), ohne dass der self.gps_label.text sich geändert hat. Wenn ich in der Funktion start_gps alles auskommentiere und dem Label nach Button-Klick ein Hello world übergebe, wird das ausgeführt.
Die App ist aber auch nicht abgestürzt. Es ist eben bis auf das Button-Blinken nichts passiert.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Code oben mit dem staticmethod ist ja auch hot garbage. Das ist da völlige fehl am Platz.

Ich kenne die debugging-Möglichkeiten von Android/Kivy nicht, die musst du eben nutzen.
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

Ich kann doch ein Kivy Hello world übertragen. Debugging Android/Kivy funktioniert.
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

Hängt das Debugging mit dem Logging level zusammen, den hab ich in der spec mit 2 angegeben.
Muss ich in meinem Handy noch etwas freischalten?
Vielleicht weiss das ja jemand?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Keine Ahnung. Bekommst du print Ausgaben? Dann sollte ja sichtbar sein, ob der callback aufgerufen wird. Bekommst du Stacktraces? Das ist ja notwendig, um Fehler zu erkennen. Diese Dinge musst du irgendwie hinbekommen.
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

Ich habe es mit

Code: Alles auswählen

buildozer android debug deploy run logcat > gps_app_logcat.txt
gestartet:

Code: Alles auswählen

dmd@dmd-ubuntu:~$ ~/build-apk.sh
[WARNING]: prerequisites.py is experimental and does not support all prerequisites yet.
[WARNING]: Please report any issues to the python-for-android issue tracker.
[WARNING]: prerequisites.py is experimental and does not support all prerequisites yet.
[WARNING]: Please report any issues to the python-for-android issue tracker.
[WARNING]: prerequisites.py is experimental and does not support all prerequisites yet.
[WARNING]: Please report any issues to the python-for-android issue tracker.
[WARNING]: prerequisites.py is experimental and does not support all prerequisites yet.
[WARNING]: Please report any issues to the python-for-android issue tracker.
[INFO]:    Will compile for the following archs: arm64-v8a, armeabi-v7a
[INFO]:    Found Android API target in $ANDROIDAPI: 31
[INFO]:    Available Android APIs are (31)
[INFO]:    Requested API target 31 is available, continuing.
[INFO]:    Found NDK dir in $ANDROIDNDK: /home/dmd/.buildozer/android/platform/android-ndk-r25b
[INFO]:    Found NDK version 25b
[INFO]:    Getting NDK API version (i.e. minimum supported API) from user argument
[INFO]:    ccache is missing, the build will not be optimized in the future.
[DEBUG]:   All possible dists: [<Distribution: name gps with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob)>, <Distribution: name myapp with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, certifi, requests, urllib3, idna, plyer, chardet)>]
[DEBUG]:   Dist matching name and arch: [<Distribution: name gps with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob)>]
[DEBUG]:   Dist matching ndk_api and recipe: [<Distribution: name gps with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob)>]
[INFO]:    Of the existing distributions, the following meet the given requirements:
[INFO]:    	gps: min API 21, includes recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob), built for archs (arm64-v8a, armeabi-v7a)
[INFO]:    gps has compatible recipes, using this one
[WARNING]: prerequisites.py is experimental and does not support all prerequisites yet.
[WARNING]: Please report any issues to the python-for-android issue tracker.
[WARNING]: prerequisites.py is experimental and does not support all prerequisites yet.
[WARNING]: Please report any issues to the python-for-android issue tracker.
[INFO]:    Will compile for the following archs: arm64-v8a, armeabi-v7a
[INFO]:    Found Android API target in $ANDROIDAPI: 31
[INFO]:    Available Android APIs are (31)
[INFO]:    Requested API target 31 is available, continuing.
[INFO]:    Found NDK dir in $ANDROIDNDK: /home/dmd/.buildozer/android/platform/android-ndk-r25b
[INFO]:    Found NDK version 25b
[INFO]:    Getting NDK API version (i.e. minimum supported API) from user argument
[INFO]:    ccache is missing, the build will not be optimized in the future.
[DEBUG]:   All possible dists: [<Distribution: name gps with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob)>, <Distribution: name myapp with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, certifi, requests, urllib3, idna, plyer, chardet)>]
[DEBUG]:   Dist matching name and arch: [<Distribution: name gps with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob)>]
[DEBUG]:   Dist matching ndk_api and recipe: [<Distribution: name gps with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob)>]
[INFO]:    Of the existing distributions, the following meet the given requirements:
[INFO]:    	gps: min API 21, includes recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob), built for archs (arm64-v8a, armeabi-v7a)
[INFO]:    gps has compatible recipes, using this one
[DEBUG]:   All possible dists: [<Distribution: name gps with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob)>, <Distribution: name myapp with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, certifi, requests, urllib3, idna, plyer, chardet)>]
[DEBUG]:   Dist matching name and arch: [<Distribution: name gps with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob)>]
[DEBUG]:   Dist matching ndk_api and recipe: [<Distribution: name gps with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob)>]
[INFO]:    Of the existing distributions, the following meet the given requirements:
[INFO]:    	gps: min API 21, includes recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob), built for archs (arm64-v8a, armeabi-v7a)
[INFO]:    gps has compatible recipes, using this one
[INFO]:    -> directory context /home/dmd/Dokumente/Plyer-Test/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/bootstrap_builds/sdl2
[INFO]:    <- directory context /home/dmd/Dokumente/Plyer-Test/.buildozer/android/platform/python-for-android
[INFO]:    -> directory context /home/dmd/Dokumente/Plyer-Test/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/gps
[DEBUG]:   Remove directory and subdirectory src/main/assets
[DEBUG]:   Create directory src/main/assets
[DEBUG]:   Remove directory and subdirectory /tmp/p4a-extra-env-ufvjq842
[DEBUG]:   Remove directory and subdirectory src/main/res
[INFO]:    Detected highest available build tools version to be 34.0.0
[DEBUG]:   -> running gradlew clean assembleDebug
[DEBUG]:   	Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details	
[DEBUG]:   	
[DEBUG]:   	> Task :stripDebugDebugSymbols
[DEBUG]:   	Unable to strip the following libraries, packaging them as they are: libSDL2.so, libSDL2_image.so, libSDL2_mixer.so, libSDL2_ttf.so, libcrypto1.1.so, libffi.so, libmain.so, libpybundle.so, libpython3.10.so, libsqlite3.so, libssl1.1.so.
[DEBUG]:   	
[DEBUG]:   	> Task :compileDebugJavaWithJavac
[DEBUG]:   	Note: Some input files use or override a deprecated API.
[DEBUG]:   	Note: Recompile with -Xlint:deprecation for details.
[DEBUG]:   	
[DEBUG]:   	Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
[DEBUG]:   	> IDLE
[DEBUG]:   	You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
[DEBUG]:   	
[DEBUG]:   	See https://docs.gradle.org/7.4.1/userguide/command_line_interface.html#sec:command_line_warnings
[DEBUG]:   	
[DEBUG]:   	BUILD SUCCESSFUL in 23s
[DEBUG]:   	31 actionable tasks: 31 executed

[INFO]:    <- directory context /home/dmd/Dokumente/Plyer-Test/.buildozer/android/platform/python-for-android
[DEBUG]:   All possible dists: [<Distribution: name gps with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob)>, <Distribution: name myapp with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, certifi, requests, urllib3, idna, plyer, chardet)>]
[DEBUG]:   Dist matching name and arch: [<Distribution: name gps with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob)>]
[DEBUG]:   Dist matching ndk_api and recipe: [<Distribution: name gps with recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob)>]
[INFO]:    Of the existing distributions, the following meet the given requirements:
[INFO]:    	gps: min API 21, includes recipes (hostpython3, libffi, openssl, sdl2_image, sdl2_mixer, sdl2_ttf, sqlite3, python3, sdl2, setuptools, six, pyjnius, android, kivy, urllib3, requests, https://github.com/hyturtle/plyer/archive/master.zip, jnius, chardet, plyer, certifi, idna, kivmob), built for archs (arm64-v8a, armeabi-v7a)
[INFO]:    gps has compatible recipes, using this one
[INFO]:    # Copying android package to current directory
[INFO]:    # Android package filename not found in build output. Guessing...
[INFO]:    # Found android package file: /home/dmd/Dokumente/Plyer-Test/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/gps/build/outputs/apk/debug/gps-debug.apk
[INFO]:    # Add version number to android package
[INFO]:    # Android package renamed to gps-debug-1.0.apk
[DEBUG]:   -> running cp /home/dmd/Dokumente/Plyer-Test/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/dists/gps/build/outputs/apk/debug/gps-debug.apk gps-debug-1.0.apk
* daemon not running; starting now at tcp:5037
* daemon started successfully
Die gps_app_logcat.txt-Datei ist super lang. Würde ich hier aber auch gern zeigen wollen, wenn nötig :)
Ein Fehler ist für mich als Laie aber nicht auszumachen (in beiden Dateien).
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Edit: ich habe quatsch geredet, ich habe nicht gesehen, dass da auch run bei ist. Das laeuft also.

Dann ist eben nur die Frage: wie bekommst du Ausgaben zu sehen, und stack-traces.
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

Da wär dann noch die Logcat-Datei gps_app_logcat.txt. Mit lockeren 37433 Zeilen.
Es ist alles in weiss, keine Fehler also. So wie es aussieht.
Soll ich?
Kann man irgendwo nachschauen, was man in der buildozer.spec benutzen sollte, für bestimmte Handy-Betriebssysteme?
By the way: OPPO A74 mit Android 11
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

Hier noch meine Buildozer-Spec, die ich so laufen lassen habe:

Code: Alles auswählen

# This .spec config file tells Buildozer an app's requirements for being built.
#
# It largely follows the syntax of an .ini file.
# See the end of the file for more details and warnings about common mistakes.

[app]

# (str) Title of your application
title = GPS-App

# (str) Package name
package.name = gps

# (str) Package domain (needed for android/ios packaging)
package.domain = org.dmd

# (str) Source code where the main.py live
source.dir = .


# (list) Source files to include (leave 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 (leave empty to not exclude anything)
#source.exclude_exts = spec

# (list) List of directory to exclude (leave empty to not exclude anything)
#source.exclude_dirs = tests, bin, venv

# (list) List of exclusions using pattern matching
# Do not prefix with './'
#source.exclude_patterns = license,images/*/*.jpg


# (str) Application versioning (method 1)
version = 1.0

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

# Hier ist der letzte Eintrag https://github.com/HyTurtle/plyer/archive/master.zip ein Ersatz für das Plyer-Modul,
# so wie ich es im Netz bei einem mit dem selben Problem gefunden habe. Ich habe dann einfach beide verwendet (zur Sicherheit).
requirements = python3, kivy, requests, android, jnius, kivmob, plyer, https://github.com/HyTurtle/plyer/archive/master.zip

# (str) Custom source folders for requirements
# Sets custom source for any requirements with recipes
# requirements.source.kivy = ../../kivy

# (str) Presplash of the application
#presplash.filename = %(source.dir)s/data/presplash.png

# (str) Icon of the application PNG
#icon.filename = %(source.dir)s/data/icon.png

# (list) Supported orientations
# Valid options are: landscape, portrait, portrait-reverse or landscape-reverse
orientation = portrait

# (list) List of services to declare
# This is currently only relevant to Android services.
# Each service consists of a name (a valid Java class name, with the first letter capitalized)
# followed by a colon, followed by the name of the Python script (.py file) that should be
# launched. This is optionally followed by ":foreground" for foreground services or
# ":foreground:sticky" for sticky foreground services. The default is a background service.
# Bound services are not supported.
#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY

#
# OSX Specific
#

#
# author = © Copyright Info

# Kivy version to use 
# In der main.py habe ich kivy.require("1.10.1") angegeben. Auch was anderes ohne Ergebnis ausprobiert :(
osx.kivy_version = 1.10.1

#
# Android specific
#

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

# (string) Presplash background color (for 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

# (string) Presplash animation using Lottie format.
# see https://lottiefiles.com/ for examples and https://airbnb.design/lottie/
# for general documentation.
# Lottie files can be created using various tools, like Adobe After Effect or Synfig.
#android.presplash_lottie = "path/to/lottie/file.json"

# (str) Adaptive icon of the application (used if Android API level is 26+ at runtime)
#icon.adaptive_foreground.filename = %(source.dir)s/data/icon_fg.png
#icon.adaptive_background.filename = %(source.dir)s/data/icon_bg.png

# (list) Permissions
# (See https://python-for-android.readthedocs.io/en/latest/buildoptions/#build-options-1 for all the supported syntaxes and properties)
android.permissions = android.permission.INTERNET, (name=android.permission.WRITE_EXTERNAL_STORAGE;maxSdkVersion=18)


# Den Eintrag unten habe ich auch ausprobiert, aber naja :(
# android.permissions = INTERNET, ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION


# (list) features (adds uses-feature -tags to manifest)
#android.features = android.hardware.usb.host

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

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

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

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

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

# (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.kivy.android.PythonActivity

# (str) Full name including package path of the Java class that implements Android Activity
# use that parameter together with android.entrypoint to set custom Java class instead of PythonActivity
#android.activity_class_name = org.kivy.android.PythonActivity

# (str) Extra xml to write directly inside the <manifest> element of AndroidManifest.xml
# use that parameter to provide a filename from where to load your custom XML code
#android.extra_manifest_xml = ./src/android/extra_manifest.xml

# (str) Extra xml to write directly inside the <manifest><application> tag of AndroidManifest.xml
# use that parameter to provide a filename from where to load your custom XML arguments:
#android.extra_manifest_application_arguments = ./src/android/extra_manifest_application_arguments.xml

# (str) Full name including package path of the Java class that implements Python Service
# use that parameter to set custom Java class which extends PythonService
#android.service_class_name = org.kivy.android.PythonService

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

# (bool) If True, your application will be listed as a home app (launcher app)
# android.home_app = False

# (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
#android.add_aars =

# (list) Put these files or directories in the apk assets directory.
# Either form may be used, and assets need not be in 'source.include_exts'.
# 1) android.add_assets = source_asset_relative_path
# 2) android.add_assets = source_asset_path:destination_asset_relative_path
#android.add_assets =

# (list) Put these files or directories in the apk res directory.
# The option may be used in three ways, the value may contain one or zero ':'
# Some examples:
# 1) A file to add to resources, legal resource names contain ['a-z','0-9','_']
# android.add_resources = my_icons/all-inclusive.png:drawable/all_inclusive.png
# 2) A directory, here  'legal_icons' must contain resources of one kind
# android.add_resources = legal_icons:drawable
# 3) A directory, here 'legal_resources' must contain one or more directories, 
# each of a resource kind:  drawable, xml, etc...
# android.add_resources = legal_resources
#android.add_resources =

# (list) Gradle dependencies to add
#android.gradle_dependencies =

# (bool) Enable AndroidX support. Enable when 'android.gradle_dependencies'
# contains an 'androidx' package, or any package from Kotlin source.
# android.enable_androidx requires android.api >= 28
#android.enable_androidx = True

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

# (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 <activity> tag
#android.manifest.intent_filters =

# (list) Copy these files to src/main/res/xml/ (used for example with intent-filters)
#android.res_xml = PATH_TO_FILE,

# (str) launchMode to set for the main activity
#android.manifest.launch_mode = standard

# (str) screenOrientation to set for the main activity.
# Valid values can be found at https://developer.android.com/guide/topics/manifest/activity-element
#android.manifest.orientation = fullSensor

# (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 <uses-library> tag
#android.uses_library =

# (str) Android logcat filters to use
#android.logcat_filters = *:S python:D

# (bool) Android logcat only display log for activity's pid
#android.logcat_pid_only = False

# (str) Android additional adb arguments
#android.adb_args = -H host.docker.internal

# (bool) Copy library instead of making a libpymodules.so
#android.copy_libs = 1

# (list) The Android archs to build for, choices: armeabi-v7a, arm64-v8a, x86, x86_64
# In past, was `android.arch` as we weren't supporting builds for multiple archs at the same time.
android.archs = arm64-v8a, 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

# (bool) enables Android auto backup feature (Android API >=23)
android.allow_backup = True

# (str) XML file for custom backup rules (see official auto backup documentation)
# android.backup_rules =

# (str) If you need to insert variables into your AndroidManifest.xml file,
# you can do so with the manifestPlaceholders property.
# This property takes a map of key-value pairs. (via a string)
# Usage example : android.manifest_placeholders = [myCustomUrl:\"org.kivy.customurl\"]
# android.manifest_placeholders = [:]

# (bool) Skip byte compile for .py files
# android.no-byte-compile-python = False

# (str) The format used to package the app for release mode (aab or apk or aar).
# android.release_artifact = aab

# (str) The format used to package the app for debug mode (apk or aar).
# android.debug_artifact = apk

#
# Python for android (p4a) specific
#

# (str) python-for-android URL to use for checkout
#p4a.url =

# (str) python-for-android fork to use in case if p4a.url is not specified, defaults to upstream (kivy)
#p4a.fork = kivy

# (str) python-for-android branch to use, defaults to master
#p4a.branch = master

# (str) python-for-android specific commit to use, defaults to HEAD, must be within p4a.branch
#p4a.commit = HEAD

# (str) python-for-android git clone directory
#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
# Run "buildozer android p4a -- bootstraps" for a list of valid values.
# p4a.bootstrap = sdl2

# (int) port number to specify an explicit --port= p4a argument (eg for bootstrap flask)
#p4a.port =

# Control passing the --use-setup-py vs --ignore-setup-py to p4a
# "in the future" --use-setup-py is going to be the default behaviour in p4a, right now it is not
# Setting this to false will pass --ignore-setup-py, true will pass --use-setup-py
# NOTE: this is general setuptools integration, having pyproject.toml is enough, no need to generate
# setup.py if you're using Poetry, but you need to add "toml" to source.include_exts.
#p4a.setup_py = false

# (str) extra command line arguments to pass when invoking pythonforandroid.toolchain
#p4a.extra_args =



#
# 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.12.2

# (bool) Whether or not to sign the code
ios.codesign.allowed = false

# (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) The development team to use for signing the debug version
#ios.codesign.development_team.debug = <hexstring>

# (str) Name of the certificate to use for signing the release version
#ios.codesign.release = %(ios.codesign.debug)s

# (str) The development team to use for signing the release version
#ios.codesign.development_team.release = <hexstring>

# (str) URL pointing to .ipa file to be installed
# This option should be defined along with `display_image_url` and `full_size_image_url` options.
#ios.manifest.app_url =

# (str) URL pointing to an icon (57x57px) to be displayed during download
# This option should be defined along with `app_url` and `full_size_image_url` options.
#ios.manifest.display_image_url =

# (str) URL pointing to a large icon (512x512px) to be used by iTunes
# This option should be defined along with `app_url` and `display_image_url` options.
#ios.manifest.full_size_image_url =


[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, .aab, .ipa) storage
# bin_dir = ./bin

#-----------------------------------------------------------------------------
#   Notes about using this file:
#
#   Buildozer uses a variant of Python's ConfigSpec to read this file.
#   For the basic syntax, including interpolations, see
#       https://docs.python.org/3/library/configparser.html#supported-ini-file-structure
#
#   Warning: Comments cannot be used "inline" - i.e.
#       [app]
#       title = My Application # This is not a comment, it is part of the title.
#
#   Warning: Indented text is treated as a multiline string - i.e.
#       [app]
#       title = My Application
#          package.name = myapp # This is all part of the title.
#
#   Buildozer's .spec files have some additional features:
#
#   Buildozer supports lists - i.e.
#       [app]
#       source.include_exts = py,png,jpg
#       #                     ^ This is a list.
#
#       [app:source.include_exts]
#       py
#       png
#       jpg
#       # ^ This is an alternative syntax for a list.
#
#   Buildozer's option names are case-sensitive, unlike most .ini files.
#
#   Buildozer supports overriding options through environment variables.
#   Name an environment variable as SECTION_OPTION to override a value in a .spec
#   file.
#
#   Buildozer support overriding options through profiles.
#   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:
#
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe das Gefuehl, wir reden hier aneinander vorbei. Was von Interesse ist, ist die Frage, ob du waehrend des Anwendungslaufes Fehler und Logausgaben zu sehen bekommst. Ja, oder nein? Und wenn nein: schau dir an, ob das irgendwie herstellbar ist. Denn ohne wird es sehr schwer. Das ist wahrscheinlich in diesem Buildozer-Skript beeinflussbar, aber mag auch noch andere Tools involvieren. Oder nicht.
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

Hab ich schon verstanden. Daher habe ich versucht, meine buildozer.spec offen zu legen. Vielleicht weiß jemand besser als ich was man da auskommentieren muss.
Ich starte immer mal wieder Versuche, bisher aber ohne Ergebnis.
In der Buildozer.spec Dokumentation steht auch nicht alles bis zum Ende der spec-Datei beschrieben, was man da alles machen kann. Die behandelt nur die wichtigsten Punkte.
Fehler und Logausgaben habe ich in der Log-Datei (in buildozer heißt die wohl Logcat-Datei s.o. gps_app_logcat.txt, die ich hier noch nicht gezeigt habe) gespeichert.
Die ist sehr lang, wobei ich dort auch keine Fehler aufgeführt finde.
Ansonsten muss ich dann wohl auf Gut-Glück weiterversuchen, Fehler ausgegeben zu bekommen.
Oder gibt es eine Modul, das man für GPS-Tracking leichter benutzen kann?
Oder soll ich mal versuchen, die Logcat-Datei hier zu zeigen?
Antworten