Pyjnius: 1.3.0 merusak request_permission android

Dibuat pada 22 Mei 2020  ·  23Komentar  ·  Sumber: kivy/pyjnius

dilaporkan oleh pengguna (Matrix0206 pada perselisihan).

from android import request_permission, Permission

request_permissions([Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE])
05-22 20:08:20.301 10976 11090 I python  :  Traceback (most recent call last):
05-22 20:08:20.301 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/app/main.py", line 300, in <module>
05-22 20:08:20.301 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/app.py", line 949, in run
05-22 20:08:20.302 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/app.py", line 919, in _run_prepare
05-22 20:08:20.302 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/app/main.py", line 132, in build
05-22 20:08:20.302 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/uix/relativelayout.py", line 274, in __init__
05-22 20:08:20.303 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/uix/floatlayout.py", line 65, in __init__
05-22 20:08:20.303 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/uix/layout.py", line 76, in __init__
05-22 20:08:20.303 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/uix/widget.py", line 359, in __init__
05-22 20:08:20.304 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/uix/widget.py", line 463, in apply_class_lang_rules
05-22 20:08:20.304 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/lang/builder.py", line 539, in apply
05-22 20:08:20.304 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/lang/builder.py", line 661, in _apply_rule
05-22 20:08:20.304 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/lang/builder.py", line 661, in _apply_rule
05-22 20:08:20.305 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/lang/builder.py", line 657, in _apply_rule
05-22 20:08:20.305 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/app/screens/main_screen/home.py", line 36, in __init__
05-22 20:08:20.305 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/android/permissions.py", line 570, in request_permissions
05-22 20:08:20.305 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/android/permissions.py", line 513, in request_permissions
05-22 20:08:20.306 10976 11090 I python  :    File "jnius/jnius_export_class.pxi", line 1134, in jnius.jnius.JavaMultipleMethod.__call__
05-22 20:08:20.306 10976 11090 I python  :  jnius.jnius.JavaException: No methods matching your arguments, requested: (['android.permission.READ_EXTERNAL_STORAGE', 'android.permission.WRITE_EXTERNAL_STORAGE'],), available: []

sementara ini bekerja di 1.2.1.

Semua 23 komentar

hai guys saya punya masalah yang sama, bagaimana mengatasinya? apakah mungkin menggunakan pyjnius yang lebih lama di buildozer build? Terima kasih!

hai guys saya punya masalah yang sama, bagaimana mengatasinya? apakah mungkin menggunakan pyjnius yang lebih lama di buildozer build? Terima kasih!

Menyematkan versi menggunakan requirements = pyjnius==1.2.1,... akan berfungsi.

Saya bukan orang Kivy, tetapi dapatkah seseorang menempelkan tautan ke kode sumber yang relevan?

hai guys saya punya masalah yang sama, bagaimana mengatasinya? apakah mungkin menggunakan pyjnius yang lebih lama di buildozer build? Terima kasih!

Menyematkan versi menggunakan requirements = pyjnius==1.2.1,... akan berfungsi.

terima kasih, ternyata berhasil!

Meskipun mengelompokkan versi Pyjnius ke 1.2.1 dapat berfungsi untuk ini, v1.2.1 memiliki batasan lain, jadi idealnya ini harus diatasi ke depan....

itu akan ada di sana https://github.com/kivy/python-for-android/blob/develop/pythonforandroid/recipes/android/src/android/permissions.py#L513 maaf saya tidak meluangkan waktu untuk menyelidiki ini sama sekali.

Itu membuat sulit karena kami tidak dapat dengan mudah melihat apa nama kelas Aktivitas itu

saya harapkan itu https://github.com/kivy/python-for-Android/blob/develop/pythonforandroid/bootstraps/sdl2/build/src/main/Java/org/kivy/Android/PythonActivity.java# L42 tetapi bisa menjadi kelas yang setara di bootstrap lain (https://github.com/kivy/python-for-Android/tree/develop/pythonforandroid/bootstraps)

Sepertinya python_activity.requestPermissions adalah metode non-statis. Tapi itu disebut seolah-olah itu statis. Yang karena alasan tertentu dulu berfungsi dengan versi pyjnius yang lebih lama. Menggunakan python_activity.mActivity.requestPermissions sebagai gantinya tampaknya bekerja dengan 1.3.0.

Jadi sepertinya ini adalah bug di pustaka android p4a.

Tempat yang bagus. Memang; seperti di Java, memanggil metode non-statis pada objek statis tidak akan diizinkan oleh kompiler. @obfusk dapatkah Anda memperbarui https://github.com/kivy/python-for-Android/issues/2304?

Saya pikir kesalahan Pyjnius juga bisa lebih jelas - yaitu nama metode tidak ditemukan dan objek apa!

Saya agak terkejut ini dulu berhasil. ~ Contoh apa yang dipanggil? Sebuah penunjuk nol? Atau beberapa contoh aktual dari kelas?~

Saya pikir kesalahan Pyjnius juga bisa lebih jelas - yaitu nama metode tidak ditemukan dan objek apa!

:+1:

Saya pikir kesalahan Pyjnius juga bisa lebih jelas - yaitu nama metode tidak ditemukan dan objek apa!

👍

PR terkirim - lihat #558.

Jadi ringkasan untuk siapa pun yang membaca ini di masa mendatang:

tambalan telah digabungkan

Belum; tapi sudah disetujui :)

Saya pikir FIXME s itu memang terkait. Karena __get__ menetapkan j_self alih-alih mengembalikan metode terikat dan hanya mengembalikan self saat dipanggil di kelas alih-alih instance, memanggil metode non-statis di kelas akan gunakan contoh terakhir yang dipanggil (jika ada). Tentu saja, memanggil metode non-statis di kelas seharusnya tidak pernah diizinkan (dan tidak lagi).

Saya pikir FIXME s itu memang terkait. Karena __get__ menetapkan j_self alih-alih mengembalikan metode terikat dan hanya mengembalikan self saat dipanggil di kelas alih-alih instance, memanggil metode non-statis di kelas akan gunakan contoh terakhir yang dipanggil (jika ada). Tentu saja, memanggil metode non-statis di kelas seharusnya tidak pernah diizinkan (dan tidak lagi).

Bisakah Anda menunjukkan kasus uji yang lebih sederhana, dan kemudian kami membuat masalah baru?

Bisakah Anda menunjukkan kasus uji yang lebih sederhana, dan kemudian kami membuat masalah baru?

Dengan 1.2.1:

>>> from jnius import autoclass
>>> s = autoclass("java.lang.String")
>>> s.toString()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "jnius/jnius_export_class.pxi", line 755, in jnius.JavaMethod.__call__
  File "jnius/jnius_export_class.pxi", line 699, in jnius.JavaMethod.ensure_method
jnius.JavaException: Unable to find a None method!
classname: None, definition: ()Ljava/lang/String;
>>> s("foo").toString()
'foo'
>>> s.toString()
'foo'

Dengan 1.3.0:

>>> from jnius import autoclass
>>> s = autoclass("java.lang.String")
>>> s("foo").toString()
'foo'
>>> s.toString()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "jnius/jnius_export_class.pxi", line 1134, in jnius.JavaMultipleMethod.__call__
jnius.JavaException: No methods matching your arguments, requested: (), available: []

Karena memanggil metode non-statis di kelas tidak lagi berfungsi, masalahnya sudah diperbaiki.
Dan sekarang kita mengerti penyebab masalahnya.
Jadi saya tidak berpikir kita perlu masalah baru.

Atau: karena tampaknya tidak ada yang menyadari bagaimana ini diperbaiki di 1.3.0, kami menambahkan testcase untuk mencegah regresi di masa mendatang kembali ke perilaku sebelumnya. Testcase dapat mengharapkan pengecualian dalam kasus di atas.

Dan bisakah kita menghapus FIXME?

Atau: karena tampaknya tidak ada yang menyadari bagaimana ini diperbaiki di 1.3.0, kami menambahkan testcase untuk mencegah regresi di masa mendatang kembali ke perilaku sebelumnya. Testcase dapat mengharapkan pengecualian dalam kasus di atas.

Aku sebenarnya sudah mengetahuinya sekarang. Dan masalahnya hanya sebagian diperbaiki :sweat_ smile:. Lihat #567

Dan bisakah kita menghapus FIXME?

Belum kurasa. Lihat #563.

Sekedar catatan, saya mengubah cabang p4a saya menjadi 'berkembang' dan masih mengalami masalah ini. Saya menghapus folder .buildozer saya dan membangun kembali, dan cabang 'develop' tidak akan membangun baru untuk saya tanpa kesalahan penautan (2020-12-13, 16:22 -0500) (EDIT: maaf, ini masalah yang berbeda. Saya sepertinya tidak dapat menjalankan buildozer dengan sukses di sistem saya, sama sekali, untuk saat ini.)

Saya pikir cara untuk mengatasi ini di aplikasi klien adalah dengan melakukan panggilan pyjnius secara manual, sehingga basis kode klien akan bekerja dengan baik pada versi yang berbeda. Jelas rilis yang memperbaiki ini sangat dibutuhkan di sini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

cmacdonald picture cmacdonald  ·  20Komentar

Thrameos picture Thrameos  ·  27Komentar

Hukuta picture Hukuta  ·  5Komentar

enjoybeta picture enjoybeta  ·  8Komentar

tom19952000 picture tom19952000  ·  15Komentar